vRealize Automation 涵蓋了整個虛擬機的生命週期管理,從使用者的申請、主管的核准、Day 1的部署、Day 2的維運管理,到最後資源的回收再利用,都統合在單一平台上並自動化。前幾篇文章中,透過簡單的 Cloud Assembly 藍圖設計,就可以部署出虛擬機,但這個狀態的虛擬機往往還不能直接提供給使用者使用。管理者還會需要再進行系統的初始化設定和調整 (例如:安裝軟體、設定使用者權限、執行 Script...等)。在 vRealize Cloud Assembly 藍圖設計支援 Cloud-init/Cloudbase-init 指令碼,能夠讓虛擬機部署完成後,也完成了系統初始化配置。本文,將說明如何在 Cloud Assembly 藍圖設計中使用 Cloud-init/Cloudbase-init
Cloud-init & Cloudbase-init
Cloud-init 是一個 Linux 環境初始化套件,能夠幫助管理者初始化系統環境,像是設置 hostname、設置使用者初始密碼以及安裝軟體套件...等;Cloudbase-init 其實是用來做環境初始化的套件,差別只是 Cloudbase-init 是給 Windows 系統使用。更詳細的說明請參考『 Cloud-init Documentation 』和『 Cloudbase-init Documentation 』
套件安裝及相關設定
- Ubuntu
目前 Ubuntu 我只有使用 Cloud Image 版本有測試成功 (Ubuntu Cloud Images 下載連結),本例使用的版本為 20.04。
下載 .ova 檔案並上傳至 VMware 環境,部署設定會需要先設定一組密碼
部署完成後,Open VM Console 用預設帳號 ubuntu 登入,登入時會要求更改密碼
接著,需要執行以下指令:
## Remove netplan file(s)sudo rm /etc/netplan/50-cloud-init.yaml## Clear the machine-idsudo truncate -s0 /etc/machine-idsudo rm /var/lib/dbus/machine-idsudo ln -s /etc/machine-id /var/lib/dbus/machine-id## Run cloud-init cleansudo Cloud-init clean
- Windows
安裝 Cloudbase-init 的步驟可以參考『Windows guest initialization with Cloudbase-Init in vCenter』。比較不一樣的地方在,最後一步我沒有勾選 “Run Sysprep”
修改 C:\Program Files\Cloudbase Solutions\Cloudbase-Init\conf\ 路徑底下的 cloudbase-init.conf,新增以下參數:
first_logon_behaviour=no
metadata_services=cloudbaseinit.metadata.services.ovfservice.OvfService
plugins=cloudbaseinit.plugins.windows.createuser.CreateUserPlugin,cloudbaseinit.plugins.windows.setuserpassword.SetUserPasswordPlugin,cloudbaseinit.plugins.common.sshpublickeys.SetUserSSHPublicKeysPlugin,cloudbaseinit.plugins.common.userdata.UserDataPlugin
修改 C:\Program Files\Cloudbase Solutions\Cloudbase-Init\conf\ 路徑底下的cloudbase-init-unattend.conf,將 metadata_services 改用 OvfService
metadata_services=cloudbaseinit.metadata.services.ovfservice.OvfService
將 Cloudbase-init 服務改成 "停用",搭配 VM Customization Spec 的 Run Once 來啟用服務
- VM Customization Specifications
建立 VM 客製化回應檔,注意以下幾個部分:
- 勾選 “Log in automatically as administrator”
- 新增 Run Once 指令,指令如下:
powershell -command "Start-Process cmd -ArgumentList '/c sc config cloudbase-init start= auto && net start cloudbase-init' -Verb runas"
Cloud Assembly 藍圖設計
完成 Template 製作與調整後,接著,在藍圖設計中加入 CloudConfig 語法。本例的藍圖設計可以讓申請者自行輸入帳號與密碼,並加入到 sudo 或 administrators 群組。
Ubuntu 和 Windows 的語法不同,以下提供兩種 YAML 範例
- Ubuntu 藍圖
formatVersion: 1
inputs:
OS_Image:
type: string
title: OS_Image
enum:
- Ubuntu2004
Size:
type: string
title: Size
enum:
- Small
- Medium
- Large
username:
type: string
title: username
password:
type: string
title: password
encrypted: true
resources:
Cloud_vSphere_Machine_1:
type: Cloud.vSphere.Machine
properties:
image: '${input.OS_Image}'
# cpuCount: null
# totalMemoryMB: null
name: '${env.deploymentName}'
flavor: '${input.Size}'
storage:
constraints:
- tag: 'ds:esxi01'
networks:
- network: '${resource.Cloud_vSphere_Network_1.id}'
assignment: static
constraints:
- tag: 'cluster:NBD'
cloudConfig: |
#cloud-config
users:
- name: '${input.username}'
sudo: 'ALL=(ALL) NOPASSWD:ALL'
groups: sudo
shell: /bin/bash
runcmd:
- USER='${input.username}'
- PASS='${input.password}'
- echo $USER:$PASS | /usr/sbin/chpasswd
Cloud_vSphere_Network_1:
type: Cloud.vSphere.Network
properties:
networkType: existing
constraints:
- tag: 'net:vRA-PG'
- Windows 藍圖
formatVersion: 1
inputs:
username:
type: string
title: username
userpasswd:
type: string
encrypted: true
title: password
resources:
Cloud_vSphere_Machine_1:
type: Cloud.vSphere.Machine
properties:
image: WS2019
name: '${env.deploymentName}'
customizationSpec: WinSrv sysprep
flavor: Small
storage:
constraints:
- tag: 'ds:esxi01'
networks:
- network: '${resource.Cloud_vSphere_Network_1.id}'
assignment: static
constraints:
- tag: 'cluster:NBD'
remoteAccess:
authentication: usernamePassword
username: 'administrator'
password: 'VMware1!'
cloudConfig: |
#cloud-config
users:
-
name: '${input.username}'
passwd: '${input.userpasswd}'
primary_group: user
groups: administrators
write_files:
- encoding: b64
content: demo test
path: 'C:\config.txt'
Cloud_vSphere_Network_1:
type: Cloud.vSphere.Network
properties:
networkType: existing
constraints:
- tag: 'net:vRA-PG'
參考連結
- vSphere Customization with Cloud-init While Using vRealize Automation 8 or Cloud
- Making a custom Ubuntu 20.04 LTS (Focal Fossa) VM template that works with cloud-init
沒有留言:
張貼留言