案例1:安裝一個KVM服務器 案例2:KVM平臺構建及簡單管理 案例3:virsh基本管理操做 案例4:xml配置文件的應用 案例5:爲虛擬機制做快照備份 案例6:快建新虛擬機
1 案例1:安裝一個KVM服務器
1.1 問題前端
本例要求準備一臺 RHEL7.2 服務器,將其搭建爲KVM平臺,主要完成下列操做:node
關閉本機的SELinux保護、防火牆服務 掛載RHEL7光盤到 /mnt/dvd,將其配置爲本機YUM源(baseurl = file:///mnt/dvd) 安裝KVM相關包組,確保已啓用 libvirtd 服務
1.2 方案linux
RHEL7中的虛擬化服務軟件組:vim
虛擬化平臺 —— "Virtualization Platform" 虛擬化主機 —— "Virtualization Host" 虛擬化客戶端 —— "Virtualization Client"
另外須要注意,yum命令的軟件組管理操做與RHEL6有些小變化:服務器
yum groups list [hidden] [組名]... yum groups info [組名]... yum groups install [組名]... yum groups remove [組名]...
1.3 步驟網絡
實現此案例須要按照以下步驟進行。dom
步驟一:配置本地yum倉庫ssh
在光驅中插入RHEL7.2的系統光盤(如果虛擬機則鏈接相應ISO文件),而後在系統中將光盤掛載到/mnt目錄。socket
[root@kvmsvr ~]# mkdir /mnt/dvd //建立掛載點 [root@kvmsvr ~]# vim /etc/fstab //添加開機掛載配置 .. .. /dev/cdrom /mnt/dvd iso9660 ro 0 0 [root@kvmsvr ~]# mount -a //根據fstab配置掛載光盤 mount: /dev/sr0 is write-protected, mounting read-only
2)確認/mnt/dvd訪問點ide
[root@kvmsvr ~]# ls /mnt/dvd/Packages/*.rpm //確認軟件包位置 .. .. /mnt/Packages/zsh-5.0.2-14.el7.x86_64.rpm /mnt/Packages/zziplib-0.13.62-5.el7.i686.rpm /mnt/Packages/zziplib-0.13.62-5.el7.x86_64.rpm
3)將本地目錄/mnt/dvd配置爲本機的yum源
[root@kvmsvr ~]# yum-config-manager --add-repo file:///mnt/dvd //添加源 .. .. [root@kvmsvr ~]# vim /etc/yum.repos.d/mnt_dvd.repo [mnt_dvd] name=added from: file:///mnt/dvd baseurl=file:///mnt/dvd enabled=1 gpgcheck=0 //禁止GPG檢查 [root@kvmsvr ~]# yum repolist //列出可用倉庫 mnt_dvd | 4.1 kB 00:00 (1/2): mnt_dvd/group_gz | 136 kB 00:00 (2/2): mnt_dvd/primary_db | 3.6 MB 00:00 repo id repo name status mnt_dvd added from: file:///mnt/dvd 4620 repolist: 4620
步驟二:確認RHEL7中的虛擬化軟件組
1)安裝兼容組信息
[root@kvmsvr ~]# yum groups mark convert .. .. There is no installed groups file. Maybe run: yum groups mark convert (see man yum) Converted old style groups to objects.
2)查看所有軟件組,過濾出與虛擬化相關的軟件組
[root@kvmsvr ~]# yum groups list hidden| grep -i virt Virtualization Host Virtualization Client Virtualization Hypervisor Virtualization Tools Virtualization Platform
其中主要的KVM軟件組包括Virtualization Host、Virtualization Client、Virtualization Platform,其餘兩個組會因爲依賴關係自動被關聯。
步驟三:安裝KVM虛擬化
1)安裝主要KVM軟件組
[root@pc207 ~]# yum -y groups install "Virtualization Host" "Virtualization Client" "Virtualization Platform" .. ..
2)確保libvirtd服務可用
[root@kvmsvr ~]# systemctl restart libvirtd [root@kvmsvr ~]# systemctl enable libvirtd
3)確保虛擬系統管理器(virt-manager)可用
在KVM服務器的桌面環境中,能夠經過「應用程序」菜單組找到「系統工具」-->「虛擬系統管理器」快捷方式(如圖-1所示)。
圖-1
單擊能夠成功開啓KVM管理工具(如圖-2所示),能夠看到尚未任何虛擬機。
圖-2
2 案例2:KVM平臺構建及簡單管理
2.1 問題
本例要求在真實KVM服務器上完成如下任務:
新建一個名爲 rhel7.2 的虛擬機,併爲其安裝好操做系統(注意禁用SELinux機制、禁用防火牆) 將虛擬機 rhel7.2 克隆爲 rhel7-c1 開啓虛擬機 rhel7-c1 ,以 root 用戶登入到系統 完全刪除虛擬機 rhel7-c1
2.2 方案
使用KVM提供的virt-manager圖形化管理程序來操做。
2.3 步驟
實現此案例須要按照以下步驟進行。
步驟一:新建名爲rhel7.2的虛擬機
1)在「虛擬系統管理器」中單擊左上方「建立新虛擬機」按鈕(如圖-3所示)。
圖-3
2)彈出「新建虛擬機」嚮導,選擇「本地安裝介質」(如圖-4所示),單擊「前進」。
圖-4
3)接下來「定位安裝介質」,請正確指定RHEL7系統的ISO光盤鏡像文件位置(如圖-5所示),確認自動識別到操做系統類型,單擊「前進」。
圖-5
4)選擇內存和CPU設置,建議爲虛擬機分配內存不小於1024MB(如圖-6所示),單擊「前進」。
圖-6
5)爲虛擬機啓用存儲,例如分配一個40GiB的磁盤(如圖-7所示),單擊「前進」。
圖-7
6)爲虛擬機命名,設爲rhel7.2(如圖-8所示),單擊「完成」。
圖-8
步驟二:爲虛擬機rhel7.2安裝操做系統
1)確認新虛擬機從光盤引導
上述設置所有完成後,將會自動開啓新虛擬機,並進入安裝過程(如圖-9所示)。
圖-9
2)完成後續手動安裝過程
具體過程與普通安裝相同,注意禁用防火牆、禁用SELinux機制。
3)確認安裝結果
新裝的虛擬機rhel7.2能夠正常啓動、登陸。
在「虛擬系統管理器」中也可以看到此虛擬機(如圖-10所示)。
圖-10
步驟三:克隆虛擬機並驗證
1)將被克隆的虛擬機rhel7.2關機
右擊選中的虛擬機rhel7.2,選擇「關機」-->「強制關機」(如圖-11所示),根據提示確認便可。
圖-11
2)執行克隆操做
右擊已關閉的虛擬機rhel7.2,選擇「克隆」,在彈出對話框中指定名稱,確認默認設置(如圖-12所示),而後單擊右下角的「克隆」按鈕完成操做。
圖-12
3)確認克隆結果
新克隆的虛擬機rhel7.2-c1能夠正常啓動、登陸,能夠獨立運行。
在「虛擬系統管理器」中也可以看到此虛擬機(圖-13所示)。
圖-13
步驟四:刪除指定的虛擬機
1)刪除虛擬機rhel7.2-c1
將虛擬機rhel7.2-c1關機,右擊選擇「刪除」,在彈出窗口中根據須要確認是否刪除虛擬機的磁盤,單擊右下角的「刪除」按鈕便可(如圖-14所示)。
圖-14
2)確認刪除結果
在「虛擬系統管理器」界面中,虛擬機rhel7.2-c1已經沒有了(如圖-15所示)。
圖-15
3 案例3:virsh基本管理操做
3.1 問題
本例要求學會使用virsh命令管理KVM虛擬機,主要完成下列任務:
查看當前KVM服務器的內存/CPU 列出有哪些虛擬機、查看各虛擬機的狀態 啓動/重啓/關機/強制關機操做 設置虛擬機開機自動運行
3.2 方案
virsh命令提供了用來管理各虛擬機的命令接口,支持交互模式,能夠實現對虛擬機的查看/建立/中止/關閉等各類操做。
用法參考:
virsh 控制指令 [虛擬機名稱] [參數]
3.3 步驟
實現此案例須要按照以下步驟進行。
步驟一:查看KVM服務器及虛擬機信息
1)查看KVM服務器節點
[root@kvmsvr ~]# virsh nodeinfo CPU 型號: x86_64 CPU: 4 CPU 頻率: 2600 MHz CPU socket: 1 每一個 socket 的內核數: 4 每一個內核的線程數: 1 NUMA 單元: 1 內存大小: 16230564 KiB
2)列出有哪些虛擬機(包括未開啓的)及各自的狀態
[root@kvmsvr ~]# virsh list --all Id Name State ---------------------------------------------------- - rhel7.2 shut off
3)查看指定虛擬機rhel7.2的配置摘要信息
[root@kvmsvr ~]# virsh dominfo rhel7.2 Id: - Name: rhel7.2 UUID: 207a2b25-fd0f-436e-81ae-ad0fa8861315 OS Type: hvm State: shut off CPU(s): 1 Max memory: 1000448 KiB Used memory: 0 KiB Persistent: yes Autostart: disable Managed save: no Security model: selinux Security DOI: 0
步驟二:虛擬機開關機操做
1)將虛擬機rhel7.2開啓
[root@kvmsvr ~]# virsh start rhel7.2 //開機 Domain rhel7.2 started [root@kvmsvr ~]# virsh list //檢查結果 Id Name State ---------------------------------------------------- 5 rhel7.2 running
2)將虛擬機rhel7.2關機
[root@kvmsvr ~]# virsh shutdown rhel7.2 //關機 Domain rhel7.2 is being shutdown .. .. //稍等片刻 [root@kvmsvr ~]# virsh list --all //檢查結果 Id Name State ---------------------------------------------------- - rhel7.2 shut off
3)將虛擬機rhel7.2強制關機(shutdown無效時適用)
[root@kvmsvr ~]# virsh destroy rhel7.2 //強制關機 Domain rhel7.2 destroyed [root@kvmsvr ~]# virsh list --all //檢查結果 Id Name State ---------------------------------------------------- - rhel7.2 shut off
步驟三:虛擬機自啓設置
1)將虛擬機rel7.2設爲自動啓動
[root@kvmsvr ~]# virsh autostart rhel7.2 //設置自啓動 Domain rhel7.2 marked as autostarted [root@kvmsvr ~]# virsh dominfo rhel7.2 //確認結果 Id: - Name: rhel7.2 .. .. Autostart: enable .. ..
2)將虛擬機rel7.2取消自動啓動
[root@kvmsvr ~]# virsh autostart --disable rhel7.2 //取消自啓動 Domain rhel7.2 unmarked as autostarted [root@kvmsvr ~]# virsh dominfo rhel7.2 //確認結果 Id: - Name: rhel7.2 .. .. Autostart: disable .. ..
4 案例4:xml配置文件的應用
4.1 問題
本例要求在KVM服務器上經過使用xml文件完成下列任務:
將虛擬機 rhel7.2 更名爲 rhel-207 將虛擬機 rhel-207 複製爲 rhel-7 上述虛擬機的CPU/內存/網絡類型保持不變 但這2個虛擬機有可能會同時運行,不該出現衝突
4.2 方案
KVM虛擬機的xml配置文件也就是一般所說的虛擬機的描述文件,主要用來定義一個虛擬機的名稱、UUID、CPU、內存、虛擬磁盤、網卡等各類參數設置。
KVM虛擬機的xml配置文件默認位於: /etc/libvirt/qemu/虛擬機名.xml 。
修改虛擬機配置的基本思路:
編輯虛擬機配置:virsh edit 虛擬機名 根據須要修改,保存配置結果
4.3 步驟
實現此案例須要按照以下步驟進行。
步驟一:將虛擬機rhel7.2更名爲rhel-207
1)生成新的UUID字串,並複製備用
[root@kvmsvr ~]# uuidgen 76d5dc2c-5eef-4e30-8b6c-e58851814f84
2)編輯虛擬機rhel7.2的配置
調整name、uuid值,保存修改:
[root@kvmsvr ~]# virsh edit rhel7.2 <domain type='kvm'> <name>rhel-207</name> //新名稱 <uuid>76d5dc2c-5eef-4e30-8b6c-e58851814f84</uuid> //新UUID值 .. ..
3)確認已自動導入的新配置
[root@kvmsvr ~]# virsh list --all Id Name State ---------------------------------------------------- - rhel-207 shut off //新名稱的虛擬機 - rhel7.2 shut off
4)刪除舊名稱的虛擬機配置
[root@kvmsvr ~]# virsh undefine rhel7.2 //取消定義虛擬機 Domain rhel7.2 has been undefined [root@kvmsvr ~]# virsh list --all //確認結果 Id Name State ---------------------------------------------------- - rhel-207 shut off
步驟二:將虛擬機rhel-207複製爲rhel-7
1)生成新UUID,並複製備用
[root@kvmsvr ~]# uuidgen 90908905-bde4-4c4a-90b0-8a8f5bba1e25
2)修改導出後的配置(調整名稱、UUID、磁盤路徑、網卡MAC)
修改導出的xml配置文件,調整name、uuid、disk路徑、mac地址值:
[root@kvmsvr ~]# virsh edit rhel-207 <domain type='kvm'> <name>rhel-7</name> //新名稱 <uuid>90908905-bde4-4c4a-90b0-8a8f5bba1e25</uuid> //新UUID值 .. .. <disk type='file' device='disk'> <driver name='qemu' type='qcow2'/> <source file='/var/lib/libvirt/images/rhel-7.qcow2'/> //新磁盤路徑 .. .. </disk> .. .. <interface type='network'> <mac address='52:54:00:91:50:07'/> //新MAC地址 <source network='default'/> <model type='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03 ' function='0x0'/> </interface> .. ..
3)確認已自動導入的新配置
[root@kvmsvr ~]# virsh list --all //確認結果 Id Name State ---------------------------------------------------- - rhel-207 shut off - rhel-7 shut off //新虛擬機
4)複製虛擬機磁盤文件
爲新虛擬機提供一份獨立的磁盤文件:
[root@kvmsvr ~]# cd /var/lib/libvirt/images/ [root@kvmsvr images]# cp rhel7.2.qcow2 rhel-7.qcow2 [root@kvmsvr images]# ls //確認結果 rhel-7.qcow2 rhel7.2.qcow2
5 案例5:爲虛擬機制做快照備份
5.1 問題
本例要求使用 qemu-img 及必要的工具,完成下列任務:
將虛擬機 rhel-7 關機 爲虛擬機 rhel-7 的磁盤製做名爲 snap1 的快照 開啓並登入虛擬機 rhel-7,在桌面上新建文件 1.txt 再次關閉虛擬機 rhel-7,還原到快照 snap1 從新開啓並登入虛擬機 rhel-7,檢查 1.txt 文件
5.2 方案
KVM虛擬機的快照:經過在虛擬機磁盤鏡像內保存不一樣時間點的狀態數據實現備份,在必要時可將虛擬機恢復到指定的快照狀態。
qemu-img快照管理基本操做:
建立快照:qemu-img snapshot -c 快照名 qcow2磁盤 列出快照:qemu-img snapshot -l qcow2磁盤 恢復快照:qemu-img snapshot -a 快照名 qcow2磁盤 刪除快照:qemu-img snapshot -d 快照名 qcow2磁盤
5.3 步驟
實現此案例須要按照以下步驟進行。
步驟一:爲虛擬機制做快照
1)確保虛擬機rhel-7已經關機
[root@kvmsvr ~]# virsh list --all | grep rhel-7 - rhel-7 shut off
2)爲虛擬機rhel-7的磁盤製做快照
[root@kvmsvr ~]# cd /var/lib/libvirt/images/ [root@kvmsvr images]# qemu-img snapshot -c snap1 rhel-7.qcow2 //製做快照 [root@kvmsvr images]# qemu-img snapshot -l rhel-7.qcow2 //列出快照 Snapshot list: ID TAG VM SIZE DATE VM CLOCK 1 snap1 0 2017-01-05 15:44:25 00:00:00.000
步驟二:正常使用/更新虛擬機
1)啓動虛擬機rhel-7
[root@kvmsvr ~]# virsh start rhel-7 Domain rhel-7 started
2)正常登入虛擬機rhel-7,在桌面創建文件1.txt
過程略。
步驟三:還原快照並檢查恢復結果
1)關閉虛擬機rhel-7
[root@kvmsvr ~]# virsh destroy rhel-7 Domain rhel-7 destroyed
2)將虛擬機rhel-7的磁盤還原到快照snap1
[root@kvmsvr images]# qemu-img snapshot -a snap1 rhel-7.qcow2
3)從新開啓虛擬機rhel-7
[root@kvmsvr ~]# virsh start rhel-7 Domain rhel-7 started
4)正常登入虛擬機rhel-7,檢查桌面的文件1.txt
由於此文件是在建快照以後才創建的,因此還原快照之後就沒有了。
6 案例6:快建新虛擬機
6.1 問題
本例要求利用qcow2磁盤特性快建2臺新的KVM虛擬機,配置要求以下:
svr7:svr7.tedu.cn,192.168.4.7/24 pc207: pc207.tedu.cn,192.168.4.207/24 爲上述虛擬機配好網絡,確認yum源可用 從CentOS真機可ssh遠程訪問這兩臺虛擬機
6.2 方案
快建新虛擬機的基本思路:
提早準備好一臺模板虛擬機(鏡像磁盤+xml配置文件) 基於qcow2磁盤複用技術快建新虛擬機的磁盤 經過調整模板機的配置快建新虛擬機的xml配置文件 導入新虛擬機
Copy On Write,寫時複製技術原理:
直接映射原始盤的數據內容 當原始盤有修改時,在修改以前將舊數據存入前端盤 對前端盤的修改不會回寫到原始盤
6.3 步驟
實現此案例須要按照以下步驟進行。
步驟一:準備模板虛擬機
找一臺已經裝好RHEL7系統、配置好本地yum源、關閉SELinux的虛擬機,提取模板虛擬機磁盤、xml配置文件備用。
1)準備磁盤目錄、模板虛擬機磁盤文件
[root@kvmsvr ~]# qemu-img info /data/images/rhel7_muban.qcow2 image: /data/images/rhel7_muban.qcow2 file format: qcow2 virtual size: 300G (322122547200 bytes) //虛擬機磁盤容量 disk size: 3.2G //在KVM服務器佔用容量
2)準備模板虛擬機配置文件
[root@kvmsvr ~]# cat /data/images/rhel7_muban.xml <domain type='kvm'> <name>rhel7.2</name> <uuid>a1992150-5cc7-e19d-20df-cd5cea7d8aa2</uuid> <memory unit='KiB'>2097152</memory> .. ..
步驟二:快建虛擬機svr7
1)爲虛擬機svr7快速創建前端盤(複用模板機的磁盤數據)
[root@kvmsvr ~]# qemu-img create -f qcow2 -b /data/images/rhel7_muban.qcow2 /data/images/svr7.qcow2 Formatting '/data/images/svr7.qcow2', fmt=qcow2 size=322122547200 backing_file='/data/images/rhel7_muban.qcow2' encryption=off cluster_size=65536
2)爲虛擬機svr7準備xml配置
[root@kvmsvr ~]# cp /data/images/rhel7_muban.xml /tmp/svr7.xml //拷貝配置 [root@kvmsvr ~]# vim /tmp/svr7.xml //修改配置 <domain type='kvm'> <name>svr7</name> //新名稱 <uuid>b20a1a1c-a2de-4b2f-bb03-91a3e36257c7</uuid> //新UUID值 .. .. <channel type='unix'> <source mode='bind' path='/var/lib/libvirt/qemu/channel/t arget/domain-rhel-7/org.qemu.guest_agent.0'/> //改套接字路徑 .. .. </channel> <disk type='file' device='disk'> <driver name='qemu' type='qcow2'/> <source file='/var/lib/libvirt/images/svr7.qcow2'/> //新磁盤路徑 .. .. </disk> .. .. <interface type='network'> <mac address='52:54:00:11:00:07'/> //新MAC地址 <source network='default'/> <model type='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03 ' function='0x0'/> </interface> .. ..
3)定義新虛擬機svr7
[root@room9pc00 ~]# virsh define /tmp/svr7.xml 定義域 svr7(從 /tmp/svr7.xml)
4)爲虛擬機svr7配置主機名、IP地址
開啓虛擬機svr7,使用root用戶登入系統。
[root@svr7 ~]# vim /etc/hostname //配置主機名 svr7.tedu.cn [root@svr7 ~]# nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.4.7/24 connection.autoconnect yes //配置IP地址 [root@svr7 ~]# nmcli connection up eth0 //激活鏈接 成功激活的鏈接(D-Bus 激活路徑:/org/freedesktop/NetworkManager/ActiveConnection/8) [root@svr7 ~]# ifconfig eth0 //確認配置結果 eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.4.7 netmask 255.255.255.0 broadcast 192.168.4.255 inet6 fe80::20c:29ff:fe5e:f686 prefixlen 64 scopeid 0x20<link> ether 52:54:00:11:00:07 txqueuelen 1000 (Ethernet) RX packets 112143 bytes 9388455 (8.9 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 507844 bytes 771354289 (735.6 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
步驟三:快建虛擬機pc207
操做與步驟二相似,此處略。
步驟四:快建虛擬機的運行測試
1)啓動兩臺虛擬機svr七、pc207,都可正常運行
2)從svr7可ping通pc207
[root@svr7 ~]# ping 192.168.4.207 PING 192.168.4.207 (192.168.4.207) 56(84) bytes of data. 64 bytes from 192.168.4.207: icmp_seq=1 ttl=64 time=0.392 ms 64 bytes from 192.168.4.207: icmp_seq=2 ttl=64 time=0.369 ms .. ..
3)從CentOS真機可ssh遠程訪問這兩臺虛擬機
[root@room9pc00 ~]# ssh -X root@192.168.4.7 root@192.168.4.7's password: //驗證svr7的root密碼 Last login: Sun Mar 26 11:30:35 2017 from 192.168.4.254 [root@svr7 ~]# exit [root@room9pc00 ~]# ssh -X root@192.168.4.207 root@192.168.4.207's password: //驗證pc207的root密碼 Last login: Sun Mar 26 11:32:35 2017 from 192.168.4.254 [root@pc207 ~]# exit [root@room9pc00 ~]#