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

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

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

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

事前準備

安裝 Google Cloud CLI,然後 使用聯合身分登入 gcloud CLI。登入後,執行下列指令來初始化 Google Cloud CLI:

gcloud init

準備開機指令碼

建立要在主機工作站 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 控制台的「Workstation configurations」(工作站設定) 頁面。

    前往「Workstation configurations」(工作站設定) 頁面

  2. 按一下「add 建立」。

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

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

  5. 在「Environment settings」(環境設定) 頁面中,展開「Advanced container options」(進階容器選項) 區段。

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

後續步驟