Cloud Workstations 可讓您在工作站容器啟動前,在主機工作站 VM 上執行自訂啟動指令碼。這項功能有助於執行 VM 層級的設定,或安裝需要在主要工作站容器外執行的其他軟體。
事前準備
安裝 Google Cloud CLI。 完成後,執行下列指令來初始化 Google Cloud CLI:
gcloud init
若您採用的是外部識別資訊提供者 (IdP),請先
使用聯合身分登入 gcloud CLI。
安裝 Google Cloud CLI。 完成後,執行下列指令來初始化 Google Cloud CLI:
gcloud init
若您採用的是外部識別資訊提供者 (IdP),請先
使用聯合身分登入 gcloud CLI。
準備開機指令碼
建立要在主機工作站 VM 上執行的開機指令碼。撰寫指令碼時,請遵守下列準則:
- Cloud Workstations 會在主機工作站 VM 上執行您指定的工作站容器,以及數個系統容器,確保工作站正常運作。所有容器都會使用
containerd執行階段和crictl用戶端執行。 - 使用
containerd執行開機指令碼啟動的任何額外容器。主機 VM 會停用 Docker,避免干擾工作站容器內執行的 Docker Daemon。 - 開機指令碼啟動的主機層級容器無法與主要工作站容器互動。這類直接互動會略過 Identity and Access Management (IAM) 檢查,因此不支援。
將開機指令碼儲存在 Cloud Storage 中
將指令碼上傳到 Cloud Storage bucket,並確保與工作站相關聯的服務帳戶可存取該指令碼。
將指令碼上傳至 bucket:
gcloud storage cp LOCAL_SCRIPT_PATH gs://BUCKET_NAME/SCRIPT_NAME更改下列內容:
LOCAL_SCRIPT_PATH:開機指令碼檔案的本機路徑。BUCKET_NAME:Cloud Storage bucket 的名稱。SCRIPT_NAME:您要在 bucket 中為指令碼檔案指定的名稱。
請確認工作站設定使用的服務帳戶具有存取值區和指令碼檔案的權限。或者,指令碼也可以公開存取。
建立工作站設定
如要使用自訂開機指令碼,請建立工作站設定,並將 host.gceInstance 訊息中的 startupScriptUri 欄位設為指令碼的 Cloud Storage URI。
使用 REST API 建立工作站設定:
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d '{
"host": {
"gceInstance": {
"poolSize": 1,
"startupScriptUri": "gs://BUCKET_NAME/SCRIPT_NAME",
"serviceAccount": "SERVICE_ACCOUNT"
}
}
}' \
https://workstations.googleapis.com/v1alpha/projects/PROJECT_ID/locations/LOCATION/workstationClusters/CLUSTER_ID/workstationConfigs?workstation_config_id=CONFIG_ID
更改下列內容:
SERVICE_ACCOUNT:與工作站設定相關聯的服務帳戶電子郵件地址。PROJECT_ID:您的 Google Cloud 專案 ID。LOCATION:工作站叢集所在的區域。CLUSTER_ID:工作站叢集的 ID。CONFIG_ID:要指派給新工作站設定的 ID。
驗證指令碼執行作業
如要確認指令碼是否正確執行,請使用下列其中一種方法:
- 序列埠 3 輸出記錄:系統會自動將指令碼產生的輸出記錄傳送至序列埠 3 輸出。 如要找出指派給工作站的 VM 名稱,請參閱平台記錄。
- 透過 SSH 連線至 VM:您可以透過 SSH 連線至工作站 VM,視需要進一步偵錯指令碼。
- 準備檢查:開機指令碼是盡力而為,不會阻礙工作站啟動。如果指令碼執行時間過長或失敗,工作站可能仍會標示為就緒。為確保工作站不會在指令碼完成前標示為就緒,請考慮實作就緒檢查。