ubuntu KVM 安装及配置
环境准备
本地操作系统ubuntu 18.04 TLS一台
软件安装
安装kvm及相关软件
duke@duke-System:~$ sudo apt install -y qemu qemu-kvm libvirt-bin bridge-utils virt-manager
duke@duke-System:~$ sudo systemctl start libvirtd
duke@duke-System:~$ sudo systemctl status libvirtd
duke@duke-System:~$ sudo systemctl enable libvirtd
启动默认NAT网络
duke@duke-System:~$ sudo virsh net-autostart default
创建模板虚拟机
磁盘准备
duke@duke-System:~$ cd /mnt/kvm
duke@duke-System:~$ qemu-img create -f qcow2 disk-1.img 20G
duke@duke-System:~$ qemu-img create -f qcow2 disk-1.img 30G
镜像文件准备
duke@duke-System:~$ wget https://mirrors.aliyun.com/centos/7.6.1810/isos/x86_64/CentOS-7-x86_64-DVD-1810.iso
虚拟机模板xml文件
node-1.xml
<domain type='kvm'>
<name>node-1</name> //虚拟机名称
<memory unit='GiB'>4</memory> //最大内存,单位M
<currentMemory unit='GiB'>4</currentMemory> //可用内存,单位M
<vcpu>2</vcpu> //虚拟cpu个数
<os>
<type arch='x86_64' machine='pc'>hvm</type>
<boot dev='cdrom'/> //ISO文件启动
</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/bin/qemu-system-x86_64</emulator> //KVM启动程序,ubuntu版本
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/mnt/kvm/kubernetes-node-1-1.img'/> //目的镜像路径
<target dev='sda' bus='scsi'/>
<address type='drive' controller='0' bus='0' target='0' unit='0'/> //硬盘使用virtio-scsi驱动,模拟scsi硬盘,建议使用
</disk>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/mnt/kvm/kubernetes-node-1-2.img'/> //目的镜像路径
<target dev='sdb' bus='scsi'/>
<address type='drive' controller='0' bus='0' target='0' unit='1'/> //硬盘使用virtio-scsi驱动,模拟scsi硬盘,建议使用
</disk>
<controller type='scsi' index='0' model='virtio-scsi'/> //使用virtio-scsi配置,必须
<disk type='file' device='cdrom'>
<driver name='qemu' type='raw'/>
<source file='/mnt/kvm/CentOS-7-x86_64-DVD-1810.iso'/>
<target dev='hda' bus='ide'/>
<readonly/>
<address type='drive' controller='0' bus='1' target='0' unit='0'/>
</disk>
<interface type='network'> //虚拟机网络连接方式,默认NAT
<source network='default'/>
<model type='virtio'/>
<mac address='00:16:3E:64:01:00'/> //为虚拟机分配mac地址,务必唯一,否则dhcp获得同样ip,引起冲突
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
</interface>
<input type='mouse' bus='ps2'/>
<graphics type='vnc' port='5900' autoport='yes' listen = '0.0.0.0' keymap='en-us'/>//vnc方式登录,端口号自动分配,自动加1,可以通过virsh vncdisplay来查询
<video>
<model type='cirrus' vram='9216' heads='1'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</video>
<memballoon model='virtio'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
</memballoon>
<serial type='pty'>
<target port='0'/>
</serial>
<console type='pty'>
<target type='serial' port='0'/>
</console>
</devices>
</domain>
创建第一台虚拟机
duke@duke-System:~$ virsh define node-1.xml
duke@duke-System:~$ virsh start node-1.xml
安装操作系统
通过VNC连接第一台虚拟机端口,一般为tcp:5900
安装操作系统
修改虚拟机启动配置
duke@duke-System:~$ virsh edit node-1
找到如下配置
<os>
<type arch='x86_64' machine='pc'>hvm</type>
<boot dev='cdrom'/>
</os>
改成
<os>
<type arch='x86_64' machine='pc'>hvm</type>
<boot dev='hd'/>
</os>
重启模板虚拟机
duke@duke-System:~$ virsh destroy node-1
duke@duke-System:~$ virsh start node-1
初始化操作系统
登录node-1操作系统
修改selinux
[root@localhost ~]# sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
添加ttyS0配置
在/etc/default/grub中GRUB_CMDLINE_LINUX中添加console=ttyS0
[root@localhost ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
[root@localhost ~]# systemctl enable serial-getty@ttyS0.service
[root@localhost ~]# systemctl start serial-getty@ttyS0.service
配置yum源
[root@localhost ~]# cd /etc/yum.repos.d
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost ~]# curl -o /etc/yum.repos.d/CentOS-7.repo https://mirrors.aliyun.com/repo/Centos-7.repo
[root@localhost ~]# yum clean all
[root@localhost ~]# yum repolist
安装基础软件包
[root@localhost ~]# yum install -y wget net-tools
删除firewalld防火墙
[root@localhost ~]# yum remove -y firewalld
清除记录并关机
[root@localhost ~]# history -c
[root@localhost ~]# shutdown -h now
从模板中创建虚拟机
生成虚拟机配置文件
kubernetes-master-1.xml
<domain type='kvm'>
<name>kubernetes-master-1</name> //虚拟机名称
<memory unit='GiB'>4</memory> //最大内存,单位M
<currentMemory unit='GiB'>4</currentMemory> //可用内存,单位M
<vcpu>2</vcpu> //虚拟cpu个数
<os>
<type arch='x86_64' machine='pc'>hvm</type>
<boot dev='hd'/> //硬盘启动
</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/bin/qemu-system-x86_64</emulator> //KVM启动程序,ubuntu版本
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/mnt/kvm/kubernetes-master-1-1.img'/> //目的镜像路径
<target dev='sda' bus='scsi'/>
<address type='drive' controller='0' bus='0' target='0' unit='0'/> //硬盘使用virtio-scsi驱动,模拟scsi硬盘
</disk>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/mnt/kvm/kubernetes-master-1-2.img'/> //目的镜像路径
<target dev='sdb' bus='scsi'/>
<address type='drive' controller='0' bus='0' target='0' unit='1'/> //硬盘使用virtio-scsi驱动,模拟scsi硬盘
</disk>
<controller type='scsi' index='0' model='virtio-scsi'/>
<interface type='network'> //虚拟机网络连接方式,默认NAT
<source network='default'/>
<model type='virtio'/>
<mac address='00:16:3E:64:02:00'/> //为虚拟机分配mac地址,务必唯一,否则dhcp获得同样ip,引起冲突
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
</interface>
<input type='mouse' bus='ps2'/>
<graphics type='vnc' port='5900' autoport='yes' listen = '0.0.0.0' keymap='en-us'/>//vnc方式登录,端口号自动分配,自动加1,可以通过virsh vncdisplay来查询
<video>
<model type='cirrus' vram='9216' heads='1'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</video>
<memballoon model='virtio'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
</memballoon>
<serial type='pty'>
<target port='0'/>
</serial>
<console type='pty'>
<target type='serial' port='0'/>
</console>
</devices>
</domain>
kubernetes-node-1
<domain type='kvm'>
<name>kubernetes-node-1</name> //虚拟机名称
<memory unit='GiB'>4</memory> //最大内存,单位M
<currentMemory unit='GiB'>4</currentMemory> //可用内存,单位M
<vcpu>2</vcpu> //虚拟cpu个数
<os>
<type arch='x86_64' machine='pc'>hvm</type>
<boot dev='hd'/> //硬盘启动
</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/bin/qemu-system-x86_64</emulator> //KVM启动程序,ubuntu版本
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/mnt/kvm/kubernetes-node-1-1.img'/> //目的镜像路径
<target dev='sda' bus='scsi'/>
<address type='drive' controller='0' bus='0' target='0' unit='0'/> //硬盘使用virtio-scsi驱动,模拟scsi硬盘
</disk>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/mnt/kvm/kubernetes-node-1-2.img'/> //目的镜像路径
<target dev='sdb' bus='scsi'/>
<address type='drive' controller='0' bus='0' target='0' unit='1'/> //硬盘使用virtio-scsi驱动,模拟scsi硬盘
</disk>
<controller type='scsi' index='0' model='virtio-scsi'/>
<interface type='network'> //虚拟机网络连接方式,默认NAT
<source network='default'/>
<model type='virtio'/>
<mac address='00:16:3E:64:01:00'/> //为虚拟机分配mac地址,务必唯一,否则dhcp获得同样ip,引起冲突
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
</interface>
<input type='mouse' bus='ps2'/>
<graphics type='vnc' port='5900' autoport='yes' listen = '0.0.0.0' keymap='en-us'/>//vnc方式登录,端口号自动分配,自动加1,可以通过virsh vncdisplay来查询
<video>
<model type='cirrus' vram='9216' heads='1'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</video>
<memballoon model='virtio'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
</memballoon>
<serial type='pty'>
<target port='0'/>
</serial>
<console type='pty'>
<target type='serial' port='0'/>
</console>
</devices>
</domain>
kubernetes-node-2
<domain type='kvm'>
<name>kubernetes-node-2</name> //虚拟机名称
<memory unit='GiB'>4</memory> //最大内存,单位M
<currentMemory unit='GiB'>4</currentMemory> //可用内存,单位M
<vcpu>2</vcpu> //虚拟cpu个数
<os>
<type arch='x86_64' machine='pc'>hvm</type>
<boot dev='hd'/> //ISO文件启动
</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/bin/qemu-system-x86_64</emulator> //KVM启动程序,ubuntu版本
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/mnt/kvm/kubernetes-node-2-1.img'/> //目的镜像路径
<target dev='sda' bus='scsi'/>
<address type='drive' controller='0' bus='0' target='0' unit='0'/> //硬盘使用virtio-scsi驱动,模拟scsi硬盘
</disk>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/mnt/kvm/kubernetes-node-2-2.img'/> //目的镜像路径
<target dev='sdb' bus='scsi'/>
<address type='drive' controller='0' bus='0' target='0' unit='1'/> //硬盘使用virtio-scsi驱动,模拟scsi硬盘
</disk>
<controller type='scsi' index='0' model='virtio-scsi'/>
<interface type='network'> //虚拟机网络连接方式,默认NAT
<source network='default'/>
<model type='virtio'/>
<mac address='00:16:3E:64:03:00'/> //为虚拟机分配mac地址,务必唯一,否则dhcp获得同样ip,引起冲突
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
</interface>
<input type='mouse' bus='ps2'/>
<graphics type='vnc' port='5900' autoport='yes' listen = '0.0.0.0' keymap='en-us'/>//vnc方式登录,端口号自动分配,自动加1,可以通过virsh vncdisplay来查询
<video>
<model type='cirrus' vram='9216' heads='1'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</video>
<memballoon model='virtio'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
</memballoon>
<serial type='pty'>
<target port='0'/>
</serial>
<console type='pty'>
<target type='serial' port='0'/>
</console>
</devices>
</domain>
复制并初始化img文件
duke@duke-System:/mnt/kvm$ cp kubernetes-node-1-1.img kubernetes-node-2-1.img
duke@duke-System:/mnt/kvm$ cp kubernetes-node-1-1.img kubernetes-master-1-1.img
duke@duke-System:/mnt/kvm$ sudo virt-sysprep -a kubernetes-node-2-1.img
duke@duke-System:/mnt/kvm$ sudo virt-sysprep -a kubernetes-master-1-1.img
启动虚拟机
duke@duke-System:/mnt/kvm$ virsh define kubernetes-master-1.xml
duke@duke-System:/mnt/kvm$ virsh define kubernetes-node-1.xml
duke@duke-System:/mnt/kvm$ virsh define kubernetes-node-2.xml
duke@duke-System:/mnt/kvm$ virsh start kubernetes-master-1
duke@duke-System:/mnt/kvm$ virsh start kubernetes-node-1
duke@duke-System:/mnt/kvm$ virsh start kubernetes-node-2
网友评论