2. 部署基本操作系統虛擬機
3. 配置虛擬機
3.1 修改/etc/sysconfig/hostname
3.2 刪除/etc/sysconfig/network-scripts/ifcfg-ethx和主機有關信息
3.3 編輯/etc/udev/rules.d/70-persistent-net.rules
3.4 編輯/etc/yum.repo.d/
3.5 配置console到node99無密碼訪問
3.6 配置sshd配置文件
3.7 配置virsh console訪問虛擬機
4. 克隆虛擬機
1. 概述
通過為KVM虛擬機安裝操作系統只是安裝最基本的操作系統模板。這是必須的,因為每個虛擬機都需要操作系統。實際應用過程中,主要是基於操作系統安裝好環境之后,再作為業務模板,方便快速部署或者遷移等。
本篇博客主要介紹該如何制作KVM模板,和克隆KVM虛擬機。
2. 部署基本操作系統虛擬機
本篇博客主要是以虛擬機node99作為基本操作系統模板。首先為node99配置硬件,並安裝操作系統。
操作系統以本地安裝方式,具體參見博客《》
3. 配置虛擬機
node99安裝好操作系統之后,需要對其內部配置進行修改,去掉一些信息
3.1 修改/etc/sysconfig/hostname
刪除/etc/sysconfig/network中'HOSTNAME=node99'一行
並添加"NOZEROCONF=yes"
3.2 刪除/etc/sysconfig/network-scripts/ifcfg-ethx和主機有關信息
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=dhcp
NAME=eth0
上面文件已經刪除了uuid,hardmac等和主機有關的信息
3.3 編輯/etc/udev/rules.d/70-persistent-net.rules
刪除內容
# PCI device 0x1af4:0x1000 (virtio-pci)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:00:00:80:00:99", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
# PCI device 0x1af4:0x1000 (virtio-pci)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:00:00:10:00:99", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"
3.4 編輯/etc/yum.repo.d/
執行命令cd /etc/yum.repo.d,創建目錄mkdir oldrepo,然后把之前的YUM源配置文件移動其中'mv Cent* oldrepo',在從oldrepo中復制文件'cp .oldreop/CentOS-Media.repo ../CentOS-ftp.repo'
編輯CentOS-ftp.repo,內容如下
[console-ftp]
name=CentOS-$releasever - ftp
baseurl=ftp://192.168.80.8/pub/osimage/centos6.5
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
執行yum repolist驗證,如下圖顯示,則表示成功。

3.5 配置console到node99無密碼訪問
配置console到node99(模板虛擬機)的無密碼登陸,本質就是用一對公密鑰對來實現無密碼通信。兩種方式:
- 將consle的公鑰上傳到模板主機/root/.ssh/authorized_keys
- 在模板下生成公密鑰,將私鑰下載到console的/root/.ssh/目錄下
這個過程可以不用配置,因為在實際生成過程中,即便是開始未配置宿主機到虛擬機的無密碼登陸,后期也可以手動配置或者批量管理。
3.6 配置sshd配置文件
3.7 配置virsh console訪問虛擬機
配置kvm虛擬機的控制台登陸,方式有很多種,其基本思路都是修改kvm虛擬機操作系統內部的三個文件,即
- /etc/inittab
- /etc/securety
- /boot/grub/grub.conf
這三個文件配置修改的主要目的是為kvm虛擬機配置虛擬控制台ttyS0,讓宿主機能夠通過virsh console xxxx方式登陸虛擬機
這種登陸方式主要預防在宿主機無圖形界面,無VNC登陸,無法ssh登陸的情況下,進行虛擬機登陸管理和維護
具體文件內容如下:
/etc/inittab最后一行添加以下內容
S0:12345:respawn:/sbin/agetty ttyS0 115200
/etc/securetty最后一行添加以下內容
ttyS0
/boot/grub/grub.conf修改如下
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.32-431.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=UUID=f41dc2f7-a05c-4b17-9204-eef2459c21d3 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet console=ttyS0
initrd /initramfs-2.6.32-431.el6.x86_64.img
上面三個文件,在對應虛擬機修改好后,重啟虛擬機即可生效。
登陸測試
本篇博客已經對node11修改完成,執行命令:virsh console node11,輸入root,回車輸入密碼即可登陸,如下:

登出
通過ctrl + D ,登出node11,此時處於node11 login:界面。此時輸入ctrl + ],即可回到宿主機的命令行

總結
對於配置KVM虛擬機的控制台登陸,有四種方式可取:
- 等kvm虛擬機創建之后手動修改
- 等kvm虛擬機啟動之后,批量分發配置文件
- kvm虛擬機安裝時,若是--location安裝方式,通過傳入內核參數進行配置
- kvm虛擬機安裝時,若是--pxe安裝方式,通過定義ks.cfg文件中的內核參數
4. 克隆虛擬機
進行完node99的配置之后,對node99執行poweroff操作。這樣node99只需要保持關機狀態,即可以其為模板,創建其他虛擬機。
因為在console的DHCP配置中,配置了客戶機的MAC綁定IP,DNS服務,網關信息,主機名等,因此克隆虛擬機時,只需要指定虛擬機的MAC即可。
注:假如配置了kvm虛擬機的VNC,則還需要在啟動克隆的虛擬機之前,對克隆的虛擬機進行配置修改。virsh edit nodexx,修改VNC配置段即可。
執行命令virsh clone -o node99 -n node11 -f /mnt/data/vhost/node11.img -m 00:00:00:80:00:11 -m 00:00:00:10:00:11,即可從node99克隆node11。
編輯腳本如下:
#!/bin/bash
if [ "$#" != "2" ];then
echo "usage:$0 [moudle] [nodenum]" && exit 0
fi
SRCNODE=$1
DESNODE=$2
IMGFILE=/mnt/data/vhost/node${DESNODE}.img
virt-clone -o node${SRCNODE} -n node${DESNODE} -f ${IMGFILE} -m 00:00:00:80:00:${DESNODE} -m 00:00:00:10:00:${DESNODE}
