深入學習KVM
一、環境準備
主機名 | IP | 作業系統 | 記憶體 | 硬碟 |
---|---|---|---|---|
kvm01 | 10.0.0.11 | centos7 | 4G | 50G |
優化:kvm01在安裝系統的時候,不要使用自動分區,自動分區使用的LVM分區,在使用kvm的時候,特别卡!
- 關閉selinux關
[root@kvm02 ~]# grep 'SELINUX=disabled' /etc/selinux/config
SELINUX=disabled
- 閉firewalld
[root@kvm02 ~]# systemctl stop firewalld
[root@kvm02 ~]# systemctl disable firewalld
[root@kvm02 ~]# systemctl status firewalld
安裝kvm管理工具
安裝:
yum install libvirt virt-install qemu-kvm -y
介紹:
libvirt服務:管理kvm虛拟機的生命周期
virt-install工具:建立安裝虛拟機
qemu-kvm工具:使用qemu-img為虛拟機提供硬碟
Linux上幾種虛拟化軟體
- qemu 軟體純模拟全虛拟化軟體,特别慢!
- xen 性能特别好,需要使用專門修改之後的核心,相容性差。
- KVM 需要cpu支援虛拟化,基于核心,不需要使用專門的核心,相容行好,性能較好。
安裝kvm虛拟機準備條件
在window上安裝TightVNC
tightvnc官網:http://www.tightvnc.com
vnc是一個跨平台的遠端桌面軟體,待會安裝kvm虛拟機系統的時候使用
啟動libvirtd服務
systemctl start libvirtd.service
systemctl status libvirtd.service
安裝虛拟機
建議虛拟機記憶體不要低于1024M,否則安裝系統特别慢!
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.5-x86_64-DVD-1804.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
二、虛拟機的日常管理
日常管理一:
- 清單list
- 開機start
- 關機shutdown
- 拔電源關機destroy
常用指令:
virsh list --all
virsh destroy centos7
virsh shutdown centos7
virsh start centos7
日常管理二:
- 導出配置dumpxml
- 删除undefine
- 推薦:先destroy,在undefine
- 導入配置define
- 修改配置edit
- 重命名domrename (注意:低版本不支援)
執行個體:
virsh dumpxml centos7 >centos7.xml
cat centos7.xml
[root@kvm02 opt]# virsh define centos7.xml (備份的配置檔案)
[root@kvm02 opt]# virsh list --all
mv centos2.raw centos7.raw
virsh edit centos7
virsh start centos7
virsh list --all
[root@kvm02 opt]# virsh domrename centos7 web01
Domain successfully renamed
[root@kvm02 opt]# virsh list --all
[root@kvm02 /]# virsh suspend web01
[root@kvm02 /]# virsh resume web01
[root@kvm02 /]# virsh vncdisplay web01
:0
[root@kvm02 /]# virsh autostart web01
域 web01标記為自動開始
[root@kvm02 /]# virsh autostart --disable web01
三、kvm虛拟機console登陸
1:正常情況下,安裝完 KVM 之後,可能都會通過 VNC 連接配接到 KVM 虛拟機裡面去修改 IP 等資訊。但是一旦虛拟機比較多的話,打開過多的端口會造成安全問題。
2:很多時候,我們是通過跳闆機連接配接的主控端,你的window和kvm主控端沒有直達的路由,這時候vnc都用不了,如何快速進入到 KVM 虛拟機裡面去排查問題呢?
在centos7的kvm虛拟機中執行:
grubby --update-kernel=ALL --args="console=ttyS0,115200n8"
reboot重新開機生效
使用console登入:
[root@kvm02 /]# virsh console web01
連接配接到域 web01
換碼符為 ^]
四、kvm虛拟磁盤格式轉換和快照管理
kvm虛拟機兩種常用的格式
- raw:裸格式,占用空間比較大,不适合遠端傳輸,不支援快照功能,性能較好
- qcow2:cow(copy on write)占用空間小,适合傳輸,支援快照,性能比raw差一點點
qemu-img create test.raw 10G
qemu-img info test.raw
qemu-img create -f qcow2 test.qcow2 5G
qemu-img info test.qcow2
qemu-img resize test.qcow2 +10G
qemu-img info test.qcow2
修改磁盤格式:
qemu-img convert -f raw -O qcow2 test.raw test1.qcow2
[root@kvm02 opt]# qemu-img info test1.qcow2
案例1:
将現有的虛拟機的磁盤格式由raw轉換為qcow2,并測試運作
qemu-img convert -f raw -O qcow2 centos7.raw web01.qcow2
virsh edit web01
修改磁盤的配置檔案
virsh start web01
快照管理:
建立快照
virsh snapshot-create centos7
檢視快照
virsh snapshot-list centos7
還原快照
virsh snapshot-revert centos7 --snapshotname 1516574134
删除快照
virsh snapshot-delete centos7 --snapshotname 1516636570
執行個體:
虛拟機上建立檔案:測試恢複快照後檔案消失
dd if=/dev/zero of=/tmp/test.raw bs=100M count=1
virsh snapshot-create web01
virsh snapshot-list web01
virsh snapshot-revert web01 --snapshotname 1586618763
virsh snapshot-list web01
virsh snapshot-delete web01 --snapshotname 1586618763
virsh snapshot-list web01
五、kvm虛拟機的克隆
完整克隆
實作方法:
virt-clone -o web01 --auto-clone
virsh dumpxml web01 >web01.xml
virsh dumpxml web01-clone >web01-clone.xml
vimdiff web01.xml web01-clone.xml
對比克隆前後的配置檔案差異
virsh domrename web01-clone web03
對克隆機器重命名
virsh list --all
virsh edit web03
連結克隆
實作方法:
shell腳本
完整克隆:(手工克隆)
1:克隆虛拟磁盤檔案
cp centos7.qcow2 web03.qcow2
2:生成新的虛拟機配置檔案
name修改
uuid删掉
disk路徑/opt/web03.qcow2
mac位址删除
3:測試啟動
virsh define web01.xml
執行個體:
cp web01.qcow2 web04.qcow2
vim web01.xml
virsh define web01.xml (virsh dumpxml web01 >web01.xml)
virsh list --all
virsh start web04
連結克隆
連結克隆實戰:
基于原磁盤克隆磁盤:
qemu-img create -f qcow2 -b cetnos7.qcow2 web02.qcow2
建立克隆機器:(差別:--boot hd)
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web02 --memory 1024 --vcpus 1 --disk /opt/web02.qcow2,format=qcow2,size=10 --boot hd --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
案例:
[root@kvm02 opt]# qemu-img create -f qcow2 -b web01.qcow2 web02.qcow2
[root@kvm02 opt]# qemu-img info web02.qcow2
[root@kvm02 opt]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web02 --memory 1024 --vcpus 1 --disk /opt/web02.qcow2,format=qcow2,size=10 --boot hd --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
[root@kvm02 opt]# virsh list --all
[root@kvm02 opt]# virsh vncdisplay web02
六、kvm虛拟機的橋接網絡
我們運作虛拟機的目的是,在虛拟機中運作我們的業務,現在業務所需要的服務都已經運作了,可是除了在主控端上能通路,其他人都通路不了!!!
建立橋接網絡
1:virsh iface-bridge eth0 br0
如果指令建立失敗,可以手工進行建立:
[root@kvm02 opt]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BRIDGE="br0"(注意點)
[root@kvm02 opt]# cat /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE="br0"
ONBOOT="yes"
TYPE="Bridge"(注意點)
BOOTPROTO="none"
IPADDR="10.0.0.12"
NETMASK="255.255.255.0"
GATEWAY="10.0.0.254"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
DHCPV6C="no"
STP="on"
DELAY="0"
[root@kvm02 opt]#
基于橋接網絡建立虛拟機(差別:--network bridge=br0)
2:virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 1024 --vcpus 1 --disk /opt/web04.qcow2,format=qcow2,size=10 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
将已有的虛機修改為橋接網絡
1:virsh edit web02<source bridge='br0’/>2:修改虛拟機ip位址
/etc/sysconfig/network-scripts/ifcfg-eth0
kvm NAT模式網絡原理圖

