热门标签 | 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


推荐阅读
  • 本文介绍如何在现有网络中部署基于Linux系统的透明防火墙(网桥模式),以实现灵活的时间段控制、流量限制等功能。通过详细的步骤和配置说明,确保内部网络的安全性和稳定性。 ... [详细]
  • 掌握远程执行Linux脚本和命令的技巧
    本文将详细介绍如何利用Python的Paramiko库实现远程执行Linux脚本和命令,帮助读者快速掌握这一实用技能。通过具体的示例和详尽的解释,让初学者也能轻松上手。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • 在现代网络环境中,两台计算机之间的文件传输需求日益增长。传统的FTP和SSH方式虽然有效,但其配置复杂、步骤繁琐,难以满足快速且安全的传输需求。本文将介绍一种基于Go语言开发的新一代文件传输工具——Croc,它不仅简化了操作流程,还提供了强大的加密和跨平台支持。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 在哈佛大学商学院举行的Cyberposium大会上,专家们深入探讨了开源软件的崛起及其对企业市场的影响。会议指出,开源软件不仅为企业提供了新的增长机会,还促进了软件质量的提升和创新。 ... [详细]
  • 如何配置Unturned服务器及其消息设置
    本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ... [详细]
  • 在Ubuntu 16.04 LTS上配置Qt Creator开发环境
    本文详细介绍了如何在Ubuntu 16.04 LTS系统中安装和配置Qt Creator,涵盖了从下载到安装的全过程,并提供了常见问题的解决方案。 ... [详细]
  • 使用Python在SAE上开发新浪微博应用的初步探索
    最近重新审视了新浪云平台(SAE)提供的服务,发现其已支持Python开发。本文将详细介绍如何利用Django框架构建一个简单的新浪微博应用,并分享开发过程中的关键步骤。 ... [详细]
  • 优化局域网SSH连接延迟问题的解决方案
    本文介绍了解决局域网内SSH连接到服务器时出现长时间等待问题的方法。通过调整配置和优化网络设置,可以显著缩短SSH连接的时间。 ... [详细]
  • 选择适合生产环境的Docker存储驱动
    本文旨在探讨如何在生产环境中选择合适的Docker存储驱动,并详细介绍不同Linux发行版下的配置方法。通过参考官方文档和兼容性矩阵,提供实用的操作指南。 ... [详细]
  • 本文详细介绍了如何通过RPM包在Linux系统(如CentOS)上安装MySQL 5.6。涵盖了检查现有安装、下载和安装RPM包、配置MySQL以及设置远程访问和开机自启动等步骤。 ... [详细]
  • 阿里云ecs怎么配置php环境,阿里云ecs配置选择 ... [详细]
  • 本文详细介绍了如何在预装Ubuntu系统的笔记本电脑上安装Windows 7。针对没有光驱的情况,提供了通过USB安装的具体方法,并解决了分区、驱动器无法识别等问题。 ... [详细]
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社区 版权所有