kvm實驗
環境準備,我這里使用虛擬機進行模擬,先設定好虛擬化
進入系統查看是否支持虛擬化
[root@kvm ~]# lsmod |grep kvm
kvm_intel 174841 0
kvm 578518 1 kvm_intel
irqbypass 13503 1 kvm
KVM:Kernel-based Virtual Machine
安裝需要的軟件和下載鏡像:
yum install libvirt virt-install qemu-kvm -y
libvirt 作用:虛擬機的管理軟件
virt virt-install virt-clone 作用:虛擬機的安裝工具和克隆工具
qemu-kvm qemu-img (qcow2,raw)作用:管理虛擬機的虛擬磁盤
自行下載一個centos7的鏡像,我本地有鏡像所以不需要下載
[root@kvm opt]# ll
total 171008
-rw-r--r-- 1 root root 175112192 Nov 25 2018 CentOS-7-x86_64-DVD-1804.iso
因為我的實驗機是最小化安裝的,要想實現圖形化界面需要安裝桌面,如果不想安裝桌面可以下載vnc到windows桌面上待會備用
先啟動一個虛擬機
[root@kvm opt]# 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-1804.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
[root@kvm opt]# ps -ef |grep 5900
root 5151 1940 0 20:46 pts/0 00:00:00 grep --color=auto 5900
命令詳解:
--virt-type kvm 虛擬化的類型(qemu)
--os-type=linux 系統類型
--os-variant rhel7 系統版本
--name centos7 虛擬機的名字
--memory 1024 虛擬機的內存
--vcpus 1 虛擬cpu的核數
--disk /opt/centos2.raw,format=raw,size=10
--cdrom /opt/CentOS-7-x86_64-DVD-1804.iso
--network network=default 使用默認NAT的網絡
--graphics vnc,listen=0.0.0.0 圖形界面用vnc輸出
--noautoconsole
這樣可以直接連接vnc
kvm虛擬機的virsh日常管理和配置命令
列表list(--all)
開機start
關機shutdown
拔電源關機destroy
重命名domrename (低版本不支持)
掛起suspend
恢復resume
查詢vnc端口號vncdisplay
導出配置dumpxml 例子:virsh dumpxml centos7 >centos7-off.xml
刪除undefine 推薦:先destroy,在undefine
導入配置define
修改配置edit(自帶語法檢查)
低版本修改虛擬機名字操作流程
先停掉虛擬機 virsh shutdwon centos7
備份配置文件 virsh dumpxml centos7 >web01.xml
刪除虛擬機 virsh undefine centos7
修改配置文件 vim web01.xml <name>web01</name>,刪掉uuid
導入虛擬機 virsh define web01.xml
虛擬機優化
當虛擬機掛起或者恢復后時間后出現不一致,所以需要做好時間同步
創建虛擬機系統時取消swap節省內存
虛擬機開機自啟
開機啟動autostart,前提:systemctl enable libvirtd;
取消開機啟動autostart --disable
查看哪些虛擬機設置了開機自啟:
當設置了開啟自啟后在/etc/libvirt/qemu/autostart/
下會存在一個軟連接
[root@kvm opt]# ll /etc/libvirt/qemu/autostart/
total 0
lrwxrwxrwx 1 root root 29 Apr 3 22:28 centos7.xml -> /etc/libvirt/qemu/centos7.xml
qemu下命令
查看虛擬磁盤信息
qemu-img info test.qcow2
創建一塊qcow2格式的虛擬硬盤:
qemu-img create -f qcow2 test.qcow2 2G
調整磁盤磁盤容量
qemu-img resize test.qcow2 +20G
把raw格式轉換為qcow2格式
raw: 裸格式,占用空間比較大,不支持快照功能,性能較好,不方便傳輸 總50G 占用2G
qcow2:cow (copy on write)占用空間小,支持快照,性能比raw差一點,方便傳輸 總50G 占用2G
- 1.先關閉要修改的虛擬機web01
virsh destroy web01
- 2.查看虛擬機運行狀態
virsh list --all
- 3.確定關閉后執行轉換命令
qemu-img convert -f raw -O qcow2 /data/web01.raw /data/web01.qcow2
>格式示例qemu-img convert [-f fmt] [-O output_fmt] filename output_filename
- 4.修改web01配置文件
virsh edit web01
[root@oldboy data]# virsh dumpxml web01|grep 'qcow2'
<driver name='qemu' type='qcow2'/>
<source file='/data/web01.qcow2'/>
- 5.重新啟動web01,看是否可正常啟動
virsh start web01
快照
raw不支持做快照,qcow2支持快照,并且快照就保存在qcow2的磁盤文件中
- 創建快照
virsh snapshot-create-as centos7 --name install_ok
--name 指定快照名字
查看快照
virsh snapshot-list centos7
還原快照
virsh snapshot-revert centos7 --snapshotname 1516574134
刪除快照
virsh snapshot-delete centos7 --snapshotname 1516636570
虛擬機克隆
kvm虛擬機:磁盤文件 + 配置文件
- 完整克隆
克隆命令:virt-clone --auto-clone -o web01 -n web02
(完整克隆)
參數解釋:
-o 指定要克隆的機器
-n 被克隆的機器
- kvm鏈接克隆
a.基于源磁盤文件,創建鏈接磁盤文件
qemu-img create -f qcow2 -b web02.qcow2 web03.qcow2
b:生成虛擬機的配置文件
virsh dumpxml web02 >web03.xml
virsh define web03.xml
virsh start web03
c:導入虛擬機并進行啟動測試
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
全自動鏈接克隆方法:強哥博客
kvm虛擬機網絡
默認的虛擬機網絡是NAT模式,網段192.168.122.0/24,但是只能被內網訪問,要想被外網也訪問到,要使用橋接模式
- 默認NAT模式
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 1024 --vcpus 1 --disk /opt/web04.qcow2 --boot hd --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole - 橋接模式
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 1024 --vcpus 1 --disk /data/web04.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
kvm虛擬機實現橋接模式
1:創建橋接網卡
virsh iface-bridge eth0 br0
在使用此命令后會生成新的網卡信息,原eth0網卡信息也同時變更
取消橋接網卡
virsh iface-unbridge br0
2:測試虛擬機網絡
創建一臺使用橋接模式的虛擬機進行測試是否可以正常連接外網
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name test --memory 1024 --vcpus 1 --disk /data/test.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
修改已創建的虛擬機的網絡模式,需要修改配置文件內的網絡類型記名稱
virsh edit centos7
<interface type='bridge'>
<mac address='52:54:00:55:aa:fa'/>
<source bridge='br0'/>
在宿主機上,重啟虛擬機生效
熱添加技術
kvm虛擬機在線熱添加硬盤
先創建一塊準備添加的硬盤
qemu-img create -f qcow2 add01.qcow2 5G
臨時生效
virsh attach-disk centos7 /data/centos7-add01.qcow2 vdb --subdriver=qcow2
永久生效
virsh attach-disk centos7 /data/centos7-add01.qcow2 vdb --subdriver qcow2 --config
作業3:擴容kvm虛擬機的根分區
kvm虛擬機在線熱添加網卡
kvm虛擬機在線熱添加內存
kvm虛擬機在線熱添加cpu
虛擬機磁盤擴容:
在kvm虛擬機,卸載
virsh detach-disk centos7 vdb
qemu-img resize /data/centos7-add01.qcow2 +5G
virsh attach-disk centos7 /data/centos7-add01.qcow2 vdb --live --cache=none --subdriver=qcow2
在虛擬機中:xfs_growfs /dev/vdb
根分區擴容:
1)在宿主機上關閉虛擬機并調整虛擬機磁盤大小
qemu-img resize oldboy.qcow2 +10G
2)虛擬機中fdisk重新分區
fdisk /dev/vda
3)重啟之后,執行xfs_growfs /dev/vda1,
如果虛擬機磁盤文件系統是ext4:resize2fs /dev/vda1
kvm虛擬機在線熱添加網卡
virsh attach-interface web04 --type bridge --source br0 --model virtio
detach-interface web04 --type bridge --mac 52:54:00:35:d3:71
kvm虛擬機在線熱添加內存
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
臨時熱添加內存
setmem web04 1024M --live
永久增大內存
setmem web04 1024M --config
kvm虛擬機在線熱添加cpu
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核數
setvcpus web04 4 --live
永久添加cpu核數
setvcpus web04 4 --config
11:virt-manager和kvm虛擬機熱遷移(共享的網絡文件系統)
冷遷移kvm虛擬機:配置文件,磁盤文件
熱遷移kvm虛擬機:配置文件,nfs共享
1):
yum groupinstall "GNOME Desktop" -y
yum install openssh-askpass -y
yum install tigervnc-server -y
vncpasswd
vncserver :1
vncserver -kill :1
2):kvm虛擬機熱遷移
1:兩邊的環境(橋接網卡)
2:實現共享存儲(nfs)
3:虛擬機橋接網絡
4:在線熱遷移