运维 打造高效的运维测试环境

lework · 2019年12月31日 · 460 次阅读
本帖已被设为精华帖!

众所周知,运维很大的一部分时间都在安装软件,需要我们不停的重建测试环境而应对我们的部署流程。为了省下重建环境所需要的繁琐流程,我们可以使用虚拟化的快照功能,这样我们就可以快速的恢复已定义好的环境信息。如果说集群需要很多个机器,比如像 kubernetes 高可用集群,至少需要 5 台虚拟机才能搭建起来,我们按照恢复快照的方式进行一个一个的恢复,耗时不说,这也算是重复劳动力呀。所以,本人比较懒,想把这部分的时间也省下来。也就有了打造高效的运维测试环境这一文。

简而言之, 高效运维测试环境的需求就是:

  • 快速重建环境

实验环境

本次实验环境选做 个人 PC 电脑 作为宿主机,有自己的服务器的请边上走,看看思路就行。

宿主机简介

  • OS:Windows 10 x64
  • CPU: i7-6700HQ
  • MEM:16G

VMware Workstation Pro

  • 版本:15.5.1
  • NAT 网络:192.168.77.0/24

虚拟机运行在 VMware 的 nat 网络中,不在宿主机网络里。

模板制作

  • 系统模板以各自的需求为主,没有统一的标准。
  • 系统模板尽可能的少安装软件,减少体积,以便加快导入时间。
  • 系统模板中 IP 必须以静态地址设置,DHCP 的需要自己手动修改脚本以适应。

脚本文件

@echo off
Setlocal enabledelayedexpansion
::CODER BY lework

title VMware Workstation 虚拟机批量管理

IF EXIST "%PROGRAMFILES%\VMWare\VMWare Workstation\vmrun.exe" SET VMwarePath=%PROGRAMFILES%\VMWare\VMWare Workstation
IF EXIST "%PROGRAMFILES(X86)%\VMWare\VMWare Workstation\vmrun.exe" SET VMwarePath=%PROGRAMFILES(X86)%\VMWare\VMWare Workstation
IF EXIST "%PROGRAMFILES%\VMware\VMware VIX\vmrun.exe" SET VMwarePath=%PROGRAMFILES%\VMware\VMware VIX
IF EXIST "%PROGRAMFILES(X86)%\VMware\VMware VIX\vmrun.exe" SET VMRUN=%PROGRAMFILES(X86)%\VMware\VMware VIX

::变量设置
::set VMwarePath="C:\Program Files (x86)\VMware\VMware Workstation"
set VMpath="E:\Virtual Machines"
set VMname=CentOS_7.7_x64_node
set VMSnapshot=init
set VMcount=5
set VMowa="E:\Virtual Machines\CentOS 7.7_x64_base.ova"
set VMuser=root
set VMpass=123456
set VMipStart=10
set VMnetwork=192.168.77


:init
cls
echo.
echo. VMware Workstation 虚拟机批量管理
echo.
echo ==============================
echo.
echo. 输入 0 一键初始化(包含1,2,3步骤)
echo. 输入 1 创建虚拟机
echo. 输入 2 设置ip地址
echo. 输入 3 创建快照
echo. 输入 4 查看启动的虚拟机
echo. 输入 5 启动虚拟机
echo. 输入 6 关闭虚拟机
echo. 输入 7 重启虚拟机
echo. 输入 8 恢复虚拟机快照
echo. 输入 9 删除虚拟机
echo. 输入 10 挂起虚拟机
echo. 输入 11 暂停虚拟机
echo. 输入 12 恢复虚拟机
echo. 输入 q 退出
echo.
echo ==============================
echo.

cd /d "%VMwarePath%"

set "input="
set /p input=请输入您的选择:
echo.
if "%input%"=="q" goto exit
if "%input%"=="0" goto oneKey
if "%input%"=="1" goto create
if "%input%"=="2" goto setip
if "%input%"=="3" goto snapshot
if "%input%"=="4" goto list
if "%input%"=="5" goto start
if "%input%"=="6" goto stop
if "%input%"=="7" goto restart
if "%input%"=="8" goto revertToSnapshot
if "%input%"=="9" goto delete
if "%input%"=="10" goto suspend
if "%input%"=="11" goto pausevm
if "%input%"=="12" goto unpausevm

:wait
echo. 
echo 执行完毕, 等待中...
for /l %%a in (1,1,5) do (
ping /n 2 127.1>nul
set /p a=^><nul
)

goto init

:oneKey
echo [创建虚拟机...]
set "cname="
set "ccount="
set /p VMname=请输入虚拟机名称(默认:%VMname%):
set /p VMcount=请输入虚拟机数量(默认:%VMcount%):
set /p VMSnapshot=请输入快照名称(默认:%VMSnapshot%):
set /p VMuser=请输入用户名(默认:%VMuser%):
set /p VMpass=请输入密码(默认:%VMpass%):
set /p VMipStart=请输入ip开始地址(默认:%VMipStart%):

