kvm 虚拟化
-
-
PAAS 平台即服务(platform as an service ) php,java docker容器 +k8s
-
SAAS 软件即服务
云计算的分类:
-
公有云(Public Cloud)
-
私有云(Private Cloud)
-
Linux 虚拟化软件:
-
仿真虚拟化:qemu 软件纯模拟全虚拟化软件,特别慢!兼容性好!
-
半虚拟化:xen(半) 性能特别好,需要使用专门修改之后的内核,兼容性差!
-
全虚拟化:redhat 5.5 xen kvm KVM(linux) 全虚拟机,它有硬件支持cpu,基于内核,而且不需要使用专门的内核 centos6 kvm 性能较好,兼容较好
-
了解:KVM,即 kernel-based Virtual Machine 基于内核的虚拟机
ip地址 | 内存 | 虚拟机 | |
kvm01 | 10.0.0.11 | 4G(后期调整到2G) | cpu开启vt虚拟化 |
kvm02 | 10.0.0.12 | 2G |
|
确定cpu已经支持虚拟化,intel的cpu虚拟化技术叫 vmx,AMD的cpu叫svm
[root@kvm02 ~]# cat /proc/cpuinfo | grep --color vmx [root@kvm02 ~]# lscpu | egerp Virtualization Virtualization: VT-x Virtualization type: full #添加网卡转换功能 vim /etc/sysctl.conf net.ipv4.ip_forward=1 #添加这行代码
1. 安装软件:
yum install libvirt virt-install qemu-kvm -y
libvirt:虚拟化服务
virt-install:安装虚拟机的使用工具。比如
virt-clone
2. 查看安装完KVM后的服务:
[root@kvm01 ~]# systemctl start libvirtd [root@kvm01 ~]# systemctl enable libvirtd [root@kvm01 ~]# systemctl is-enabled libvirtd enabled #查看网卡 [root@kvm01 ~]# ifconfig virbr0 virbr0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255 ether 52:54:00:1e:7c:53 txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
这里我们先安装vnc,后期使用vnc操作kvm虚拟机。
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /opt/centos2.raw,format=raw,size=10 --cdrom /opt/CentOS-7-x86_64-Minimal-1908.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
vnc 登录:10.0.0.11:5900 使用命令virsh vncdisplay 主机名
查看端口
-
--virt-type kvm 虚拟化的类型(qemu)
-
--os-type=linux 系统类型
-
--os-variant rhel7 系统版本 与centos同源
-
--name centos7 虚拟机的名字
-
--memory 1024 虚拟机的内存
-
--vcpus 1 虚拟cpu的核数
-
--disk /opt/centos2.raw,format=raw,size=10
-
--cdrom /opt/CentOS-7-x86_64-DVD-1708.iso 镜像位置
-
--network network=default 使用默认NAT的网络
-
--graphics vnc,listen=0.0.0.0
-
--noautoconsole
登录视图:
命令 | 作用 |
list 或 list -all | 查看列表 |
start | 主机开机 + 虚拟机主机名 |
shutdown | 关闭主机 |
destroy | 拔电源强制关机 |
reboot | 重启 |
dumpxml | 导出虚拟机 virsh dumpxml centos7 >centos7-off.xml |
undefine | 删除主机--推荐先 destroy 在删除 |
define | 导入配置 |
domrename | 重命名 先关机在修改名字 |
suspend | 挂起 |
resume | 恢复 |
vncdisplay | 查询vnc端口号 virsh vncdisplay web02 |
autostart |
console登录控制台:
#先使用xshell连接虚拟机在粘贴命令 centos7的kvm虚拟机: grubby --update-kernel=ALL --args="console=ttyS0,115200n8" reboot #console登录 virsh console web02 #退出操作 ctrl + ]
[root@kvm01 opt]# virsh list Id Name State ---------------------------------------------------- 3 web01 running # 关机 [root@kvm01 opt]# virsh destroy web01 Domain web01 destroyed # 修改主机名 [root@kvm01 opt]# vrish domrename web01 web02 Domain successfully renamed #修改磁盘名 [root@kvm01 opt]# mv web01.raw web02.raw #修改配置文件将名字改为web02.raw [root@kvm01 opt]# virsh edit web02 /disk <source file='/opt/web02.raw'/> [root@kvm01 opt]# virsh dumpxml web02 | grep raw <driver name='qemu' type='raw'/> <source file='/opt/web02.raw'/> <driver name='qemu' type='raw'/>
2. 虚拟机挂起时间同步问题
#挂起命令
virsh suspend web02
#时间同步 是一点一点追回来的
systemctl restart chronyd.service
3. 虚拟机配置文件
[root@kvm01 ~]# cat /etc/libvirt/qemu/CentOS7.6.xml <!-- WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE OVERWRITTEN AND LOST. Changes to this xml configuration should be made using: virsh edit node1 or other application using the libvirt API. --> <!-- 以下两项可有可无,所以在此注释。 --> <!-- #驱动安全标签,可删除 <seclabel>......</seclabel> #资源设置,可删除 <resource>......</resource> --> <domain type='kvm'> #<!--虚拟机名称--> <name>node1</name> #<!--个性化设置,也可以自行修改,做虚拟机模板时可以删除--> <uuid>8908d03b-0329-4105-851f-c93fd091e9e9</uuid> #<!--虚拟机能使用的最大内存,此处为2G,即:2*1024*1024--> <memory unit='KiB'>2097152</memory> #<!--在虚拟机中用 free -m 命令可以看见的内存大小,一般与上面的最大内存值设为一样--> <currentMemory unit='KiB'>2097152</currentMemory> #<!--CPU的数量--> <vcpu placement='static'>2</vcpu> <os> #<!--系统引导设备配置,无需手动修改--> <type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type> <boot dev='hd'/> </os> #<!--高级电源管理,无需手动修改--> <features> <acpi/> <apic/> </features> #<!--CUP配置,cpu mode可以写成'host-passthrough',意思是使用真机的CPU--> <cpu mode='custom' match='exact' check='partial'> <model fallback='allow'>Westmere</model> </cpu> <clock offset='utc'> #<!--时钟设置,可以设置为localtime--> <timer name='rtc' tickpolicy='catchup'/> <timer name='pit' tickpolicy='delay'/> <timer name='hpet' present='no'/> </clock> #<!--虚拟机关机命令--> <on_poweroff>destroy</on_poweroff> #<!--虚拟机重启命令--> <on_reboot>restart</on_reboot> #<!--虚拟机强制重启命令--> <on_crash>destroy</on_crash> <pm> #<!--内存及硬盘休眠设置,可删除--> <suspend-to-mem enabled='no'/> <suspend-to-disk enabled='no'/> </pm> #<!--系统仿真设备,主板驱动类--> <devices> #<!--仿真设备使用哪个程序来仿真,这里使用qemu-kvm来仿真--> <emulator>/usr/libexec/qemu-kvm</emulator> #<!--硬盘配置,需要手动修改,可以通过复制本段来创建新的磁盘--> <disk type='file' device='disk'> #<!--磁盘驱动类型--> <driver name='qemu' type='qcow2'/> #<!--磁盘路径设置--> <source file='/var/lib/libvirt/images/node1.img'/> #<!--磁盘盘符设置--> <target dev='vda' bus='virtio'/> #<!--总线地址,下同,可删除--> <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/> </disk> #<!--USB相关配置,可删除,下同--> <controller type='usb' index='0' model='ich9-ehci1'> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x7'/> </controller> <controller type='usb' index='0' model='ich9-uhci1'> <master startport='0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0' multifunction='on'/> </controller> <controller type='usb' index='0' model='ich9-uhci2'> <master startport='2'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x1'/> </controller> <controller type='usb' index='0' model='ich9-uhci3'> <master startport='4'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x2'/> </controller> #<!--PCI设备配置,可删除--> <controller type='pci' index='0' model='pci-root'/> <controller type='virtio-serial' index='0'> <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/> </controller> #<!--网卡设置,可复制本段来添加新的网卡--> <interface type='network'> #<!--网卡MAC地址,可删除--> <mac address='52:54:00:74:1c:9e'/> #<!--指定网卡连接的交换机--> <source network='default'/> <model type='virtio'/> #<!--总线地址,可删除--> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface> #<!--串口终端,需要保留,下同--> <serial type='pty'> <target type='isa-serial' port='0'> <model name='isa-serial'/> </target> </serial> <console type='pty'> <target type='serial' port='0'/> </console> #<!--虚拟机通讯控制接口--> <channel type='unix'> <target type='virtio' name='org.qemu.guest_agent.0'/> <address type='virtio-serial' controller='0' bus='0' port='1'/> </channel> #<!--图形图像相关配置,可以删除--> <channel type='spicevmc'> <target type='virtio' name='com.redhat.spice.0'/> #<!--串口设备,需要保留串口终端--> <address type='virtio-serial' controller='0' bus='0' port='2'/> </channel> #<!--数位板,如笔记本电脑的触摸板等,可删除--> <input type='tablet' bus='usb'> <address type='usb' bus='0' port='1'/> </input> <input type='mouse' bus='ps2'/> <!--鼠标--> <input type='keyboard' bus='ps2'/> <!--键盘--> <graphics type='spice' autoport='yes'> <!--图形图像显卡相关配置,可以删除--> <listen type='address'/> <image compression='off'/> </graphics> <sound model='ich6'> <!--声卡相关设置,可以删除--> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> </sound> <video> <!--图形图像显卡相关配置,可以删除--> <model type='qxl' ram='65536' vram='65536' vgamem='16384' heads='1' primary='yes'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> </video> <redirdev bus='usb' type='spicevmc'> <!--设备重定向,可以删除,下同--> <address type='usb' bus='0' port='2'/> </redirdev> <redirdev bus='usb' type='spicevmc'> <address type='usb' bus='0' port='3'/> </redirdev> <memballoon model='virtio'> <!--内存气泡,可以动态调整内存--> <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/> </memballoon> </devices> </domain>
注:磁盘文件raw
或 qcow2
不可以打开
-
-
支持磁盘容量的扩容和缩容
-
- qcow2磁盘快照介绍
现在比较主流的一种虚拟化镜像格式,经过一代的优化,目前qcow2的性能上接近raw裸格式的性能,对于qcow2的格式,有几点还是非常突出的,qcow2的snapshot,可以在镜像上做N多个快照
-
-
支持快照
-
支持zlib的磁盘压缩
-
介绍以下vmdk磁盘格式:
- vmdk磁盘格式介绍
vmdk是虚拟机VMware创建的虚拟硬盘格式,文件存在于VMware文件系统中,被称之为VMFS(虚拟机文件系统)。一个VMDK文件代表VMFS在虚拟机上的一个物理硬盘驱动。所有用户数据和有关虚拟服务器的配置信息都存储在VMDK文件中,VMware环境当中默认使用的磁盘格式。
创建raw磁盘格式虚拟机:
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /opt/centos2.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
创建qcow2磁盘格式虚拟机:
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /data/oldboy.qcow2,format=qcow2,size=10 --cdrom /data/CentOS-7.2-x86_64-DVD-1511.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
qemu-img info /opt/web02.raw #查看虚拟磁盘信息 qemu-img create -f qcow2 test.qcow2 2G #创建一块qcow2格式的虚拟磁盘 qemu-img resize test.qcow2 +20G #磁盘加20G qemu-img resize test.qcow2 20G #磁盘加到20G
注:这里不建议进行缩容,因为数据会丢失
注: -f 源镜像的格式 -O 目标镜像的格式
#将web02.raw转换为web02.qcow2格式 qemu-img convert -f raw -O qcow2 /opt/web02.raw /opt/web02.qcow2 #统计需要多少时间 time qemu-img convert -f raw -O qcow2 /opt/web02.raw /opt/web02.qcow2 #修改文件内容 virsh edit web02 <driver name='qemu' type='qcow2'/> <source file='/opt/web02.qcow2'/> #关机在重启 virsh destroy web02 virsh start web02
使用qcow2磁盘格式创建快照:
需要注意的是,做快照后,磁盘空间会变大,因为快照会被占用磁盘空间,所以说是内部快照,创建完成后会生成一个快照名称,这个快照名称是根据Unix时间戳来生成的
#创建快照--name加上快照名字 virsh snapshot-create-as web02 --name install_ok #查看快照 virsh snapshot-list web02 Name Creation Time State ------------------------------------------------------------ install_ok 2020-04-23 10:37:43 +0800 running #还原快照 virsh snapshot-revert web02 --snapshotname install_ok #删除快照 virsh snapshot-delete web02 --snapshotname install_ok
注:在克隆之前我们需要先把虚拟机挂起
-
完整克隆是原始虚拟机当前状态的完整副本。此副本虚拟机完全独立,但需要较多的存储磁盘空间
自动完整克隆:
virt-clone --auto-clone -o web01 -n web02 (完整克隆)
qemu-img convert -f qcow2 -O qcow2 -c web02.qcow2 web04.qcow2 virsh dumpxml web02 >web04.xml vim web04.xml #修改虚拟机的名字 #删除虚拟机uuid #删除mac地址 #修改磁盘路径 virsh define web04.xml <--导入配置文件 virsh start web04
- 链接克隆:
链接克隆是对原始虚拟机的引用,所需的存储磁盘空间较少。但是,必须能够访问原始虚拟机才能运行。
#生成虚拟机磁盘文件 qemu-img create -f qcow2 -b web03.qcow2 web05.qcow2 #生成虚拟机的配置文件 virsh dumpxml web03 >web05.xml vim web05.xml #修改虚拟机的名字 <name>web05</name> #删除虚拟机uuid <uuid>8e505e25-5175-46ab-a9f6-feaa096daaa4</uuid> #删除mac地址 <mac address='52:54:00:4e:5b:89'/> #修改磁盘路径 <source file='/opt/web05.qcow2'/> #导入虚拟机及进行启动测试 virsh define web05.xml virsh start web05
全自动链接克隆脚本:
[root@kvm01 scripts]# cat link_clone.sh #!/bin/bash old_vm=$1 new_vm=$2 #a:生成虚拟机磁盘文件 old_disk=`virsh dumpxml $old_vm|grep "<source file"|awk -F"'" '{print $2}'` disk_tmp=`dirname $old_disk` qemu-img create -f qcow2 -b $old_disk ${disk_tmp}/${new_vm}.qcow2 #b:生成虚拟机的配置文件 virsh dumpxml $old_vm >/tmp/${new_vm}.xml #修改虚拟机的名字 sed -ri "s#(<name>)(.*)(</name>)#\1${new_vm}\3#g" /tmp/${new_vm}.xml #删除虚拟机uuid sed -i '/<uuid>/d' /tmp/${new_vm}.xml #删除mac地址 sed -i '/<mac address/d' /tmp/${new_vm}.xml #修改磁盘路径 sed -ri "s#(<source file=')(.*)('/>)#\1${disk_tmp}/${new_vm}.qcow2\3#g" /tmp/${new_vm}.xml #c:导入虚拟机并进行启动测试 virsh define /tmp/${new_vm}.xml virsh start ${new_vm}
创建链接克隆的虚拟机:
#创建链接磁盘 qemu-img create -f qcow2 -b 49-web03.qcow2 49-web04.qcow2 #创建虚拟机 virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 1024 --vcpus 1 --disk /opt/web04.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
vim /etc/sysctl.conf net.ipv4.ip_forward=1 #添加这行代码 #重启network服务 systemctl restart network #查看是否修改成功返回1就是成功 sysctl net.ipv4.ip_forward net.ipv4.ip_forward = 1
Linux主机物理机服务器将虚拟网络交换机表示为网络接口。当libvirtd守护进程(libvirtd)首次安装并启动时,表示虚拟网络交换机的默认网络接口是virbr0。
这个virbr0接口可以通过ip命令,像其他任何接口一样用命令查看:
[root@kvm01 ~]# ifconfig virbr0 virbr0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255 ether 52:54:00:1e:7c:53 txqueuelen 1000 (Ethernet) RX packets 12242 bytes 677436 (661.5 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 12630 bytes 28332608 (27.0 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
网桥连接方式:
开启DHCP或者添加静态ip地址
-
新虚拟机使用桥接模式
创建桥接网卡:
virsh iface-bridge eth0 br0 #创建桥接网卡命令,执行这条命令eth0会桥接到br0 virsh iface-unbridge br0 #取消桥接网卡 brctl show #查看kvm网卡
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos8 --memory 1024 --vcpus 1 --disk /opt/centos8.raw,format=raw,size=10 --cdrom /opt/CentOS-7-x86_64-Minimal-1908.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos8 --memory 1024 --vcpus 1 --disk /opt/centos8.raw,format=raw,size=10 --cdrom /opt/CentOS-7-x86_64-Minimal-1908.iso --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
如果获取不到ip地址:
2. 将已有虚拟机网络修改为桥接模式
#例如:virsh edit centos7 74<interface type='bridge'> 76 <source bridge='br0'/>
NAT模式
桥接模式:使用宿主机网络,使用eth0桥接,虚拟机将会和eth0处于同一网段
dhclient:手动获取dhcp地址
使用静态ip地址变成桥接模式:
echo ' TYPE="Ethernet" BOOTPROTO="static" NAME="eth0" DEVICE="eth0" ONBOOT="yes" DNS1=223.5.5.5 IPADDR=10.0.0.99 NETMASK=255.255.255.0 GATEWAY=10.0.0.254 ' > /etc/sysconfig/network-scripts/ifcfg-eth0 systemctl restart network systemctl stop NetworkManager systemctl disable NetworkManager #使用xshell连接虚拟机 ssh 10.0.0.99 ping baidu.com <--验证连接外网
DNS和DHCP
ip地址可以通过DHCP分配给客户机。为此,可以将地址池分配给虚拟交换机。Libvirt使用这个dnsmasq程序。dnsmasq的一个实例是由libvirt为每个需要它的虚拟网络交换机自动分配和启动的。
注:不指定格式默认是raw格式硬盘 --subdriver
指定磁盘格式
virsh attach-disk web01 /data/web01-add.qcow2 vdb --subdriver qcow2
永久生效:
virsh attach-disk web01 /data/web01-add.qcow2 vdb --subdriver qcow2 --config
临时剥离:
virsh detach-disk web01 vdb
永久剥离:
virsh detach-disk web01 vdb --config
实例一 给虚拟机添加新硬盘:
#创建一个硬盘 qemu-img create -f qcow2 /opt/web01_add.qcow2 5G #添加硬盘到centos7虚拟机上 virsh attach-disk centos7 /opt/web01_add.qcow2 vdb --subdriver qcow2 #进入虚拟机进行格式化+挂载 mkfs.xfs /dev/vdb mount /dev/vdb /mnt
注:这里要添加--subdriver
参数,否则磁盘显示为0。
实例二 给在虚拟机上的硬盘进行扩容:
#磁盘卸载+硬盘剥离 mount /dev/vdb <--虚拟机操作 virsh detach-disk centos7 vdb 或者 virsh detach-disk centos7 /opt/web01_add.qcow2 #磁盘扩容 qemu-img resize /opt/web01_add.qcow2 20G qemu-img info web-blog-add.qcow2 #将磁盘重新添加 virsh attach-disk centos7 /opt/web01_add.qcow2 vdb --subdriver qcow2 mount /dev/vdb /mnt/ xfs_growfs /dev/vdb
注:xfs_growfs
命令是同步文件系统的意思,resize2fs
针对文件系统ext2 ext3 ext4
实例三 根分区扩容:
注:做完快照的硬盘不可以扩容
#剥离根分区磁盘 virsh detach-disk centos7 vda --config qemu-img resize /opt/centos2.qcow2 40G qemu-img info /opt/centos2.qcow2 virsh attach-disk centos7 /opt/centos2.qcow2 vda --subdriver qcow2 --config #进行重启 virsh destroy centos7 virsh start centos7
如果这里磁盘需要分区:
## 分区 fdisk /dev/vdb n 添加一新分区 p 添加主分区 (看需求) w 保存 ## 格式化 mkfs.xfs /dev/vdb1
#临时添加默认网卡 virsh attach-interface centos7 network default --model virtio #永久添加默认网卡 virsh attach-interface centos7 network default --model virtio --config <--需要重启 #删除默认网卡 virsh detach-interface centos7 network --mac 52:54:00:09:88:03 #永久删除 virsh detach-interface centos7 network --mac 52:54:00:91:de:cc --config <--需要重启
选择添加网卡类型和删除:
#临时添加 virsh attach-interface centos7 --type bridge --source br0 --model virtio #永久添加 virsh attach-interface centos7 --type bridge --source br0 --model virtio --config #删除 virsh detach-interface centos7 --type bridge --mac 52:54:00:35:d3:71
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 512,maxmemory=2048 --vcpus 1 --disk /opt/web04.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
注:这里对于内存的解释是使用的内存是512M,最大内存为2018M
内存调整:
#先关闭虚拟机
virsh destroy centos7
#调整虚拟机内存最大值
virsh setmaxmem web04 4G
#临时热添加内存
virsh setmem web04 1024M
#永久添加内存
virsh setmem web04 1024M --config <--重启
注:这里的内存是宿主机将自己的内存分给虚拟机的,虚拟机内存不要给太小,否则内核会崩溃
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 512,maxmemory=2048 --vcpus 1,maxvcpus=10 --disk /data/web04.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
注:这里cpu使用1个,但是可以加到10个cpu。
cpu核数调整:
#调整虚拟机cpu的最大值 virsh setvcpus centos7 --maximum 4 --config <--重启虚拟机 #热添加cpu核数 virsh setvcpus centos7 4 #永久添加cpu核数 virsh setvcpus centos7 4 --config
注:这里cpu调整只支持热添加不支持热减少,如果想减少cpu核数请关机重启一次
kvm虚拟机冷迁移:配置文件,磁盘文件
这里我们开启两台宿主机 kvm01、kvm02,都要开启虚拟化。
迁移思路:
kvm01操作:
#kvm01查看磁盘文件 virsh dumpxml centos7 | grep qcow2 <driver name='qemu' type='qcow2'/> <source file='/opt/centos2.qcow2'/> <driver name='qemu' type='qcow2'/> <source file='/opt/web-blog-add.qcow2'/> #迁移磁盘文件 scp /opt/centos2.qcow2 10.0.0.12:/opt <--系统盘 scp /opt/web-blog-add.qcow2 10.0.0.12:/opt <--第二块硬盘 #迁移xml配置文件 virsh dumpxml centos7 > centos7.xml scp centos7.xml 10.0.0.12:/opt
kvm02操作:
#kvm02开启网桥模式,因为迁移过来的虚拟机使用网桥模式 virsh iface-bridge eth0 br0 #导入配置文件 virsh define --file centos7.xml #开启虚拟机 virsh start centos7
注:这里kvm虚拟机如果是软连接制成的需要把链接的磁盘迁移过来。
#查看配置文件有几块磁盘 [root@kvm01 opt]# virsh dumpxml centos8 | grep qcow2 <driver name='qemu' type='qcow2'/> <source file='/opt/centos8.qcow2'/> <source file='/opt/centos2.qcow2'/> <--系统磁盘 <driver name='qemu' type='qcow2'/> <source file='/opt/vm_web-blog-add.qcow2'/> <source file='/opt/web-blog-add.qcow2'/> <---第二块添加的磁盘 [root@kvm01 opt]# qemu-img info centos8.qcow2 image: centos8.qcow2 file format: qcow2 virtual size: 10G (10737418240 bytes) disk size: 14M cluster_size: 65536 backing file: centos2.qcow2 <--链接到的磁盘 Format specific information: compat: 1.1 lazy refcounts: false #这里我们相当于需要把4快磁盘迁移过去,否则无法创建出来一个完整的链接虚拟机
主机名 | IP | 内存 | 网络 | 软件需求 | 虚拟化 |
kvm01 | 10.0.0.11 | 2G | 创建br0桥接网卡 | kvm和nfs | 开启 |
kvm02 | 10.0.0.12 | 2G | 创建br0桥接网卡 | kvm和nfs | 开启 |
nfs | 10.0.0.31 | 1G | 无 | nfs |
kvm02迁移kvm01思路:
-
搭建nfs,配置文件让kvm主机能够挂载
-
kvm挂载nfs的目录,kvm01在目录下得到kvm02的磁盘文件
-
kvm02迁移xml配置文件修改磁盘文件位置
-
nfs主机操作:
yum install nfs-utils rpcbind -y vim /etc/exports /data 10.0.0.0/24(rw,async,no_root_squash,no_all_squash systemctl start rpcbind nfs #kvm01和kvm02 mount -t nfs 10.0.0.31:/data /data df -h
以下是kvm宿主机操作:
#kvm02将/data下的磁盘文件移动到/data目录下 [root@kvm02 opt]# mv /opt/* /data [root@kvm02 opt]# mount -t nfs 10.0.0.31:/data /data [root@kvm02 opt]# mv /opt/* /data #kvm01将目录挂载到/opt [root@kvm01 opt]# rm -rf /opt [root@kvm01 opt]# mount -t nfs 10.0.0.31:/data /opt [root@kvm01 ~]# cd /opt/ [root@kvm01 opt]# ls centos2.qcow2 centos7.xml web-blog-add.qcow2 #导入xml文件 [root@kvm01 opt]# virsh define centos7.xml [root@kvm01 opt]# virsh start centos7
ESXi是vmware推出的一款优秀的服务器级别的虚拟机。它与我们常用的虚拟机不同的是,日常使用的虚拟机是需要依赖于一个操作系统的,比如在window上使用vmware,或者linux上使用virtualbox。而ESXi不依赖于任何操作系统,它本身就可以看作一个操作系统,然后可以在它上面安装系统。
注:这里安装内存不能低于4G,磁盘不可以低于40G
前面找镜像的过程就略过,我使用的镜像是VMware-VMvisor-Installer-6.7.0-8169922.x86_64
版本
按F11+Fn确定安装:
DHCP获取ip地址:
修改ip地址,网卡使用NAT模式,我们可以将ip地址改为10网段:
修改好的ip地址:
登录系统网页输入:10.0.0.40
激活系统,添加激活码:HV4WC-01087-1ZJ48-031XP-9A843
选择创建类型
选择放在那里
自定义配置,后期我们需要把Linux镜像在虚拟机上挂载上或者上传
安装虚拟机:
添加一个网段
-
-
添加一个端口组
给虚拟机更换网卡
1. 双击“VMware-viclient.exe”安装程序
2. 选择语言
3. 根据安装向导进行操作
4. 接收“许可协议
5. 选择安装路径
6. 完整安装
2. 将kvm虚拟机磁盘格式转化为ESXI使用的vmdk
[root@kvm01 opt]# ll total 1795720 -rw-r--r-- 1 qemu qemu 1822621696 Apr 25 22:07 centos2.qcow2 -rw-r--r-- 1 root root 5605 Apr 25 15:07 centos7.xml -rw-r--r-- 1 qemu qemu 16187392 Apr 25 08:14 web-blog-add.qcow2 #转化为vmdk格式 [root@kvm01 opt]# qemu-img convert -f qcow2 centos2.qcow2 -O vmdk centos7.vmdk [root@kvm01 opt]# ll centos7.vmdk -rw-r--r-- 1 root root 1611005952 Apr 25 22:11 centos7.vmdk convert:格式转化 -f qcow2:源格式 -O vmdk:转化后的格式 centos7.qcow2 centos7.vmdk 源文件与转化后的文件
3. 传输vmdk文件到ESXI系统
[root@kvm01 opt]# scp centos7.vmdk 10.0.0.40:/ The authenticity of host '10.0.0.40 (10.0.0.40)' can't be established. RSA key fingerprint is SHA256:LzGyAI//WyoXTe0bX+JsBOSLK+UVodfTb9OIvMpZgr0. RSA key fingerprint is MD5:cc:e7:7f:7a:78:12:ff:bf:30:dc:98:f4:b3:63:7b:a5. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '10.0.0.40' (RSA) to the list of known hosts. Password: centos7.vmdk 96% 1476MB 68.4MB/s 00:00 ETAscp: /centos7.vmdk: No space left on device centos7.vmdk
4. 移动vmdk文件到指定目录(ESXI系统操作)
#创建一个目录存放磁盘 mkdir /vmfs/volumes/datastore1/centos7 mv centos7.vmdk /vmfs/volumes/datastore1/centos7/
5. 在ESXI虚拟机上使用此文件
把文件导入kvm中
解压文件
[root@vm-kvm01 /kvm/raw_qcow2]# tar xf ESXI-centos7.ova [root@vm-kvm01 /kvm/raw_qcow2]# ll -h total 8.7G 省略部分文件…… -rw-r--r-- 1 64 64 647M Jul 17 14:47 ESXI-centos7-disk1.vmdk -rw-r--r-- 1 64 64 139 Jul 17 14:47 ESXI-centos7.mf -rw-r--r-- 1 root root 647M Jul 17 14:47 ESXI-centos7.ova -rw-r--r-- 1 64 64 8.0K Jul 17 14:47 ESXI-centos7.ovf
磁盘文件格式转化
方法1: [root@vm-kvm01 /kvm/raw_qcow2]# qemu-img convert -f vmdk -O qcow2 ESXI-centos7-disk1.vmdk ESXI-centos7.qcow2 [root@vm-kvm01 /kvm/raw_qcow2]# ll -h | grep ESXI 省略部分文件…… -rw-r--r-- 1 64 64 647M Jul 17 14:47 ESXI-centos7-disk1.vmdk -rw-r--r-- 1 root root 1.3G Jul 17 15:01 ESXI-centos7.qcow2
方法2:用专门的工具将vmdk格式文件转换成qcow2与xml格式文件 [root@vm-kvm01 /kvm/raw_qcow2]# yum -y install virt-v2v [root@vm-kvm01 /kvm/raw_qcow2]# virt-v2v -i ova ESXI-centos7.ova -o local -os /opt -of qcow2 #格式转换需要一点时间 [root@vm-kvm01 /kvm/raw_qcow2]# ll /opt total 1358728 -rw-r--r-- 1 root root 1391394816 Jul 18 07:10 ESXI-centos7-sda #这就是qcow2格式的文件 -rw-r--r-- 1 root root 1470 Jul 18 07:10 ESXI-centos7.xml [root@vm-kvm01 /opt]# qemu-img info ESXI-centos7-sda image: ESXI-centos7-sda file format: qcow2 实际上这个文件就是qcow2文件 virtual size: 10G (10737418240 bytes) disk size: 1.3G cluster_size: 65536 Format specific information: compat: 1.1 lazy refcounts: false 实用时需要重命名: [root@vm-kvm01 /opt]# mv ESXI-centos7-sda ESXI-centos7.qcow2 参数详解: virt-v2v:将客户端转换为使用KVM -i ova ESXI-centos7.ova:指定转换的文件格式为ova及ova文件名 -o local:转换到本地 -os /opt -of qcow2:转换到本地具体的路径
基于现有的磁盘文件创建KVM虚拟机
[root@vm-kvm01 /kvm/raw_qcow2]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name openstatck --memory 1024 --vcpus 1,maxvcpus=10 --disk /kvm/raw_qcow2/ESXI-centos7.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole Starting install... Domain creation completed. [root@vm-kvm01 /kvm/raw_qcow2]# virsh list Id Name State ---------------------------------------------------- 1 openstatck running
使用VNC客户端工具进行连接