Implementa cargas de trabajo


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

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

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

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

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

  • Zona en la que se debe ejecutar la instancia de VM.

Este es un ejemplo que crea una Confidential VM y ejecuta un contenedor de 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

Ingresa los siguientes valores:

  • INSTANCE_NAME: Es el nombre de la instancia de VM nueva.

  • CONFIDENTIAL_COMPUTING_TECHNOLOGY: Es el tipo de tecnología de Confidential Computing que se usará. Elige uno de los siguientes valores:

    • SEV

    • TDX

  • MACHINE_TYPE_NAME: Es el tipo de máquina de la VM, por ejemplo, n2d-standard-2. Los tipos de máquinas válidos para las instancias de Confidential VMs se determinan según la tecnología de Confidential Computing que elijas, ya sea AMD SEV o Intel TDX. Consulta Tipos de máquinas, CPUs y zonas.

  • MAINTENANCE_POLICY: Para los tipos de máquinas N2D que usan SEV, establece este parámetro en MIGRATE para admitir la migración en vivo. Para todos los demás tipos de máquinas, establece este valor en TERMINATE, ya que no admiten la migración en vivo.

  • IMAGE_FAMILY_NAME: Es 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: ID del proyecto que aloja el repositorio de Artifact Registry en el que se almacena el contenedor de la carga de trabajo.

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

  • WORKLOAD_CONTAINER_NAME: Es el nombre del contenedor de carga de trabajo.

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

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

  • ZONE_NAME: Es 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 ID del proyecto en el que se creará la instancia de VM.

Cargas de trabajo basadas en GPU

Antes de comenzar

  • Confidential Space solo admite la función Confidential Computing de NVIDIA (versión preliminar) en las GPU H100.

  • A fin de asegurarte de que tienes suficiente cuota de GPU para los recursos que solicitas, verifica tu cuota de GPU. En el caso de las instancias de VM confidenciales con GPU, solicita una cuota de GPU interrumpible para usar los recursos. Cuando solicitas una cuota de GPU, debes especificar una cuota de los modelos de GPU que quieres crear en cada región, así como indicar la cuota global adicional (GPUs (all regions)) con la cantidad total de GPU de todos los tipos en todas las regiones.

  • Para comprender el consumo de cuotas, consulta VMs de GPU y cuotas de asignación interrumpibles.

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

  • Para instalar los controladores necesarios para la función de Confidential Computing de NVIDIA (versión preliminar), debes pasar la variable de metadatos tee-install-gpu-driver con un valor de 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.

Implementa una carga de trabajo basada en GPU

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

Spot

Para usar el modelo de aprovisionamiento de instancias 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

Ingresa los siguientes valores:

  • INSTANCE_NAME: Es el nombre de la instancia de VM nueva.

  • IMAGE_FAMILY_NAME: Es 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: Es el ID del proyecto en el que se ejecuta la carga de trabajo.

  • REPOSITORY_NAME: Es el nombre del repositorio de Artifact Registry.

  • WORKLOAD_CONTAINER_NAME: Es el nombre del contenedor de carga de trabajo.

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

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

  • ZONE_NAME: Una de las zonas que admiten la informática confidencial de NVIDIA (vista previa).

  • PROJECT_ID: Opcional ID del proyecto en el que se creará la instancia de VM.

Inicio flexible

Para usar el modelo de aprovisionamiento de inicio flexible (versión preliminar), crea una plantilla de instancias y, luego, un grupo de instancias administrado (MIG).

  1. Crea una plantilla de instancias:

    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
    

    Ingresa los siguientes valores:

    • INSTANCE_TEMPLATE_NAME: Es el nombre de la nueva plantilla de instancias de VM.

    • IMAGE_FAMILY_NAME: Es 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: Es el ID del proyecto en el que se ejecuta la carga de trabajo.

    • REPOSITORY_NAME: Es el nombre del repositorio de Artifact Registry.

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

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

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

    • RUN_DURATION: Es la duración de la que deseas que se ejecuten las instancias de VM solicitadas. Debes darle formato al valor como la cantidad de días, horas, minutos o segundos, seguidos 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 ser de entre 10 minutos y siete días.

    • PROJECT_ID: Opcional Es 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
    

    Ingresa los siguientes valores:

  3. En el MIG, crea una solicitud de cambio de tamaño. Especifica la cantidad de instancias de VM de GPU que deseas y la duración de la ejecución de esas instancias de VM.

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

    Ingresa los siguientes valores:

    • INSTANCE_GROUP_NAME: el nombre del MIG

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

    • ZONE_NAME: Una de las zonas que admiten la informática confidencial de NVIDIA (vista previa).

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

    • COUNT: Es la cantidad de instancias de VM que se agregarán a la vez en el grupo.

    La solicitud de cambio de tamaño que creas permanece en el estado ACCEPTED hasta que el MIG crea todas las instancias de VM con GPU solicitadas. Después de crear todas las instancias de VM con GPU en el grupo, el estado de la solicitud cambia a SUCCEEDED.

  4. Cuando hay suficientes recursos disponibles para la solicitud de cambio de tamaño, se agregan instancias de VM al MIG y se inician para ejecutar tu carga de trabajo. Para enumerar las instancias presentes en el MIG, ejecuta el siguiente comando:

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

    Ingresa los siguientes valores:

    • INSTANCE_GROUP_NAME: el nombre del MIG

    • ZONE_NAME: Es la zona admitida desde la que se obtendrá una lista de instancias de VM.

    • PROJECT_ID: Opcional Es el ID del proyecto del que se obtendrá una lista de instancias de VM.

