KVM虛擬化、創建、克隆、qemu-guest-agent安裝等實踐過程

由於公司需求,所以最近學習了KVM,下面是本人安裝實踐過程。

安裝虛擬化軟件

  • 查看CPU是否支持KVM
    egrep 'vmx|svm' /proc/cpuinfo --color=auto
    可以看到grep出來的內容,就說明支持kvm。
  • 通過apt進行安裝
apt-get install -y qemu-kvm libvirt-daemon libvirt-daemon-system 
  • 啓動並設置開機啓動
    systemctl start libvirtd && systemctl enable libvirtd

配置網橋網卡,如下配置

  • ubuntu路徑: vim /etc/netplan/01-network-manager-all.yaml
network:
  version: 2
  renderer: NetworkManager
  ethernets:
      enp2s0:
          dhcp4: yes
          dhcp6: yes
          #bridge: br0
  bridges:
      br0:
          dhcp4: no
          dhcp6: no
          addresses: [192.168.10.163/23]
          gateway4: 192.168.10.1
          nameservers:
              addresses: [223.5.5.5,223.6.6.6]

重啓網卡

netplan apply

安裝vncserver

apt-get install xrdp
apt-get install virt-manager
apt-get install tightvncserver

使用qemu-img命令創建磁盤鏡像文件

qemu-img create -f qcow2 /root/test.qcow2 20G

使用virt-install命令創建虛擬機

純命令行安裝虛擬機

  • 先上傳需要創建虛擬機的鏡像文件cn_windows_10_business_editions_version_1909_x64_dvd_0ca83907.iso,和軟驅virtio-win-0.1.171_amd64.vfd
virt-install --name win-win10 --ram 2048 --cdrom=/kvm/iso/cn_windows_10_business_editions_version_1909_x64_dvd_0ca83907.iso --disk path=/qcow2/win-win10.qcow2 --disk path=/kvm/iso/virtio-win-0.1.171_amd64.vfd,device=floppy  --network source=enp2s0,source.mode=bridge,type=direct --graphics vnc,password=root,port=5913,listen=0.0.0.0 --noautoconsole --check all=off
  • 更多virt-install 參數使用
virt-install --help
  • 參考
[root@localhost ~]# qemu-img create -f qcow2 /kvm/vfs/vm3.qcow2 20G
[root@localhost ~]# virt-install -n vm3 \     定義虛擬機名
> -r 1024 \         內存大小
> --vcpus 1 \       CPU數量
> -l /kvm/iso/Centos7.iso \      ISO位置
> --disk path=/kvm/vfs/vm3.qcow2,format=qcow2 \      磁盤文件位置及格式
> --graphics vnc,listen=0.0.0.0,port=5924, \         vnc安裝,使用5924端口
> --noautoconsole  \      不要自動嘗試連接到客戶端控制檯
> --accelerate \          提速安裝
> --autostart             引導主機時自動啓動域
[root@localhost ~]# firewall-cmd --add-port=5924/tcp    允許vnc連接

然後可以使用客戶端vnc viewer連接新創建的虛擬機,ip:port,ip爲宿主機ip,端口爲創建虛擬機指定的端口,創建虛擬機沒有指定密碼則無需密碼。亦可使用如下命令查看虛擬機vnc端口

virsh vncdisplay win-win10

安裝Qemu-guest-agent

  1. 先在xml裏配置channel段,然後啓動虛擬機,會在宿主機上生成一個unix socket,同時在vm裏生成一個字符設備,生成的unix socket和字符設備可以理解爲一個channel隧道的兩端

  2. 虛擬機裏要啓動qemu-guest-agent守護進程,該守護進程會監聽字符設備

  3. 然後可以在宿主機上將虛擬機裏的qemu-guest-agent所支持的RPC指令經過channel發送到虛擬機裏,虛擬機裏的qemu-guest-agent從字符設備收到數據後,執行指令,比如讀寫文件、修改密碼等等

  • 在虛擬機的配置文件.xml中添加宿主機和虛擬機通信的通道
