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