kvm虚拟机管理
一、环境
role
kvm_server
vir_guest1
vir_guest2
manager
ESXi
二、安?kvm
[root@target ~]# yum install -y qemu-kvm.x86_64
qemu-kvm-tools.x86_64
[root@target ~]# yum install libvirt.x86_64 libvirt-cim.x86_64
libvirt-client.x86_64 libvirt-java.noarch
[root@target ~]# modprobe kvm
[root@target ~]# modprobe kvm-intel
[root@target ~]# modprobe kvm-amd
[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 \
--name node4 \
--ram=1024 \
--arch=x86_64 \
--vcpus=1 \
--check-cpu \
--os-type=linux \
--os-variant=rhel5 \
--disk
path=/virhost/node7.img,device=disk,bus=virtio,size=20,sparse=true
\
--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
----------------------------------
2、添加删除虚拟机
[root@target ~]# virsh define /etc/libvirt/qemu/node5.xml
[root@target ~]# virsh list --all
----------------------------------
[root@target ~]# virsh undefine node5
[root@target ~]# ls /etc/libvirt/qemu
networks
[root@target ~]# virsh list --all
----------------------------------
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
[root@manager ~]# virt-viewer -c
qemu+ssh://root@192.168.32.40/system node4
Xlib:
root@192.168.32.40's password:
root@192.168.32.40's password:
#会弹出virt-viwer的gtk管理界面
4、使用已存在的虚拟机配置文档安?新的虚拟机
[root@target ~]# qemu-img create -f qcow2 /virhost/kvm_node/node6.img 20G
#为新建虚拟机生产磁盘镜像文件
[root@target ~]# virsh list
----------------------------------
[root@target ~]# virsh dumpxml node4 >/etc/libvirt/qemu/node6.xml
#导出虚拟机node6的硬件配置信息为/etc/libvirt/qemu/node6.xml
[root@target ~]# vim /etc/libvirt/qemu/node6.xml
[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
改为
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
名称:
UUID:
状态:
Persistent:
自动启动: no
容量:
分配:
可用:
4).启动存储池
[root@target virhost]# virsh pool-start vmware_pool
[root@target virhost]# virsh pool-list
名称
-----------------------------------------
default
virhost
vmware_pool
5)销毁存储域,取消存储池
[root@target virhost]# virsh pool-destroy vmware_pool
[root@target virhost]# virsh pool-list --all
名称
-----------------------------------------
default
virhost
vmware_pool
[root@target virhost]# virsh pool-undefine vmware_pool
[root@target virhost]# virsh pool-list --all
名称
-----------------------------------------
default
virhost
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
名称:
类型:
容量:
分配:
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
#虚拟机为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:storage1 ==> 401 Unauthorized
** HEAD https://192.168.2.251/folder/tserver21/RHEL4.6-flat.vmdk?dcPath=ha-datacenter&dsName=ESX35-bak:storage1 ==> 200 OK
** GET https://192.168.2.251/folder/tserver21/RHEL4.6-flat.vmdk?dcPath=ha-datacenter&dsName=ESX35-bak:storage1 ==> 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
----------------------------------
[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 驱动程序配置的 node6
[root@target kvm_node]# virsh list --all
----------------------------------
[root@target kvm_node]# virsh start node6