KVM虛擬化


KVM虛擬化


## [1、 kvm虛擬化管理軟件的安裝](#1) ## ## [2、安裝一台KVM虛擬機](#2) ## ## [3、虛擬機virsh的日常管理和配置](#3) ## ## [4、KVM虛擬機開機自啟和console控制台登錄](#4) ## ## [5、kvm虛擬磁盤創建及格式轉換](#5) ## ## [6、快照管理](#6) ## ## [7、KVM虛擬機克隆](#7) ## ## [8、kvm虛擬機的橋接網絡](#8) ## ## [9、熱添加技術](#9) ## ## [10、KVM熱遷移](#10) ##

**KVM全稱:Kernel-based Virtual Machine ( 基於內核的虛擬機 ) **

前提:

1. 查看是否開啟CPU虛擬化
	在宿主機下輸入: dmesg | grep kvm,輸出為:kvm: no hardware support 表示未開啟CPU虛擬化,需要在物理	機上打鈎,即執行步驟2
	
2. 在關機狀態下,啟用cpu虛擬化
	編輯虛擬機設置 --> 處理器 --> 將  虛擬化Inter VT -xEPT 或 AMD-V/RVI(V)  選項打鈎
	
3. 開啟CPU虛擬化服務
	開啟:modprobe kvm
	檢查:cat /proc/cpuinfo |grep vmx		# 查看是否有“vmx”,有則表示開啟成功
	
4. 加載KVM內核模塊
	執行:modprobe kvm-intel
	檢查:lsmod | grep kvm
	結果如下,則表示加載成功:
		[root@kvm ~]# lsmod | grep kvm
         kvm_intel             183737  0
         kvm                   615914  1 kvm_intel
         irqbypass              13503  1 kvm

1、 kvm虛擬化管理軟件的安裝

yum install libvirt virt-install qemu-kvm -y

安裝說明:
	libvirt:虛擬機的管理軟件,可以管理KVM、xen、qemu、lxc...
	virt-instal: 虛擬機的安裝工具和克隆工具
	qemu-kvm  qemu-img (qcow2,raw):管理虛擬機的虛擬磁盤

各種虛擬化軟件:
	qemu      軟件純模擬全虛擬化軟件,特別慢!AIX,兼容性好!
	xen(半)   性能特別好,需要使用專門修改之后的內核,兼容性差!  redhat 5.5  xen
	KVM(linux)    全虛擬機,它有硬件支持cpu,基於內核,而且不需要使用專門的內核,性能較好,兼容較好

2、安裝一台KVM虛擬機

准備:

本地:分發軟件TightVNC或者VNC Viewer 4.exe
宿主機: vnc 遠程的桌面管理工具		# 宿主機就是虛擬機所依賴的主機,我的宿主機IP:10.0.0.200

啟動虛擬機管理軟件 :systemctl start libvirtd.service

啟動:systemctl start libvirtd.service
停止:systemctl stop libvirtd.service
查看:systemctl status libvirtd.service
開機自啟動:systemctl enable libvirtd.service

上傳鏡像:

/opt/CentOS-7-x86_64-DVD-1810.iso	
### 這是我設置的路徑,其他路徑也可以,但建議不要放在root下,防止訪問時權限不夠而出現 Permission denied

