# 使用 CLI 部署 vCenter Server Appliance ###### tags: `vmware` `vcsa` `cli` [toc] 大多數 vCenter Server Appliance(vCSA) 部署安裝都是使用 [GUI 方式](https://docs.vmware.com/tw/VMware-vSphere/7.0/com.vmware.vcenter.install.doc/GUID-477E5C38-2AA8-4319-B2C6-41671570AD27.html)。使用 GUI 部署雖然輕鬆,但是要完成整個 vCSA 部署需要達成 **2 個階段**: - **階段1 - OVA 部署** - **階段2 - 應用裝置設定** 佈署過程也是需要根據精靈提示提供部署和設定資訊的,如果 vCSA 需要重新安裝或調整時,同樣的設定資訊,就需要**手動輸入**完成。既然如此,不如將這些**設定資訊**儲存作為**組態範本**,透過**讀取設定**進行**自動安裝**過程。 這樣一來,同樣的組態參數不會因為手殘輸入錯誤,另一方面也可作為組態備份使用。若要調整部份設定,直接修改組態檔來安裝,也可提昇建置效率。尤其是 LAB 環境需要部署多部 vCSA。 以上的需求目標正好以 **VMware 官方 CLI 安裝程式**可以達成,不用特別使用 OVFTool 部署 OVA,另外寫自動化腳本來完成設備組態。 :::info 取得進一步 vCSA 部署資訊,請參考 [[**部署 vCSA 必要條件**]](https://docs.vmware.com/tw/VMware-vSphere/7.0/com.vmware.vcenter.install.doc/GUID-8F62E118-4805-4B0A-904C-C561C1A692E7.html)。 ::: # CLI 佈署方式 **CLI 部署**方式包括 2 個部份: - **佈署設定的 JSON 檔**: 部署 vCSA 所需的組態資訊。 - **執行 CLI 命令**: 提供自動部署及設定 vCSA 裝置的命令。 CLI 部署會**自動**依序執行 **階段1 - OVA 部署** 和 **階段2 - 應用裝置設定** ,與使用者**不需要進行互動**。 # 準備工作 ## 作業系統需求 目前 VMware vCSA 安裝程式可以支援 **Windows** / **Mac** / **Linux**,選擇自己常用的作業系統即可,這裡我就選擇使用 **Linux(Fedora)** 囉。 相關支援系統需求可參考[[**連結**]](https://docs.vmware.com/tw/VMware-vSphere/7.0/com.vmware.vcenter.install.doc/GUID-BA4FA18C-1049-42AA-A5CD-DE863565251B.html)。 ## 下載安裝 ISO 使用有效帳戶登入 [**Customer Connect**](https://my.vmware.com/web/vmware/),下載 vCSA 安裝程式 ISO 檔案。 > 7.0U3K 安裝 ISO 檔案: **`VMware-VCSA-all-7.0.3-21290409.iso`** ![](https://i.imgur.com/9K9mD6J.png) 下載完畢使用網頁提供 MD5SUM/SHA256SUM 工具驗證檔案完整性。<font color=red><< **務必確認**</font> ![](https://i.imgur.com/aWaEGfV.png) ## 掛載安裝程式 目前 GNOME Files 可以直接選取 ISO 檔後使用 Disk IMage Mounter 直接掛載使用。 <img width=540 src='https://i.imgur.com/9wTWCAs.png'><br> 也可使用以下命令掛載。 ```bash $ sudo mkdir -p /mnt/vcsa $ sudo mount -o loop VMware-VCSA-all-7.0.3-21290409.iso /mnt/vcsa ``` ### 讀我檔案 確認掛載正確後,在其根目錄中開啟讀我檔案(README),目前有中文版本(readme-zh-TW.txt)。 <img width=480 src='https://i.imgur.com/QAYJcwW.png'><br><br> 檢閱其中 **vCSA ISO 檔案和目錄**的相關資訊。 | 目錄 | 說明 | | --- | --- | | **/vcsa** | **vCenter Server Appliance 資料檔案** | | /vcsa-ui-installer | vCenter Server Appliance GUI 安裝程式 | | **/vcsa-cli-installer** | **vCenter Server Appliance CLI 安裝程式** | | /migration-assistant | vCenter Server Migration Assistant | ### 檔案架構 - 系統平台類型分別在目錄中以 **win32** / **mac** / **lin64** 資料夾作為區別。 - **vcsa** 目錄,主要包含 **vCSA OVA 檔案** 和 **OVFTool 工具**。 ```bash vcsa ├── ovftool │ ├── lin64 │ ├── mac │ └── win32 ├── version.txt └── VMware-vCenter-Server-Appliance-7.0.3.01300-21290409_OVF10.ova ``` - **vcsa-cli-installer** 目錄 - 依據支援的作業平台提供 CLI 安裝程式。 - CLI 安裝程式檔案名稱為 **`vcsa-deploy`**。 - Linux, 64-bit: `lin64/vcsa-deploy` - Mac OS X: `mac/vcsa-deploy` - Windows: `win32/vcsa-deploy.exe` - 部署(Install) 使用的 **JSON 組態檔範本** 存放於 **templates/install** 目錄。 ```bash vcsa-cli-installer ├── lin64 │ └── vcsa-deploy ├── mac ├── README.txt ├── templates │ ├── install │ │ ├── embedded_vCSA_on_ESXi.json │ │ ├── embedded_vCSA_on_VC.json │ │ ├── embedded_vCSA_replication_on_ESXi.json │ │ ├── embedded_vCSA_replication_on_VC.json │ │ └── vCSA_with_cluster_on_ESXi.json │ ├── migrate │ └── upgrade ├── template_schemas │ ├── install │ ├── migration │ └── upgrade └── win32 ``` ## JSON 組態範本 ### 範本類型 在 **vcsa-cli-installer/templates/install** 目錄中,存放不同部署 vCSA 類型的 JSON 組態範本檔案。vCSA CLI 部署執行程式將透過 JSON 組態檔取得配置及部署參數。組態範本僅包含常用預設參數,可透過以下命令查看完整範本選項或參考 [[部署組態參數]](https://docs.vmware.com/tw/VMware-vSphere/7.0/com.vmware.vcenter.install.doc/GUID-457EAE1F-B08A-4E64-8506-8A3FA84A0446.html#GUID-457EAE1F-B08A-4E64-8506-8A3FA84A0446)。 ```bash $ lin64/vcsa-deploy install --template-help ``` 其中 JSON 組態範本檔名稱規則: - **`embedded_VCSA_on_*.json`**: 部署 Platform Services Controller (PSC) 和 VCSA 的整合系統。 > 目前 vCSA 都是屬於此種類型。 - **`VCSA_on_*.json`**: 僅部署 vCSA。 - **`*_on_ESXi.json`**: 部署 vCSA 至指定的 ESXi 主機上。 - **`*_on_VC.json`**: 部署 vCSA 至 vCenter 管理的 ESXi 主機上。 ### 部署範本 包含在 vCenter Server 安裝程式中的**部署 JSON 範本** | 範本 | 說明 | | --- | --- | | **embedded_vCSA_on_ESXi.json** | 包含在 ESXi 主機上部署 vCenter Server Appliance 所需的最低組態參數。 | | **vCSA_with_cluster_on_ESXi.json** | 包含在 ESXi 主機上部署 vCenter Server Appliance 以及單一節點 vSAN 和 vLCM 管理叢集所需的最低組態參數。 | | **embedded_vCSA_on_VC.json** | 包含在 vCenter Server 執行個體上部署 vCenter Server Appliance 所需的最低組態參數。 | | **embedded_vCSA_replication_on_ESXi.json** | 包含在 ESXi 主機上部署 vCenter Server Appliance 做為另一個內嵌式 vCenter Server 之複寫合作夥伴所需的最低組態參數。 | | **embedded_vCSA_replication_on_VC.json** | 包含在 vCenter Server 執行個體上將 vCenter Server Appliance 複寫合作夥伴部署至另一個 vCenter Server Appliance 所需的最低組態參數。 | :::warning **執行 vCSA CLI 安裝程式前,必須針對部署類型準備帶有組態參數值的 JSON 檔**。 ::: ### 編輯 JSON 組態檔 為確保 JSON 組態檔的語法正確,請使用支援 JSON 語法編輯器進行 JSON 組態檔內容編修。 :::warning **注意** - JSON 組態檔內容語法必須正確,否則部署過程會失敗。 - JSON 組態檔存放路徑名稱僅能包含 ASCII 字元。 - 組態參數可根據部署需求增減所需參數值。 - 若設定值包含反斜線(\)或引號(")字元,必須在字元前加上反斜線(\)可逸出字元。 - 布林值(Boolean)僅包含小寫字元。例: **`"ssh_enable":false`** - 以 UTF-8 格式儲存檔案。 ::: #### embedded_vCSA_on_ESXi.json 組態範本 ![](https://i.imgur.com/nw9ynYn.png) - **`__version`**: 標示搭配部署 vCenter 的組態檔版本。 - **`__comments`**: 組態檔參數備註說明。 - **`new_vcsa`**: 描述所部署的 vCSA 相關組態。 - **`esxi`**: 在 ESXi 主機直接部署 vCSA 使用。 - 此範例為不具 vSAN 和 vLCM 管理叢集的部署。 - **`appliance`**: 描述 vCSA 應用裝置的組態參數。 - **`deployment_option`**: 指定 vCSA 應用裝置的部署規模。將會根據選擇部署規模配置對應應用裝置的運算資源。 - **`name`**: 描述 vCSA 應用裝置的**虛擬機器名稱**。 - **`network`**: 描述 vCSA 應用裝置網路設定的組態參數。 - **`ip_family`**: 提供 `ipv4` 和 `ipv6`。 - **`mode`**: IP 指派方式,提供 `static` 和 `dhcp`。 - **`dns_servers`**: 描述一個或多個 DNS 伺服器的 IP 位址。該選項在 **`mode=static`** 時可用。 - 設定多個 DNS 伺服器可採用以下格式 - ["192.168.1.1", "192.168.1.2"] (**建議**) - "192.168.1.1, 192.168.1.2" - **`system_name`**: 主要 vCSA 應用裝置的網路身份識別。可以是 **IP** 或 **FQDN(建議)**。 - <font color=red>部署後無法變更此參數值</font>。 - **`os`**: 描述 vCSA 應用裝置作業系統的組態參數。 - **`password`**: vCSA 應用裝置作業系統的 **`root`** 使用者密碼。 - **`ntp_servers`**: 一個或多個 NTP 伺服器的主機名稱或 IP 位址。 - 設定多個 NTP 伺服器格式,與上述設定多個 DNS 伺服器相同。 - **`ssh_enable`**: 設定 `true`,以便使用 SSH 連線登入應用裝置。 - **`sso`**: 描述 vCSA 應用裝置 vCenter Single Sign-On 設定的組態參數。 - **`password`**: vCenter Single Sign-On 管理員使用者 **`administrator@domain_name`** 的密碼。 - **`domain_name`**: vCenter Single Sign-On 網域名稱。預設為 `vsphere.local`。 - **`ceip`**: 描述加入 VMware 客戶經驗改進計畫的組態參數。 - **`ceip_enabled`**: 設定是否要入客戶經驗改進計畫。 以下是根據組態範本編寫出的 JSON 組態檔。 ```json= { "__version": "2.13.0", "__comments": "Deploy a vCenter Server Appliance on an ESXi host.", "new_vcsa": { "esxi": { "hostname": "192.168.1.1", "username": "root", "password": "VMware1!", "deployment_network": "VM Network", "datastore": "shared_datastore" }, "appliance": { "thin_disk_mode": true, "deployment_option": "small", "name": "vcsa7" }, "network": { "ip_family": "ipv4", "mode": "static", "ip": "192.168.1.100", "dns_servers": ["192.168.1.10"], "prefix": "24", "gateway": "192.168.1.254", "system_name": "vcsa7.khdc.lab" }, "os": { "password": "VMware1!", "ntp_servers": ["216.239.35.0,216.239.35.4"], "ssh_enable": true }, "sso": { "password": "VMware1!", "domain_name": "vsphere.sso", "first_instance": true } }, "ceip": { "description": {}, "settings": { "ceip_enabled": true } } } ``` :::info 詳細參數說明,請參考原廠文件 [[**部署組態參數**]](https://docs.vmware.com/tw/VMware-vSphere/7.0/com.vmware.vcenter.install.doc/GUID-457EAE1F-B08A-4E64-8506-8A3FA84A0446.html)。 ::: ### 組態產生器 既然大多數 vCSA 的配置環境都差不多,每次都要編輯 JSON 檔又要擔心語法格式問題,還不如將這些**參數值**放在**設定文件檔**,之後編修參數只要修改這裡的參數**值**就好,寫個簡單的程式透過變數替換成修改的參數值。 #### vcsa.conf ```bash= ## create json for vcsa 7 installation esxi_hostname="192.168.1.1" esxi_username="root" esxi_password="VMware1!" esxi_deployment_network="VM Network" esxi_datastore="shared_datastore" esxi_port="" appliance_thin_disk_mode="true" ## tiny, tiny-lstorage, tiny-xlstorage ## small, small-lstorage, small-xlstorage ## medium, medium-lstorage, medium-xlstorage ## large, large-lstorage, large-xlstorage ## xlarage, xlarge-lstorage, xlarge-xlstorage appliance_deployment_option="tiny" appliance_name="vcsa7" network_ip_family="ipv4" network_mode="static" network_ip="192.168.1.100" network_dns_servers="192.168.1.10" network_prefix="24" network_gateway="192.168.1.254" network_system_name="vcsa7.khdc.lab" os_password="VMware1!" os_ntp_servers="192.168.1.10" os_ssh_enable="true" os_time_tools_sync="true" sso_password="VMware1!" sso_domain_name="vsphere.sso" sso_site_name="KHLAB" sso_first_instance="ture" ceip_ceip_enabled="true" ``` 組態產生器的程式其實很簡單! 主要先確認 JSON 語法格式沒有問題,再把參數值用變數替換。接著透過讀入設定文件檔 **`vcsa.conf`**,取得相關變數的參數值帶入,將轉換結果儲存成 JSON 組態檔 **`vcsa.json`** 就大功告成了! #### configMaker.sh ```bash= #!/bin/bash wrjsonconf7_esxi () { cat << EOF > ${vcsaJsonFile} { "__version": "2.13.0", "__comments": "Deploy a vCenter Server Appliance on an ESXi host.", "new_vcsa": { "esxi": { "hostname": "${esxi_hostname}", "username": "${esxi_username}", "password": "${esxi_password}", "deployment_network": "${esxi_deployment_network}", "datastore": "${esxi_datastore}" }, "appliance": { "thin_disk_mode": ${appliance_thin_disk_mode}, "deployment_option": "${appliance_deployment_option}", "name": "${appliance_name}" }, "network": { "ip_family": "${network_ip_family}", "mode": "${network_mode}", "system_name": "${network_system_name}", "ip": "${network_ip}", "prefix": "${network_prefix}", "gateway": "${network_gateway}", "dns_servers": "${network_dns_servers}" }, "os": { "password": "${os_password}", "ntp_servers": "${os_ntp_servers}", "ssh_enable": ${os_ssh_enable} }, "sso": { "password": "${sso_password}", "domain_name": "${sso_domain_name}", "first_instance": ${sso_first_instance} } }, "ceip": { "description": {}, "settings": { "ceip_enabled": ${ceip_ceip_enabled} } } } EOF } if [[ $# -eq 1 ]]; then configFile=$1 source ${configFile} vcsaJsonFile="$(basename ${configFile} .conf).json" wrjsonconf7_esxi echo -e ">> 產生vcsa7 JSON組態檔: ${vcsaJsonFile}\n" cat ${vcsaJsonFile} echo "" else echo -e " <!> 請提供vCenter 7.0組態檔 <!>\n" exit fi ``` **執行結果** <img width=480 src='https://i.imgur.com/eFX6Vat.png'><br> 這樣就會產生跟先前手動編輯的 JSON 組態檔內容一樣的檔案。之後若是有需要在不同環境部署 vCSA,也只要先修改 conf 設定檔,不用擔心手動編修 JSON 產生語法格式問題。 :::warning 若是要部署不同版本 vCSA 應用裝置,JSON 組態檔或許有些許不同,請根據安裝 ISO 提供的組態檔範本,再次編修 **`configMaker.sh`** 中的組態轉換函式 `wrjsonconf7_esxi ()`。 ::: # 進行部署 完成部署的 JSON 組態檔後,接著要透過 **`vcsa-deploy`** 的 CLI 部署命令來完成 vCSA 應用裝置的自動部署及設定。 ## vcsa-deploy 部署命令 ### 取得命令幫助 ```bash vcsa-deploy -h|--help ``` ![](https://i.imgur.com/tBYqRj3.png) :::info vcsa-deploy 執行完成後,命令**結束代碼(exit code)** 說明。 0: 已成功執行命令 1: 執行階段錯誤 2: 驗證錯誤 3: 範本錯誤 ::: ### 取得支援部署規模 ```bash vcsa-deploy --supported-deployment-sizes ``` ![](https://i.imgur.com/wSfNLGV.png) ### 取得安裝部署幫助 ```bash vcsa-deploy install --help ``` ![](https://i.imgur.com/W3rYBa8.png) ### 取得 JSON 組態檔參數說明 ```bash vcsa-deploy install --template-help ``` ![](https://i.imgur.com/0FgtNSN.png) #### 選用參數(Optional Arguments) 使用 `optional_arguments` 來輸入選用的參數,並以空格作為區隔,以便部署命令執行選用參數。 例: 設定安裝程式的記錄檔和其他輸出檔案的存放位置。 ```bash! vcsa-deploy install --accept-eula --acknowledge-ceip \ --log-dir=path_to_the_location path_to_the_json_file ``` - **`--accepr-eula`**: 同意使用者授權。 - **`--acknowledge-ceip`**: 當 JSON 組態檔配置 `ceip.enabled=true` 時需要。 - **`--skip-ovftool-verification`**: 對 JSON 組態檔的組態參數執行驗證,並進行部署。但不對 OVF 工具參數執行驗證。 - **`--no-esx-ssl-verify`**: 略過 ESXi 連線的 SSL 驗證。 - **`--no-ssl-certificate-verification`**: 略過所有伺服器連線的安全性憑證驗證。 - **`--verify-template-only`**: 對 JSON 組態檔的參數執行範本驗證,並不進行部署。 - **`--precheck-only`**: 僅執行範本驗證與 OVF 工具參數驗證,並不進行部署。 :::info 詳細 CLI 部署命令的用法,請參考原廠文件 [[**CLI 部署命令語法**]](https://docs.vmware.com/tw/VMware-vSphere/7.0/com.vmware.vcenter.install.doc/GUID-15F4F48B-44D9-4E3C-B9CF-5FFC71515F71.html)。 ::: ## 部署程序 ### 再次確認 - [X] 根據部署環境需求完成 **JSON 組態檔**。 - [X] 確認**安裝 ISO 檔掛載**正常。 - [X] 並務必確認部署環境中能正常提供 **DNS 和 NTP 服務**。 :::danger **注意** - 執行 `vcsa-deploy` CLI 部署命令的作業系統設備,也務必要確認能正確解析 vCSA 應用裝置及部署環境的 FQDN。 - 虛擬環境部署的成功要素:**DNS 和 NTP 服務**。 ::: ### 執行任務 1. 切換至作業系統的 **`vcsa-cli-installer`** 子目錄。 2. (選擇性)先不部署應用裝置,只是執行部署前的檢查,以確認部署範本正確性。 - 針對 JSON 組態檔進行基本檢驗。 ```bash vcsa-deploy install --accept-eula --verify-template-only --log-dir <log_dir> <path_to_the_json_file> ``` - 對於部署進行更深入的驗證,包含檢查用於 vCSA 配置的 IP 和名稱、SSO 域名和 DNS 服務。 - 包含 JSON 組態檔進行基本驗證。 - 確認 DNS 配置正確,且能正確解析應用裝置的 FQDN。 ```bash vcsa-deploy install --accept-eula --no-ssl-certificate-verification --precheck-only --log-dir <log_dir> <path_to_the_json_file> ``` 若有發生錯誤,請根據顯示訊息進行組態參數及部署環境調整。以下訊息似乎是部署目標的 ESXi 主機所給定的組態參數有問題! ![](https://i.imgur.com/xf7Hq2G.png) 相關的訊息紀錄都會儲存至指定目錄。 <img width=360 src='https://i.imgur.com/5SaJw0v.png'><br> 3. 執行部署命令。 如果上述驗證都沒有發生問題,相信一切應該都可以順利進行,就可以啟動部署發射!:coffee: - 完整的部署命令執行時,也會包含先前 JSON 組態檔的基本驗證和部署驗證。 - 只要先前驗證沒有問題,部署階段就會按照給予的組態參數自動化完成。 ```bash! $ bash ./vcsa-deploy install --accept-eula --acknowledge-ceip --no-ssl-certificate-verification --log-dir <log_dir> <path_to_the_json_file> ``` 表示 vCSA 部署程式已經開始第一階段的應用裝置部署。 ![](https://i.imgur.com/XrhJaZA.png) 完成第一階段應用裝置安裝,接著會開始進行第二階段的 vCSA 設定及相關套件安裝,請耐心等候。 > VCSA Deployment is still runing ![](https://i.imgur.com/LWrDW6m.png) 當出現 vCSA 登入資訊時,表示部署程式即將告一段落! ![](https://i.imgur.com/jkPUqvI.png) 恭喜,再次完成 vCSA 部署作業。到此為止,已經可以開始使用瀏覽器連線 vCSA 進行後續環境管理。 ### 監控及除錯 若在部署時需要即時監控部署狀態,或遇到問題需要故障排除,可在指定的日誌目錄下透過檢視以下幾個紀錄檔達成。 - vcsa-cli-installer.log: 提供部署程式命令執行紀錄資訊。 - workflow.log: 提供部署整體工作流程紀錄資訊。 - taskflow.log: 提供部署時任務執行內容紀錄資訊。 - ovftool.log: 提供 OVF 工具執行內容紀錄資訊。 - ovftool_config.cfg: 部署時 OVF 工具產生的配置暫存檔。 研究 **`vcsa-cli-installer.log`** 日誌檔,也是可以學習到 OVF 工具命令及參數的使用方式! ![](https://i.imgur.com/8k6MQGs.png) # 結論 從以上的測試,應可發現 **vCSA CLI 安裝程序是部署 vCenter 應用裝置的一大利器**。只要有了一份撰寫成功的的 JSON 組態檔,管理者就可以使用命令 **`vcsa-deploy`** 輕鬆地部署 vCenter 應用裝置,而且所使用的 JSON 組態檔也可作為該部署設定的配置備份歸檔。 雖然 vCenter 在生產應用環境下,系統管理者大多不太需要時常變動及部署。但若是技術專家或是測試環境建置,或許使用此方式可以帶來一點**省時和省心**的優點,即便是目前最新版本 vSphere 8,套用現在的 JSON 組態檔也是可以輕鬆達成任務的。 其實以整體部署流程思考,也只要撰寫自動掛載 ISO 安裝檔並自動套用 JSON 組態檔的腳本程式,也就能自動部署一台或多台 vCSA 應用裝置了! # 參考 [vCenter Server Appliance 的 CLI 部署](https://docs.vmware.com/tw/VMware-vSphere/7.0/com.vmware.vcenter.install.doc/GUID-C17AFF44-22DE-41F4-B85D-19B7A995E144.html) [](https://stephanmctighe.com/2021/01/27/deploying-vcenter-7-0-via-the-cli/) [](https://www.vgemba.net/vmware/VCSA-CLI-Install/) [](https://vmwaretv.vmware.com/embed/secure/iframe/entryId/1_dmbvxgkj/uiConfId/50138843/)