深入學習KVM 一、環境準備 | 主機名 | IP | 操作系統 | 記憶體 | 硬碟 | | | | | | | | kvm01 | 10.0.0.11 | centos7 | 4G | 50G | 優化:kvm01在安裝系統的時候,不要使用自動分區,自動分區使用的LVM分區,在使用kvm的時候,特 ...
深入學習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
<interface type='bridge'>
<mac address='52:54:00:55:aa:fa'/>
<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 | 記憶體 | 網路 | 軟體需求 | 虛擬化 |
---|---|---|---|---|---|
kvm01 | 10.0.0.11 | 2G | 創建br0橋接網卡 | kvm和nfs | 開啟虛擬化 |
kvm02 | 10.0.0.12 | 2G | 創建br0橋接網卡 | kvm和nfs | 開啟虛擬化 |
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](
連接成功。
在遷移的過程中,使用ping虛擬機的ip,發現只丟了一個包 。