在主機 VM 上執行自訂開機指令碼

Cloud Workstations 可讓您在工作站容器啟動前,於主機工作站 VM 上執行自訂開機指令碼。這項功能有助於執行 VM 層級的設定,或安裝需要在工作站容器外執行的其他軟體。

在主機 VM 執行自訂開機指令碼是進階功能。建議您自訂容器映像檔,而非使用開機指令碼。

如果您選擇使用開機指令碼,請確保指令碼與 Container-Optimized OS (COS) 映像檔變更保持相容,因為主機 VM 會根據 COS 定期接收作業系統更新。

事前準備

登入 Google Cloud 帳戶。如果您是 Google Cloud新手,歡迎 建立帳戶,親自體驗產品的實際應用成效。新客戶還能獲得價值 $300 美元的免費抵免額,能用於執行、測試及部署工作負載。

安裝 Google Cloud CLI。 完成後,執行下列指令來初始化 Google Cloud CLI:

gcloud init

若您採用的是外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。

安裝 Google Cloud CLI。 完成後,執行下列指令來初始化 Google Cloud CLI:

gcloud init

若您採用的是外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。

準備開機指令碼

建立要在主機工作站 VM 上執行的開機指令碼。 撰寫腳本時,請遵守下列規範:

  1. Cloud Workstations 會在主機工作站 VM 上執行您指定的工作站容器,以及數個系統容器,確保工作站正常運作。所有容器都會使用 containerd 執行階段和 crictl 用戶端執行。
  2. 使用 containerd 執行啟動指令碼啟動的任何其他容器。主機 VM 會停用 Docker,以免干擾工作站容器內執行的 Docker Daemon。
  3. 開機指令碼啟動的主機層級容器無法與主要工作站容器互動。這類直接互動會略過 Identity and Access Management (IAM) 檢查,因此不受支援。

將開機指令碼儲存在 Cloud Storage

將指令碼上傳至 Cloud Storage bucket,並確保與工作站相關聯的服務帳戶可存取該指令碼。

  1. 將腳本上傳至 bucket:

    gcloud storage cp LOCAL_SCRIPT_PATH gs://BUCKET_NAME/SCRIPT_NAME
    

    更改下列內容:

    • LOCAL_SCRIPT_PATH:開機指令碼檔案的本機路徑。
    • BUCKET_NAME:Cloud Storage bucket 的名稱。
    • SCRIPT_NAME:您要在 bucket 中為指令碼檔案指定的名稱。
  2. 請確認工作站設定使用的服務帳戶具備存取 bucket 和指令碼檔案的權限。 或者,指令碼也可以公開存取。

建立工作站設定

如要使用自訂開機指令碼,請建立工作站設定,並指定指令碼的 Cloud Storage URI。

控制台

如要在建立工作站設定時設定自訂開機指令碼,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「工作站設定」頁面。

    前往工作站設定頁面

  2. 按一下「新增」「建立」。

  3. 在「基本資訊」頁面中,輸入設定名稱,選取工作站叢集,然後按一下「繼續」。

  4. 在「Machine settings」(機器設定) 頁面中,調整機器設定,然後按一下「Continue」(繼續)。

  5. 在「環境設定」頁面中,展開「進階容器選項」區段。

  6. 在「Custom startup script」(自訂開機指令碼) 欄位中,輸入開機指令碼的 Cloud Storage 路徑 (例如 gs://BUCKET_NAME/SCRIPT_NAME)。

  7. 完成其餘步驟,然後按一下「建立」。

REST

如要使用 REST API 設定自訂開機指令碼,請建立工作站設定,並將 host.gceInstance 訊息中的 startupScriptUri 欄位設為指令碼的 Cloud Storage URI:

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,進一步偵錯指令碼 (如有需要)。
  • 準備檢查:啟動指令碼是盡力而為,不會阻礙工作站啟動。如果指令碼執行時間過長或失敗,工作站可能仍會標示為就緒。為確保工作站在指令碼完成前不會標示為就緒,建議您實作就緒檢查。

後續步驟