Desplegar cargas de trabajo


Un operador de carga de trabajo puede transferir opciones a una instancia de VM de carga de trabajo de Confidential Space para determinar su comportamiento antes de que se ejecute. Aunque algunas marcas tienen valores obligatorios que no cambian, debes tomar las siguientes decisiones:

  • Indica si la instancia de VM se basa en una imagen de Confidential Space de producción o de depuración.

  • Si quieres usar AMD SEV, Intel TDX o Intel TDX con NVIDIA Confidential Computing (vista previa) para mantener la privacidad de los datos de tu carga de trabajo.

  • Qué variables de metadatos de VM se deben transferir, lo que incluye detalles como qué imagen de contenedor de carga de trabajo se debe ejecutar, si se deben registrar en Cloud Logging y qué variables de entorno se deben definir.

  • Qué cuenta de servicio se debe asociar a la VM para ejecutar la carga de trabajo y qué permisos necesita para acceder a datos confidenciales de otros proyectos y escribir los resultados en algún lugar.

  • La zona en la que debe ejecutarse la instancia de VM.

A continuación, se muestra un ejemplo que crea una VM confidencial y ejecuta un contenedor Docker llamado WORKLOAD_CONTAINER_NAME:

Cargas de trabajo basadas en 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

Proporciona los siguientes valores:

  • INSTANCE_NAME: nombre de la nueva instancia de VM.

  • CONFIDENTIAL_COMPUTING_TECHNOLOGY: El tipo de tecnología de computación confidencial que se va a usar. Elige uno de los valores que se indican a continuación.

    • SEV

    • TDX

  • MACHINE_TYPE_NAME: el tipo de máquina virtual. Por ejemplo, n2d-standard-2. Los tipos de máquina válidos para las instancias de máquinas virtuales confidenciales se determinan en función de la tecnología de computación confidencial que hayas elegido: AMD SEV o Intel TDX. Consulta Tipos de máquinas, CPUs y zonas.

  • MAINTENANCE_POLICY: en los tipos de máquinas N2D que usan SEV, defina este valor como MIGRATE para admitir la migración en directo. En el resto de los tipos de máquina, asigna el valor TERMINATE, ya que no admiten la migración en directo.

  • IMAGE_FAMILY_NAME: la familia de las imágenes de Confidential Space. Elige una de estas opciones:

    • confidential-space para cargas de trabajo de producción

    • confidential-space-debug para cargas de trabajo de depuración

  • WORKLOAD_AUTHOR_PROJECT: el ID del proyecto que aloja el repositorio de Artifact Registry en el que se almacena el contenedor de carga de trabajo.

  • REPOSITORY_NAME: el nombre del repositorio de Artifact Registry en el que se almacena el contenedor de carga de trabajo.

  • WORKLOAD_CONTAINER_NAME: nombre del contenedor de la carga de trabajo.

  • WORKLOAD_SERVICE_ACCOUNT_NAME: el nombre de la cuenta de servicio que ejecuta la carga de trabajo.

  • WORKLOAD_OPERATOR_PROJECT_ID: el ID del proyecto que ejecuta la carga de trabajo.

  • ZONE_NAME: la zona en la que se ejecuta la instancia de VM. Por ejemplo, us-west1-b. Confidential Space requiere los siguientes servicios, que están disponibles en ubicaciones específicas:

  • PROJECT_ID: opcional. El ID del proyecto en el que se va a crear la instancia de VM.

Cargas de trabajo basadas en GPU

Antes de empezar

  • Confidential Space solo admite Confidential Computing de NVIDIA (vista previa) en GPUs H100.

  • Para asegurarte de que tienes suficiente cuota de GPU para los recursos que solicitas, consulta tu cuota de GPU. En el caso de las instancias de VM confidenciales con GPUs, solicita cuota de GPU interrumpible para usar los recursos. Cuando solicites cuota de GPUs, debes pedir cuota para los modelos de GPU que quieras crear en cada región y una cuota global adicional (GPUs (all regions)) para el número total de GPUs de todos los tipos en todas las regiones.

  • Para saber cómo se consume la cuota, consulta Cuotas de asignación de VMs con GPU y VMs interrumpibles.

  • Consulta las limitaciones para crear una solicitud de cambio de tamaño en un MIG.

  • Para instalar los controladores necesarios para NVIDIA Confidential Computing (vista previa), debes pasar la variable de metadatos tee-install-gpu-driver con el valor true.

  • Para los controladores de NVIDIA y el kit de herramientas de CUDA, se recomienda un disco de arranque de VM con 30 GB o más de espacio.

Desplegar una carga de trabajo basada en GPU

Para desplegar una carga de trabajo basada en GPU, debes crear una instancia de VM confidencial con el modelo de aprovisionamiento spot o flex-start (vista previa).

Spot

Para usar el modelo de aprovisionamiento de instancias de Spot, crea una instancia de VM optimizada para aceleradores.

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

