热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

自动化部署KVM虚拟机

折腾了几天,总算把自动化部署虚拟机实现了,特此记录备忘。裸机是CentOS6.3的系统,安装KVM过程如下:yuminstallkvmlibvirtpython-virtinstqemu-kvmyuminstallbridge-utils然后注意需要配置桥接网卡,将默认的网卡配置复制一份为ifcfg-br0后再行

折腾了几天,总算把自动化部署虚拟机实现了,特此记录备忘。

裸机是 CentOS 6.3 的系统,安装 KVM 过程如下:

yum install kvm libvirt python-virtinst qemu-kvm
yum install bridge-utils

然后注意需要配置桥接网卡,将默认的网卡配置复制一份为 ifcfg-br0 后再行修改:

vi /etc/sysconfig/network-scripts/ifcfg-br0
------
DEVICE=br0
NM_COnTROLLED=yes
OnBOOT=yes
TYPE=Bridge
DNS2=218.85.152.99
DNS1=192.168.12.12
IPV6INIT=no
USERCTL=no
IPADDR=192.168.12.28
PREFIX=24
NETMASK=255.255.255.0
GATEWAY=192.168.12.1
DEFROUTE=yes
NAME="System br0"
------

注意还需要更改之前默认网卡的设置,注意需加上 BRIDGE=br0 的内容

vi /etc/sysconfig/network-scripts/ifcfg-em1
------
DEVICE=em1
BOOTPROTO=none
HWADDR=90:b1:1c:44:f8:39
NM_COnTROLLED=yes
OnBOOT=yes
TYPE=Ethernet
UUID="02801faa-9472-433f-a44c-6720fa43e983"
IPV6INIT=no
USERCTL=no
DEFROUTE=yes
NAME="System em1"
BRIDGE=br0
------

重启网络服务,这里可能需要略等待几十秒才能生效。

service network restart
ifconfig

继续安装 askpass 等

yum install qemu-system-x86 openssh-askpass

配置自动安装文件 ks.cfg,将 ks.cfg 需要放置到网络某个web服务器下,当时因为这点耗费了大量的时间,因为网上都没有此处的详细说明,原本我以为 ks.cfg 在本地磁盘应该就没有问题的,看到官方的站点也有 ks.cfg 文件放置本地的相关选项说明。结果在实际安装中,却发现毫无反应,最后接上 VNC 看到屏幕提示才恍然大悟,在虚拟机安装的环境下获得的磁盘路径与外部是不同的,故此无法直接访问到原始磁盘上的文件,故此将其放置到网络的某个web服务器下是相对简单的方法。

# Kickstart file automatically generated by anaconda.
#version=DEVEL
install
cdrom
lang en_US.UTF-8
keyboard us
network --onboot yes --device eth0 --bootproto static --ip 192.168.12.42 --netmask 255.255.255.0 --gateway 192.168.12.1 --nameserver 192.168.12.12 --noipv6
rootpw  --iscrypted $6$q/FN6W/H53u7VUng$IgfhSe.nsxqc//ggSYisTfUzoME3MLyJeMDA9uEgCKR0OuXrvd8M9YCItnxgPDf9OIH3HFEckvxU4EttrVwXW/
firewall --service=ssh
authconfig --enableshadow --passalgo=sha512
selinux --enforcing
timezone --utc Asia/Shanghai
bootloader --location=mbr --driveorder=sda --append="nomodeset crashkernel=auto rhgb quiet"
# The following is the partition information you requested
# Note that any partitions you deleted are not expressed
# here so unless you clear all partitions first, this is
# not guaranteed to work
zerombr
clearpart --all --initlabel
part /boot --fstype=ext4 --size=200
part swap --size=512
part / --fstype=ext4 --grow --size=200
reboot
%packages
@core
@additional-devel
@base
@development
@server-policy
@system-admin-tools
libXinerama-devel
xorg-x11-proto-devel
startup-notification-devel
libgnomeui-devel
libbonobo-devel
libXau-devel
libgcrypt-devel
popt-devel
libXrandr-devel
libxslt-devel
libglade2-devel
gnutls-devel
sgpio
mtools
jpackage-utils
%post
(
sed -i 's/LABEL=\//& cOnsole=ttyS0/' /boot/grub/grub.conf
echo 'S0:12345:respawn:/sbin/agetty ttyS0 115200' >> /etc/inittab
echo "ttyS0" >> /etc/securetty
) 1>/root/post_install.log 2>&1

将安装镜像传到本地磁盘,然后开始自动安装过程:

virt-install --autostart --name VM01 -r 2048 --vcpus=1 --os-variant=rhel6 --accelerate -v -w bridge:br0 --disk path=/var/lib/libvirt/images/VM01.img,size=12 -l /var/lib/libvirt/images/CentOS-6.3-x86_64-bin-DVD1.iso --extra-args "ks=http://192.168.12.1/ks.cfg ksdevice=eth0 ip=192.168.12.42 netmask=255.255.255.0 dns=192.168.12.1 gateway=192.168.12.1" --vnc --vncport=5901 --noautoconsole

不出意外的话,等待十来分钟,应该就能通过预设的密码连接到刚安装的 192.168.12.42 服务器上了,其间也可以通过 vnc 客户端连接到服务器来查看安装过程图形界面,但注意需修改 qemu.conf。

vi /etc/libvirt/qemu.conf
------
vnc_listen = "0.0.0.0"
vnc_password = "ABCD1234"
------
service libvirtd restart

疑难解答:
Q:使用 virsh console VM01 时卡在  Escape character is ^] 的提示信息处而无法连接
A:之前的 ks.cfg 中是在 /etc/grub.conf 中添加 cOnsole=ttyS0,在 CentOS 6 中,应该修改 /boot/grub/grub.conf 文件,并且在虚拟机中系统安装时的链接文件都变成了单独的文件,需注意要在正确的地方修改。

Q:使用 virsh start VM01 这样的命令启动虚拟机时,出现如下错误提示:

error: Failed to start domain VM01
error: Unable to read from monitor: Connection reset by peer

A:执行以下命令,再次重启即可。

virsh managedsave-remove VM01

Q:重启后网络无法访问,只有同网段的服务器之间能够访问
A:由于两块网卡都设置了网关,加载顺序是 eth0,eth1,eth1 设置的内网网关路由会覆盖掉 eth0 的默认路由,导致网络无法使用。删除 eth1 网卡的 gateway 项设置即可解决。

参考页面:
Install CentOS / RHEL Using Kickstart File
Virtualization With KVM On A CentOS 6.3 Server
Kickstart/Anaconda实现自动化安装原理探究

Last update by nowo 2012/10/16


推荐阅读
author-avatar
轩然
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有