安裝KVM:( 建議虛擬機內存不要低於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-x86_64-DVD-1810.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole

參數說明:
	--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-1810.iso 	光驅路徑/鏡像路徑(根據實際鏡像路徑配置)
	--network network=default   使用默認NAT的網絡	使用宿主機IP
	--graphics vnc,listen=0.0.0.0 	
	--noautoconsole
	
磁盤格式:
	raw: 不支持做快照,性能好
	qcow2:   支持快照
	
安裝一台KVM虛擬機相當於創建2個文件:
	磁盤文件:--disk /opt/centos2.raw,format=raw,size=10	硬盤位置,存儲格式,硬盤大小
	配置文件:/etc/libvirt/qemu/虛擬機名.xml
  • 安裝成功標志:

    Starting install...
    Allocating 'centos2.raw'                                                                                                      |  10 GB  00:00:00
    Domain installation still in progress. You can reconnect to
    the console to complete the installation process.
    
  • 安裝過程如果報錯如下:

    ERROR    Network not found: no network with matching name 'default'
    Removing disk 'centos2.raw'                                                                                                   |    0 B  00:00:00
    Domain installation does not appear to have been successful.
    If it was, you can restart your domain by running:
      virsh --connect qemu:///system start centos7
    otherwise, please restart your installation.
    

    則表示找不到默認網絡配置文件,解決辦法:https://wiki.libvirt.org/page/Networking

    安裝成功后,使用VNC連接,10.0.0.200:5900(vnc默認端口為5900)

系統安裝:

​ 連接成功后,使用上下鍵選擇 Install Centos7,回車,開始系統安裝!

系統語言使用默認英文,無需改變,直接下一步

①、配置 DATE & TIME:

②、配置 Kdump:

Kdump是個內核奔潰備份機制,需要占用內存

這里顯示要占用160M,如果給虛擬機分配的內存很大,則可以勾選,否則不建議勾選:

③、選擇網絡和主機 (network & host name)

④、選擇分區(Installation Destination)

然后點擊 Installation 開始安裝,安裝過程中必須設置 root 密碼

總結:

一、語言:
	選擇默認(英語)
二、系統配置:
    1、修改時區
    2、關閉Kdump
    3、網卡開機啟動
    4、手動分區:只要一個標准根分區
三、開始安裝:
	設置root密碼
四、安裝完成點擊reboot重啟	


3、虛擬機virsh的日常管理和配置

-列表 list(--all)
	virsh list : 只列出正在運行的虛擬機
	virsh list --all : 列出所有虛擬機
	
-開機 start
	virsh start 虛擬機名
	
-關機 shutdown
	virsh shutdown 虛擬機名
	
-拔電源關機 destroy
	virsh destroy 虛擬機名
	
-刪除 define
	virsh undeine 虛擬機名
	推薦:先destroy,在undefine
	
-導出配置dumpxml(默認導出是xml格式文件)
	eg:virsh dumpxml centos7 >centos7-off.xml
	
-導入配置define
	eg:virsh define centos7-off.xml
	
-重命名 domrename (低版本不支持)
	virsh domrename 虛擬機名
	
-掛起 suspend
	virsh suspend 虛擬機名
	
-恢復掛起 resume
	virsh resume 虛擬機名
	
-查詢vnc端口號 vncdisplay	(默認第一個虛擬機端口是0,第二個是1,第三個是2,...一次類推)
	virsh vncdisplay 虛擬機名
	

4、KVM虛擬機開機自啟和console控制台登錄

  • 設置開機啟動:
前提:將libvirtd服務設置為開機啟動	systemctl enable libvirtd.service

KVM開機啟動:virsh autostart 虛擬機名
取消開機啟動:virsh autostart --disable 虛擬機名

ps:
    1、設置開啟動后會在  /etc/libvirt/qemu/ 下生成一個autostart文件夾
    2、在autostart下會生成一個軟連接:虛擬機名.xml 指向配置文件
    	centos7.xml -> /etc/libvirt/qemu/centos7.xml
    3、我們也可以為虛擬機手動創建一個指向該虛擬機配置文件的軟連接,使得該虛擬機可以開機自啟
    	ln -s /etc/libvirt/qemu/web01.xml /etc/libvirt/qemu/autostart/
    

  • 設置console控制台登錄:
在虛擬機上執行以下命令來開啟console登錄:(宿主機無需做修改)
	grubby --update-kernel=ALL --args="console=ttyS0,115200n8"		# 修改內核參數
	reboot

	在虛擬機上進行修改時,需要手動輸入上述命令,或者vim 編輯 /boot/grub2/grub.cfg 文件,100行左右
	此時虛擬機是無法進行粘貼輔助,我們可以通過宿主機ssh到虛擬機,然后進行修改(ip a 進行查看虛擬機ip)
	ssh 虛擬機ip
	

在虛擬機上進行修改時,需要手動輸入上述命令,或者vim 編輯 /boot/grub2/grub.cfg 文件,100行左右,此時虛擬機 是無法進行粘貼輔助,我們可以通過宿主機ssh到虛擬機,然后進行修改(ip a 進行查看虛擬機ip),如下:

[root@kvm autostart]# ssh 192.168.122.235
The authenticity of host '192.168.122.235 (192.168.122.235)' can't be established.
ECDSA key fingerprint is SHA256:WS7XFnasPFwRohib6B+m7V6z9+5Pkh5IaornITRGGWo.
ECDSA key fingerprint is MD5:7a:9c:33:0e:ab:c1:a0:2f:d3:a9:96:71:d6:c1:c6:79.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.122.235' (ECDSA) to the list of known hosts.
root@192.168.122.235's password:
Last login: Sat Jun  8 17:42:58 2019
[root@localhost ~]#
[root@localhost ~]# grubby --update-kernel=ALL --args="console=ttyS0,115200n8"
[root@localhost ~]#
[root@localhost ~]# reboot
Connection to 192.168.122.235 closed by remote host.
Connection to 192.168.122.235 closed.

  • 設置成功后,在宿主機上通過命令登錄虛擬機 :

    virsh console 虛擬機名


5、kvm虛擬磁盤創建及格式轉換

查看磁盤信息:qemu-img info 磁盤名

2種磁盤格式比較:

raw:裸格式,占用空間比較大,不支持快照功能,性能較好,不方便傳輸          總50G 占用2G,但傳輸還是要傳50G
qcow2:占用空間小,支持快照,性能比raw差一點,方便傳輸  總50G 占用2G,傳輸只傳2G

qcow2全稱:
	q:qemu
    cow:copy on write	寫時復制(用多少,分配多少)

創建一塊qcow2格式的虛擬硬盤:

創建一塊qcow2格式的虛擬硬盤:
	qemu-img create -f qcow2 centos2.qcow2 10G
		-f qcow2  :  聲明創建的磁盤文件格式為qcow2格式,如果不寫,則默認創建raw格式的磁盤文件
		10G : 聲明創建的磁盤文件的大小

磁盤擴容:磁盤容量只能擴容,不能縮減,縮減很有可能會丟失數據

qemu-img resize /data/centos2.qcow2 +20G
    +20G: 從原來的容量上增加20G
    20G:將容量擴容到20G,不加"+"表示擴容到x,這里的x要大於原本容量

磁盤格式轉換

qemu-img  convert 	-f raw   	-O qcow2    	oldboy.raw   oldboy.qcow2					

		 convert 	[-f fmt]   [-O output_fmt]    filename     output_filename
		 轉換			原格式		輸出格式		源文件路徑     輸出文件路徑
# 上述命令執行完成后,相當於轉換成了一個新格式的磁盤文件,源文件並沒有動,(相當於我們將word轉換成pdf,會新	產	生一個文件)
# 此時,KVM使用的還是原來的磁盤文件,我們需要修改配置文件的磁盤信息(修改配置信息,在關機狀態下修改)
    virsh destroy web01

    virsh edit web01:

    <disk type='file' device='disk'>
    <driver name='qemu' type='qcow2'/>		# 將文件格式由raw修改為qcow2
    <source file='/opt/centos.qcow2'/>			# 將文件路徑修改為轉換后的文件路徑
    <target dev='vda' bus='virtio'/>
    <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
    </disk>

    virsh start web01	

6、快照管理

創建快照virsh snapshot-create centos7	(這種方式創建的快照,以當前的時間戳作為快照名)
自定義快照名創建快照:virsh snapshot-create-as --name 快照名 centos7
查看快照virsh snapshot-list centos7
還原快照virsh snapshot-revert centos7 --snapshotname 快照名
刪除快照virsh snapshot-delete centos7 --snapshotname 快照名
1、raw不支持做快照,qcow2支持快照,並且快照就保存在qcow2的磁盤文件中
2、由於qcow2屬於用多少空間,分配多少,但當我們把快照刪除后,分配給快照的空間不會自動回收
3、如果要回收空余的空間,可使用:
	qemu-img	convert -c -f qcow2 -O qcow2 oldboy.qcow2  oldboy.qcow2			# -c 表示壓縮

7、KVM虛擬機克隆

  • 完整克隆

    virt-clone --auto-clone -o web01 -n web02	# 必須在關機或掛起狀態進行克隆,否則會報錯
    
  • 鏈接克隆(依賴基礎磁盤文件,把變化的內容保存在一個新的qcow2文件中)

    a:生成虛擬機磁盤文件
    	qemu-img create -f qcow2 -b /data/centos2.qcow2 /data/centos3.qcow2	# -b表示創建的是鏈接磁盤
    
    b:生成虛擬機的配置文件
    	b1:先復制一份虛擬機的配置文件
    		cp /etc/libvirtd/qemu/centos7.xml /etc/libvirtd/qemu/centos7_link.xml
    	b2: 修改配置
        <name>49-web03</name>		# 修改name
        <uuid>8e505e25-5175-46ab-a9f6-feaa096daaa4</uuid>			# 刪除掉uuid,重啟會自動生成
        <source file='/opt/49-web03.qcow2'/>		#修改路徑
        <mac address='52:54:00:4e:5b:89'/>		# 刪除mac地址,重啟會自動生成
        
    c:導入虛擬機並進行啟動測試
    	導入:virsh define /etc/libvirtd/qemu/centos7_link.xml
    	啟動:virsh start 虛擬機名    #這里的虛擬機名是我們在配置文件中修改name后的名稱
    	
    ps:
    	寫一個腳本,實現自動化鏈接克隆
    

8、kvm虛擬機的橋接網絡

檢查虛擬機網絡狀況,是否能上網?

從虛擬機ping外網:ping baidu.com ,發現不通
從宿主機ping外網:可以通

總結:當虛擬機將數據包轉發給宿主機時,宿主機沒有轉發到外網,說明宿主機沒有開啟內核轉發參數
解決:開啟內核轉發參數即可
    開啟:sysctl net.ipv4.ip_forward = 1
    關閉:sysctl net.ipv4.ip_forward = 0

為什么要為虛擬機創建橋接網絡?

  1. 當我們通過外網訪問虛擬機時,時無法直接訪問的,需要做端口映射
  2. 當虛擬機數量較大時,端口映射的方式也不適合,所以需要用到橋接網絡,使得可以通過外網直接訪問虛擬機

設置橋接網絡

創建橋接網卡(創建完成后建議重啟網卡)
	virsh iface-bridge eth0 br0			# 取消橋接網卡 virsh iface-unbridge br0

  • 新建橋接網絡的虛擬機
1、創建鏈接磁盤:
	qemu-img create -f qcow2 -b /data/server1.qcow2 /data/server2.qcow2
	
2、安裝虛擬機:
	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

3、檢查
	查看虛擬機ip是否是dhcp動態分配的ip,如果是,則表示創建成功!
	
ps: 如果 ping 不通 dhcp 的網關,建議重啟網卡:systemctl restart network=-0	(不行就多重啟幾次網卡)

  • 將nat模式的虛擬機修改為橋接模式
1、修改配置文件:
    <interface type='bridge'>		# 將原來的type='network' 改為 type='bridge'
    <mac address='52:54:00:55:aa:fa'/>
    <source bridge='br0'/>			# 將原來的network='default' 改為 bridge='br0'
    
2、在宿主機上,重啟虛擬機生效
	virsh destroy 虛擬機名		# 線上環境建議使用shutdown平滑關機
	virsh start 虛擬機名
	
3、檢查
	查看虛擬機ip是否是dhcp動態分配的ip,如果是,則表示創建成功!
	
ps: 如果 ping 不通 dhcp 的網關,建議重啟網卡:systemctl restart network=-0	(不行就多重啟幾次網卡)

9、熱添加技術

KVM熱添加硬盤

1、宿主機-創建一塊硬盤
	qemu-img create -f qcow2 /data/server1_add.qcow2 10G
	
2、宿主機-添加硬盤到虛擬機	(臨時和永久都執行)
	臨時生效
		virsh  attach-disk server1 /data/server1_add.qcow2 vdb --subdriver qcow2 
	永久生效
		virsh  attach-disk server1 /data/server1_add.qcow2 vdb --subdriver qcow2 --config
	參數說明:
		attach-disk:添加硬盤
		web04:虛擬機名 (要指定給哪台虛擬機添加硬盤)
		/opt/oldboy.qcow2:要添加的磁盤路徑  (這塊磁盤要事先創建好,所以第1步便是創建硬盤)
		vdb:盤符名稱 (通過 fdisk -l 命令查看虛擬機已存在的盤符,新添加的盤符不能和已存在的相同)
		--subdriver qcow2 : 指定所添加的盤符類型為qcow2格式,不指定則默認添加的是raw格式
	
3、虛擬機-格式化硬盤
	mkfs.xfs /dev/vdb		# 格式化dev下的vdb盤

4、虛擬機-掛載
	mount /dev/vdb	/mnt
5、虛擬機-查看
	df -h
6、虛擬機-測試往里面寫東西
	cp /etc/service /mnt

  • KVM擴容硬盤

    1、虛擬機-卸載盤符	(保證其他人不能再往該盤符寫內容)
    	umount /mnt
    	
    2、宿主機-剝離硬盤
    	virsh detach-disk server1 vdb		# 剝離硬盤	虛擬機名  盤符名稱		
    
    3、宿主機-擴容硬盤
    	qemu-img resize /data/server1_add.qcow2 +20G
    
    4、宿主機-添加硬盤到虛擬機	(臨時和永久都執行)
    	臨時生效(立即生效即可,因為該盤符本來就存在,無需永久生效)
    		virsh  attach-disk server1 /data/server1_add.qcow2 vdb --subdriver qcow2 
    		
    5、虛擬機-掛載盤符	(擴容不能格式化硬盤,否則原本的數據會丟失)
    	mount /dev/vdb	/mnt
    	
    	但此時我們用df -h 查看磁盤空間,發現vdb還是原本的大小,並沒有擴容。原因是該盤符在最初被創建、格式化的時候,系統會分配Inode和block,此時該盤符所剩余的空間已經確定了。當我們進行擴容后,該盤符的信息還是最初格式化時的信息,所以該盤符能管理的空間還是原本大小,Inode和block沒有改變。所以vdb還是原本的大小。為了解決上述問題,系統提供了一個命令:xfs_growfs	,用來重新調整 Inode 和 block,見步驟6
    
    6、重新調整盤符的 Inode 和 block
    	xfs_growfs /dev/vdb		# 也可以將 /dev/vdb 換成 /mnt
    

  • 重新調整盤符的 Inode 和 block

    在上面我們使用 xfs_growfs 來調整符的 Inode 和 block,這是因為該盤符的文件系統是 xfs

    查看盤符的文件系統類型;
    [root@localhost ~]# df -Th
    Filesystem     Type      Size  Used Avail Use% Mounted on
    /dev/vda1      xfs        10G  1.1G  9.0G  11% /
    devtmpfs       devtmpfs  486M     0  486M   0% /dev
    tmpfs          tmpfs     496M     0  496M   0% /dev/shm
    tmpfs          tmpfs     496M  6.7M  489M   2% /run
    tmpfs          tmpfs     496M     0  496M   0% /sys/fs/cgroup
    tmpfs          tmpfs     100M     0  100M   0% /run/user/0
    /dev/vdb       xfs        30G   34M   30G   1% /mnt
    

    但如果是盤符的文件系統類型是 ex4、ext3、ext2, 我們擴容完成后,使用 resize2fs來調整盤符的 Inode 和 block


KVM在線熱添加網卡

1、添加網卡
	virsh attach-interface server1 bridge br0 --config  	# 網卡名以ens開頭
	virsh attach-interface server1 bridge br0 --model virtio	# 網卡名以eth開頭
        參數說明:
        attach-interface:添加接口/網卡
        server1:虛擬機名
        bridge:網卡類型
        br0:網卡源,基於宿主機的哪個網卡創建
        --config:將添加的網卡信息寫入配置文件
        --model: 添加的網卡名以eth開頭,將網卡信息寫入配置文件,並自動啟動該網卡
			
2、剝離網卡
	virsh detach-interface server1 bridge --mac 52:54:00:b7:6a:37
	ps:
		如果相同類型的網卡只有一塊,則無需加 --mac區分

KVM在線熱添加內存

前提:該內存是可以被擴容,即總最大內存比當前內存大,如下:
	可以擴容:
        <memory unit='KiB'>2097152</memory>
        <currentMemory unit='KiB'>524288</currentMemory>

	不可擴容:		
        <memory unit='KiB'>1048576</memory>
        <currentMemory unit='KiB'>1048576</currentMemory>
1、創建內存可擴容的虛擬機
	virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name server3 --memory 512,maxmemory=2048 --vcpus 1 --disk /data/server3.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
	#1、這里新增了參數:maxmemory=2048
	#2、虛擬磁盤需要提前創建好:
        	qemu-img create -f qcow2 -b /data/server1.qcow2 /data/server3.qcow2
		
2、設置內存		
    臨時熱添加內存
    virsh setmem server3 1024M --live
    永久增大內存
    virsh setmem server3 1024M --config
        參數說明:
            setmem	:設置內存,既可以擴容內存,也可以縮減內存
            server3	:虛擬機名
            1024M	:設置內存大小 

KVM在線熱添加cpu

1、創建內存可擴容的虛擬機
	virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name server4 --memory 512,maxmemory=2048 --vcpus 1,maxvcpus=10 --disk /data/server4.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
    #1、這里新增了參數:maxvcpus=10
    #2、虛擬磁盤需要提前創建好:
    	qemu-img create -f qcow2 -b /data/server1.qcow2 /data/server3.qcow2
    #3、通過 lscpu 查看CPU數量	
 
 2、設置cpu核數
 	臨時加cpu核數
	virsh setvcpus server4 8 --live
	永久添加cpu核數
	virsh setvcpus server4 8 --config

10、KVM熱遷移

詳情見:https://www.qstack.com.cn/archives/368.html

注意:需要互相做好host解析

[root@nfs01 data]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.0.11 kvm01
10.0.0.12 kvm02
10.0.0.21 nfs21


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM