KVM虛擬化

KVM虛擬化

KVM全稱:Kernel-based Virtual machine

KVM內(nèi)存壓縮技術(shù): 相同的內(nèi)容只占用1份內(nèi)存,所以KVM虛擬機可以超邁,尤其是在做虛擬機克隆的時候。

環(huán)境要求:Centos7、4G 內(nèi)存、開啟CPU虛擬化

管理工具安裝:yum install libvirt virt-install qemu-kvm -y

libvirt作用:虛擬機的管理軟件

libvirt可管理:kvm、xen、qumu、lxc...

virt virt-install virt-clone 作用:虛擬機的安裝工具和克隆工具

qumu-kvm qumu-img(qcow2,raw)作用:管理虛擬機的虛擬磁盤

systemctl start libvirtd.service
systemctl enable libvirtd.service
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name c7 --memory 1024 --vcpus 1 --disk /opt/centos3.raw,format=raw,size=5 --cdrom /opt/CentOS-7-x86_64-DVD-1810.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole

1.常用命令:

virsh list 
virsh list --all 查看虛擬機
virsh reboot        重啟虛擬機
virsh shutdown  關(guān)機
virsh destroy       拔電關(guān)機
virsh start         開機
virsh undefine  刪除虛擬機
virsh define        導入虛擬機配置文件
virsh dumpxml       導出虛擬機的備份文件;舉例:virsh dumpxml centos7 >c7.xml
virsh edit          修改虛擬機配置文件,此命令帶語法檢查功能
virsh domrename 重命名虛擬機
virsh suspend   掛起虛擬機
virsh resume    掛起后,重新恢復虛擬機
virsh vncdisplay 查看虛擬機短端口號
virsh autostart  設(shè)置虛擬機為開機自啟,前提是服務(wù)器設(shè)置開機自啟systemctl status libvirtd.service 
virsh console    使用console 方式連接虛擬機
#開機自啟,其實就是給虛擬機的配置文件設(shè)置軟連接,當刪除軟連接后開機自啟將失效,需要重新定義開機自啟,存放軟連接文件位置:/etc/libvirt/qemu/autostart
grubby --update-kernel=ALL --args="console=ttyS0,115200n8" #登錄虛擬機,輸入此修改內(nèi)核參數(shù)的命令,重啟虛擬機,使用virsh console 虛擬機名稱   連接到虛擬機。

2.虛擬機磁盤格式:

raw:裸格式,占用空間比較大,不支持快照功能,不方便傳輸,性能較好,總50G,占用50G

qcow2:cow(copy on write )占用空間小,支持快照,性能比raw差一點,方便傳輸,總50G 占用2G

#qcow2格式創(chuàng)建虛擬機:
#區(qū)別于raw格式創(chuàng)建虛擬機:--disk /opt/wb02.qcow2,format=qcow2,這兩個字段為qcow2,其他參數(shù)與raw格式創(chuàng)建虛擬機一樣。
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name wb02 --memory 1024 --vcpus 1 --disk /opt/wb02.qcow2,format=qcow2,size=5 --cdrom /opt/CentOS-7-x86_64-DVD-1810.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole

3.磁盤工具常用命令:

#查看虛擬硬盤信息:qemu-img info 
qemu-img info cengos7.raw
#創(chuàng)建虛擬硬盤:qemu-img create 
創(chuàng)建qcow2格式磁盤(創(chuàng)建在當前路徑下): qemu-img create -f qcow2 centos7.qcow2 1G
創(chuàng)建raw格式磁盤(創(chuàng)建在當前路徑下): qemu-img create c7.raw 1G
#對虛擬硬盤擴容:qume-img resize 
#qcow2格式的虛擬磁盤只能擴容,不能縮容,raw格式的虛擬磁盤支持縮容,但是一般不建議縮容。
將centos7.qcow2磁盤文件擴容4G:qemu-img resize centos7.qcow2 +4G
將centos7.qcow2磁盤文件擴容到6G:qemu-img resize centos7.qcow2 6G
擴容raw格式的的磁盤文件: qemu-img resize c7.raw 5G
縮容rwa格式的虛擬磁盤(原有5G):qemu-img resize c7.raw 1G
#轉(zhuǎn)換磁盤格式的命令 qemu-img convert
將raw格式的虛擬磁盤轉(zhuǎn)換為qcow2格式:qemu-img convert -f raw -O qcow2 c7.raw c7.qcow2
#虛擬磁盤格式轉(zhuǎn)換完成后,需要停機修改配置文件中的硬盤格式才能啟用轉(zhuǎn)換后的虛擬磁盤。
修改下面2行:
<disk type='file' device='disk'>
      <driver name='qemu' type='raw'/>

4.快照管理:

創(chuàng)建快照: virsh snapshot-create-as wb01 --name 基礎(chǔ)優(yōu)化_ok
查看快照:virsh snapshot-list wb01
還原快照:virsh snapshot-revert wb01 --snapshotname 基礎(chǔ)優(yōu)化_ok
刪除快照:virsh snapshot-delete wb01 test_ces
#raw不支持做快照,qcow2支持做快照,并且快照保存在qcow2的磁盤文件中。

5.完整克?。?/h2>
自動克?。簐irt-clone -o wb01 -n lb01 --auto-clone
手動克?。?#克隆的虛擬機不要有快照,直接cp過去的虛擬機如果有快照的話,無法啟動。
cp lb01.qcow2 lb01-clone.qcow2
virsh dumpxml lb01 >lb01-clone.xml
mv lb01-clone.xml /etc/libvirt/qemu
vim /etc/libvirt/qemu/lb01-clone.xml
        #修改虛擬機名字
    #刪除虛擬機uuid
    #刪除mac地址
    #修改磁盤路徑
virsh define lb01-clone.xml
virsh start lb01-clone
  

6.鏈接克隆:

#生成虛擬機磁盤文件
qemu-img create -f qcow2 -b /opt/wb01.qcow2 /opt/wb02.qcow2

 cp /etc/libvirt/qemu/wb01.xml /etc/libvirt/qemu/wb02.xml
 vim /etc/libvirt/qemu/wb02.xml
        #修改虛擬機名字
    #刪除虛擬機uuid
      #刪除mac地址
    #修改磁盤路徑
 virsh define wb02.xml
 virsh list --all
 virsh start wb02
 [root@node01 /etc/libvirt/qemu]# virsh dumpxml wb01 | grep "qcow2"
      <driver name='qemu' type='qcow2'/>
      <source file='/opt/wb01.qcow2'/>
[root@node01 /etc/libvirt/qemu]# virsh dumpxml wb02 | grep "qcow2"
      <driver name='qemu' type='qcow2'/>
      <source file='/opt/wb02.qcow2'/>
        <source file='/opt/wb01.qcow2'/> #基于wb01磁盤進行克隆。
[root@node01 /etc/libvirt/qemu]#

7.自動鏈接克隆腳本

#!/bin/bash
#new_kvm=$2
#old_kvm=$1
read -p "請輸入被克隆的虛擬機名稱:" old_kvm
read -p "請輸入新的虛擬機名稱:" new_kvm
old_kvm_disk=`virsh dumpxml wb01 | sed -r -n "s#(<source file=.)(.*)(./>)#\2#p" |tr -d  "  "`
old_kvm_disk_path=`dirname $old_kvm_disk`
qemu-img create -f qcow2 -b $old_kvm_disk $old_kvm_disk_path/${new_kvm}.qcow2
virsh dumpxml $old_kvm>/tmp/${new_kvm}.xml
#修改kv名稱
sed -ri "s#(<name>)(.*)(</name>)#\1${new_kvm}\3#g" /tmp/${new_kvm}.xml
#刪除虛擬機uuid
sed -i '/uuid/d' /tmp/${new_kvm}.xml
#刪除mac地址
sed -ri '/mac address/d' /tmp/${new_kvm}.xml
#修改磁盤路徑
sed -ri "s#(<source file=.)(.*)(./>)#\1/opt/${new_kvm}.qcow2\3#g" /tmp/${new_kvm}.xml

virsh define  /tmp/${new_kvm}.xml
virsh start  ${new_kvm}

8.kvm橋接模式

默認kvm虛擬機不支持橋接模式

#創(chuàng)建橋接網(wǎng)卡的命令
virsh iface-bridge eth0 br0
修改虛擬機配置文件
 <interface type='bridge'>
      <source network='br0'/>
#取消橋接網(wǎng)卡的命令
virsh iface-unbridge br0

9.虛擬機網(wǎng)絡(luò)模式

9.1新建虛擬機使用橋接模式

默認NAT模式(network )

virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name c7 --memory 1024 --vcpus 1 --disk /opt/centos3.raw,format=raw,size=5 --cdrom /opt/CentOS-7-x86_64-DVD-1810.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole

橋接模式(bridge)

virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name c7 --memory 1024 --vcpus 1 --disk /opt/centos3.raw,format=raw,size=5 --cdrom /opt/CentOS-7-x86_64-DVD-1810.iso --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole

9.2 將已有的虛擬機配置改為橋接模式

a.創(chuàng)建橋接網(wǎng)路
b.virsh edit lb01 
修改下面兩行
 <interface type='bridge'>
      <source network='br0'/>
 c.重啟kvm虛擬機
 d.重啟kvm虛擬機后還獲取不到就重啟網(wǎng)卡或者用dhclint 命令重新獲取dhcp地址

10.熱添加硬盤和擴容

10.1熱添加一塊硬盤

a.創(chuàng)建一塊硬盤
        qemu-img create -f qcow2 /opt/wb01_add.qcow2 2G
b.將硬盤添加給kvm;默認是以raw格式添加磁盤,所以在擴容qcow2的磁盤時,需要指明磁盤類型
        virsh attach-disk wb01 /opt/wb01_add.qcow2 vdb
        #完整添加磁盤命令
        virsh attach-disk wb01 /opt/wb01_add.qcow2 vdb --subdriver qcow2
#擴容硬盤命令后面需要跟3個參數(shù) :virsh attach-disk 虛擬機名稱  磁盤格式  目標盤符 
root@node01 /opt]# virsh attach-disk 
錯誤:命令 'attach-disk' 需要 <domain> 選項  #虛擬機名稱
錯誤:命令 'attach-disk' 需要 <source> 選項  #磁盤文件
錯誤:命令 'attach-disk' 需要 <target> 選項  #目標盤符
c.剝離硬盤
        virsh detach-disk wb01 vdb

10.2硬盤擴容

擴容操作需要規(guī)范化操作!?。?/em>

a.卸載分區(qū)(虛擬機中的中操作)
    [root@localhost.localdomain /add_disk]# umount /dev/vdb
b.剝離硬盤(宿主機中操作)
    [root@node01 /opt]# virsh detach-disk  wb01 vdb
c.擴容硬盤容量(宿主機中操作)
    [root@node01 /opt]# qemu-img resize wb01_add.qcow2 4G
d.添加磁盤(宿主機中操作)
    [root@node01 /opt]# virsh attach-disk wb01 /opt/wb01_add.qcow2  vdb --subdriver qcow2
e.掛載分區(qū)(虛擬機中操作)
    [root@localhost.localdomain ~]# mount /dev/vdb /add_disk/
f.更新硬盤信息(虛擬機中操作)
    [root@localhost.localdomain ~]# xfs_growfs /dev/vdb
g.查看硬盤更新情況
    [root@localhost.localdomain ~]# df -h

10.3 以上添加硬盤\刪除硬盤都是臨時生效,想要永久生效需要添加 --config 參數(shù),如果需要臨時生效+永久生效,需要執(zhí)行兩條命令。

virsh attach-disk wb01 /opt/wb01_add.qcow2  vdb --subdriver qcow2
virsh attach-disk wb01 /opt/wb01_add.qcow2  vdb --subdriver qcow2 --config 

11.熱添加網(wǎng)卡

#給lb01添加一塊橋接模式的網(wǎng)卡
virsh attach-interface lb01 bridge br0 
 #給lb01添加一塊NAT模式的網(wǎng)卡
virsh attach-interface lb01 network default
# --model virtio 指定網(wǎng)卡類型,添加后的網(wǎng)卡名稱為eth0\eth1
virsh attach-interface lb01 network default --model virtio
#刪除網(wǎng)卡需要指定網(wǎng)絡(luò)類型
virsh detach-interface lb01 netwokr

11.1當一臺虛擬機有多個相同類型的網(wǎng)卡時,需要指明mac地址 才能刪除對應(yīng)的網(wǎng)卡

[root@kvm01 ~]# virsh detach-interface lb01 netwokr --mac 52:54:00:51:b8:91
錯誤:No interface found whose type is netwokr
錯誤:分離接口失敗

[root@kvm01 ~]# virsh detach-interface lb01 network
錯誤:域有 2 個接口。請使用 --mac 指定要分離的接口。
錯誤:分離接口失敗

[root@kvm01 ~]# virsh detach-interface lb01 network --mac 52:54:00:51:b8:91
成功分離接口

[root@kvm01 ~]#

11.2想要修改網(wǎng)卡的原有類型,只能刪除網(wǎng)卡后再重新添加網(wǎng)卡,在添加網(wǎng)卡時聲明所需要的網(wǎng)絡(luò)類型。

