部署工作負載


工作負載運算子可以將選項傳遞至 Confidential Space 工作負載 VM 執行個體,以決定執行前行為。雖然部分標記有不會變更的必要值,但您仍須做出下列選擇:

  • 是否要以正式版或偵錯版 Confidential Space 映像檔為 VM 執行個體的基礎。

  • 是否使用 AMD SEV、Intel TDX 或 Intel TDX with NVIDIA Confidential Computing (搶先版),協助確保工作負載資料的私密性。

  • 需要傳遞哪些 VM 中繼資料變數,包括要執行的工作負載容器映像檔、是否要記錄到 Cloud Logging,以及要設定哪些環境變數等詳細資料。

  • 要附加至 VM 的服務帳戶,以便執行工作負載,以及存取其他專案中的機密資料並將結果寫入某處所需的權限。

  • VM 執行個體應執行的區域。

以下範例會建立機密 VM,並執行名為 WORKLOAD_CONTAINER_NAME 的 Docker 容器:

以 CPU 為基礎的工作負載

gcloud compute instances create INSTANCE_NAME \
    --confidential-compute-type=CONFIDENTIAL_COMPUTING_TECHNOLOGY \
    --machine-type=MACHINE_TYPE_NAME \
    --maintenance-policy=MAINTENANCE_POLICY \
    --shielded-secure-boot \
    --image-project=confidential-space-images \
    --image-family=IMAGE_FAMILY \
    --metadata="^~^tee-image-reference=us-docker.pkg.dev/WORKLOAD_AUTHOR_PROJECT_ID/REPOSITORY_NAME/WORKLOAD_CONTAINER_NAME:latest" \
    --service-account=WORKLOAD_SERVICE_ACCOUNT_NAME@WORKLOAD_OPERATOR_PROJECT_ID.iam.gserviceaccount.com \
    --scopes=cloud-platform \
    --zone=ZONE_NAME \
    --project=PROJECT_ID

提供以下這些值:

  • INSTANCE_NAME:新 VM 執行個體的名稱。

  • CONFIDENTIAL_COMPUTING_TECHNOLOGY:要使用的機密運算技術類型。請選擇下列其中一個值:

    • SEV

    • TDX

  • MACHINE_TYPE_NAME:VM 機器類型,例如 n2d-standard-2。機密 VM 執行個體的有效機器類型取決於您選擇的機密運算技術,也就是 AMD SEV 或 Intel TDX。請參閱「機器類型、CPU 和區域」。

  • MAINTENANCE_POLICY:如要支援即時遷移,請將使用 SEV 的 N2D 機型設為 MIGRATE。如為其他機型,請將這個值設為 TERMINATE,因為這些機型不支援即時遷移

  • IMAGE_FAMILY_NAME機密空間圖片的系列。 選擇下列其中一個選項:

    • confidential-space,適用於正式環境工作負載

    • confidential-space-debug 偵錯工作負載

  • WORKLOAD_AUTHOR_PROJECT:專案 ID,用於存放工作負載容器的 Artifact Registry 存放區。

  • REPOSITORY_NAME:工作負載容器儲存所在的 Artifact Registry 存放區名稱。

  • WORKLOAD_CONTAINER_NAME:工作負載容器的名稱。

  • WORKLOAD_SERVICE_ACCOUNT_NAME:執行工作負載的服務帳戶名稱。

  • WORKLOAD_OPERATOR_PROJECT_ID:執行工作負載的專案 ID。

  • ZONE_NAME:VM 執行個體執行的可用區,例如 us-west1-b。機密空間需要下列服務,這些服務僅適用於特定地區:

  • PROJECT_ID:選用。要在其中建立 VM 執行個體的專案 ID。

GPU 型工作負載

事前準備

  • Confidential Space 僅支援 H100 GPU 上的 NVIDIA Confidential Computing (搶先版)。

  • 如要確保您有足夠的 GPU 配額來使用要求的資源,請查看 GPU 配額。如要使用搭載 GPU 的機密 VM 執行個體,請申請先占 GPU 配額。要求 GPU 配額時,您必須為要在各個地區建立的 GPU 模型要求配額,並依據所有地區中各類 GPU 的總數要求額外的全域配額 (GPUs (all regions))。

  • 如要瞭解配額用量,請參閱「GPU VM 和先占分配配額」。

  • 請參閱限制,瞭解在 MIG 中建立規模調整要求時的注意事項。

  • 如要安裝 NVIDIA 機密運算 (搶先版) 所需的驅動程式,您必須傳遞中繼資料變數 tee-install-gpu-driver,並將值設為 true

  • 如要使用 NVIDIA 驅動程式和 CUDA Toolkit,建議 VM 開機磁碟至少要有 30 GB 的空間。

