1. 程式人生 > >kvm libvirt 虛擬機管理

kvm libvirt 虛擬機管理

1.0 because 定義 sys OS 監聽 view splay 獲取

http://www.2cto.com/os/201203/123128.html

kvm虛擬機管理
一、環境
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內核
[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內核
[root@target ~]# modprobe kvm-intel #intel cpu加載kvm-intel內核,要支持全虛擬化,必須開啟;要求cpu支持,通過bios可設置。
[root@target ~]# modprobe kvm-amd #amd cpu加載kvm-intel

[root@target ~]# modprobe -ls | grep kvm #查看內核是否開啟
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虛擬機
1、直接通過virt-manager安裝、管理虛擬機(略)

2、通過命令行安裝guest虛擬機
[root@target ~]# yum install virt-viewer #開啟圖形控制臺安裝虛擬客戶機需要,
[root@target ~]# virt-install \ #安裝選項可用virt-install --help查看
--name node4 \ #虛擬機名
--ram=1024 \ #分配內存大小,MB
--arch=x86_64 \ #模擬的CPU 構架
--vcpus=1 \ #配置虛擬機的vcpu 數目
--check-cpu \ #檢查確定vcpu是否超過物理 CPU數目,如果超過則發出警告。
--os-type=linux \ #要安裝的操作系統類型,例如:‘linux‘、‘unix‘、‘windows‘
--os-variant=rhel5 \ #操作系統版本,如:‘fedora6‘, ‘rhel5‘, ‘solaris10‘, ‘win2k‘
--disk path=/virhost/node7.img,device=disk,bus=virtio,size=20,sparse=true \ #虛擬機所用磁盤或鏡像文件,size大小G
--bridge=br0 \ #指定網絡,采用透明網橋
--noautoconsole \ #不自動開啟控制臺
--pxe #網絡安裝

四、利用virsh對虛擬機管理
1、開關機
[root@target ~]# virsh start node4 #開機
[root@target ~]# virsh create /etc/libvirt/qemu/node4.xml #直接通過主機配置文檔啟動主機
[root@target ~]# virsh shutdown node4 #關機
[root@target ~]# virsh destroy node4 #強制關閉電源
[root@target ~]# virsh list --all #查看虛擬機狀態
Id 名稱 狀態
----------------------------------
18 node4 running
- node5 關閉
- win8 關閉

2、添加刪除虛擬機
[root@target ~]# virsh define /etc/libvirt/qemu/node5.xml #根據主機配置文檔添加虛擬機
[root@target ~]# virsh list --all #node5已經添加
Id 名稱 狀態
----------------------------------
18 node4 running
- node5 關閉
- win8 關閉

[root@target ~]# virsh undefine node5 #移除虛擬機
[root@target ~]# ls /etc/libvirt/qemu
networks node4.xml win8.xml
[root@target ~]# virsh list --all #node5已經被移除
Id 名稱 狀態
----------------------------------
18 node4 running
- win8 關閉

3、遠程管理虛擬機(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 #本地管理虛擬機,system:獲取system權限,註意qemu後是三個/
[root@manager ~]# virt-viewer -c qemu+ssh://[email protected]/system node4 #遠程linux通過virt-viewer+ssh管理虛擬機
Xlib: extension "RANDR" missing on display "192.168.40.18:0.0".
[email protected]‘s password:
[email protected]‘s password:
#會彈出virt-viwer的gtk管理界面

4、使用已存在的虛擬機配置文檔安裝新的虛擬機
[root@target ~]# qemu-img create -f qcow2 /virhost/kvm_node/node6.img 20G
#為新建虛擬機生產磁盤鏡像文件

[root@target ~]# virsh list
Id 名稱 狀態
----------------------------------
18 node4 running

[root@target ~]# virsh dumpxml node4 >/etc/libvirt/qemu/node6.xml
#導出虛擬機node6的硬件配置信息為/etc/libvirt/qemu/node6.xml

[root@target ~]# vim /etc/libvirt/qemu/node6.xml
<domain type=‘kvm‘ id=‘20‘> #修改node6的id號
<name>node6</name> #虛擬機node6的name
<uuid>4b7e91eb-6521-c2c6-cc64-c1ba72707fc7</uuid> #uuid必須修改,否則會和node4的沖突
<memory>524288</memory>
<currentMemory>524288</currentMemory>
<vcpu>1</vcpu>
<os>
<type arch=‘x86_64‘ machine=‘rhel5.4.0‘>hvm</type>
<boot dev=‘network‘/>
</os>
<features>
<acpi/>
<apic/>
<pae/>
</features>
<clock offset=‘utc‘/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<devices>
<emulator>/usr/libexec/qemu-kvm</emulator>
<disk type=‘file‘ device=‘disk‘>
<driver name=‘qemu‘ type=‘qcow2‘ cache=‘none‘/>
<source file=‘/virhost/node4.img‘/> #指定新虛擬機的硬盤文件
<target dev=‘vda‘ bus=‘virtio‘/>
</disk>
<interface type=‘bridge‘>
<mac address=‘54:52:00:69:d5:c7‘/>
<source bridge=‘br0‘/>
<target dev=‘vnet0‘/>
<model type=‘virtio‘/>
</interface>
<interface type=‘bridge‘>
<mac address=‘54:52:00:69:d5:d7‘/>
<source bridge=‘br0‘/>
<target dev=‘vnet1‘/>
<model type=‘virtio‘/>
</interface>
<serial type=‘pty‘>
<source path=‘/dev/pts/4‘/>
<target port=‘0‘/>
</serial>
<console type=‘pty‘ tty=‘/dev/pts/4‘>
<source path=‘/dev/pts/4‘/>
<target port=‘0‘/>
</console>
<input type=‘mouse‘ bus=‘ps2‘/>
<graphics type=‘vnc‘ port=‘5900‘ autoport=‘yes‘ keymap=‘en-us‘/>
</devices>
</domain>

[root@target ~]# virsh define /etc/libvirt/qemu/node6.xml
#使用虛擬描述文檔建立虛擬機,可用virsh edit node6修改node6的配置文件

[root@target ~]# virsh start node6
#啟動虛擬機

5 為虛擬機開啟vnc
[root@target ~]# virsh edit node4 #編輯node4的配置文件;不建議直接通過vim node4.xml修改。
<graphics type=‘vnc‘ port=‘-1‘ autoport=‘yes‘ listen=‘127.0.0.1‘ keymap=‘en-us‘/>
#port=‘-1‘ autoport=‘yes‘:port自動分配,監聽回環網絡(virt-manager管理需要listen=‘127.0.0.1‘),無密碼
改為
<graphics type=‘vnc‘ port=‘5904‘ autoport=‘no‘ listen=‘0.0.0.0‘ keymap=‘en-us‘ passwd=‘xiaobai‘/>
#固定vnc管理端口5904,不自動分配,vnc密碼xiaobai,監聽所有網絡

2. 遠程vnc訪問地址:192.168.32.40:5904

五、存儲池和存儲卷的管理
1.創建 KVM主機存儲池
1).創建基於文件夾(目錄)的存儲池
[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
#創建存儲池vmware_pool,類型為文件目錄,/virhost/vmware,與pool-define-as結果一樣

2).創建基於文件系統的存儲池
[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
狀態: 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
名稱 狀態 自動開始
-----------------------------------------
default 活動 yes
virhost 活動 yes
vmware_pool 活動 no
5)銷毀存儲域,取消存儲池
[root@target virhost]# virsh pool-destroy vmware_pool #銷毀存儲池
[root@target virhost]# virsh pool-list --all
名稱 狀態 自動開始
-----------------------------------------
default 活動 yes
virhost 活動 yes
vmware_pool 不活躍 no
[root@target virhost]# virsh pool-undefine vmware_pool #取消存儲池的定義
[root@target virhost]# virsh pool-list --all
名稱 狀態 自動開始
-----------------------------------------
default 活動 yes
virhost 活動 yes

2.創建了存儲池後,就可以創建一個卷,這個卷是用來做虛擬機的硬盤
[root@target virhost]# virsh vol-create-as --pool vmware_pool --name node6.img --capacity 10G --allocation 1G --format qcow2
#創建卷 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.在存儲卷上安裝虛擬主機
[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

六、虛擬機的遷移(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
#虛擬機為windows時需要libguestfs-winsupport 包來支持 NTFS 文件系統和 virtio-win 包來支持 Windows para-virtualized 存儲和網絡設備驅動

2.創建 KVM 主機存儲域(略)
virt-v2v 在遷移虛擬機的過程中,需要拷貝被遷移虛擬機到 KVM 主機預先定義的存儲池中。

3.創建 KVM 主機網絡接口(略)
虛擬機在遷移之後將連接 KVM 主機網絡, 因此主機必須有一個與之相匹配的網絡接口,比如說網橋。

4.在 KVM 主機上創建或修改 $HOME/.netrc 文件,添加 VMware ESXi 服務器的用戶名和密碼。
[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 驅動程序配置的 tserver21

#所有選項可通過配置文件/etc/virt-v2v.conf來指定
#-op:指定用於轉換後的存儲域(pool),virhost
#-b:指定網絡為網橋br0
#-ic:指定要轉換的源地址

[root@target kvm_node]# virsh list --all
Id 名稱 狀態
----------------------------------
1 node4 running
- node5 關閉
- tserver21 關閉
- win8 關閉
[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
[email protected]‘s password:
[email protected]‘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 驅動程序配置的 node6

[root@target kvm_node]# virsh list --all
Id 名稱 狀態
----------------------------------
1 node4 running
- node5 關閉
- node6 關閉
- tserver21 關閉
- win8 關閉

[root@target kvm_node]# virsh start node6


本文來自於 netsword 的BLOG

kvm libvirt 虛擬機管理