11.3 以上添加\刪除網(wǎng)卡,都是臨時生效,需要永久生效需要 加--config 參數(shù),如果需要臨時生效+永久生效,需要執(zhí)行兩條命令(如果添加網(wǎng)卡的時候使用的--config參數(shù),那么刪除的時候也需要添加--config 才能永久刪除,同理立即刪除+永久刪除需要執(zhí)行兩條刪除命令)。

#臨時+永久添加網(wǎng)卡
virsh attach-interface lb01 network default --model virtio
virsh attach-interface lb01 network default --model virtio --config 
#臨時+永久刪除網(wǎng)卡
virsh detach-interface lb01 network --mac 52:54:00:51:b8:91
virsh detach-interface lb01 network --mac 52:54:00:51:b8:91 --config 


## 12.熱添加內(nèi)存

#### 12.1擴容\縮容內(nèi)存

```shell
virsh setmem lb01 --size 256M #臨時修改虛擬機的內(nèi)存大小
virsh setmem lb01 --size 1024M --config #永久修改虛擬機內(nèi)存
#虛擬機的內(nèi)存調(diào)整,不得大于最大值(下面第一行),如果必須要調(diào)整,需要修改配置文件中的最大值(下面第一行,建議使用命令修改。)
 <memory unit='KiB'>1048576</memory>
  <currentMemory unit='KiB'>1048576</currentMemory>
virsh setmaxmem lb01 --size 4096M #臨時修改虛擬機的最大值(必須使用destroy 關(guān)機才能修改,永久修改)

12.2 內(nèi)存擴容\縮容注意事項

    a.內(nèi)存縮容最小不得小于128M(最小也要滿足內(nèi)容運行的所需內(nèi)存)

    b.想要修改內(nèi)存最大值,需要使用destroy 命令關(guān)機后,才能修改內(nèi)存最大值。(配置文件)

    c.內(nèi)存最大值不可以超過宿主機內(nèi)存,否則開機時會出現(xiàn)如下報錯。
[root@kvm01 ~]# virsh  start lb01
錯誤:internal error: process exited while connecting to monitor: Cannot set up guest memory 'pc.ram': Cannot allocate memory

d. 虛擬機擴容內(nèi)存時不得超過虛擬機剩余內(nèi)存,否則虛擬機會卡死。

13.熱添加CPU

virsh setvcpus lb01 --maximum 4 --config #設(shè)置虛擬機CPU最大核心數(shù)(需要關(guān)機重啟,才能生效,永久修改)
virsh setvcpus lb01 2 #設(shè)置cpu的核心數(shù),(臨時添加)
virsh setvcpu #設(shè)置CPU屬性,是否支持虛擬化,幾乎用不到。

14.kvm虛擬機冷遷移

冷遷移:關(guān)機后遷移,其實就是scp 虛擬機的配置文件和磁盤文件。

首先找一臺與原來環(huán)境一樣的機器。

然后將KVM虛擬機的配置文件+磁盤文件copy到與原機器相同的路徑下(根據(jù)kvm 的配置文件中的磁盤和配置的路徑遷移)

執(zhí)行virsh virsh define @@@.xml

最后執(zhí)行 virsh start @@@

遷移時,如果遷移的是鏈接克隆的虛擬機,一定要把基礎(chǔ)磁盤一并遷移走才可以起來,否則就會出現(xiàn)如下報錯

error: Failed to start domain web02
error: Cannot access backing file '/opt/web01.qcow2' of storage file '/opt/web02.qcow2' (as uid:107, gid:107): No such file or directory

15.kvm虛擬機熱遷移

熱遷移:虛擬機在運行狀態(tài)完成宿主機之間的遷移

思考:虛擬機的遷移主要是遷移那個文件? 如何保證磁盤文件能夠快速遷移?

KVM虛擬機的遷移其實就是遷移配置文件和磁盤文件,虛擬機的配置文件比較小,可以做到秒遷移,磁盤文件一般來說比較大,如果做到秒遷移呢? 這里就要用到網(wǎng)絡(luò)文件存儲,也就是NFS(network file system ),將磁盤文件存儲到NFS目錄下,就解決了磁盤文件的遷移問題,當然也可以采用Glusterfs集群文件系統(tǒng)來實現(xiàn)。

#臨時熱遷移
[root@kvm01 ]# virsh migrate --live --verbose lb01 qemu+ssh://10.0.0.6/system --unsafe
#永久熱遷移
[root@kvm01 ]#  virsh migrate --live --verbose wb01 qemu+ssh://10.0.0.6/system --unsafe --persistent --undefinesource

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容