本文介紹一個相當好用的DCLI命令工具,不僅可以安裝在Windows、Linux以及macOS作業系統中使用,更直接內建於vCenter Server 7以上的版本,將透過實戰示範來講解DCLI命令工具的使用技巧,以及如何排除登入與更新vCenter Server 7所遭遇的相關難題。
命令工具對於現代的IT人員而言,雖然不是主要的維運工具但卻也是必備的輔助工具,因為如今幾乎各類的作業系統、伺服器應用系統、虛擬化平台,甚至於連用戶端應用系統都有提供專屬的命令工具。若本身是系統工程師或負責管理VMware vSphere基礎運行的維運人員肯定不能不熟悉相關命令工具的使用,因為有許多的自動化管理任務與批次任務,必須透過執行命令工具才能進行配置或迅速完成。
在vSphere 7.0以前的版本,進階的管理員多半會熟悉ESXCLI、PowerCLI的使用,如今又直接內建DCLI命令工具於vCenter Server 7.x以上版本中,究竟什麼是DCLI以及如何善用它呢?DCLI(Data Center CLI)是一個用來管理vCenter Server資料中心的簡易命令介面,它直接透過vSphere Automation API(REST API)來執行各項命令,並同時支援互動式命令與Script執行模式。從vSphere 7開始,DCLI已直接內建於vCenter Server Appliance 7以上的版本,並且也可以透過它來連線管理VMware Cloud、AWS、NSX-T。
關於DCLI命令的使用方式,除了透過SSH遠端連線至vCenter Server Appliance來執行外,也能直接在Windows、Linux以及macOS的命令介面中執行,只要作業系統中預先安裝好Python和DCLI的模組即可,因為它運行在PyPI(Python Package Index)架構的基礎之上,其中Python的版本需要2.7或更新版本。
快速安裝DCLI工具
前面曾提及DCLI可以直接在Windows、Linux以及macOS的命令介面中執行,不過在開始使用之前必須先下載與安裝此作業系統專用的Python,接著以安裝執行在Windows 10為例做示範。首先連結以下網址,並如圖1所示按下〔Download Python 3.10.4〕按鈕,下載安裝程式。
‧Python下載網址:https://www.python.org/downloads/
圖2所示便是Python 3.10.4版本的安裝頁面,在點選「Install Now」之前,先勾選「Install launcher for all users」及「Add Python 3.10 to PATH」兩項設定。在成功完成安裝的「Setup was successful」頁面中,建議按下〔Disable path length limit〕按鈕,以關閉作業系統對於檔案與資料夾路徑長度的限制。
成功安裝Python後,使用系統管理員身分開啟命令視窗,接著執行「pip install dcli」命令參數,安裝dcli模組程式。值得注意的是,有一些防毒軟體(例如PC-cillin),如圖3所示可能會出現「可疑檔案已封鎖」警示訊息,此時只要稍等一下,即可點選「開啟檔案」超連結來完成安裝任務。另外,若是安裝在非Windows的平台且沒有root的寫入權限,可以嘗試改為執行「pip install --user dcli」命令進行安裝。
一旦成功完成dcli模組程式的安裝,就可以開始執行dcli相關命令,準備連線管理vSphere。可以先透過如圖4所示的dcli命令執行,查看有關於此命令參數的使用方法,這裡分別看到連線vCenter Server(vAPI Server)、VMC以及NSX三種不同目標的方法。
若想進入互動式的dcli命令提示字元下並完成與伺服器的連線,可參考以下命令參數,其中輸入的IP位址便是伺服器的IP,當然也可以改輸入完整的網域名稱(FQDN):
dcli +server 192.168.7.241 +skip-server- verification +interactive
在成功連線並進入到dcli命令提示字元後,緊接著嘗試輸入「appliance system version get」命令,查詢有關於vCenter Server Appliance的版本資訊,由於是首次的命令結果回傳,因此系統會提示要求輸入登入的帳號與密碼,只要輸入帳號與密碼,再同意儲存認證資訊,後續任何命令參數的執行便不需要再次輸入帳號與密碼。
值得注意的是,其中的+skip-server-verification參數,便是略過SSL憑證的檢查,因為若沒有相關的憑證檔案,系統預設會出現憑證檢查的相關錯誤訊息,畢竟沒有合法的憑證來使用HTTPS的連線方式,確實會有資訊安全方面的風險。除了選擇略過憑證檢查外,也可以使用+cacert-file參數來指定憑證檔案的儲存路徑。
如果希望在執行命令參數的同時,便已經完成帳號與密碼的驗證,而不要系統再次提示帳號密碼的輸入,可以在執行命令的同時,輸入+username與+password兩個參數設定,例如執行「appliance system version get +username user01 +password 01pass」。
另外,也可以透過環境變數的設定,省去每一次相關連線參數的設定,例如預先完成DCLI_CACERTS_BUNDLE環境變數的設定,來完成憑證檔案路徑的選定。若想省去伺服器位址的輸入,也可預先完成DCLI_SERVER環境變數的設定。
DCLI基本使用技巧說明
介紹過從Windows執行DCLI命令的方法後,接下來改成透過SSH遠端連線至vCenter Server Appliance來執行DCLI的相關命令與參數。開始之前,必須連線到vCenter Server Appliance管理網站,查看「存取」頁面中的「SSH登入」和「DCLI」功能是否已經啟用。
確認上述兩項功能皆已啟用後,就可以進行SSH的遠端連線登入。完成登入後,在Command的命令提示字元下,若要執行某一個DCLI的命令參數,如圖5所示執行以下的命令參數:
dcli com vmware vcenter vm list
這個命令參數的回傳結果就是虛擬機器的清單,它將顯示每一個虛擬機器的記憶體大小、虛擬機器識別名稱、虛擬機器顯示名稱、電源狀態以及虛擬處理器的數量。上述做法便是非互動模式的命令執行方式。
若想要先進入到互動模式下再執行DCLI的相關命令參數,只要如圖6所示先執行「dcli +i」即可,其中i便是interactive。當進入到dcli命令提示字元後,若想要知道某一個命令的用法,只要加上--help參數即可,例如執行「vcenter vm get --help」,來得知檢視虛擬機器清單的相關參數說明。
以SSH遠端連線至vCenter Server Appliance並進入dcli命令提示字元後,如圖7所示再次嘗試執行「appliance system version get」。可以發現執行的結果,這回直接顯示vCenter Server 7.0版本的完整資訊,包括系統安裝的日期時間、版本編號、發行日期、版本類型。為何系統沒有要求輸入帳號與密碼呢?其實原因就在於當進行SSH連線時便已經完成帳號與密碼的驗證。
關於在互動式模式下的dcli命令參數使用技巧,最好用的就是在輸入任何命令或參數的過程中,可以隨時如圖8所示透過按下〔Tab〕鍵來得知可用的命令或參數清單,如此一來,管理員就不太需要記憶太多的命令與參數,只要知道大致有哪些命令可以使用即可。
對於各種命令所使用到的名稱空間(Namespace)之用法,並不需要特別輸入--help參數進行查詢,例如只要如圖9所示執行「vcenter datastore」命令,即可得知可用的命令參數有get與list,並且能夠清楚知道每一項命令參數的用法。
vCenter Server Appliance健康檢查
想要做好vSphere的維運任務,首先必須確保vCenter Server的運行健康,而它的基本健康狀態除了可以從vCenter Server Appliance管理網站上查看外,也能經由執行DCLI命令參數做確認。
只要分別執行以下的命令參數,就可以依序得知系統延遲、系統狀態、負載狀態、儲存狀態、記憶體狀態以及記憶體交換狀態的健康燈號:
vmware appliance health system lastcheck vmware appliance health system get vmware appliance health load get vmware appliance health storage get vmware appliance health mem get vmware appliance health swap get
這些燈號分別有green(健康)、orange(警告)、red(錯誤),其中若出現red(錯誤)狀態時,務必趕緊找出問題的原因並加以解決。至於尋找問題的原因,可以透過vCenter Server Appliance管理網站來查看,部分問題也能從vSphere Client網站登入後的vCenter Server節點,進一步查看相關的摘要資訊或事件。
檢視vSphere架構資訊
vSphere架構基本上是由資料中心、ESXi主機、vCenter Server、叢集、虛擬機器、網路以及資料存放區所組成,因此當一位剛接手企業中vSphere維運任務的IT人員,該如何快速得知這些基本配置資訊呢?
儘管上述資訊都可以透過vSphere Client來取得,但實際上如果已熟悉如何使用DCLI命令參數,則只需要執行一些簡單的命令參數便可一目了然,接著就實際來學習幾個命令範例的操作。
如圖10所示,可透過執行以下命令參數依序查看ESXi主機、虛擬機器以及叢集(host、vm、cluster) 的清單,並且查看到各自專屬的識別名稱:
vmware vcenter host list vmware vcenter vm list vmware vcenter cluster list
但這個識別名稱與在vSphere Client網站上所看到顯示名稱(name)的用途是不同的,因為在任何命令工具的管理中,若要選定某台主機、虛擬機器或叢集進行管理,通常必須輸入識別名稱而不是顯示名稱,原因就在於識別名稱是由系統自動產生且不會發生重複,而顯示名稱則是在新增過程中自定義的,並且識別名稱的輸入可以與現行的名稱發生重複。
接著,執行以下的命令參數分別查看到資料中心、網路以及資料夾的清單:
vmware vcenter datacenter list vmware vcenter network list vmware vcenter folder list
這裡同樣也都有自己的識別名稱與顯示名稱的欄位,且在網路和資料夾的部分則還有一個類型(type)欄位。以資料夾的類型來說,就可以清楚知道每一個資料夾,各自是屬於哪一種物件的類別。例如,vCLS、ESX Agents、vm、Discovered virtual machine都屬於虛擬機器(VIRTAL_MACHINE)的類別。
最後,還可以執行「vcenter datastore list」命令,查看在vSphere中所有已連接的資料存放區,如圖11所示。每一個資料存放區,除了同樣有自己的識別名稱與顯示名稱外,還可以得知它們各自所屬的類型(VMFS、VSAN、NFS),以及整體與剩餘的空間大小。
檢視虛擬機器磁碟與網卡
對於每一台虛擬機器的資源配置,維護人員最關心的除了CPU、RAM外,肯定就是虛擬磁碟與虛擬網卡,因為隨時可能因為應用系統的需求或移機等因素,而必須添加或調整這些資源的配置。接下來,先說明虛擬磁碟資訊的檢視。
首先,如圖12所示執行以下命令來查詢選定虛擬機器的磁碟清單:
vmware vcenter vm hardware disk list --vm vm-67
緊接著,針對選定的虛擬磁碟來查看詳細的配置資訊,包括它所使用的連接介面類型、容量、檔案路徑以及標籤等等:
vmware vcenter vm hardware disk get --vm vm-67 --disk 2000
想要知道在選定的虛擬機器中有配置哪一些乙太網卡(NIC),執行以下的第一道命令來查詢,執行結果會發現每一張網卡都會有一個唯一的識別碼(例如4000)。緊接著,透過第二道命令參數針對選定的網卡取得詳細的配置資訊,包括連線狀態、網路名稱、類型、網路識別碼、MAC位址、MAC類型、喚醒功能狀態、網路標籤等等:
vmware vcenter vm hardware ethernet list --vm vm-67 vmware vcenter vm hardware ethernet get --vm vm-67 --nic 4000
刪除選定的虛擬機器
當虛擬機器數量很多時,若想要進行虛擬機器的刪除任務,透過vSphere Client的網站操作介面來完成不一定是最有效率,其實可以透過更簡單的解法來完成。
如圖13所示,那就是先執行「vcenter vm list」命令取得整個vCenter Server下的所有虛擬機器清單,再執行「vcenter vm delete --vm vm-55」命令刪除選定的虛擬機器即可。
虛擬機器電源管理
除了虛擬機器的快速刪除任務可以從DCLI命令中完成外,對於大量虛擬機器的電源管理,同樣可以透過執行以下命令參數,如圖14所示,分別完成選定虛擬機器的狀態查詢、啟動選定的虛擬機器電源、強制停止選定的虛擬機器電源:
vcenter vm power get --vm vm-64 vcenter vm power start --vm vm-64 vcenter vm power stop --vm vm-64
想想看,關於虛擬機器電源的管理,若想要暫停vm-64虛擬機器的運行、重新開機、正常關機,DCLI的命令參數該如何輸入呢?很簡單!答案依序分別是「vcenter vm guest power standby --vm vm-64」、「vcenter vm guest power reboot --vm vm-64」、「vcenter vm guest power shutdown --vm vm-64」。
DNS配置設定
對於vCenter Server Appliance的DNS配置異動,通常會透過其專屬的管理網站操作介面來完成。然而,在熟悉DCLI命令的用法後,將會發現使用DCLI命令來進行這部分的管理也是相當有效率的。
如圖15所示,首先執行以下命令來取得目前DNS的IP位址清單:
vmware appliance networking dns servers get
接下來,無論是對於現行配置好的DNS位址,還是準備添加的DNS位址(例如8.8.8.8),最好皆能夠透過下列的命令參數範例預先測試一下連線是否正常:
vmware appliance networking dns servers test --servers 8.8.8.8
再確認準備添加的新DNS位址連線沒有問題,就可以使用以下命令來完成新增:
vmware appliance networking dns servers add --server 8.8.8.8
排除root密碼過期難題
之前曾經介紹過如何解決忘記vCenter Server Appliance的root密碼問題,但是這回遭遇的況狀並不相同。相信許多IT人員可能在初期完成vCenter Server的安裝後,就再也沒連線登入過vCenter Server Appliance的管理網站,以至於等到需要連線使用時卻出現如圖16所示的錯誤訊息而無法登入。此訊息是密碼輸入錯誤嗎?當然不是,而是密碼已超過有效期限,如何解決這個問題呢?
雖然vCenter Server Appliance的管理網站因root帳號密碼過期而無法登入,但藉由遠端SSH的連線方式依舊能夠成功登入,因此只要在成功登入後,系統便會強制要求立即變更root的密碼,一旦完成密碼更新,便可以成功登入管理網站,如圖17所示。
基於資訊安全的因素,仍建議維持系統預設的密碼原則,包括密碼的複雜度要求以及密碼的到期設定。但如果希望放寬密碼原則的各項設定,則可以在登入vCenter Server Appliance的管理網站後,如圖18所示點選至「系統管理」頁面來修改上述的兩項配置,甚至於可以選擇關閉「密碼到期」設定。
備份vCenter Server
關於vSphere的備份計畫,一般都會將焦點放在虛擬機器的備份,尤其是針對一些存有重要業務資料,或是直接關係到公司營運的應用系統(例如ERP)。然而,若想要維持IT整體的運行正常,除了每日虛擬機器的備份外,最好也能夠定期備份vCenter Server Appliance的資料,因為它影響了整個vSphere架構的正常運行與否。
想要定期備份vCenter Server Appliance的資料相當容易,因為它已直接內建在系統的功能中,只要在登入管理網站後,點選至「備份」頁面,便可以執行「建立備份排程」設定。如圖19所示,由於這裡是以備份至遠端的FTP網站為例,因此必須預先準備好可以連線的FTP伺服器位址、帳號以及密碼。緊接著,再依序分別設定排程的週期、是否啟用密碼保護功能、是否啟用資料庫健全狀況檢查、要保留的備份數目,以及是否要連同各種統計資料(Stats)、事件(Events)以及工作(Tasks)一併備份。設定好了之後,再按下〔建立〕按鈕。
針對vCenter Server Appliance備份任務的建立,除了透過管理網站的操作介面來建立外,也可以經由執行DCLI命令參數來完成。在此使用以下命令參數,分別完成FTP備份位址以及連線帳密的設定,即可快速完成一個備份任務的建立:
appliance recovery backup job create --location-type FTP --location "ftp:// 192.168.7.226/vcsa" --location-user Admini strator --location-password password
完成備份任務的建立後,便會再次回到「備份」頁面。如圖20所示,這裡將可以對於現行的備份排程設定進行編輯、停用或是刪除。建立首次的備份排程後,通常都會點選「立即備份」連結,先測試一下備份任務是否能夠順利完成,以及查看備份所需花費的時間。 開啟「立即備份」頁面中,如圖21所示,仍可決定是否使用「備份排程中的備份位置和使用者名稱」。此外,也可以決定是否要勾選「資料庫健全狀況檢查」與相關統計、事件以及工作資料的備份。設定完畢,按下〔啟動〕按鈕。
緊接著,在「活動」頁面內便會看到備份任務執行中的相關資訊,包括任務的啟動類型、執行狀態、已傳輸資料、持續時間、結束時間。其中整體所需花費的時間,將依照當下的網速以及備份主機的磁碟I/O速度來決定。
透過DCLI命令參數,不僅能夠建立vCenter Server Appliance的備份任務,也可以隨時檢視選定備份任務的狀態資訊。在此執行以下兩道命令參數,分別取得vCenter Server備份設定清單,以及檢視選定備份任務的狀態資訊。在此可以依序查看到執行的起訖日期與時間、百分比進度、任務識別碼以及備份狀態:
appliance recovery backup job list appliance recovery backup job get --id 20220127-070549-18778458
即便透過上述DCLI命令參數,可以得知備份的結果是成功的,但對於備份的檔案能否真的成功還原,要如何進行驗證呢?如圖22所示,只要使用以下命令參數便可以針對選定備份路徑中的所有檔案驗證其正確性,而其中最關鍵的參數是validate,驗證結果只要出現「status: OK」,就可以確保備份檔案的還原是沒有問題的:
appliance recovery backup validate --location-type FTP --location "ftp:// 192.168.7.226/vcsa" --location-user Admini strator --location-password password
更新vCenter Server
不管是想要使用vSphere 7.x最新發行的功能,或是解決已知的系統瑕疵(Bug)問題,優先更新vCenter Server 7.x版本肯定是必要的計畫,這包括了DCLI命令工具中各項命令的使用,若是官方有發布新的命令參數或是問題修正,皆必須透過版本的更新後才能使用,舉例來說,可以將現行的vCenter Server 7.0.2更新至7.0.3,怎麼做呢?請看接下來的說明。
首先登入vCenter Server Appliance管理網站,然後點選至「更新」頁面。如圖23所示,在「更新」頁面中可以查看到目前的版本詳細資料,接著按下〔檢查更新〕按鈕,檢查是否有更新的版本可以安裝。
在確認有新的版本可以下載與安裝後,點選「僅暫存」或「暫存和安裝」。若只是想先下載而不要安裝,可以點選「僅暫存」,如果可以接受安裝過程中可能需要重新啟動vCenter Server Appliance,或是發生與主機的暫時連線中斷,則立即點選「暫存和安裝」。執行暫存和安裝的操作後,需要確認使用者授權合約、加入CEIP以及如圖24所示的確認「備份vCenter Server」頁面設定。按下〔完成〕按鈕,開始進行更新任務。
順利完成vCenter Server Appliance的更新安裝後,立即回到「摘要」頁面中,如圖25所示查看最新的版本資訊是否正確,並且檢查在「健全狀況狀態」清單中是否皆呈現「良好」,以及在「Single Sign-On」內的網域狀態是否已呈現「執行中」。若上述各項狀態資訊皆是正常,就表示已成功完成更新並在運行中。
排除無法更新vCenter Server的難題
並非所有IT人員都能夠直接透過vCenter Server Appliance的管理網站來完成版本的更新安裝,因為從早期的版本開始,很多IT人員都曾遭遇無法經由管理網站進行更新,而必須改由SSH方式以相關命令參數來完成更新任務。其實,許多時候可以留意一下VMware官方是否有釋出相關的修正程式。接下來要示範的是一個典型的案例,告訴大家如何解決無法從vCenter Server Appliance管理網站進行更新的難題。
如果在vCenter Server Appliance管理網站執行更新的過程中,發生中斷並且出現如圖26所示的「安裝失敗」提示,其訊息是「Exception occurred in install precheck phase」,先連結至VMware官方的知識庫網站(https://kb.vmware.com/s/article/83145),然後點選「Attachments」區域內的「KB_83145_PatchCleanupScript」超連結,來下載vCenter Server Appliance 7.0.x修補程式。
完成下載修補程式後,透過任何SFTP免費工具將此檔案上傳至vCenter Server Appliance系統中。不過,以WinSCP工具為例,可能會發生在連線過程中出現如圖27所示的「無法初始化SFTP協定,主機是否正在執行SFTP伺服器?」錯誤訊息。此時即便嘗試按下〔重新連線〕按鈕也無法解決,怎麼辦呢?
上述的問題主要是root的Shell設定所造成,只要稍微修改一下這部分的設定即可解決。先使用root帳號以SSH工具遠端連線登入vCenter Server Appliance,然後如圖28所示執行「chsh -s "/bin/bash" root」命令參數來修改Shell即可。
當成功以WinSCP的SFTP完成與vCenter Server Appliance連線後,便可以在檔案管理視窗內,選擇將KB_83145_PatchCleanupScript.sh檔案上傳至root帳號的Home路徑中。
如圖29所示,在「上載」頁面中可以自行決定是否要勾選「在背景傳送」與「不要再顯示此對話框」設定。最後,按下〔確定〕按鈕完成上傳。
完成上傳修補程式後,再次使用root帳號以SSH工具遠端連線登入vCenter Server Appliance。
然後,如圖30所示先執行「ls」命令來查看KB_83145_PatchCleanupScript.sh修補程式是否已經存在。
接著執行「chmod +x KB_83145_PatchCleanupScript.sh」命令參數,完成此檔案的執行權限。最後,再執行「./KB_83145_PatchCleanupScript.sh」,即可完成系統的修補任務。完成執行修補程式後,便可再次連線登入vCenter Server Appliance管理網站,並點選至「更新」頁面,進行最新更新的檢查、暫存以及安裝。
如何以DCLI管理存取設定
在前面的介紹中曾提及,若想要直接於vCenter Server Appliance的SSH連線後直接使用DCLI命令,就必須預先在管理網站的「存取」頁面中,如圖31所示啟用「SSH登入」與「DCLI」兩項功能。
其實,在此頁面的存取設定中,除了DCLI外,其餘三項設定也可以從DCLI的命令中來查看啟用狀態,以及設定關閉或啟用。
首先,執行以下命令參數來同時設定啟用Shell連線功能,並設定60秒的逾時配置。若要關閉此功能,只需要將true參數改成false即可。然後,透過第二道命令參數查詢目前的Shell配置:
appliance access shell set --enabled true --timeout 60 appliance access shell get
以下命令參數可以設定啟用SSH功能,如果要關閉此功能,只要將true的參數改成false即可。接著,執行第二道命令參數來查詢目前的SSH配置:
appliance access ssh set --enabled true appliance access ssh get
最後,使用下列的命令參數設定啟用Console CLI功能。如果要關閉這項功能,就將true參數改成false。接著,透過第二道命令參數來查詢目前的Console CLI配置:
appliance access consolecli set --enabled true appliance access consolecli get
結語
vSphere針對維運管理的設計,在命令管理工具上的支援上相當多元,且支援許多第三方工具的整合應用。管理工具的多元,有助於IT人員在vSphere維運的過程中可因應不同情境的需求來加以選擇。關於完整的DCLI命令的使用方法,可參考官網(https://developer.vmware.com/docs/4676/data-center-cli-reference)的說明。
<本文作者:顧武雄,Microsoft MVP 2004-2016、MCITP與MCTS認證專家、台灣微軟Technet、TechDays、Webcast、MVA特約資深顧問講師、VMware vExpert 2016-217、IBM Unified Communications/Notes/Domino/Connections Certified。>