centos虚拟机上用KVM安装coreos虚拟机(V1.0)
1 准备
1.1 节点规划
192.168.0.71 localhost.localdomain 作为coreos虚拟机的宿主机
192.168.0.80 k8s-master0 访问coreos用
192.168.0.91 k8s-node1 安装coreos时作为http服务器用
192.168.0.66 tsung6 coreos节点1
192.168.0.67 tsung7 coreos节点2
192.168.0.68 tsung8 coreos节点3
2 安装kvm(在宿主机上)
2.1 设置VT
2.1.1 检查Intel VT设置
在vmware设置中将作为宿主机的centos虚拟机的Intel VT或AMD-V功能打勾选中
检查cpu是否支持vt
用下列指令检查cpu是否支持vt:
cat /proc/cpuinfo|egrep 'vmx|svm'
2.1.2 关闭SElinux
# 将 /etc/sysconfig/selinux 中的SELinux=enforcing修改为 SELinux=disabled
vi /etc/sysconfig/selinux
2.2 安装
yum -y install kvm
#安装kvm核心包——虚拟操作系统模拟器加速模块
yum -y install qemu-kvm qemu-kvm-tools
#安装kvm管理工具
yum -y install libvirt python-virtinst libvirt-python virt-manager libguestfs-tools bridge-utils virt-install
#启动服务
systemctl start libvirtd
systemctl enable libvirtd
2.3 检查
lsmod | grep kvm
brctl show
3 为KVM虚拟机配置桥接网络(在宿主机上)
原网卡为enp7s0
3.1 添加作为桥接的新网卡br0
cd /etc/sysconfig/network-scripts/
vi ifcfg-br0
DEVICE="br0"
ONBOOT="yes"
TYPE="Bridge"
BOOTPROTO=static
IPADDR="192.168.0.71"
NETMASK=255.255.255.0
GATEWAY="192.168.0.1"
DNS1="218.2.135.1"
DNS2="221.228.225.1"
DEFROUTE=yes
3.2 修改原网卡
vi ifcfg-enp7s0
将原网卡的ip地址屏蔽并增加一个桥接网卡br0
#IPADDR="192.168.0.71"
BRIDGE="br0"
3.3 重启网络服务并查看是否正常
systemctl restart network
ifconfig
4 VNC环境搭建(在宿主机上)
4.1 安装vnc服务
yum -y install tigervnc tigervnc-server
4.2 vnc服务配置——宿主机远程控制
# 配置vnc
cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:1.service
# 编辑刚刚复制得到的文件,将文件中的<USER>修改为VNC Client(或者VNC Viewer)连接的账号,我只设置一个用户root,多用户再增加对应的vncserver@:2.service文件即可
vi /etc/systemd/system/vncserver@:1.service
# 修改以后的文件部分内容(只修改文件下半部分)
[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target
[Service]
Type=forking
User=root
# Clean any existing files in /tmp/.X11-unix environment
ExecStartPre=/bin/sh -c '/bin/vncserver -kill :1 > /dev/null 2>&1 || :'
ExecStart=/sbin/runuser -l root -c "/bin/vncserver :1 "
PIDFile=/root/.vnc/%H%i.pid
ExecStop=/bin/sh -c '/bin/vncserver -kill :1 > /dev/null 2>&1 || :'
[Install]
WantedBy=multi-user.target
4.3 启动服务
#设置vnc连接密码
vncpasswd
# 启动vncserver@:1.service并设置开机启动
systemctl start vncserver@:1.service
systemctl enable vncserver@:1.service
# 设置防火墙(VNC默认是被防火墙阻止的)
firewall-cmd --permanent --add-service="vnc-server" --zone="public"
firewall-cmd --reload
# 启动VNC服务
vncserver
4.4 故障排查
# 启动vncserver@:1.service的时候会出现错误
# 解决办法:删除/tmp/.X11-unix/ 目录,并重新设置一次密码,然后再次启动这个服务即可
rm -R /tmp/.X11-unix/
vncpasswd
systemctl start vncserver@:1.service
#或者检查配置文件
vi /etc/systemd/system/vncserver@:1.service
检查里面的/usr/、/home等目录、root、User等设置是否正确
4.5 vnc服务配置——虚拟机远程控制相关的一些说明
上面是VNC连接主机的VNC服务时设置的情况,如果是要远程连接主机安装虚拟机,可以不进行上面的设置,安装虚拟机的时候用主机ip,端口号5900(默认,可以进行设置,后面会说到),有权限的账号密码都可以连接。
这里也有一个坑:5900是VNC里面远程连接虚拟机用的端口(安装和安装好以后都用这个端口),能远程操作安装过程;5901,5902等端口是VNC中设置的远程连接主机的端口号,这里要做好区分。
还有一种用virt-manager虚拟机图形管理的方式安装虚拟机,这里有个前提,主机必须安装好GNOME等桌面环境,CentOS中安装有点复杂,很难安装成功(踩过的第一个坑),个人觉得还是用VNC的方式安装比较好,服务器安装桌面环境多少有点累赘。
5 创建虚拟机配置文件(在宿主机上)
这一步操作需要注意的几个点:a、局域网内与主机传输文件用scp或ftp命令,要保证ISO镜像文件在主机上有操作权限的目录下,比如 /home等;b、不管安装什么系统的虚拟机,创建的磁盘类型,分配的虚拟内存等参数可能有所不同,但有几个参数必须要正确对应,否则安装不成功。需要注意的几个参数:–disk,–cdrom或者–location,–cpu(这个必须和主机的cpu型号一直),–network(首先要确定需要安装虚拟机网络的类型,是Bridge模式还是NAT模式),–graphics和–os-type
5.1 创建新的存储池
mkdir -p /var/kvm/images
虚拟机的映像默认放置在/var/lib/libvirt/images作为存储池
或者:
qemu-img create -f raw /opt/kvm.raw 30G
# 检查磁盘是否创建成功
qemu-img info /opt/kvm.raw
5.2 创建两个xml文件
coreos-install.xml 安装期间用,cdrom启动
coreos-run.xml 安装后用,硬盘启动
vi coreos-install.xml
<domain type='kvm'>
<name>coreos</name>
<memory>2048576</memory>
<currentMemory>2048576</currentMemory>
<vcpu>1</vcpu>
<os>
<type arch='x86_64' machine='pc'>hvm</type>
<boot dev='cdrom'/>
</os>
<features>
<acpi/>
<apic/>
<pae/>
</features>
<clock offset='localtime'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>destroy</on_crash>
<devices>
<emulator>/usr/libexec/qemu-kvm</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='raw'/>
<source file='/opt/kvm.raw'/>
<target dev='hda' bus='ide'/>
</disk>
<disk type='file' device='cdrom'>
<source file='/home/iso/coreos_production_iso_image.iso'/>
<target dev='hdb' bus='ide'/>
</disk>
<interface type='bridge'>
<source bridge='br0'/>
<mac address="00:16:3e:5d:aa:a8"/>
</interface>
<input type='mouse' bus='ps2'/>
<graphics type='vnc' port='5901' autoport='no' listen = '0.0.0.0' keymap='en-us'/>
</devices>
</domain>
coreos-run.xml和coreos-install.xml的差别就在于第8行:
<boot dev='hd'/>
6 下载coreos安装文件
6.1 在宿主机上(192.168.0.71)
mkdir /home/iso && cd /home/iso
wget https://stable.release.core-os.net/amd64-usr/current/coreos_production_iso_image.iso
6.2 访问coreos的主机上(192.168.0.80 k8s-master0)
mkdir /root/coreos && cd /root/coreos/
ssh-keygen -t rsa -f coreos -N ""
cat coreos.pub
将文件中的公钥密码复制粘贴进下一节提到的配置文件
6.3 http服务器上(192.168.0.91 k8s-node1)
yum install -y httpd
systemctl start httpd
cd /var/www/html
查看当前coreos稳定版本号:
https://stable.release.core-os.net/amd64-usr/current/version.txt 可以看到当前稳定版为 2079.3.0
mkdir 2079.3.0
cd 2079.3.0
wget https://stable.release.core-os.net/amd64-usr/current/coreos_production_image.bin.bz2
wget https://stable.release.core-os.net/amd64-usr/current/coreos_production_image.bin.bz2.sig
yum install git make
cd ~
git clone https://github.com/coreos/container-linux-config-transpiler.git
cd container-linux-config-transpiler
make
cd bin
6.4 编辑coreos虚拟机配置文件(在http服务器上192.168.0.91 k8s-node1)
编写Container Linux Configs文件(参考https://coreos.com/os/docs/2079.3.0/clc-examples.html)
vi tsung6.yaml
编辑配置tsung6.yaml文件时,要将上一节中的ssh公钥粘贴进去,设置好基本参数。
将tsung6.yaml复制为tsung7.yaml和tsung8.yaml,每个文件修改其中的主机名和IP,共2处。注意若网卡名称需要参考后面的步骤检查修改,否则会出错。
将yaml格式转换成json格式:
./ct < tsung6.yaml --files-dir /etc > /var/www/html/tsung6.json
–files-dir /root是告诉脚本到/root下查找hosts文件
6.5 启动虚拟机(在宿主机上192.168.0.71)
virsh define coreos-install.xml
virsh start coreos
6.6 打开VNC连接
Windows上RealVNC或TigerVNC连接
192.168.0.71:5901
6.7 在VNC窗口中进入coreos系统
ip a
先查看网卡名称,然后检查修改http服务器192.168.0.91上tsung6.yaml中的涉及网卡名称的部分。
sudo su - root
wget http://192.168.0.91/tsung6.json
coreos-install -d /dev/sda -i tsung6.json -b http://192.168.0.91
当出现Success!。。。界面时,不要在coreos中reboot,切换到宿主机。
6.8 在宿主机中关闭并重新配置coreos虚拟机
virsh destroy coreos
virsh undefine coreos
virsh define coreos-run.xml
virsh start coreos
6.9 登录coreos(在访问coreos的主机上192.168.0.80 k8s-master0)
cd /root/coreos/
ssh -i coreos core@192.168.0.667 安装下一个coreos虚拟机
从6.4节开始顺序执行至6.9
过程中要注意修改以下文件:
tsung6.yaml-->tsung7.yaml,其中的ip地址、主机名称、网卡名称
./ct < tsung7.yaml --files-dir /etc > /var/www/html/tsung7.json
coreos-install.xml-->coreos-install2.xml,其中的镜像磁盘文件名/opt/kvm.raw-->/opt/kvm2.raw
其中vnc的设置'5901'-->'5902'
复制镜像磁盘 cp /opt/kvm.raw /opt/kvm2.raw
coreos-run.xml-->coreos-run2.xml,其中的镜像磁盘文件名/opt/kvm.raw-->/opt/kvm2.raw
ssh -i coreos core@192.168.0.67