众所周知,运维很大的一部分时间都在安装软件,需要我们不停的重建测试环境而应对我们的部署流程。为了省下重建环境所需要的繁琐流程,我们可以使用虚拟化的快照功能,这样我们就可以快速的恢复已定义好的环境信息。如果说集群需要很多个机器,比如像 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.10VMnetwork=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 的相关文档