企业级虚拟化实战之KVM——shell脚本实现虚拟机安装、管理、快照、存储池、批量创建

问题背景

使用shell或者python脚本完成KVM虚拟机的批量创建,要求如下:
(1)脚本需要人机交互,当输入虚拟机数量,虚拟机规格参数后,即可批量创建相应机器;
(2)使用EXP技术从网络安装虚拟机,创建多个时使用复制原理;
(3)脚本实现虚拟机生命周期管理,即可实现关机,启动,快照,从快照启动等等。

README.txt

本程序实现了虚拟机安装、虚拟机管理、快照管理、存储池管理、批量创建虚拟机功能

# cat README.txt
一、使用说明
1.解压本程序到任意目录
2.配置符合实际的变量信息
    2.1 虚拟机安装 lib/install_vars    #虚拟机安装依赖于PXE-kickstart
        *install_source="ftp://192.168.213.163/centos7u7" #安装源
        *extra_args="ks=ftp://192.168.213.163/centos-7-ks.cfg" #kickstart配置文件
        其他变量可按需要配置
    2.2 批量创建虚拟机 lib/batch_install_vars #批量创建虚拟机需要后备镜像
        *dir=/data/vmdisk   #批量创建的虚拟机镜像存储目录
        *backup_img=${dir}/centos7u4.qcow2  #后备镜像
3.执行主程序main.sh启动程序

二、程序开发目录
zhao_manage_kvm/
|-- etc                     #程序执行目录
|   |-- batch_install_vm.sh #批量创建虚拟机程序
|   |-- install_vm.sh       #虚拟机安装程序
|   |-- manage_pool.sh      #虚拟机管理程序
|   |-- manage_snapshot.sh  #虚拟机快照管理程序
|   `-- manage_vm.sh        #存储池管理程序
|-- lib                     #程序配置目录
|   |-- batch_install_vars  #批量创建虚拟机所需变量(请根据实际修改)
|   |-- install_vars        #虚拟机安装所需变量(请根据实际修改)
    `-- template.xml        #虚拟机配置文件模板
|-- main.sh                 #主程序入口
`-- README.txt              #使用说明

2 directories, 10 files

三、程序功能
1.虚拟机安装
2.虚拟机管理
|-- 2.1 启动虚拟机
|-- 2.2 查看虚拟机信息
|-- 2.3 VNC连接虚拟机
|-- 2.4 设置开机启动
|-- 2.5 取消开机启动
|-- 2.6 关闭虚拟机
|-- 2.7 强制关闭虚拟机
|-- 2.8 删除虚拟机
`-- 2.9 返回上一级菜单
3.虚拟机快照管理
|-- 3.1 创建虚拟机快照
|-- 3.2 查看虚拟机快照信息
|-- 3.3 查看快照详细信息
|-- 3.4 还原虚拟机快照
|-- 3.5 删除虚拟机快照
`-- 3.6 返回上一级菜单
4.存储池管理
|-- 4.1 创建本地存储池
|-- 4.2 启动存储池
|-- 4.3 设置存储池自启动
|-- 4.4 查看存储池信息
|-- 4.5 删除存储池
`-- 4.6 返回上一级菜单
5.批量创建虚拟机
6.退出

问题解决

1.随机MAC地址

错误:从/etc/libvirt/qemu/ybc.xml定义域失败
错误:XML错误:意外单播mac地址,找到多播’cb:20:63:79:9d:78’

随机生成的MAC地址是多播,无法正常定义虚拟机

#vm_mac=`openssl rand -hex 6 | sed -E "s/(..)/\1:/g; s/:$//"`
vm_mac="52:54:$(dd if=/dev/urandom count=1 2>/dev/null |md5sum|sed 's/^\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4/')"

在这里插入图片描述

2.sed里使用变量

sed -ri "/vm_port/ s/vm_port/${vm_port}/" ${conf_file}

sed后面的表达式一般用单引号,需要使用变量时可以使用双引号

3.sed里使用转义符

sed:-e 表达式 #1,字符 20:“s”的未知选项

变量vm_img=/data/vmdisk/test.img是一个路径,sed无法识别,要进行转义处理

[root@7u4-test ~]# vm_img=/data/vmdisk/test.img
[root@7u4-test ~]# cat test
vm_img
[root@7u4-test ~]# sed -ri "/vm_img/ s/vm_img/${vm_img}/" test
sed:-e 表达式 #1,字符 20:“s”的未知选项
[root@7u4-test ~]# vm_img0=`echo ${vm_img}|sed 's#\/#\\\/#g'`	#必须是单引号
[root@7u4-test ~]# echo $vm_img0
\/data\/vmdisk\/test.img
[root@7u4-test ~]# sed -ri "/vm_img/ s/vm_img/${vm_img0}/" test
[root@7u4-test ~]# cat test
/data/vmdisk/test.img

https://blog.csdn.net/qq_34629671/article/details/54233064

4.PXE装机报错Can’t mount root filesystem

PXE装机报错,OSError:No space left on device;Warning:Can’t mount root filesystem;Warning:/dev/root dose not exist
在这里插入图片描述在PXE自动装机时,警告写入空间不足,是内存太小(1G),做PXE装机,客户机要给足够的内存,至少2个G,安装完成后可以动态降低内存

5.CentOS7.6图形化界面中文显示乱码

#安装中文包
yum install kde-l10n-Chinese
#安装glibc-common
yum reinstall glibc-common
#查看系统是否支持中文包
locale -a |grep zh
#修改/etc/locale.conf(localectl set-locale LANG=zh_CN.UTF-8)
LANG="zh_CN.utf8"
#重启
reboot

使用示例

1.虚拟机安装(虚拟机安装依赖于PXE-kickstart)
在这里插入图片描述
通过 vncviewer 192.168.213.171:5940 查看安装过程,安装完成后VNC会自动断开连接(测试使用时间6min),控制台会显示Install Vm Sucessed
在这里插入图片描述2.虚拟机管理
在这里插入图片描述在这里插入图片描述输入虚拟机名称会自动获取VNC端口
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述3.虚拟机快照管理
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述4.存储池管理
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述5.批量创建虚拟机(批量创建虚拟机需要后备镜像)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值