Cuenta de servicio adjunta

Se debe conectar una cuenta de servicio a la Confidential VM de una carga de trabajo para ejecutarla. La cuenta de servicio debe configurarse de la siguiente manera:

  • Con los siguientes roles:

  • Tener acceso de lectura a la ubicación en la que los colaboradores de datos almacenan sus datos confidenciales, por ejemplo, un bucket de Cloud Storage o una tabla de BigQuery

  • Con acceso de escritura al lugar donde la carga de trabajo debe generar los datos, por ejemplo, un bucket 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 agregar la cuenta de servicio a su proveedor de grupo de identidades de cargas de trabajo como una condición de atributo:

    'WORKLOAD_SERVICE_ACCOUNT_NAME@DATA_COLLABORATOR_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts
    
  • El operador de carga de trabajo necesita el rol roles/iam.serviceAccountUser para suplantar la identidad de la cuenta de servicio. Esto les permite adjuntarlo a una instancia de VM de 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 creas la VM.

Para pasar varias variables, primero establece el delimitador agregando el prefijo ^~^ al valor --metadata. Esto establece el delimitador 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 puedes configurar para la VM de tu carga de trabajo.

Clave de metadatos Tipo Descripción y valores

tee-image-reference

Interactúa con:

String

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:

Array de cadenas JSON

Agrega capacidades 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:

  • Autor de la carga de trabajo: La política de lanzamiento de allow_cgroups .
Booleano

La configuración predeterminada es false. Cuando se establece en true, habilita un montaje de cgroup con espacio de nombres en /sys/fs/cgroup.

Ejemplo
tee-cgroup-ns=true

tee-cmd

Interactúa con:

Array de cadenas JSON

Anula las instrucciones 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 política de lanzamiento de log_redirect .
Cadena definida

Envía STDOUT y STDERR del contenedor de la carga de trabajo a Cloud Logging o a la consola en serie, en el campo confidential-space-launcher.

Los valores válidos son los siguientes:

  • false: (predeterminado) No se realiza ningún registro.
  • true: Se genera en la consola serie y en Cloud Logging.
  • cloud_logging: Solo se genera en Cloud Logging.
  • serial: Solo se genera en la consola en serie.

Un volumen alto de registros en la consola en serie puede afectar el rendimiento de la carga de trabajo.

Ejemplo
tee-container-log-redirect=true

tee-dev-shm-size-kb

Número entero

Establece el tamaño en kB de la activación de la memoria compartida /dev/shm.

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

tee-env-ENVIRONMENT_VARIABLE_NAME

Interactúa con:

String

Configura las variables de entorno en el contenedor de carga de trabajo. El autor de la carga de trabajo también debe agregar los nombres de variable de entorno a la política de lanzamiento de allow_env_override , de lo contrario, no se establecerán.

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

tee-impersonate-service-accounts

Interactúa con:

String

Es una lista de cuentas de servicio que el operador de carga de trabajo puede suplantar. El operador de carga de trabajo debe tener la identidad de las cuentas de servicio.

Se pueden enumerar 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

La configuración predeterminada es false. Cuando se establece en true, se habilita la supervisión del uso de memoria. Las métricas recopiladas por la Confidential VM son del tipo guest/memory/bytes_used y se pueden ver en Cloud Logging o en el Explorador de métricas.

Ejemplo
tee-monitoring-memory-enable=true

tee-mount

Interactúa con:

String

Es una lista de definiciones de montaje separadas por punto y coma. Una definición de montaje consta de una lista separada por comas de pares clave-valor, que requiere type, source y destination. destination debe ser una ruta de acceso 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

Política de reinicio del iniciador de contenedores cuando se detiene la carga de trabajo

Los valores válidos son los siguientes:

  • Never (predeterminada)
  • Always
  • OnFailure

Esta variable solo es compatible con la imagen de Confidential Space de producción.

Ejemplo
tee-restart-policy=OnFailure

tee-signed-image-repos

Interactúa con:

String

Es una 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

Escalamiento

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