經過一晚上的折騰, 終於驗證出來一個非常簡單的方法. 也比較好理解和使用. 這里簡單記錄一下:
使用linux上面powershell安裝vm powercli 連接vcenter 通過計划任務自動創建部分虛擬機的快照以及自動清理過期快照的辦法
1. 通過微軟官方文檔,在centos7 上面安裝配置 powershell . 命令很簡單 大家自行下載安裝即可
sudo yum install https://github.com/PowerShell/PowerShell/releases/download/v7.0.1/powershell-lts-7.0.1-1.rhel.7.x86_64.rpm
2. 安裝上 powershell 之后 可以安裝 vm 的powercli 工具 也是通過包管理器進行安裝 因為網絡原因 可能需要花一定的時間
我一般都是在root 上面上面 處理起來比較簡單了 pwsh #進入powershell 的命令行界面 輸入 Install-Module -Name VMware.PowerCLI -Scope CurrentUser 進行安裝powercli 時間可能會很漫長
3. 安裝完成之后就可以進行連接 自己的 vCenter了 可以進行簡單測試
Connect-VIServer vcenterip -u vcenteruser -Password YourPasswords
我不知道是我設置的原因 還是其他 我每次登陸都要花 至少 3分鍾. 原因不明確. 但是的確能登錄上.
4. 登錄上之后就可以執行腳本了 一個很簡單的創建移除腳本的命令樣式如下
創建快照:
get-vm -name yourvmname |new-snapshot -name (date +%Y%m%d)
# 注意 我這個命令快照的名字是當前日期.
移除快照
get-vm -name yourvmname |get-snapshot -name (date -d '5 days ago' +%Y%m%d) |remove-snapshot
#注意這個命令能夠移除 名字是五天前日期的快照.
5. 設置計划任務, 因為自己要做的虛擬機快照比較多, 索引應該放到一個文件list里面會好一些.
所以第一步創建一個list 里面僅僅放一下 虛擬機的名字
vim /alert/vmlist
yourvmname1
yourvmname2
#注意 名字一定要符合 發生了變化要定期改.
第二步 使用foreach 語法編寫一個腳本用來創建快照
Connect-VIServer yourvcenterip -u root -Password yourpasswords $i=0;Get-Content /alert/vmlist |foreach {get-vm -name $_ |new-snapshot -name (date +%Y%m%d);$i++}
編寫一個刪除快照的腳本, 注意一點刪除快照要增加一個默認值. 能夠默認刪除快照信息
$ConfirmPreference = 'None' Connect-VIServer yourvcenterip -u root -Password yourpasswords $i=0;Get-Content /alert/vmlist |foreach {get-vm -name $_ |get-snapshot -name (date -d '5 days ago' +%Y%m%d) |remove-snapshot;$i++} $i=0;Get-Content /alert/vmlist |foreach {get-vm -name $_ |get-snapshot -name (date -d '6 days ago' +%Y%m%d) |remove-snapshot;$i++} $i=0;Get-Content /alert/vmlist |foreach {get-vm -name $_ |get-snapshot -name (date -d '7 days ago' +%Y%m%d) |remove-snapshot;$i++}
# 注意 我這個刪除是默認刪除 最近四五天的快照 , 多寫幾個 避免有某天的快照刪除出現異常. 快照多了 太影響性能了.
6. 創建計划任務
Linux下面創建計划任務的方式比較簡單 crontab -e的方式就可以了 增加的內容基本上為 1 23 * * * pwsh /alert/mksnapshot 1 22 * * * pwsh /alert/rmsnapshot 每天的 晚上十點自動刪除日期是五天前, 六天前 和七天前的快照 每天的 晚上十一點自動創建一個為當前日期的不帶內存鏡像的快照. 注意快照一定不要太多 重要的事情一定要多說幾遍.
7. 其他說明
包含內存映象的快照
get-vm -name yourvmname |new-snapshot -name (date +%Y%m%d) -Memory -Quiesce
# 注意增加一個 -Memory -Quiesce 的參數就能夠實現帶內存鏡像的快照
但是這個會嚴重影響快照的制作速度
不帶內存影響大概3秒鍾一個 帶內存鏡像的話 20G內存的虛擬機 一般配置的服務器 需要12min 才能做一個快照. 刪除的速度也會明顯變長