virsh edit 虛擬機名字
在<devices>標籤中添加如下信息:

 <channel type='unix'>
      <source mode='bind' path='/tmp/channel.sock'/>
      <target type='virtio' name='org.qemu.guest_agent.0'/>
      <address type='virtio-serial' controller='0' bus='0' port='1'/>
</channel>

然後關閉虛擬機並啓動虛擬機

virsh shutdown VM
virsh start VM
  • 如果虛擬機是Linux,只需安裝qemu-guest-agent
apt-get install qemu-guest-agent
或
yum install qemu-guest-agent
  • Windows
    首先,您必須下載virtio-win驅動程序iso
    下載好wirtio-win手工掛載到虛擬機上
    在這裏插入圖片描述
    進入虛擬機,轉到Windows設備管理器
    查找“ PCI簡單通信控制器”
    右鍵單擊->更新驅動程序,然後選擇目錄爲上面掛載的光驅盤:

進入我的電腦->選擇手工掛載的光驅盤,找到qemu-guest目錄,
雙擊執行安裝程序(qemu-ga-x64.msi(64位)或qemu-ga-x86.msi(32位)
之後,進入服務管理器查看qemu-guest-agent應該已啓動並正在運行。

  • 在宿主機通過指令
virsh qemu-agent-command VM  --cmd '{"execute":"guest-info"}'
可以查看其所有支持的命令

複製虛擬機:

  • 普通複製
virt-clone -o vm -n newvm -f /root/centos7_clone1.qcow2 (新磁盤鏡像)
或者
virt-clone --connect qemu:///system --original vm1 --name vm1-clone --file /vm-images/vm1-clone.qcow2
  • 通過模板複製虛擬機
    安裝完成後,關閉虛擬機
virsh shutdown vm1

將原虛擬機的磁盤鏡像文件copy一份,作爲鏡像模板

cp /kvm/vm/vm1_0.qcow2 /data/kvm/template/tpl.qcow2

使用virsh dumpxml命令獲取虛擬機的配置文件

virsh dumpxml --domain vm1 > /data/kvm/template/tpl.xml

修改tpl.xml中鏡像文件的指定位置爲/data/kvm/template/tpl.qcow2,即我們複製的磁盤鏡像文件的路徑。

<disk type='file' device='disk'>
    <driver name='qemu' type='qcow2'/>
    <source file='/data/kvm/template/tpl.qcow2'/>
    <target dev='vda' bus='virtio'/>
    <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</disk>

刪除tpl.xml中如下四行內容,其中<source …/>是必刪的,其它三行只是爲了避免歧義。

<name>vm1</name>
<uuid>47cdbba1-3551-407d-a03c-90d2a60bfa71</uuid>
<mac address='52:54:00:83:79:76'/>
<source mode='bind' path='/var/lib/libvirt/qemu/channel/target/domain-vm1/org.qemu.guest_agent.0'/>

通過 virt-sysprep 命令處理tpl.qcow2,爲了clone操作可以用於這個鏡像。

virt-sysprep -a /data/kvm/template/tpl.qcow2

這樣,我們的模板文件和模板鏡像就製作好了。其root密碼同vm1的root密碼一致。

[root@localhost /data/kvm/template]# tree .

├── tpl.qcow2
└── tpl.xml

如果直接使用virt-sysprep 來重置鏡像,不加任何其他參數,會把鏡像重置成幾乎是完全新安裝的狀態。其執行的步驟,可以通過list命令查看。

virt-sysprep --list-operations
一些定製的配置,可以通過參數來設置,比如hostname和root密碼。

virt-sysprep -a /data/kvm/template/tpl.qcow2  --hostname localhost --root-password password:testpwd

通過模板創建虛擬機

virt-clone --connect qemu:///system \
  --original-xml /data/kvm/template/tpl.xml \
  --name 虛擬機名字 \
  --file /data/kvm/vm/vm5_0.qcow2 (新的磁盤鏡像)
virt-clone --connect qemu:///system \
  --original-xml /data/kvm/template/tpl.xml \
  --name vm3 \
  --file /data/kvm/vm/vm3_0.qcow2
clone操作會爲新的虛擬機分配新的uuid和mac地址。

定義存儲池

  • 存儲池介紹
    KVM平臺以存儲池的形式對存儲進行統一管理,所謂存儲池可以理解爲本地目錄,通過遠端磁盤陣列(ISCSI,NFS)分配過來磁盤或目錄,當然也支持各類分佈式文件系統。
    存儲池是放置虛擬機存儲的位置,可以是本地,也可以是網絡存儲,具體的虛擬機實例放置在捲上。
    KVM創建的存儲池可以理解爲一種映射關係,即將某一塊掛載至宿主機器上的存儲空間形成可被KVM使用的邏輯存儲池,以方便虛擬主機的管理
  • 定義存儲池
    採用本地目錄方式創建KVM存儲池
  mkdir -p /data/vmfs
  virsh pool-define-as vmfspool --type dir --target /data/vmfs  (定義池 vmfspool)
  virsh pool-build vmfspool  (構建池 vmfspool)

 virsh pool-list --all
 名稱               狀態     自動開始
-------------------------------------------
 vmfspool             不活躍  否       

virsh pool-info vmfspool
名稱:       vmfspool
UUID:           c6d5bd62-3229-4a16-b267-081d943be80a
狀態:       不活躍
持久:       是
自動啓動: 否
  • 設置存儲池自動啓動
virsh pool-autostart vmfspool
  • 啓動存儲池
virsh pool-start vmfspool
  • 查看存儲池信息
名稱:       vmfspool
UUID:           c6d5bd62-3229-4a16-b267-081d943be80a
狀態:       running
持久:       是
自動啓動: 是
容量:       49.98 GiB     #顯示掛載分區總容量
分配:       6.59 GiB      #分區已經使用容量
可用:       43.38 GiB     #可用容量

3、在存儲池創建映像文件,安裝vm
#在存儲池創建一個 testqcow2.img (磁盤映像文件)

virsh vol-create-as vmfspool  test.qcow2 10G --format qcow2
 ll /data/vmfs/
總用量 196
-rw------- 1 root root 197120 10月 26 13:39 oel3_qcow2.img
[root@node71 ~]# 
[root@node71 ~]# virsh vol-info --pool vmfspool /data/vmfs/oel3_qcow2.img
名稱:       oel3_qcow2.img
類型:       文件
容量:       10.00 GiB
分配:       196.00 KiB
  • 存儲池的刪除
virsh pool-destroy vmfspool
virsh pool-undefine vmfspool
virsh pool-delete vmfspool

創建快照

  • 磁盤內部快照( 只支持qcow2格式的鏡像文件)
virsh snapshot-create-as --domain vm --name vm1

查看虛擬機快照列表

virsh snapshot-list --domain vm1

快照回滾

virsh snapshot-revert --domain vm --snapshotname vm1

快照刪除

virsh snapshot-delete --domain vm --snapshotname vm1
  • 磁盤外部快照
    外置磁盤快照創建時,會保存正在使用磁盤作爲backing file(此磁盤不再接受新數據,只保存快照前的數據),並創建一個新的磁盤作爲overlays以等待寫入新數據
    創建
virsh snapshot-create-as --domain vm1 vm1_sn1 --disk-only --diskspec vda,snapshot=external,file=/disk3/vm1_sn.qcow2 --atomic --no-metadata

已生成域快照 vm1_sn1
其中/disk3/vm1_sn.qcow2是新生成的磁盤快照
查看快照列表

virsh snapshot-list vm1
  • 參考文章
    https://www.cnblogs.com/fzxiaomange/p/kvm-inject.html
    https://www.toutiao.com/i6646012291059810823/
    https://www.jianshu.com/p/1f93b724c540
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章