zoukankan      html  css  js  c++  java
  • 企业级虚拟化实战之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.批量创建虚拟机(批量创建虚拟机需要后备镜像)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    字符串格式化及操作操作
    操作文件
    python学习笔记(数据类型)
    抓包工具之—charles碎言碎语
    jmeter之关联操作
    eclipse插件Maven添加依赖查询无结果的解决方法(Select Dependency doesn't work)
    java使用this关键字调用本类重载构造器
    无法安装Windows Live“OnCatalogResult:0x80190194”错误的解决方法
    JavaScript笔试必备语句
    VS2015详细安装步骤
  • 原文地址:https://www.cnblogs.com/zhaoya2019/p/13141685.html
Copyright © 2011-2022 走看看