echo.
echo =============
echo. 
echo. 虚拟机模板: !VMowa!
echo. 虚拟机存放目录: !VMpath!
echo. 虚拟机名称: !VMname!
echo. 虚拟机数量: !VMcount!
echo. 虚拟机初始快照名称: !VMSnapshot!
echo. 虚拟机用户名: !VMuser!
echo. 虚拟机密码: !VMpass!
echo. 虚拟机网段: !VMnetwork!
echo. 虚拟机ip开始地址: !VMipStart!
echo.
echo =============

for /l %%a in (1,1,!VMcount!) do (
echo.
echo 创建虚拟机: !VMname!%%a
cd OVFTool
ovftool --name=!VMname!%%a !VMowa! !VMpath!
cd ..
echo 启动虚拟机: !VMname!%%a
vmrun -T ws start !VMpath!\!VMname!%%a\!VMname!%%a.vmx
)

echo 设置ip:
for /l %%a in (1,1,%VMcount%) do (
set name=!VMname!%%a
set /a num=%VMipStart%+%%a-1
set ip=!VMnetwork!.!num!
echo !name!:!ip!
vmrun -T ws -gu !VMuser! -gp !VMpass! runProgramInGuest !VMpath!\!name!\!name!.vmx /bin/bash -c "sudo sed -i 's/^IPADDR=.*/IPADDR=!ip!/g' /etc/sysconfig/network-scripts/ifcfg-ens33;/etc/init.d/network restart || sudo sed -i 's/^address.*$/address !ip!/g' /etc/network/interfaces;/etc/init.d/network restart" nogui
)

echo 创建快照:
for /l %%a in (1,1,%VMcount%) do (
set name=!VMname!%%a
echo !name!
vmrun -T ws stop !VMpath!\!name!\!name!.vmx nogui
vmrun -T ws snapshot !VMpath!\!name!\!name!.vmx !VMSnapshot! nogui
vmrun -T ws start !VMpath!\!VMname!%%a\!VMname!%%a.vmx nogui
)

goto wait


:start
echo [启动虚拟机...]
set /p VMname=请输入虚拟机名称(默认:%VMname%):
set /p VMcount=请输入虚拟机数量(默认:%VMcount%):
for /l %%a in (1,1,%VMcount%) do (
set name=!VMname!%%a
echo !name!
vmrun -T ws start !VMpath!\!name!\!name!.vmx nogui
)
goto wait


:stop
echo [关闭虚拟机...]
set /p VMname=请输入虚拟机名称(默认:%VMname%):
set /p VMcount=请输入虚拟机数量(默认:%VMcount%):
for /l %%a in (1,1,%VMcount%) do (
set name=!VMname!%%a
echo !name!
vmrun -T ws stop !VMpath!\!name!\!name!.vmx nogui
)
goto wait


:restart
echo [重启虚拟机...]
set /p VMname=请输入虚拟机名称(默认:%VMname%):
set /p VMcount=请输入虚拟机数量(默认:%VMcount%):
for /l %%a in (1,1,%VMcount%) do (
set name=!VMname!%%a
echo !name!
vmrun -T ws stop !VMpath!\!name!\!name!.vmx nogui
vmrun -T ws start !VMpath!\!name!\!name!.vmx nogui
)
goto wait


:suspend
echo [挂起虚拟机...]
set /p VMname=请输入虚拟机名称(默认:%VMname%):
set /p VMcount=请输入虚拟机数量(默认:%VMcount%):
for /l %%a in (1,1,%VMcount%) do (
set name=!VMname!%%a
echo !name!
vmrun -T ws suspend !VMpath!\!name!\!name!.vmx nogui
)
goto wait


:pausevm
echo [暂停虚拟机...]
set /p VMname=请输入虚拟机名称(默认:%VMname%):
set /p VMcount=请输入虚拟机数量(默认:%VMcount%):
for /l %%a in (1,1,%VMcount%) do (
set name=!VMname!%%a
echo !name!
vmrun -T ws pause !VMpath!\!name!\!name!.vmx nogui
)
goto wait


:unpausevm
echo [恢复虚拟机...]
set /p VMname=请输入虚拟机名称(默认:%VMname%):
set /p VMcount=请输入虚拟机数量(默认:%VMcount%):
for /l %%a in (1,1,%VMcount%) do (
set name=!VMname!%%a
echo !name!
vmrun -T ws unpause !VMpath!\!name!\!name!.vmx nogui
)
goto wait