部署 GPU 型工作負載

如要部署 GPU 型工作負載,您必須使用現成彈性啟動 (搶先版) 佈建模式,建立機密 VM 執行個體。

Spot

如要使用 Spot 佈建模式,請建立加速器最佳化 VM 執行個體。

gcloud compute instances create INSTANCE_NAME \
    --provisioning-model=SPOT \
    --confidential-compute-type=TDX \
    --machine-type=a3-highgpu-1g \
    --maintenance-policy=TERMINATE \
    --shielded-secure-boot \
    --image-project=confidential-space-images \
    --image-family=IMAGE_FAMILY_NAME \
    --metadata="^~^tee-image-reference=us-docker.pkg.dev/WORKLOAD_AUTHOR_PROJECT_ID/REPOSITORY_NAME/WORKLOAD_CONTAINER_NAME:latest~tee-install-gpu-driver=true" \
    --service-account=WORKLOAD_SERVICE_ACCOUNT_NAME@WORKLOAD_OPERATOR_PROJECT_ID.iam.gserviceaccount.com \
    --scopes=cloud-platform \
    --boot-disk-size=30G \
    --zone=ZONE_NAME \
    --project=PROJECT_ID

提供以下這些值:

  • INSTANCE_NAME:新 VM 執行個體的名稱。

  • IMAGE_FAMILY_NAME機密空間圖片的系列。 選擇下列其中一個選項:

    • confidential-space-preview-cgpu,適用於正式環境工作負載

    • confidential-space-debug-preview-cgpu 偵錯工作負載

  • WORKLOAD_AUTHOR_PROJECT:工作負載執行的專案 ID。

  • REPOSITORY_NAME:Artifact Registry 存放區名稱。

  • WORKLOAD_CONTAINER_NAME:工作負載容器的名稱。

  • WORKLOAD_SERVICE_ACCOUNT_NAME:執行工作負載的服務帳戶名稱。

  • WORKLOAD_OPERATOR_PROJECT_ID:執行工作負載的專案 ID。

  • ZONE_NAME:其中一個支援 NVIDIA 機密運算的區域 (預先發布版)。

  • PROJECT_ID:選用。要在其中建立 VM 執行個體的專案 ID。

彈性啟動

