热门标签 | 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系统中的expect命令及其在自动化任务中的应用,同时探讨了Python中的pexpect模块如何实现类似功能。 ... [详细]
  • 本文详细介绍了如何在 CentOS 7 及其衍生发行版(如 Red Hat, Oracle, Scientific Linux 7)上安装和完全卸载 GitLab。包括安装必要的依赖关系、配置防火墙、安装 GitLab 软件包以及常见问题的解决方法。 ... [详细]
  • CentOS下ProFTPD的安装与配置指南
    本文详细介绍在CentOS操作系统上安装和配置ProFTPD服务的方法,包括基本配置、安全设置及高级功能的启用。 ... [详细]
  • Jupyter Notebook多语言环境搭建指南
    本文详细介绍了如何在Linux环境下为Jupyter Notebook配置Python、Python3、R及Go四种编程语言的环境,包括必要的软件安装和配置步骤。 ... [详细]
  • 高级缩放示例.就像谷歌地图一样.它仅缩放图块,但不缩放整个图像.因此,缩放的瓷砖占据了恒定的记忆,并且不会为大型缩放图像调整大小的图像.对于简化的缩放示例lookhere.在Win ... [详细]
  • 汇编语言:编程世界的始祖,连C语言都敬畏三分!
    当C语言还在萌芽阶段时,它首次接触到了汇编语言,并对其简洁性感到震惊。尽管汇编语言的指令极其简单,但它却是所有现代编程语言的基础,其重要性不言而喻。 ... [详细]
  • 本文介绍了Linux操作系统的核心组成部分——内核及其版本分类,以及市面上常见的几种Linux发行版,旨在为初学者提供一个清晰的学习路径。 ... [详细]
  • Vulnhub DC3 实战记录与分析
    本文记录了在 Vulnhub DC3 靶机上的渗透测试过程,包括漏洞利用、内核提权等关键步骤,并总结了实战经验和教训。 ... [详细]
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • 本文详细介绍了在 CentOS 7 系统中配置 fstab 文件以实现开机自动挂载 NFS 共享目录的方法,并解决了常见的配置失败问题。 ... [详细]
  • 本文详细介绍了在 Ubuntu 系统上搭建 Hadoop 集群时遇到的 SSH 密钥认证问题及其解决方案。通过本文,读者可以了解如何在多台虚拟机之间实现无密码 SSH 登录,从而顺利启动 Hadoop 集群。 ... [详细]
  • Linux CentOS 7 安装PostgreSQL 9.5.17 (源码编译)
    近日需要将PostgreSQL数据库从Windows中迁移到Linux中,LinuxCentOS7安装PostgreSQL9.5.17安装过程特此记录。安装环境&#x ... [详细]
  • Ansible:自动化运维工具详解
    Ansible 是一款新兴的自动化运维工具,基于 Python 开发,集成了多种运维工具(如 Puppet、CFEngine、Chef、Func 和 Fabric)的优点,实现了批量系统配置、程序部署和命令执行等功能。本文将详细介绍 Ansible 的架构、特性和优势。 ... [详细]
  • 本文介绍了如何使用Python的Paramiko库批量更新多台服务器的登录密码。通过示例代码展示了具体实现方法,确保了操作的高效性和安全性。Paramiko库提供了强大的SSH2协议支持,使得远程服务器管理变得更加便捷。此外,文章还详细说明了代码的各个部分,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
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社区 版权所有