:revertToSnapshot
echo [恢复虚拟机快照...]
set /p VMname=请输入虚拟机名称(默认:%VMname%):
set /p VMcount=请输入虚拟机数量(默认:%VMcount%):
set /p VMSnapshot=请输入快照名称(默认:%VMSnapshot%):
for /l %%a in (1,1,%VMcount%) do (
set name=!VMname!%%a
echo !name!
vmrun -T ws revertToSnapshot !VMpath!\!name!\!name!.vmx !VMSnapshot! nogui
)
goto wait

:list
echo [虚拟机启动列表...]
vmrun list
echo.
pause
goto wait


:create
echo [创建虚拟机...]
set "cname="
set "ccount="
set /p VMname=请输入虚拟机名称(默认:%VMname%):
set /p VMcount=请输入虚拟机数量(默认:%VMcount%):

echo.
echo =============
echo. 
echo. 虚拟机模板: !VMowa!
echo. 虚拟机存放目录: !VMpath!
echo. 虚拟机名称: !VMname!
echo. 虚拟机数量: !VMcount!
echo.
echo =============

for /l %%a in (1,1,!VMcount!) do (
echo.
echo 创建虚拟机: !VMname!%%a
cd OVFTool
ovftool --name=!VMname!%%a !VMowa! !VMpath!
cd ..
echo 启动虚拟机: !VMname!%%a
vmrun -T ws start !VMpath!\!VMname!%%a\!VMname!%%a.vmx
)
goto wait


:delete
echo [删除虚拟机...]
set /p VMname=请输入虚拟机名称(默认:%VMname%):
set /p VMcount=请输入虚拟机数量(默认:%VMcount%):
set is=no
set /p is=确定删除么?(yes/no, 默认:%is%):

if "%is%" NEQ "yes" (
echo 已取消
goto wait
)

echo 关闭vmware
taskkill /f /t /im vmware.exe

for /l %%a in (1,1,%VMcount%) do (
set name=!VMname!%%a
echo 删除: !name!
vmrun -T ws stop !VMpath!\!name!\!name!.vmx nogui
vmrun deleteVM !VMpath!\!name!\!name!.vmx nogui
)
goto wait


:snapshot
echo [创建快照...]
set /p VMname=请输入虚拟机名称(默认:%VMname%):
set /p VMcount=请输入虚拟机数量(默认:%VMcount%):
set /p VMSnapshot=请输入快照名称(默认:%VMSnapshot%):
for /l %%a in (1,1,%VMcount%) do (
set name=!VMname!%%a
echo !name!
vmrun -T ws stop !VMpath!\!name!\!name!.vmx nogui
vmrun -T ws snapshot !VMpath!\!name!\!name!.vmx !VMSnapshot! nogui
vmrun -T ws start !VMpath!\!VMname!%%a\!VMname!%%a.vmx nogui
)
goto wait


:setip
echo [设置ip地址...]
set /p VMname=请输入虚拟机名称(默认:%VMname%):
set /p VMcount=请输入虚拟机数量(默认:%VMcount%):
set /p VMuser=请输入用户名(默认:%VMuser%):
set /p VMpass=请输入密码(默认:%VMpass%):
set /p VMipStart=请输入ip开始地址(默认:%VMipStart%):

for /l %%a in (1,1,%VMcount%) do (
set name=!VMname!%%a
set /a num=%VMipStart%+%%a-1
set ip=!VMnetwork!.!num!
echo !name!:!ip!
vmrun -T ws -gu !VMuser! -gp !VMpass! runProgramInGuest !VMpath!\!name!\!name!.vmx /bin/bash -c "sudo sed -i 's/^IPADDR=.*/IPADDR=!ip!/g' /etc/sysconfig/network-scripts/ifcfg-ens33;/etc/init.d/network restart || sudo sed -i 's/^address.*$/address !ip!/g' /etc/network/interfaces;/etc/init.d/network restart" nogui
)
goto wait


:exit
echo 退出...
ping /n 5 127.1>nul
exit

变量说明

  • VMpath="E:\Virtual Machines" 设置虚拟机存放的目录
  • VMname=CentOS_7.7_x64_node 设置虚拟机名称
  • VMSnapshot=init 设置虚拟机快照名称
  • VMcount=5 设置虚拟机个数
  • VMowa="E:\Virtual Machines\CentOS 7.7_x64_base.ova" 设置虚拟机模板
  • VMuser=root 设置虚拟机用户
  • VMpass=123456 设置虚拟机密码
  • VMipStart=10 设置虚拟机 ip 起始数, 如:192.168.77.10
  • VMnetwork=192.168.77 设置虚拟机网段, 也就是 vmware 的 nat 网段

变量设置好,是方便在使用的时候不需要重复填写。

根据自身情况设置变量后,即可使用。

另存为 vmware-batch.bat , 双击运行就行。

脚本运行

点击运行开始界面


 VMware Workstation 虚拟机批量管理

