部署工作负载


工作负载操作员可以将选项传递给 Confidential Space 工作负载虚拟机实例,以确定其在运行之前的行为。虽然有些标志具有不会更改的必需值,但您仍需做出以下选择:

  • 虚拟机实例是基于生产版还是调试版 Confidential Space 映像

  • 是否使用 AMD SEV、Intel TDX 或 Intel TDX 与 NVIDIA 机密计算(预览版)来帮助确保工作负载数据的私密性。

  • 需要传递哪些 VM 元数据变量,包括要运行哪个工作负载容器映像、是否记录到 Cloud Logging 以及要设置哪些环境变量等详细信息。

  • 要将哪个服务账号关联到虚拟机以运行工作负载,以及该服务账号需要哪些权限才能访问其他项目中的保密数据并将结果写入某个位置。

  • 虚拟机实例应在哪个可用区中运行。

以下示例展示了如何创建机密虚拟机并运行名为 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:新虚拟机实例的名称。

  • CONFIDENTIAL_COMPUTING_TECHNOLOGY:要使用的机密计算技术的类型。请选择以下某个值:

    • SEV

    • TDX

  • MACHINE_TYPE_NAME:虚拟机的机器类型,例如 n2d-standard-2。机密虚拟机实例的有效机器类型取决于您选择的机密计算技术,即 AMD SEV 或 Intel TDX。请参阅机器类型、CPU 和可用区

  • MAINTENANCE_POLICY:对于使用 SEV 的 N2D 机器类型,请将此值设置为 MIGRATE 以支持实时迁移。对于所有其他机器类型,请将此值设置为 TERMINATE,因为它们不支持实时迁移

  • IMAGE_FAMILY_NAMEConfidential Space 映像的系列。 请按以下方式之一操作:

    • confidential-space 适用于生产工作负载

    • confidential-space-debug 用于调试工作负载

  • WORKLOAD_AUTHOR_PROJECT:托管工作负载容器所存储的 Artifact Registry 制品库的项目的 ID。

  • REPOSITORY_NAME:存储工作负载容器的 Artifact Registry 制品库名称。

  • WORKLOAD_CONTAINER_NAME:工作负载容器的名称。

  • WORKLOAD_SERVICE_ACCOUNT_NAME:运行工作负载的服务账号的名称。

  • WORKLOAD_OPERATOR_PROJECT_ID:运行工作负载的项目的 ID。

  • ZONE_NAME:虚拟机实例运行所在的可用区,例如 us-west1-b。Confidential Space 需要以下服务,这些服务可在特定位置中使用:

  • PROJECT_ID:可选。要在其中创建虚拟机实例的项目的 ID。

基于 GPU 的工作负载

准备工作

  • Confidential Space 仅支持在 H100 GPU 上使用 NVIDIA 机密计算(预览版)。

  • 为确保您有足够的 GPU 配额可以用于请求的资源,请检查您的 GPU 配额。对于具有 GPU 的保密虚拟机实例,请申请抢占式 GPU 配额以使用这些资源。申请 GPU 配额时,您必须为要在每个区域中创建的 GPU 型号申请一个配额,并根据所有区域中所有类型的 GPU 总数另外申请一个全球配额 (GPUs (all regions))。

  • 如需了解配额用量,请参阅 GPU 虚拟机和抢占式分配配额

  • 查看在 MIG 中创建调整大小请求时的限制

  • 如需安装 NVIDIA 保密计算(预览版)所需的驱动程序,您必须传递值为 true元数据变量 tee-install-gpu-driver

  • 对于 NVIDIA 驱动程序和 CUDA 工具包,建议使用空间为 30 GB 或更高的虚拟机启动磁盘。

部署基于 GPU 的工作负载

如需部署基于 GPU 的工作负载,您必须使用 Spot灵活启动预览版)预配模型创建机密虚拟机实例。

Spot

