hnllei 2020-05-30
KVM虚拟化
虚拟化,通过模拟计算机的硬件,来实现在同一台计算机上同时运行多个不同的操作系统的技术.
虚拟化:提高了资源的利用率,各个服务的安全性隔离,解决了系统和硬件之间的依赖
[ ~]# yum install libvirt* virt-* qemu-kvm* -y #安装软件说明内容: libvirt:作用:虚拟机的管理软件 virt virt-install virt-clone:作用:虚拟机的安装工具和克隆工具 qemu-kvm qemu-img(qcow2,raw)作用:管理虚拟机的虚拟磁盘 [ ~]# lsmod |grep -i kvm kvm_intel 170086 0 kvm 566340 1 kvm_intel irqbypass 13503 1 kvm #启动kvm [ ~]# systemctl start libvirtd.service [ ~]# systemctl enable libvirtd.service 安装VNC软件: 下载vnc软件方法,tightvnc官网:http://www.tightvnc.com VNC软件,用于VNC(Virtual Network Computing),为一种使用RFB协议的显示屏画面分享及远程操作软件。此软件借由网络,可发送键盘与鼠标的动作及即时的显示屏画面。 VNC与操作系统无关,因此可跨平台使用,例如可用Windows连接到某Linux的电脑,反之亦同。甚至在没有安装客户端程序的电脑中,只要有支持JAVA的浏览器,也可使用。 安装VNC时,使用默认安装即可,无需安装server端。
[ ~]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /opt/centos7.raw,format=raw,size=10 --cdrom /opt/CentOS-7-x86_64-DVD-1708.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole #参数说明 --virt-type 虚拟化的类型 --os-type= 系统类型 --os-variant 系统版本 --name 虚拟机的名字 --memory 虚拟机的内存 --vcpus 虚拟机的CPU --disk 存储的路径 format= 存储磁盘的类型:raw(不支持快照,性能好)、qcow2(支持快照) qcow2 size= 磁盘的大小 --cdrom 镜像的路径 --network 网络类型
参数 | 参数说明 |
---|---|
--virt-type HV_TYPE | 要使用的管理程序名称 (kvm, qemu, xen, ...) |
--os-type | 系统类型 |
--os-variant DISTRO_VARIANT | 在客户机上安装的操作系统,例如:‘fedora18‘、‘rhel6‘、‘winxp‘ 等。 |
-n NAME, --name NAME | 客户机实例名称 |
--memory MEMORY | 配置客户机虚拟内存大小 |
--vcpus VCPUS | 配置客户机虚拟 CPU(vcpu) 数量。 |
--disk DISK | 指定存储的各种选项。 |
-cdrom CDROM | 光驱安装介质 |
-w NETWORK, --network NETWORK | 配置客户机网络接口。 |
--graphics GRAPHICS | 配置客户机显示设置。 |
虚拟化平台选项: | |
-v, --hvm | 这个客户机应该是一个全虚拟化客户机 |
-p, --paravirt | 这个客户机应该是一个半虚拟化客户机 |
--container | 这个客户机应该是一个容器客户机 |
--virt-type HV_TYPE | 要使用的管理程序名称 (kvm, qemu, xen, ...) |
--arch ARCH | 模拟 CPU 架构 |
--machine MACHINE | 机器类型为仿真类型 |
其它选项: | |
--noautoconsole | 不要自动尝试连接到客户端控制台 |
--autostart | 主机启动时自动启动域。 |
--noreboot | 安装完成后不启动客户机。 |
以上信息通过 " virt-install --help " 获得。 |
参数 | 参数说明 |
---|---|
基础操作 | |
list | 查看虚拟机列表,列出域 |
start | 启动虚拟机,开始一个(以前定义的)非活跃的域 |
shutdown | 关闭虚拟机,关闭一个域 |
destroy (危险) | 强制关闭虚拟机,销毁(停止)域 |
vncdisplay | 查询虚拟机vnc端口号 |
配置管理操作 | |
dumpxml | 导出主机配置信息 |
undefine | 删除主机 |
define | 导入主机配置 |
domrename | 对虚拟机进行重命名 |
挂起与恢复 | |
suspend | 挂起虚拟机 |
resume | 恢复虚拟机 |
自启动管理 | |
autostart | 虚拟机开机启动 |
autostart --disable | 取消虚拟机开机启动 |
以上参数通过 “virsh --help****” 获得。 |
#列出所有虚拟机 [ ~]# virsh list --all Id Name State ---------------------------------------------------- 1 centos7 running #开机 [ ~]# virsh start centos7 Domain centos7 started #关机 [ ~]# virsh shutdown centos7 Domain centos7 is being shutdown #强制关机 [ ~]# virsh destroy centos7 Domain centos7 destroyed #导出配置 [ ~]# virsh dumpxml centos7 >/opt/centos7.xml #删除虚拟机 [ ~]# virsh undefine centos7 Domain centos7 has been undefined [ ~]# virsh list --all Id Name State ---------------------------------------------------- [ ~]# #导入配置 [ ~]# virsh define /opt/centos7.xml Domain centos7 defined from /opt/centos7.xml [ ~]# virsh list --all Id Name State ---------------------------------------------------- - centos7 shut off [ ~]# #配置文件路径 /etc/libvirt/qemu/ #修改KVM虚拟机配置的方法 [ ~]# virsh edit centos7 使用该命令修改可以对文件进行语法校验。 #修改虚拟机名称 [ ~]# virsh domrename centos7 opesn Domain successfully renamed #虚拟机挂起 [ ~]# virsh suspend opesn Domain opesn suspended #虚拟机挂起恢复 [ ~]# virsh resume opesn Domain opesn resumed #查看vnc端口号 [ ~]# virsh vncdisplay opesn :0 [ ~]# #开机自启动设置 # 设置 libvirtd 服务开机自启动。 [ ~]# systemctl enable libvirtd [ ~]# virsh autostart opesn Domain opesn marked as autostarted opesn 标记为自动开始 # 实质为创建软连接 [ ~]# ll /etc/libvirt/qemu/autostart/ total 0 lrwxrwxrwx 1 root root 27 Jan 4 22:45 opesn.xml -> /etc/libvirt/qemu/opesn.xml [ ~]# 取消开机自启动 [ ~]# virsh autostart --disable opesn Domain opesn unmarked as autostarted [ ~]# ll /etc/libvirt/qemu/autostart/ total 0 [ ~]#
在虚拟机内操作(该操作仅限centos7): [ ~]# grubby --update-kernel=ALL --args="console=ttyS0,115200n8" [ ~]# reboot # 115200n8:能显示虚拟机的启动过程 重启完成后,使用virsh console 连接虚拟机。 [ ~]# virsh console opesn Connected to domain opesn Escape character is ^] CentOS Linux 7 (Core) Kernel 3.10.0-693.el7.x86_64 on an x86_64 localhost login: root Password: Last login: Sat Jan 4 22:33:18 from 192.168.122.1 [ ~]#
raw:裸格式,占用空间大小,不支持快照功能,性能较好,不方便传输 qcow2:占用空间小,支持快照,性能比raw差一点方便传输 #查看当前虚拟机硬盘信息 [ ~]# qemu-img info /data/centos7.raw image: /data/centos7.raw file format: raw virtual size: 10G (10737418240 bytes) disk size: 1.7G [ ~]# #创建一块qcow2的虚拟硬盘 [ ~]# qemu-img create -f qcow2 /opt/opesn.qcow2 10G Formatting ‘/opt/opesn.qcow2‘, fmt=qcow2 size=10737418240 encryption=off cluster_size=65536 lazy_refcounts=off #调整磁盘容量 [ ~]# qemu-img resize /data/opesn.qcow2 +20G Image resized. [ ~]# qemu-img info /data/opesn.qcow2 image: /data/opesn.qcow2 file format: qcow2 virtual size: 30G (32212254720 bytes) disk size: 260K cluster_size: 65536 Format specific information: compat: 1.1 lazy refcounts: false [ ~]# #raw转qcow2格式: # 参数说明 [ data]# qemu-img --help |grep convert qemu-img convert [-f fmt] [-O output_fmt] filename output_filename [ data]# qemu-img convert -f raw -O qcow2 centos7.raw opesn.qcow2 #修改虚拟机配置文件 [ data]# virsh shutdown opesn [ data]# virsh edit opesn 修改前: <disk type=‘file‘ device=‘disk‘> <driver name=‘qemu‘ type=‘raw‘/> <source file=‘/data/clsn.raw‘/> <target dev=‘vda‘ bus=‘virtio‘/> <address type=‘pci‘ domain=‘0x0000‘ bus=‘0x00‘ slot=‘0x06‘ function=‘0x0‘/> </disk> 修改后: <disk type=‘file‘ device=‘disk‘> <driver name=‘qemu‘ type=‘qcow2‘/> <source file=‘/data/opesn.qcow2‘/> <target dev=‘vda‘ bus=‘virtio‘/> <address type=‘pci‘ domain=‘0x0000‘ bus=‘0x00‘ slot=‘0x06‘ function=‘0x0‘/> </disk> #删除原磁盘文件 [ data]# rm -rf centos7.raw #启动虚拟机 [ data]# virsh start opesn #压缩磁盘空间 [ data]# qemu-img convert -c -f qcow2 -O qcow2 opesn.qcow2 centos7.qcow2
#创建快照 [ data]# virsh snapshot-create opesn #查看快照列表 [ data]# virsh snapshot-list opesn Name Creation Time State ------------------------------------------------------------ 1578153030 2020-01-04 23:50:30 +0800 running [ data]# #指定快照别名 [ data]# virsh snapshot-create-as --name v1 opesn [ data]# virsh snapshot-list opesn Name Creation Time State ------------------------------------------------------------ 1578153030 2020-01-04 23:50:30 +0800 running v1 2020-01-04 23:51:57 +0800 running [ data]# #查看快照信息 [ data]# virsh snapshot-info opesn --snapshotname v1 Name: v1 Domain: opesn Current: yes State: running Location: internal Parent: - Children: 0 Descendants: 0 Metadata: yes [ data]# #删除快照 [ data]# virsh snapshot-delete opesn --snapshotname 1578153030 Domain snapshot 1578153030 deleted [ data]# #还原快照 [ data]# virsh snapshot-revert opesn --snapshotname v1 [ data]#
#完整克隆 [ ~]# virt-clone -o opesn -n centos7 --auto-clone #链接克隆 [ data]# qemu-img create -f qcow2 -b centos7.qcow2 web03.qcow2 Formatting ‘web03.qcow2‘, fmt=qcow2 size=64424509440 backing_file=‘centos7.qcow2‘ encryption=off cluster_size=65536 lazy_refcounts=off [ data]# qemu-img info web03.qcow2 image: web03.qcow2 file format: qcow2 virtual size: 60G (64424509440 bytes) disk size: 196K cluster_size: 65536 backing file: centos7.qcow2 Format specific information: compat: 1.1 lazy refcounts: false [ data]# 第一步:复制虚拟磁盘文件 第二步:修改xml配置文件 1)name 2)uuid 3)虚拟磁盘存储路径 4)mac地址 cat /etc/libvirt/qemu/web01.xml |grep ‘qcow2‘|grep -oP "(?<=file=‘)[^‘]+"
#默认NAT模式 virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /opt/centos7.qcow2,format=qcow2,size=10 --cdrom /opt/CentOS-7-x86_64-DVD-1708.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole #桥接模式 virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /opt/centos7.qcow2,format=qcow2,size=10 --cdrom /opt/CentOS-7-x86_64-DVD-1708.iso --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole #创建桥接网卡 [ data]# virsh iface-bridge eth0 br0 [ data]# brctl show bridge name bridge id STP enabled interfaces br0 8000.000c29e6cf2e yes eth0 vnet0 vnet1 virbr0 8000.525400c52020 yes virbr0-nic [ data]# #新建虚拟机为桥接模式 [ data]# qemu-img convert -f qcow2 -O qcow2 opesn.qcow2 centos7.qcow2 [ data]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /data/centos7.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole #取消桥接网卡 [ data]# virsh iface-unbridge br0 #将虚拟机的nat模式改为桥接模式 [ data]# virt-clone -o opesn -n web01 --auto-clone [ data]# virsh edit web01 <interface type=‘bridge‘> <mac address=‘52:54:00:54:40:48‘/> <source bridge=‘br0‘/> <model type=‘virtio‘/> <address type=‘pci‘ domain=‘0x0000‘ bus=‘0x00‘ slot=‘0x03‘ function=‘0x0‘/> </interface> #修改kvm虚拟机网卡配置文件 [ ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 TYPE=Ethernet BOOTPROTO=none NAME=eth0 DEVICE=eth0 ONBOOT=yes IPADDR=10.0.1.3 NETMASK=255.255.255.0 GATEWAY=10.0.1.254 DNS1=8.8.8.8 [ ~]# #测试网络连通性 [ data]# ping 10.0.1.3 PING 10.0.1.3 (10.0.1.3) 56(84) bytes of data. 64 bytes from 10.0.1.3: icmp_seq=1 ttl=64 time=0.610 ms 64 bytes from 10.0.1.3: icmp_seq=2 ttl=64 time=0.754 ms ^C --- 10.0.1.3 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1001ms rtt min/avg/max/mdev = 0.610/0.682/0.754/0.072 ms [ data]#
#宿主机操作 #创建一块硬盘 [ data]# qemu-img create -f qcow2 web01-add01.qcow2 10G Formatting ‘web01-add01.qcow2‘, fmt=qcow2 size=10737418240 encryption=off cluster_size=65536 lazy_refcounts=off #为虚拟机添加硬盘 [ data]# virsh attach-disk web01 --source /data/web01-add01.qcow2 --target vdb --live --cache none --subdriver qcow2 Disk attached successfully #虚拟机操作 #虚拟机内挂载磁盘 [ ~]# mkfs.xfs /dev/vdb [ ~]# [ ~]# mount /dev/vdb /mnt/ [ ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/vda1 10G 1.8G 8.3G 18% / devtmpfs 487M 0 487M 0% /dev tmpfs 497M 0 497M 0% /dev/shm tmpfs 497M 6.5M 490M 2% /run tmpfs 497M 0 497M 0% /sys/fs/cgroup tmpfs 100M 0 100M 0% /run/user/0 /dev/vdb 20G 33M 20G 1% /mnt [ ~]# #虚拟机磁盘扩容 #虚拟机操作 [ ~]# umount /mnt/ #宿主机操作 #剥离硬盘 [ data]# virsh detach-disk web01 --target vdb #扩容 [ data]# qemu-img resize /data/web01-add01.qcow2 +10G [ data]# virsh attach-disk web01 --source /data/web01-add01.qcow2 --target vdb --live --cache none --subdriver qcow2 #虚拟机操作 [ ~]# mount /dev/vdb /mnt/ [ ~]# xfs_growfs /dev/vdb [ ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/vda1 10G 1.8G 8.3G 18% / devtmpfs 487M 0 487M 0% /dev tmpfs 497M 0 497M 0% /dev/shm tmpfs 497M 6.5M 490M 2% /run tmpfs 497M 0 497M 0% /sys/fs/cgroup tmpfs 100M 0 100M 0% /run/user/0 /dev/vdb 30G 33M 30G 1% /mnt [ ~]# #挂载磁盘文件 [ data]# mount -o loop web01-add01.qcow2 /mnt/ #如果磁盘文件系统是ext4 [ ~]# resize2fs /dev/vdb
#添加桥接模式网卡 [ data]# virsh attach-interface web01 --type bridge --source br0 --model virtio Interface attached successfully [ data]# #添加nat模式网卡 [ data]# virsh attach-interface web01 --type network --source default --model virtio Interface attached successfully [ data]# #永久添加nat网卡 [ data]# virsh attach-interface web01 --type network --source default --model virtio [ data]# virsh attach-interface web01 --type network --source default --model virtio --config #剥离网卡 [ data]# virsh detach-interface web01 --type network --mac 52:54:00:74:8d:c6 Interface detached successfully [ data]#
#新建虚拟机 [ data]# qemu-img convert -f qcow2 -O qcow2 opesn.qcow2 web02.qcow2 [ data]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web02 --memory 512,maxmemory=2048 --vcpus 1 --disk /data/web02.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole #临时热添加内存 [ data]# virsh setmem web02 2048M --live #永久增大内存 [ data]# virsh setmem web02 2048M --live --config
#新建虚拟机 [ data]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web03 --memory 512,maxmemory=2048 --vcpus 1,maxvcpus=2 --disk /data/web03.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole #临时热添加CPU [ data]# virsh setvcpus web03 2 #永久增大CPU [ data]# virsh setvcpus web03 2 --config
#注意:需要互相做好host解析 #操作步骤: #一:在lb01和m01上安装kvm和nfs,配置桥接网卡 [ ~]# yum install libvirt* virt-* qemu-kvm* nfs-utils openssh-askpass -y [ ~]# systemctl start libvirtd.service [ ~]# virsh iface-bridge eth0 br0 #二:在lb01上安装配置nfs [ ~]# yum install nfs-utils -y [ ~]# mkdir /data [ ~]# vim /etc/exports /data 10.0.0.0/24(rw,async,no_root_squash,no_all_squash) [ ~]# systemctl restart rpcbind [ ~]# systemctl restart nfs #三:m01挂载共享目录/data [ ~]# showmount -e 10.0.1.5 Export list for 10.0.1.5: /data 10.0.1.0/24 [ ~]# mkdir /data [ ~]# mount -t nfs 10.0.1.5:/data /data [ ~]# #四:安装一台基于桥接模式的虚拟机 [ data]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name opesn --memory 1024 --vcpus 1 --disk /data/opesn.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole #热迁移的命令: ~]# virsh migrate --live --verbose opesn qemu+ssh://10.0.1.61/system --unsafe ‘s password: Migration: [100 %] [ ~]# #将宿主机10.0.1.5上的kvm虚拟机opesn迁移到10.0.1.61