kvm虛擬機(jī)管理
一、環(huán)境
role hostname ip OS
kvm_server target 192.168.32.40/24 rhel6.0_x64
vir_guest1 node4 192.168.32.34/24 rhel5.5_i386
vir_guest2 node5 192.168.32.35/24 rhel5.5_i386
manager manager 192.168.32.33/24 rhel5.5_i386
ESXi ESXi 192.168.2.251/24 ESXi 3.5
二、安裝kvm
[root@target ~]# yum install -y qemu-kvm.x86_64 qemu-kvm-tools.x86_64 #安裝kvm內(nèi)核
[root@target ~]# yum install libvirt.x86_64 libvirt-cim.x86_64 libvirt-client.x86_64 libvirt-java.noarch libvirt-python.x86_64 #安裝virt管理工具
[root@target ~]# modprobe kvm #加載kvm內(nèi)核
[root@target ~]# modprobe kvm-intel #intel cpu加載kvm-intel內(nèi)核,要支持全虛擬化,必須開啟;要求cpu支持,通過bios可設(shè)置。
[root@target ~]# modprobe kvm-amd #amd cpu加載kvm-intel
[root@target ~]# modprobe -ls | grep kvm #查看內(nèi)核是否開啟
kernel/arch/x86/kvm/kvm.ko
kernel/arch/x86/kvm/kvm-intel.ko
kernel/arch/x86/kvm/kvm-amd.ko
[root@target ~]# modprobe -ls | grep kvm-intel
kernel/arch/x86/kvm/kvm-intel.ko
三、安裝guest虛擬機(jī)
1、直接通過virt-manager安裝、管理虛擬機(jī)(略)
2、通過命令行安裝guest虛擬機(jī)
[root@target ~]# yum install virt-viewer #開啟圖形控制臺安裝虛擬客戶機(jī)需要,
[root@target ~]# virt-install #安裝選項(xiàng)可用virt-install --help查看
--name node4 #虛擬機(jī)名
--ram=1024 #分配內(nèi)存大小,MB
--arch=x86_64 #模擬的CPU 構(gòu)架
--vcpus=1 #配置虛擬機(jī)的vcpu 數(shù)目
--check-cpu #檢查確定vcpu是否超過物理 CPU數(shù)目,如果超過則發(fā)出警告。
--os-type=linux #要安裝的操作系統(tǒng)類型,例如:\'linux\'、\'unix\'、\'windows\'
--os-variant=rhel5 #操作系統(tǒng)版本,如:\'fedora6\', \'rhel5\', \'solaris10\', \'win2k\'
--disk path=/virhost/node7.img,device=disk,bus=virtio,size=20,sparse=true #虛擬機(jī)所用磁盤或鏡像文件,size大小G
--bridge=br0 #指定網(wǎng)絡(luò),采用透明網(wǎng)橋
--noautoconsole #不自動開啟控制臺
--pxe #網(wǎng)絡(luò)安裝
四、利用virsh對虛擬機(jī)管理
1、開關(guān)機(jī)
[root@target ~]# virsh start node4 #開機(jī)
[root@target ~]# virsh create /etc/libvirt/qemu/node4.xml #直接通過主機(jī)配置文檔啟動主機(jī)
[root@target ~]# virsh shutdown node4 #關(guān)機(jī)
[root@target ~]# virsh destroy node4 #強(qiáng)制關(guān)閉電源
[root@target ~]# virsh list --all #查看虛擬機(jī)狀態(tài)
Id 名稱 狀態(tài)
----------------------------------
18 node4 running
- node5 關(guān)閉
- win8 關(guān)閉
2、添加刪除虛擬機(jī)
[root@target ~]# virsh define /etc/libvirt/qemu/node5.xml #根據(jù)主機(jī)配置文檔添加虛擬機(jī)
[root@target ~]# virsh list --all #node5已經(jīng)添加
Id 名稱 狀態(tài)
----------------------------------
18 node4 running
- node5 關(guān)閉
- win8 關(guān)閉
[root@target ~]# virsh undefine node5 #移除虛擬機(jī)
[root@target ~]# ls /etc/libvirt/qemu
networks node4.xml win8.xml
[root@target ~]# virsh list --all #node5已經(jīng)被移除
Id 名稱 狀態(tài)
----------------------------------
18 node4 running
- win8 關(guān)閉
3、遠(yuǎn)程管理虛擬機(jī)(qemu+ssh連接)
[root@target ~]# yum install virt-viewer
[root@target ~]# export DISPLAY=192.168.40.18:0.0
[root@target ~]# virt-viewer -c qemu///system node4 #本地管理虛擬機(jī),system:獲取system權(quán)限,注意qemu后是三個/
[root@manager ~]# virt-viewer -c qemu+ssh://root@192.168.32.40/system node4 #遠(yuǎn)程linux通過virt-viewer+ssh管理虛擬機(jī)
Xlib: extension "RANDR" missing on display "192.168.40.18:0.0".
root@192.168.32.40\'s password:
root@192.168.32.40\'s password:
#會彈出virt-viwer的gtk管理界面
4、使用已存在的虛擬機(jī)配置文檔安裝新的虛擬機(jī)
[root@target ~]# qemu-img create -f qcow2 /virhost/kvm_node/node6.img 20G
#為新建虛擬機(jī)生產(chǎn)磁盤鏡像文件
[root@target ~]# virsh list
Id 名稱 狀態(tài)
----------------------------------
18 node4 running
[root@target ~]# virsh dumpxml node4 >/etc/libvirt/qemu/node6.xml
#導(dǎo)出虛擬機(jī)node6的硬件配置信息為/etc/libvirt/qemu/node6.xml
[root@target ~]# vim /etc/libvirt/qemu/node6.xml
[root@target ~]# virsh define /etc/libvirt/qemu/node6.xml
#使用虛擬描述文檔建立虛擬機(jī),可用virsh edit node6修改node6的配置文件
[root@target ~]# virsh start node6
#啟動虛擬機(jī)
5 為虛擬機(jī)開啟vnc
[root@target ~]# virsh edit node4 #編輯node4的配置文件;不建議直接通過vim node4.xml修改。
#port=\'-1\' autoport=\'yes\':port自動分配,監(jiān)聽回環(huán)網(wǎng)絡(luò)(virt-manager管理需要listen=\'127.0.0.1\'),無密碼
改為
#固定vnc管理端口5904,不自動分配,vnc密碼xiaobai,監(jiān)聽所有網(wǎng)絡(luò)
2. 遠(yuǎn)程vnc訪問地址:192.168.32.40:5904
五、存儲池和存儲卷的管理
1.創(chuàng)建 KVM主機(jī)存儲池
1).創(chuàng)建基于文件夾(目錄)的存儲池
[root@target virhost]# virsh pool-define-as vmware_pool --type dir --target /virhost/vmware
#定義存儲池vmware_pool
或
[root@target virhost]# virsh pool-create-as --name vmware_pool --type dir --target /virhost/vmware
#創(chuàng)建存儲池vmware_pool,類型為文件目錄,/virhost/vmware,與pool-define-as結(jié)果一樣
2).創(chuàng)建基于文件系統(tǒng)的存儲池
[root@target virhost]#virsh pool-define-as --name vmware_pool --type fs --source-dev /dev/vg_target/LogVol02 --source-format ext4 --target /virhost/vmware
或
[root@target virhost]#virsh pool-create-as --name vmware_pool --type fs --source-dev /dev/vg_target/LogVol02 --source-format ext4 --target /virhost/vmware
3).查看存儲池信息
[root@target virhost]# virsh pool-info vmware_pool #查看存儲域(池)信息
名稱: vmware_pool
UUID: 2e9ff708-241f-fd7b-3b57-25df273a55db
狀態(tài): running
Persistent: no
自動啟動: no
容量: 98.40 GB
分配: 18.39 GB
可用: 80.01 GB
4).啟動存儲池
[root@target virhost]# virsh pool-start vmware_pool #啟動存儲池
[root@target virhost]# virsh pool-list
名稱 狀態(tài) 自動開始
-----------------------------------------
default 活動 yes
virhost 活動 yes
vmware_pool 活動 no
5)銷毀存儲域,取消存儲池
[root@target virhost]# virsh pool-destroy vmware_pool #銷毀存儲池
[root@target virhost]# virsh pool-list --all
名稱 狀態(tài) 自動開始
-----------------------------------------
default 活動 yes
virhost 活動 yes
vmware_pool 不活躍 no
[root@target virhost]# virsh pool-undefine vmware_pool #取消存儲池的定義
[root@target virhost]# virsh pool-list --all
名稱 狀態(tài) 自動開始
-----------------------------------------
default 活動 yes
virhost 活動 yes
2.創(chuàng)建了存儲池后,就可以創(chuàng)建一個卷,這個卷是用來做虛擬機(jī)的硬盤
[root@target virhost]# virsh vol-create-as --pool vmware_pool --name node6.img --capacity 10G --allocation 1G --format qcow2
#創(chuàng)建卷 node6.img,所在存儲池為vmware_pool,容量10G,初始分配1G,文件格式類型qcow2
[root@target virhost]# virsh vol-info /virhost/vmware/node6.img #查看卷信息
名稱: node6.img
類型: 文件
容量: 10.00 GB
分配: 136.00 KB
3.在存儲卷上安裝虛擬主機(jī)
[root@target virhost]#virt-install --connect qemu:///system
-n node7
-r 512
-f /virhost/vmware/node7.img
--vnc
--os-type=linux
--os-variant=rhel6
--vcpus=1
--network bridge=br0
-c /mnt/rhel-server-6.0-x86_64-dvd.iso
六、虛擬機(jī)的遷移(vmware 2 kvm)
1.安裝軟件
[root@target ~]# yum install -y virt-v2v.x86_64
[root@target ~]# rpm -ivh libguestfs-winsupport-1.0-7.el6.x86_64.rpm virtio-win-1.2.0-1.el6.noarch.rpm
#虛擬機(jī)為windows時(shí)需要libguestfs-winsupport 包來支持 NTFS 文件系統(tǒng)和 virtio-win 包來支持 Windows para-virtualized 存儲和網(wǎng)絡(luò)設(shè)備驅(qū)動
2.創(chuàng)建 KVM 主機(jī)存儲域(略)
virt-v2v 在遷移虛擬機(jī)的過程中,需要拷貝被遷移虛擬機(jī)到 KVM 主機(jī)預(yù)先定義的存儲池中。
3.創(chuàng)建 KVM 主機(jī)網(wǎng)絡(luò)接口(略)
虛擬機(jī)在遷移之后將連接 KVM 主機(jī)網(wǎng)絡(luò), 因此主機(jī)必須有一個與之相匹配的網(wǎng)絡(luò)接口,比如說網(wǎng)橋。
4.在 KVM 主機(jī)上創(chuàng)建或修改 $HOME/.netrc 文件,添加 VMware ESXi 服務(wù)器的用戶名和密碼。
[root@target ~]# cat ~/.netrc
machine 192.168.2.251 login root password xxxxxx
[root@target ~]# chmod 0600 ~/.netrc
5.Vmware ESXi到KVM的遷移
[root@target ~]# virt-v2v -ic esx://192.168.2.251/?no_verify=1 -op virhost -b br0 ipserver
** HEAD https://192.168.2.251/folder/tserver21/RHEL4.6-flat.vmdk?dcPath=ha-datacenter&dsName=ESX35-bak%3Astorage1 ==> 401 Unauthorized
** HEAD https://192.168.2.251/folder/tserver21/RHEL4.6-flat.vmdk?dcPath=ha-datacenter&dsName=ESX35-bak%3Astorage1 ==> 200 OK
** GET https://192.168.2.251/folder/tserver21/RHEL4.6-flat.vmdk?dcPath=ha-datacenter&dsName=ESX35-bak%3Astorage1 ==> 200 OK (2084s)
unknown filesystem /dev/hda
unknown filesystem /dev/fd0
virt-v2v: Installation failed because the following files referenced in the configuration file are required, but missing: rhel/4/kernel-smp-2.6.9-89.EL.i686.rpm
virt-v2v: 非 virtio 驅(qū)動程序配置的 tserver21
#所有選項(xiàng)可通過配置文件/etc/virt-v2v.conf來指定
#-op:指定用于轉(zhuǎn)換后的存儲域(pool),virhost
#-b:指定網(wǎng)絡(luò)為網(wǎng)橋br0
#-ic:指定要轉(zhuǎn)換的源地址
[root@target kvm_node]# virsh list --all
Id 名稱 狀態(tài)
----------------------------------
1 node4 running
- node5 關(guān)閉
- tserver21 關(guān)閉
- win8 關(guān)閉
[root@target kvm_node]# virsh start tserver21
6.KVM到KVM遷移
[root@target kvm_node]# virt-v2v -ic qemu+ssh://192.168.32.179/system -op virhost -b br0 node6
root@192.168.32.179\'s password:
root@192.168.32.179\'s password:
unknown filesystem label SWAP-vda3
virt-v2v: The connected hypervisor does not support a machine type of rhel5.4.0. It will be set to the current default.
virt-v2v: virtio 驅(qū)動程序配置的 node6
[root@target kvm_node]# virsh list --all
Id 名稱 狀態(tài)
----------------------------------
1 node4 running
- node5 關(guān)閉
- node6 關(guān)閉
- tserver21 關(guān)閉
- win8 關(guān)閉