如要使用「彈性啟動」(搶先版) 佈建模式,請先建立執行個體範本,然後建立代管執行個體群組 (MIG)。

  1. 建立執行個體範本:

    gcloud beta compute instance-templates create INSTANCE_TEMPLATE_NAME \
        --provisioning-model=FLEX_START \
        --confidential-compute-type=TDX \
        --machine-type=a3-highgpu-1g \
        --maintenance-policy=TERMINATE \
        --shielded-secure-boot \
        --image-project=confidential-space-images \
        --image-family=IMAGE_FAMILY_NAME \
        --metadata="^~^tee-image-reference=us-docker.pkg.dev/WORKLOAD_AUTHOR_PROJECT_ID/REPOSITORY_NAME/WORKLOAD_CONTAINER_NAME:latest~tee-install-gpu-driver=true" \
        --service-account=WORKLOAD_SERVICE_ACCOUNT_NAME@WORKLOAD_OPERATOR_PROJECT_ID.iam.gserviceaccount.com \
        --scopes=cloud-platform \
        --boot-disk-size=30G \
        --reservation-affinity=none \
        --max-run-duration=RUN_DURATION \
        --instance-termination-action=DELETE \
        --project=PROJECT_ID
    

    提供以下這些值:

    • INSTANCE_TEMPLATE_NAME:新 VM 執行個體範本的名稱。

    • IMAGE_FAMILY_NAME機密空間圖片的系列。 選擇下列其中一個選項:

      • confidential-space-preview-cgpu,適用於正式環境工作負載

      • confidential-space-debug-preview-cgpu 偵錯工作負載

    • WORKLOAD_AUTHOR_PROJECT:工作負載執行的專案 ID。

    • REPOSITORY_NAME:Artifact Registry 存放區名稱。

    • WORKLOAD_CONTAINER_NAME:工作負載容器的名稱。

    • WORKLOAD_SERVICE_ACCOUNT_NAME:執行工作負載的服務帳戶名稱。

    • WORKLOAD_OPERATOR_PROJECT_ID:執行工作負載的專案 ID。

    • RUN_DURATION:您希望要求的 VM 執行個體執行的時間長度。您必須將值格式化為天數、時數、分鐘數或秒數,並分別加上 dhms。舉例來說,如要指定 30 分鐘,請輸入 30m;如要指定 1 天 2 小時 3 分鐘 4 秒,請輸入 1d2h3m4s。這個值必須介於 10 分鐘至 7 天之間。

    • PROJECT_ID:選用。要在其中建立 VM 執行個體的專案 ID。

  2. 使用 instance-groups managed create 指令建立可用區 MIG:

    gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \
        --template=INSTANCE_TEMPLATE_NAME \
        --size=0 \
        --zone=ZONE_NAME \
        --default-action-on-vm-failure=do_nothing
    

    提供以下這些值:

  3. 在 MIG 中建立大小調整要求。指定所需的 GPU VM 執行個體數量,以及執行這些 VM 執行個體的時間長度。

    gcloud compute instance-groups managed resize-requests create INSTANCE_GROUP_NAME \
        --resize-request=RESIZE_REQUEST_NAME \
        --resize-by=COUNT \
        --zone=ZONE_NAME
    

    提供以下這些值:

    • INSTANCE_GROUP_NAME:MIG 的名稱。

    • INSTANCE_TEMPLATE_NAME:GPU VM 執行個體的執行個體範本名稱。

    • ZONE_NAME:其中一個支援 NVIDIA 機密運算的區域 (預先發布版)。

    • RESIZE_REQUEST_NAME:調整大小要求的名稱。

    • COUNT:要一次新增至群組的 VM 執行個體數量。

    您建立的規模調整要求會維持在 ACCEPTED 狀態,直到 MIG 建立所有要求的 GPU VM 執行個體為止。在群組中建立所有 GPU VM 執行個體後,要求狀態會變更為 SUCCEEDED

  4. 如果資源充足,系統會將 VM 執行個體新增至 MIG,並啟動執行個體來執行工作負載。如要列出 MIG 中的執行個體,請執行下列指令:

    gcloud compute instance-groups managed list-instances INSTANCE_GROUP_NAME \
        --zone=ZONE_NAME \
        --project=PROJECT_ID
    

    提供以下這些值:

    • INSTANCE_GROUP_NAME:MIG 的名稱。

    • ZONE_NAME:要從中取得 VM 執行個體清單的支援區域

    • PROJECT_ID:選用。要從中取得 VM 執行個體清單的專案 ID。

附加的服務帳戶

服務帳戶必須附加至工作負載的 Confidential VM,才能執行工作負載。服務帳戶必須按照下列方式設定:

  • 具備下列角色:

  • 具備資料協作者儲存機密資料的位置讀取權限,例如 Cloud Storage 值區或 BigQuery 資料表。

  • 擁有工作負載應輸出資料的位置 (例如 Cloud Storage 值區) 的寫入權限。資料協作者應具備這個位置的讀取權限。

此外,資料協作者和工作負載運算子還需要設定下列項目:

  • 如果資料協作者使用服務帳戶模擬,而非直接存取資源,則必須將服務帳戶新增至工作負載身分集區供應商,做為屬性條件:

    'WORKLOAD_SERVICE_ACCOUNT_NAME@DATA_COLLABORATOR_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts
    
  • 工作負載運算子需要 roles/iam.serviceAccountUser 角色,才能模擬服務帳戶。這樣一來,他們就能將其附加至工作負載 VM 執行個體,以便執行工作負載。

中繼資料變數

建立 VM 時,您可以將變數傳遞至 --metadata 選項,變更 Confidential Space 工作負載 VM 的行為。

如要傳遞多個變數,請先在 --metadata 值加上 ^~^ 前置字元,設定分隔符號。這會將分隔符號設為 ~,因為變數值中會使用 ,

例如:

metadata="^~^tee-restart-policy=Always~tee-image-reference=us-docker.pkg.dev/WORKLOAD_AUTHOR_PROJECT_ID/REPOSITORY_NAME/WORKLOAD_CONTAINER_NAME:latest"

下表詳細列出可為工作負載 VM 設定的中繼資料變數。

