配置环境+构建思想:
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证书