kvm 橋接網絡原理圖
七、kvm虛拟機的熱添加技術
熱添加技術就是不停機的情況下,線上熱添加硬碟,記憶體,cpu,網卡等裝置,熱添加技術一般都是在虛拟機資源不夠了,又不能停機的情況下使用的,熱添加技術是虛拟機相對于實體機的一個很大的優勢,它讓資源配置設定變得更靈活!
熱添加種類有:
- 1.熱添加硬碟
- 2.熱添加網卡
- 3.熱添加cpu
- 4.熱添加記憶體
熱添加硬碟
[root@kvm02 opt]# qemu-img create -f qcow2 web02-add.qcow2 10G
[root@kvm02 opt]# virsh attach-disk web02 /opt/web02-add.qcow2 vdb --live --cache=none --subdriver=qcow2
成功附加磁盤
虛拟機上配置:
fdisk /dev/vdb
mkfs.xfs /dev/vdb1
mount /dev/vdb1 /mnt
df -h
磁盤擴容案例:
虛拟機配置:
umount /mnt
主控端配置:
[root@kvm02 opt]# virsh --help | grep disk
attach-disk 附加磁盤裝置
detach-disk 分離磁盤裝置
[root@kvm02 opt]# virsh detach-disk web02 vdb
成功分離磁盤
[root@kvm02 opt]# qemu-img resize web02-add.qcow2 +5G
Image resized.
[root@kvm02 opt]# qemu-img info web02-add.qcow2
[root@kvm02 opt]# virsh attach-disk web02 /opt/web02-add.qcow2 vdb --live --cache=none --subdriver=qcow2
成功附加磁盤
虛拟機配置:
fdisk /dev/vdb
d(删除重新配置)
mkfs.xfs /dev/vdb1
partprobe /dev/vdb
xfs_growfs /mnt(ext 格式的需要resize2fs /mnt)
mount /dev/vdb /mnt
df -h
熱添加網卡
添加網卡
virsh attach-interface web02 --type bridge --model virtio --source br0
熱添加CPU
安裝參數:
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web02 --memory 1024 --vcpus 1,maxvcpus=4 --disk /opt/web02.qcow2,format=qcow2,size=10 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
熱添加cpu
virsh setvcpus web02 --count=2
熱添加記憶體:
安裝參數
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web02 --memory 512,maxmemory=2048 --vcpus=1,maxvcpus=2 --disk /opt/web02.qcow2,format=qcow2,size=10 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
熱添加記憶體
virsh setmem web02 1G
八、kvm虛拟機的熱遷移
熱遷移:
相比KVM虛拟機冷遷移中需要拷貝虛拟機虛拟磁盤檔案,kvm虛拟機熱遷移無需拷貝虛拟磁盤檔案,但是需要遷移到的主控端之間需要有相同的目錄結構虛拟機磁盤檔案,也就是共享存儲,這次通過大家熟悉的nfs來實作,當然也可以采用Glusterfs等分布式檔案系統來實作。
上一節我們學習了線上熱添加技術,就很容易了解了。假設我初級隻有一台16G記憶體的實體機,為了充分利用資源,我可能運作了8台2G記憶體的虛拟機,然後通路量增加,虛拟機的2G記憶體不夠用了,需要擴容,擴容之前我們就需要先遷移一部分虛拟機到其他主控端上了,有的業務特别核心,暫停的時間不能太長,這時候就要用到我們的熱遷移了。
熱遷移過程:
假設我們有2台主控端kvm01和kvm02,在kvm01上挂起虛拟機vm01,發送vm的虛拟機配置檔案和運作時記憶體中的資料到kvm02, 接受完畢,kvm02恢複vm01,熱遷移完成。
熱遷移環境準備:
ip | 網絡 | 軟體需求 | 虛拟化 | ||
---|---|---|---|---|---|
2G | 建立br0橋接網卡 | kvm和nfs | 開啟虛拟化 | ||
kvm02 | 10.0.0.12 | ||||
nfs01 | 10.0.0.31 | 1G | 無 | nfs |
熱遷移步驟
(一):在kvm01和kvm02上安裝kvm和nfs,配置橋接網卡
yum install libvirt* virt-* qemu-kvm* nfs-utils openssh-askpass -y
systemctl start libvirtd.service
virsh iface-bridge eth0 br0
(二):在nfs01上安裝配置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
(三):kvm01和kvm02挂載共享目錄/opt
mount -t nfs 10.0.0.31:/data /opt
(四):安裝一台基于橋接模式的虛拟機
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 512,maxmemory=2048 --vcpus 1 --disk /data/web04.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
(這裡利用之前儲存下來的硬碟,virsh edis web04,将已有的硬碟名稱配置到配置檔案中)
熱遷移的指令:
virsh migrate --live --verbose web04 qemu+ssh://10.0.0.12/system --unsafe
将主控端10.0.0.11上的kvm虛拟機web04遷移到10.0.0.12
(五):在kvm01上安裝圖形界面、vnc服務端和virt-manager
yum groups install "GNOME Desktop" -y
yum install tigervnc-server.x86_64 -y
yum install virt-manager -y
六:啟動vnc服務端
vncserver :1 啟動5901端口的vnc服務端
vncserver -kill :1 關閉5901端口的vnc服務端
七:使用vnc連接配接主控端,使用virt-manager進行遷移
這時候會提醒輸入密碼,就是之前第6步的時候設定的vnc連接配接密碼
![1587143636550](