2014年3月27日星期四

利用virsh和virt-install安装管理虚拟机

配置环境+构建思想:

1 宿主机采用kvm做虚拟化
2 网络采用bridge模式
3 硬盘采用lvm管理
4 根据宿主机配置,每台宿主机上分配12个计算单元,根据计算单元计算虚拟机使用的内存,cpu个数,lv数量
5 宿主机初始化的时候创建12个lvfree-XX命名的lv,假定虚拟机使用4个部署单元
6 创建虚拟机的时候,删除4个lvfree-XX,创建一个lvused-XX-4
7 根据统计lvfree-XX的个数,可以知道宿主机的剩余资源
8 虚拟机下线的时候,删除配置文件,删除lvused-XX-4,创建4个lvfree-XX

 

宿主机安装:

前期基本与普通机器安装相同,所有操作在ks的%post 阶段处理。

1 创建bonding和桥,配置:

内核启动参数加上biosdevname=0,避免将网卡识别为em

ifcfg-eth0:
DEVICE=eth0
ONBOOT=yes
MASTER=bond0
SLAVE=yes

ifcfg-bond0:
DEVICE=bond0
ONBOOT=yes
BONDING_OPTS="''"
BRIDGE=br0

ifcfg-br0:
DEVICE=br0
ONBOOT=yes
TYPE=Bridge
IPADDR=192.168.0.1
NETMASK=255.255.255.0
STP=off
DELAY=0
BRIDGING_OPTS="max_age=0 ageing_time=0"

/etc/modprobe.d/bond0.conf
alias bond0 bonding
options bond0 miimon=100 mode=1 primary=eth0

a) bonding 配置需要加入到modprobe.d 中,否则网络有问题
b) BRIDGE需要加入max-age和ageing-time的配置,否则虚拟机安装时,dhcp无法取得地址

2 创建lvm

vgcreate pool /dev/sda1
for i in `1 12`; do lvcreate -n free$i -L120G pool ; done

3 启动messagebus和libvirtd服务

 若使用默认网络配置libvirtd还依赖avahi-daemon服务,并会同时启动dnsmasq
/etc/init.d/messagebus start
/etc/init.d/libvirtd start

4 删除默认的nat网络

virsh net-destroy default
virsh net-undefine default

5 初始化 storage-pool,设置pool自动启动,pool-refresh中,lv自动转化为storage volume.

virsh pool-create-as pool logical --target /dev/pool
virsh pool-dumpxml pool >pool.xml
virsh pool-define pool.xml
virsh pool-autostart pool
virsh pool-refresh pool

6 添加virsh console支持

echo ttyS0 >>/etc/securetty

7 宿主机内核参数调整:

for i in /proc/sys/net/bridge/bridge-nf-*; do echo 0 >$i  ; done

宿主机安装完毕,重启即可。
 

虚拟机安装

假定虚拟机使用4个计算单元

1 删除lvfree,创建lvused

for i in `seq 1 4`; do  virsh vol-delete --pool pool lvfree$i  ;done
virsh vol-create-as --pool pool --name lvused-XX-4 --capacity=480G

2 virt-install

virt-install --hvm                                        #全虚拟化
--wait=-1                                                 #virt-install运行时的超时时间,不设置为-1,虚拟机安装完毕无法自动启动
--graphics vnc,listen=0.0.0.0,port=5900      #vnc设置
--virt-type=kvm                                         #虚拟化软件
--autostart                                                #宿主机启动后,虚拟机自动启动
--noautoconsole                                        #安装时候不连接console
-n guest_v1                                               # virsh list 时候显示的名字,为方便,直接设置为主机名
-r 4096                                                     #内存4G
--vcpus 8                                                  #使用 8个cpu
--disk vol=pool/lvused-XX-4,bus=virtio         #硬盘格式为storage volume,指定方式为 POOL/VOLUME,使用virtio驱动,在虚拟机中识别为vda
--mac==00:16:3e:aa:bb:cc                        #mac地址
--network bridge=br0,model=virtio              #网络采用桥接,使用virtio驱动
-l http://192.168.0.1/repo/rh62-x86-64        #指定安装源,系统会自动寻找kernel和initrd文件
-x "console=ttyS0 serial pip=192.168.1.1 phn=guest_v1 ks=http://192.168.0.1/ksconf/rh62-x86-64.cfg papp=guest" #内核额外参数,console保证可以连接;后面设置了ip,主机名,ks.cfg路径,以及ks安装的时候采用的应用配置

3 虚拟机调整/etc/adjtime 最后一行由LOCAL为UTC

虚拟机下线

删除lvused,创建lvfree

virsh destroy guest_v1
virsh undefine guest_v1
virsh vol-delete --pool pool lvused-XX-4
for i in `seq 1 4`; do  virsh vol-create-as --pool pool --name lvfree-$i --capacity=120G

其他

1 virt-install 高版本支持--clock=LOCAL参数,加此参数后,无需调整虚拟机的/etc/adjtime
2 virt-install 和 virsh加入--connect=qemu+ssh://192.168.1.2/system 后,可以通过ssh通道远程安装和管理虚拟机,除了采用ssh外,还可以采用TLS验证,原理是证书验证,需要下发server和client证书