Proporciona los siguientes valores:

  • INSTANCE_NAME: nombre de la nueva instancia de VM.

  • IMAGE_FAMILY_NAME: la familia de las imágenes de Confidential Space. Elige una de estas opciones:

    • confidential-space-preview-cgpu para cargas de trabajo de producción

    • confidential-space-debug-preview-cgpu para cargas de trabajo de depuración

  • WORKLOAD_AUTHOR_PROJECT: el ID del proyecto en el que se ejecuta la carga de trabajo.

  • REPOSITORY_NAME: nombre del repositorio de Artifact Registry.

  • WORKLOAD_CONTAINER_NAME: nombre del contenedor de la carga de trabajo.

  • WORKLOAD_SERVICE_ACCOUNT_NAME: el nombre de la cuenta de servicio que ejecuta la carga de trabajo.

  • WORKLOAD_OPERATOR_PROJECT_ID: el ID del proyecto que ejecuta la carga de trabajo.

  • ZONE_NAME: una de las zonas que admiten Confidential Computing de NVIDIA (versión preliminar).

  • PROJECT_ID: opcional. El ID del proyecto en el que se va a crear la instancia de VM.

Inicio flexible

Para usar el modelo de aprovisionamiento de inicio flexible (Vista previa), crea una plantilla de instancia y, a continuación, un grupo de instancias gestionadas (MIG).

  1. Crea una plantilla de instancia:

    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
    

    Proporciona los siguientes valores:

    • INSTANCE_TEMPLATE_NAME: nombre de la nueva plantilla de instancia de VM.

    • IMAGE_FAMILY_NAME: la familia de las imágenes de Confidential Space. Elige una de estas opciones:

      • confidential-space-preview-cgpu para cargas de trabajo de producción

      • confidential-space-debug-preview-cgpu para cargas de trabajo de depuración

    • WORKLOAD_AUTHOR_PROJECT: el ID del proyecto en el que se ejecuta la carga de trabajo.

    • REPOSITORY_NAME: nombre del repositorio de Artifact Registry.

    • WORKLOAD_CONTAINER_NAME: nombre del contenedor de la carga de trabajo.

    • WORKLOAD_SERVICE_ACCOUNT_NAME: el nombre de la cuenta de servicio que ejecuta la carga de trabajo.

    • WORKLOAD_OPERATOR_PROJECT_ID: ID del proyecto que ejecuta la carga de trabajo.

    • RUN_DURATION: la duración que quieres que se ejecuten las instancias de VM solicitadas. Debes dar formato al valor como el número de días, horas, minutos o segundos seguido de d, h, m o s, respectivamente. Por ejemplo, especifica 30m para 30 minutos o 1d2h3m4s para un día, dos horas, tres minutos y cuatro segundos. El valor debe estar comprendido entre 10 minutos y 7 días.

    • PROJECT_ID: opcional. El ID del proyecto en el que se crearán las instancias de VM.

  2. Crea un MIG zonal con el comando instance-groups managed create:

    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
    

    Proporciona los siguientes valores:

  3. En el MIG, crea una solicitud de cambio de tamaño. Especifica el número de instancias de VM con GPU que quieres y la duración durante la que quieres que se ejecuten.

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

    Proporciona los siguientes valores:

    • INSTANCE_GROUP_NAME: el nombre del MIG.

    • INSTANCE_TEMPLATE_NAME: el nombre de la plantilla de instancia de las instancias de VM con GPU.

    • ZONE_NAME: una de las zonas que admiten Confidential Computing de NVIDIA (versión preliminar).

    • RESIZE_REQUEST_NAME: el nombre de la solicitud de cambio de tamaño.

    • COUNT: número de instancias de VM que se van a añadir al grupo a la vez.

    La solicitud de cambio de tamaño que crees permanecerá en el estado ACCEPTED hasta que el MIG cree todas las instancias de VM con GPU solicitadas. Una vez que se hayan creado todas las instancias de máquina virtual con GPU del grupo, el estado de la solicitud cambiará a SUCCEEDED.

  4. Cuando haya suficientes recursos disponibles para la solicitud de cambio de tamaño, se añadirán instancias de VM al MIG y se iniciarán para ejecutar tu carga de trabajo. Para enumerar las instancias que están presentes en el MIG, ejecuta el siguiente comando:

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

    Proporciona los siguientes valores:

    • INSTANCE_GROUP_NAME: el nombre del MIG.

    • ZONE_NAME: la zona admitida de la que se va a obtener una lista de instancias de VM.

    • PROJECT_ID: opcional. ID del proyecto del que se va a obtener una lista de instancias de VM.

Cuenta de servicio adjunta

Para ejecutar una carga de trabajo, se debe adjuntar una cuenta de servicio a la VM confidencial de la carga de trabajo. La cuenta de servicio debe configurarse de la siguiente manera:

  • Con los siguientes roles:

  • Con acceso de lectura a la ubicación donde los colaboradores de datos almacenan sus datos confidenciales, por ejemplo, un segmento de Cloud Storage o una tabla de BigQuery.

  • Con acceso de escritura a la ubicación en la que la carga de trabajo debe generar los datos. Por ejemplo, un segmento de Cloud Storage. Los colaboradores de datos deben tener acceso de lectura a esta ubicación.

Además, los colaboradores de datos y los operadores de cargas de trabajo deben configurar lo siguiente:

  • Si los colaboradores de datos usan la suplantación de identidad de la cuenta de servicio en lugar del acceso directo a los recursos, deben añadir la cuenta de servicio a su proveedor de grupo de identidades de carga de trabajo como condición de atributo:

    'WORKLOAD_SERVICE_ACCOUNT_NAME@DATA_COLLABORATOR_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts
    
  • El operador de la carga de trabajo necesita el rol roles/iam.serviceAccountUser para suplantar la identidad de la cuenta de servicio. De esta forma, pueden asociarlo a una instancia de VM con carga de trabajo para que pueda ejecutar la carga de trabajo.

Variables de metadatos

Puedes cambiar el comportamiento de la VM de carga de trabajo de Confidential Space pasando variables a la opción --metadata cuando crees la VM.

Para introducir varias variables, primero define el delimitador añadiendo el prefijo ^~^ al valor de --metadata. De esta forma, el delimitador se establece en ~, ya que , se usa en los valores de las variables.

Por ejemplo:

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

En la siguiente tabla se detallan las variables de metadatos que puede definir para su VM de carga de trabajo.

Clave de metadatos Tipo Descripción y valores

tee-image-reference

Interactúa con:

Cadena

Obligatorio. Apunta a la ubicación del contenedor de la carga de trabajo.

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

tee-added-capabilities

Interactúa con:

Matriz de cadenas JSON

Añade funciones de Linux adicionales al contenedor de la carga de trabajo.

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

tee-cgroup-ns

Interactúa con:

Booleano

El valor predeterminado es false. Si se le asigna el valor true, se habilita un montaje de cgroup con espacio de nombres en /sys/fs/cgroup.

Ejemplo
tee-cgroup-ns=true

tee-cmd

Interactúa con:

Matriz de cadenas JSON

Anula las instrucciones de CMD especificadas en el Dockerfile del contenedor de la carga de trabajo.

Ejemplo
tee-cmd="[\"params1\", \"params2\"]"

tee-container-log-redirect

Interactúa con:

  • Autor de la carga de trabajo: la log_redirect política de lanzamiento.
Cadena definida

Genera las salidas STDOUT y STDERR del contenedor de carga de trabajo en Cloud Logging o en la consola serie, en el campo confidential-space-launcher.

Los valores válidos son:

  • false (predeterminado): no se registra nada.
  • true: se envía a la consola serie y a Cloud Logging.
  • cloud_logging: solo se envía a Cloud Logging.
  • serial: solo se muestra en la consola serie.

Un volumen de registros elevado en la consola serie podría afectar al rendimiento de la carga de trabajo.

Ejemplo
tee-container-log-redirect=true

tee-dev-shm-size-kb

Entero

Define el tamaño en kB del montaje de memoria compartida /dev/shm.

Ejemplo
tee-dev-shm-size-kb=65536

tee-env-ENVIRONMENT_VARIABLE_NAME

Interactúa con:

Cadena

Define variables de entorno en el contenedor de la carga de trabajo. El autor de la carga de trabajo también debe añadir los nombres de las variables de entorno a la política de lanzamiento allow_env_override para que se definan.

Ejemplo
tee-env-example-env-1='value-1'~tee-env-example-env-2='value-2'

tee-impersonate-service-accounts

Interactúa con:

Cadena

Lista de cuentas de servicio a las que puede suplantar el operador de la carga de trabajo. El operador de la carga de trabajo debe tener permiso para representar las cuentas de servicio.

Se pueden indicar varias cuentas de servicio separadas por comas.

Ejemplo
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

Interactúa con:

Booleano

Indica si se debe instalar el controlador de GPU de Confidential Computing de NVIDIA. Requiere un tipo de máquina que admita Confidential Computing de NVIDIA (vista previa).

Ejemplo
tee-install-gpu-driver=true

tee-monitoring-memory-enable

Interactúa con:

Booleano

El valor predeterminado es false. Si se define como true, se habilita la monitorización del uso de memoria. Las métricas recogidas por la VM confidencial son de tipo guest/memory/bytes_used y se pueden ver en Cloud Logging o en Explorador de métricas.

Ejemplo
tee-monitoring-memory-enable=true

tee-mount

Interactúa con:

Cadena

Lista de definiciones de montaje separadas por punto y coma. Una definición de montaje consta de una lista de pares clave-valor separados por comas que requieren type, source y destination. destination debe ser una ruta absoluta y type/source debe ser tmpfs.

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

tee-restart-policy

Interactúa con:

Cadena definida

La política de reinicio del lanzador de contenedores cuando la carga de trabajo se detiene

Los valores válidos son:

  • Never (predeterminado)
  • Always
  • OnFailure

Esta variable solo se admite en la imagen de espacio confidencial de producción.

Ejemplo
tee-restart-policy=OnFailure

tee-signed-image-repos

Interactúa con:

Cadena

Lista de repositorios de contenedores separados por comas que almacenan las firmas generadas por Sigstore Cosign.

Ejemplo
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

Escalado

Para obtener información sobre el escalado y la alta disponibilidad de las cargas de trabajo de producción de Confidential Space, consulta Grupos de instancias administrados.