如需使用 Spot 预配模型,请创建加速器优化型虚拟机实例。

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:新虚拟机实例的名称。

  • IMAGE_FAMILY_NAMEConfidential Space 映像的系列。 请按以下方式之一操作:

    • 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:可选。要在其中创建虚拟机实例的项目的 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:新虚拟机实例模板的名称。

    • IMAGE_FAMILY_NAMEConfidential Space 映像的系列。 请按以下方式之一操作:

      • 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:您希望所请求的虚拟机实例运行的时长。您必须将该值格式化为天、小时、分钟或秒数,并分别添加对应的后缀 dhms。例如,指定 30m 表示 30 分钟,或指定 1d2h3m4s 表示 1 天 2 小时 3 分钟 4 秒。该值必须介于 10 分钟到 7 天之间。

    • PROJECT_ID:可选。要在其中创建虚拟机实例的项目的 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
    

    请提供以下值:

    • INSTANCE_GROUP_NAME:MIG 的名称。

    • INSTANCE_TEMPLATE_NAME:GPU 虚拟机的实例模板的名称。

    • ZONE_NAME支持 NVIDIA 机密计算预览版)的可用区之一。

  3. 在 MIG 中,创建调整大小请求。指定所需的 GPU 虚拟机实例数量以及运行这些虚拟机实例的时长。

    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 虚拟机实例的实例模板的名称。

    • ZONE_NAME支持 NVIDIA 机密计算预览版)的可用区之一。

    • RESIZE_REQUEST_NAME:调整大小请求的名称。

    • COUNT:要在实例组中一次性添加的虚拟机实例数。

    您创建的调整大小请求会保持 ACCEPTED 状态,直到 MIG 创建了所有请求的 GPU 虚拟机实例。在实例组中创建所有 GPU 虚拟机实例后,请求的状态会更改为 SUCCEEDED

  4. 当有足够的资源可用于调整大小请求时,系统会将虚拟机实例添加到 MIG 并启动这些实例以运行您的工作负载。如需列出 MIG 中存在的实例,请运行以下命令:

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

    请提供以下值:

    • INSTANCE_GROUP_NAME:MIG 的名称。

    • ZONE_NAME:要从中获取虚拟机实例列表的支持的可用区

    • PROJECT_ID:可选。要从中获取虚拟机实例列表的项目的 ID。

关联的服务账号

必须将服务账号附加到工作负载的机密虚拟机,才能运行工作负载。服务账号必须按以下方式设置:

  • 具有以下角色:

  • 具有对数据协作者存储其机密数据的位置(例如 Cloud Storage 存储桶或 BigQuery 表)的读取权限。

  • 具有对工作负载应输出数据的位置(例如 Cloud Storage 存储桶)的写入权限。数据协作者应具有对此位置的读取访问权限。

此外,数据协作者和工作负载操作员还需要设置以下内容:

  • 如果数据协作者使用服务账号模拟而非直接资源访问,则必须将服务账号作为属性条件添加到其工作负载身份池提供方:

    'WORKLOAD_SERVICE_ACCOUNT_NAME@DATA_COLLABORATOR_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts
    
  • 工作负载操作员需要 roles/iam.serviceAccountUser 角色才能模拟服务账号。这样,他们就可以将该磁盘附加到工作负载虚拟机实例,以便运行工作负载。

元数据变量

您可以在创建 Confidential Space 工作负载虚拟机时,通过将变量传递到 --metadata 选项来更改其行为。

如需传入多个变量,请首先在 --metadata 值前面添加 ^~^ 来设置分隔符。这会将分隔符设置为 ~,因为变量值中使用了 ,

例如:

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

下表详细介绍了您可以为工作负载虚拟机设置的元数据变量。

元数据键 类型 说明和值

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,则启用内存用量监控。机密虚拟机收集的指标属于 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

此变量仅受生产 Confidential Space 映像支持。

示例
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

扩缩

如需了解如何伸缩生产 Confidential Space 工作负载并实现高可用性,请参阅托管实例组