==============================

 输入 0 一键初始化(包含1,2,3步骤)
 输入 1 创建虚拟机
 输入 2 设置ip地址
 输入 3 创建快照
 输入 4 查看启动的虚拟机
 输入 5 启动虚拟机
 输入 6 关闭虚拟机
 输入 7 重启虚拟机
 输入 8 恢复虚拟机快照
 输入 9 删除虚拟机
 输入 10 挂起虚拟机
 输入 11 暂停虚拟机
 输入 12 恢复虚拟机
 输入 q 退出

==============================

请输入您的选择:

输入数字即可进入相关操作

初始化环境

选择 0 一键初始化,进行创建虚拟机,设置 ip 地址,创建快照操作

请输入您的选择:0

[创建虚拟机...]
请输入虚拟机名称(默认:CentOS_7.7_x64_node):
请输入虚拟机数量(默认:5):3
请输入快照名称(默认:init):
请输入用户名(默认:root):
请输入密码(默认:123456):
请输入ip开始地址(默认:10):

=============

 虚拟机模板: "E:\Virtual Machines\CentOS 7.7_x64_base.ova"
 虚拟机存放目录: "E:\Virtual Machines"
 虚拟机名称: CentOS_7.7_x64_node
 虚拟机数量: 3
 虚拟机初始快照名称: init
 虚拟机用户名: root
 虚拟机密码: 123456
 虚拟机网段: 192.168.77
 虚拟机ip开始地址: 10

=============

创建虚拟机: CentOS_7.7_x64_node1
Opening OVA source: E:\Virtual Machines\CentOS 7.7_x64_base.ova
The manifest validates
Opening VMX target: E:\Virtual Machines
Writing VMX file: E:\Virtual Machines\CentOS_7.7_x64_node1\CentOS_7.7_x64_node1.vmx
Transfer Completed
Completed successfully
启动虚拟机: CentOS_7.7_x64_node1

创建虚拟机: CentOS_7.7_x64_node2
Opening OVA source: E:\Virtual Machines\CentOS 7.7_x64_base.ova
The manifest validates
Opening VMX target: E:\Virtual Machines
Writing VMX file: E:\Virtual Machines\CentOS_7.7_x64_node2\CentOS_7.7_x64_node2.vmx
Transfer Completed
Completed successfully
启动虚拟机: CentOS_7.7_x64_node2

创建虚拟机: CentOS_7.7_x64_node3
Opening OVA source: E:\Virtual Machines\CentOS 7.7_x64_base.ova
The manifest validates
Opening VMX target: E:\Virtual Machines
Writing VMX file: E:\Virtual Machines\CentOS_7.7_x64_node3\CentOS_7.7_x64_node3.vmx
Transfer Completed
Completed successfully
启动虚拟机: CentOS_7.7_x64_node3
设置ip:
CentOS_7.7_x64_node1:192.168.77.10
CentOS_7.7_x64_node2:192.168.77.11
CentOS_7.7_x64_node3:192.168.77.12
创建快照:
CentOS_7.7_x64_node1
CentOS_7.7_x64_node2
CentOS_7.7_x64_node3

执行完毕, 等待中...
>>>>>

不输入时,按照默认设置的变量为准

恢复快照

请输入您的选择:8

[恢复虚拟机快照...]
请输入虚拟机名称(默认:CentOS_7.7_x64_node):
请输入虚拟机数量(默认:3):
请输入快照名称(默认:init):
CentOS_7.7_x64_node1
CentOS_7.7_x64_node2
CentOS_7.7_x64_node3

执行完毕, 等待中...
>>>>>

删除虚拟机

请输入您的选择:9

[删除虚拟机...]
请输入虚拟机名称(默认:CentOS_7.7_x64_node):
请输入虚拟机数量(默认:3):
确定删除么?(yes/no, 默认:no):yes
关闭vmware
成功: 已终止 PID 12912 (属于 PID 10352 子进程)的进程。
成功: 已终止 PID 13852 (属于 PID 10352 子进程)的进程。
成功: 已终止 PID 10352 (属于 PID 4240 子进程)的进程。
删除: CentOS_7.7_x64_node1
删除: CentOS_7.7_x64_node2
删除: CentOS_7.7_x64_node3

执行完毕, 等待中...
>>>>>

是不是,超级超级方便,以前需要手工操作,现在只需要输入几个数字就可以去喝咖啡了。

本人使用的相关系统模板和脚本放在百度云盘了,有需要的可以来白嫖了。

链接:https://pan.baidu.com/s/1id5lY040hW5jrIyLtiLc-A 提取码:a4i2

远程管理

想实现远程管理 vsphere, esxi 的,请查看 vmrun 的相关文档

lework 将本帖设为了精华贴 12月31日 15:12
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册