中繼資料鍵 類型 說明和值

tee-image-reference

互動對象:

字串

這是必要旗標,這會指向工作負載容器的位置。

範例
tee-image-reference=us-docker.pkg.dev/WORKLOAD_AUTHOR_PROJECT_ID/REPOSITORY_NAME/WORKLOAD_CONTAINER_NAME:latest

tee-added-capabilities

互動對象:

JSON 字串陣列

為工作負載容器新增其他 Linux 功能

範例
tee-added-capabilities="[\"CAP_SYS_ADMIN\", \"CAP_SYS_CHROOT\"]"

tee-cgroup-ns

互動對象:

布林值

預設值為 false。設為 true 時,會在 /sys/fs/cgroup 啟用命名空間 cgroup 掛接。

範例
tee-cgroup-ns=true

tee-cmd

互動對象:

JSON 字串陣列

覆寫工作負載容器 Dockerfile 中指定的 CMD 指令。

範例
tee-cmd="[\"params1\", \"params2\"]"

tee-container-log-redirect

互動對象:

定義的字串

工作負載容器的輸出內容 STDOUTSTDERR 會傳送至 Cloud Logging 或序列埠主控台,位於 confidential-space-launcher 欄位下方。

有效值如下:

  • false:(預設) 不會記錄任何內容。
  • true:輸出至序列埠主控台和 Cloud Logging。
  • cloud_logging:僅輸出至 Cloud Logging。
  • serial:僅輸出至序列主控台。

序列主控台中的記錄量過高可能會影響工作負載效能。

範例
tee-container-log-redirect=true

tee-dev-shm-size-kb

整數

設定 /dev/shm 共用記憶體掛接的大小 (以 kB 為單位)。

範例
tee-dev-shm-size-kb=65536

tee-env-ENVIRONMENT_VARIABLE_NAME

互動對象:

字串

設定工作負載容器中的環境變數。工作負載作者也必須將環境變數名稱新增至 allow_env_override 啟動政策,否則系統不會設定這些變數。

範例
tee-env-example-env-1='value-1'~tee-env-example-env-2='value-2'

tee-impersonate-service-accounts

互動對象:

字串

工作負載運算子可模擬的服務帳戶清單。工作負載運算子必須 獲准模擬服務帳戶

您可以列出多個服務帳戶,並以半形逗號分隔。

範例
tee-impersonate-service-accounts=SERVICE_ACCOUNT_NAME_1@WORKLOAD_OPERATOR_PROJECT_ID.iam.gserviceaccount.com,SERVICE_ACCOUNT_NAME_2@WORKLOAD_OPERATOR_PROJECT_ID.iam.gserviceaccount.com

tee-install-gpu-driver

互動對象:

布林值

是否要安裝 NVIDIA 的機密運算 GPU 驅動程式。 需要支援 NVIDIA 機密運算的機器類型 (搶先版)。

範例
tee-install-gpu-driver=true

tee-monitoring-memory-enable

互動對象:

布林值

預設值為 false。設為 true 時,會啟用記憶體用量監控功能。機密 VM 收集的指標屬於 guest/memory/bytes_used 類型,可在 Cloud LoggingMetrics Explorer 中查看。

範例
tee-monitoring-memory-enable=true

tee-mount

互動對象:

字串

以半形分號分隔的掛接定義清單。掛接定義是由以半形逗號分隔的鍵/值組合清單組成,需要 typesourcedestinationdestination 必須是絕對路徑,且 type/source 必須是 tmpfs

範例
type=tmpfs,source=tmpfs,destination=/tmp/tmpfs,size=12345;type=tmpfs,source=tmpfs,destination=/run/workload

tee-restart-policy

互動對象:

定義的字串

工作負載停止時,容器啟動器的重新啟動政策

有效值如下:

  • Never (預設)
  • Always
  • OnFailure

這個變數僅適用於正式版機密空間映像檔。

範例
tee-restart-policy=OnFailure

tee-signed-image-repos

互動對象:

字串

以半形逗號分隔的容器存放區清單,用於儲存 Sigstore Cosign 產生的簽章。

範例
tee-signed-image-repos=us-docker.pkg.dev/projectA/repo/example,us-docker.pkg.dev/projectB/repo/example,us-docker.pkg.dev/projectC/repo/example

資源調度

如要為正式環境機密空間工作負載調度資源及確保高可用性,請參閱「代管執行個體群組」。