Implemente cargas de trabalho


Um operador de carga de trabalho pode transmitir opções a uma instância de VM de carga de trabalho do espaço confidencial para determinar o respetivo comportamento antes da execução. Embora algumas flags tenham valores obrigatórios que não se alteram, continua a ter de fazer as seguintes escolhas:

  • Se a instância de VM deve basear-se numa imagem de espaço confidencial de produção ou depuração.

  • Se deve usar AMD SEV, Intel TDX ou Intel TDX com NVIDIA Confidential Computing (Pré-visualização) para ajudar a manter os dados da sua carga de trabalho privados.

  • Que variáveis de metadados da VM têm de ser transmitidas, que incluem detalhes como a imagem do contentor da carga de trabalho a executar, se deve registar no Cloud Logging e que variáveis de ambiente definir.

  • Que conta de serviço anexar à VM para executar a carga de trabalho e que autorizações precisa para aceder a dados confidenciais noutros projetos e escrever os resultados nalgum local.

  • Em que zona a instância de VM deve ser executada.

Segue-se um exemplo que cria uma Confidential VM e executa um contentor Docker denominado WORKLOAD_CONTAINER_NAME:

Cargas de trabalho baseadas na 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

Indique os seguintes valores:

  • INSTANCE_NAME: o nome da nova instância de VM.

  • CONFIDENTIAL_COMPUTING_TECHNOLOGY: O tipo de tecnologia de computação confidencial a usar. Escolha um dos seguintes valores:

    • SEV

    • TDX

  • MACHINE_TYPE_NAME: o tipo de máquina virtual, por exemplo, n2d-standard-2. Os tipos de máquinas válidos para instâncias de VMs confidenciais são determinados pela tecnologia de computação confidencial que escolheu, ou seja, AMD SEV ou Intel TDX. Consulte o artigo Tipos de máquinas, CPUs e zonas.

  • MAINTENANCE_POLICY: para tipos de máquinas N2D que usam SEV, defina esta opção como MIGRATE para suporte de migração em direto. Para todos os outros tipos de máquinas, defina este valor como TERMINATE, uma vez que não suportam a migração em direto.

  • IMAGE_FAMILY_NAME: a família das imagens do espaço confidencial. Selecione uma das seguintes opções:

    • confidential-space para cargas de trabalho de produção

    • confidential-space-debug para cargas de trabalho de depuração

  • WORKLOAD_AUTHOR_PROJECT: O ID do projeto que aloja o repositório do Artifact Registry no qual o contentor de carga de trabalho está armazenado.

  • REPOSITORY_NAME: o nome do repositório do Artifact Registry no qual o contentor de carga de trabalho está armazenado.

  • WORKLOAD_CONTAINER_NAME: o nome do contentor da carga de trabalho.

  • WORKLOAD_SERVICE_ACCOUNT_NAME: o nome da conta de serviço que executa a carga de trabalho.

  • WORKLOAD_OPERATOR_PROJECT_ID: o ID do projeto que executa a carga de trabalho.

  • ZONE_NAME: a zona em que a instância de VM é executada, por exemplo, us-west1-b. O espaço confidencial requer os seguintes serviços, que estão disponíveis em localizações específicas:

  • PROJECT_ID: opcional. O ID do projeto no qual criar a instância de VM.

Cargas de trabalho baseadas na GPU

Antes de começar

  • O espaço confidencial só suporta a computação confidencial da NVIDIA (pré-visualização) em GPUs H100.

  • Para se certificar de que tem quota de GPU suficiente para os recursos que está a pedir, verifique a sua quota de GPU. Para instâncias de VMs confidenciais com GPUs, peça uma quota de GPU preemptível para usar os recursos. Quando pede quota de GPU, tem de pedir quota para os modelos de GPU que quer criar em cada região e quota global adicional (GPUs (all regions)) para o número total de GPUs de todos os tipos em todas as regiões.

  • Para compreender o consumo de quotas, leia o artigo VMs de GPU e quotas de alocação preemptivas.

  • Leia as limitações para criar um pedido de redimensionamento num MIG.

  • Para instalar os controladores necessários para a computação confidencial da NVIDIA (pré-visualização), tem de transmitir a variável de metadados tee-install-gpu-driver com um valor de true.

  • Para os controladores da NVIDIA e o kit de ferramentas CUDA, recomenda-se um disco de arranque da VM com 30 GB ou mais de espaço.

Implemente uma carga de trabalho baseada em GPU

Para implementar uma carga de trabalho baseada em GPU, tem de criar uma instância de VM confidencial com o modelo de aprovisionamento spot ou flex-start (pré-visualização).

Espaço

Para usar o modelo de aprovisionamento de instâncias temporárias, crie uma instância de VM otimizada 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

Indique os seguintes valores:

  • INSTANCE_NAME: o nome da nova instância de VM.

  • IMAGE_FAMILY_NAME: a família das imagens do espaço confidencial. Selecione uma das seguintes opções:

    • confidential-space-preview-cgpu para cargas de trabalho de produção

    • confidential-space-debug-preview-cgpu para cargas de trabalho de depuração

  • WORKLOAD_AUTHOR_PROJECT: o ID do projeto no qual a carga de trabalho está a ser executada.

  • REPOSITORY_NAME: o nome do repositório do Artifact Registry.

  • WORKLOAD_CONTAINER_NAME: o nome do contentor da carga de trabalho.

  • WORKLOAD_SERVICE_ACCOUNT_NAME: o nome da conta de serviço que executa a carga de trabalho.

  • WORKLOAD_OPERATOR_PROJECT_ID: o ID do projeto que executa a carga de trabalho.

  • ZONE_NAME: Uma das zonas que suportam a computação confidencial da NVIDIA (pré-visualização).

  • PROJECT_ID: opcional. O ID do projeto no qual criar a instância de VM.

Flex-start

Para usar o modelo de aprovisionamento de início flexível (Pré-visualização), crie um modelo de instância e, de seguida, um grupo de instâncias gerido (GIG).

  1. Crie um modelo de instância:

    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
    

    Indique os seguintes valores:

    • INSTANCE_TEMPLATE_NAME: o nome do novo modelo de instância de VM.

    • IMAGE_FAMILY_NAME: a família das imagens do espaço confidencial. Selecione uma das seguintes opções:

      • confidential-space-preview-cgpu para cargas de trabalho de produção

      • confidential-space-debug-preview-cgpu para cargas de trabalho de depuração

    • WORKLOAD_AUTHOR_PROJECT: o ID do projeto no qual a carga de trabalho está a ser executada.

    • REPOSITORY_NAME: o nome do repositório do Artifact Registry.

    • WORKLOAD_CONTAINER_NAME: o nome do contentor de carga de trabalho.

    • WORKLOAD_SERVICE_ACCOUNT_NAME: o nome da conta de serviço que executa a carga de trabalho.

    • WORKLOAD_OPERATOR_PROJECT_ID: o ID do projeto que executa a carga de trabalho.

    • RUN_DURATION: a duração durante a qual quer que as instâncias de VM pedidas sejam executadas. Tem de formatar o valor como o número de dias, horas, minutos ou segundos, seguido de d, h, m ou s, respetivamente. Por exemplo, especifique 30m para 30 minutos ou 1d2h3m4s para um dia, duas horas, três minutos e quatro segundos. O valor tem de estar compreendido entre 10 minutos e sete dias.

    • PROJECT_ID: opcional. O ID do projeto no qual criar as instâncias de VM.

  2. Crie um MIG zonal com o 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
    

    Indique os seguintes valores:

  3. No MIG, crie um pedido de redimensionamento. Especifique o número de instâncias de VM com GPU que quer e a duração de execução dessas instâncias de VM.

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

    Indique os seguintes valores:

    O pedido de redimensionamento que criar permanece no estado ACCEPTED até o MIG criar todas as instâncias de VM de GPU pedidas. Depois de todas as instâncias de VM com GPU serem criadas no grupo, o estado do pedido muda para SUCCEEDED.

  4. Quando existem recursos suficientes para o pedido de redimensionamento, são adicionadas instâncias de VM ao MIG e iniciadas para executar a sua carga de trabalho. Para apresentar uma lista de instâncias presentes no MIG, execute o seguinte comando:

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

    Indique os seguintes valores:

    • INSTANCE_GROUP_NAME: o nome do MIG.

    • ZONE_NAME: a zona suportada para obter uma lista de instâncias de VM.

    • PROJECT_ID: opcional. O ID do projeto a partir do qual quer obter uma lista de instâncias de VM.

Conta de serviço anexada

Tem de anexar uma conta de serviço a uma VM confidencial de uma carga de trabalho para executar a carga de trabalho. A conta de serviço tem de ser configurada da seguinte forma:

  • Com as seguintes funções:

  • Com acesso de leitura ao local onde os colaboradores de dados armazenam os respetivos dados confidenciais, por exemplo, um contentor do Cloud Storage ou uma tabela do BigQuery.

  • Com acesso de escrita ao local onde a carga de trabalho deve gerar os dados, por exemplo, um contentor do Cloud Storage. Os colaboradores de dados devem ter acesso de leitura a esta localização.

Além disso, os colaboradores de dados e os operadores de cargas de trabalho têm de configurar o seguinte:

  • Se os colaboradores de dados estiverem a usar a representação da conta de serviço em vez do acesso direto aos recursos, têm de adicionar a conta de serviço ao respetivo fornecedor do conjunto de identidades da carga de trabalho como uma condição de atributo:

    'WORKLOAD_SERVICE_ACCOUNT_NAME@DATA_COLLABORATOR_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts
    
  • O operador da carga de trabalho precisa da função roles/iam.serviceAccountUser para se fazer passar pela conta de serviço. Isto permite-lhes anexá-lo a uma instância de VM de carga de trabalho para que possa executar a carga de trabalho.

Variáveis de metadados

Pode alterar o comportamento da VM da carga de trabalho do Confidential Space transmitindo variáveis para a opção --metadata quando cria a VM.

Para transmitir várias variáveis, defina primeiro o delimitador prefixando o valor --metadata com ^~^. Isto define o delimitador como ~, uma vez que , é usado em valores variáveis.

Por exemplo:

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

A tabela seguinte detalha as variáveis de metadados que pode definir para a VM de carga de trabalho.

Chave de metadados Tipo Descrição e valores

tee-image-reference

Interage com:

String

Obrigatório. Isto aponta para a localização do contentor da carga de trabalho.

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

tee-added-capabilities

Interage com:

Matriz de strings JSON

Adiciona capacidades do Linux adicionais ao contentor de carga de trabalho.

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

tee-cgroup-ns

Interage com:

Booleano

A predefinição é false. Quando está definida como true, ativa uma montagem de cgroup com espaço de nomes em /sys/fs/cgroup.

Exemplo
tee-cgroup-ns=true

tee-cmd

Interage com:

Matriz de strings JSON

Substitui as instruções CMD especificadas no Dockerfile do contentor da carga de trabalho.

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

tee-container-log-redirect

Interage com:

  • Autor da carga de trabalho: a log_redirect política de lançamento.
String definida

Envia STDOUT e STDERR do contentor de carga de trabalho para o Cloud Logging ou a consola série, no campo confidential-space-launcher.

Os valores válidos são:

  • false: (predefinição) não ocorre nenhum registo.
  • true: envia para a consola série e para o Cloud Logging.
  • cloud_logging: envia resultados apenas para o Cloud Logging.
  • serial: envia a saída apenas para a consola de série.

Um volume de registos elevado na consola série pode afetar o desempenho da carga de trabalho.

Exemplo
tee-container-log-redirect=true

tee-dev-shm-size-kb

Número inteiro

Define o tamanho em kB da montagem de /dev/shm memória partilhada.

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

tee-env-ENVIRONMENT_VARIABLE_NAME

Interage com:

String

Define variáveis de ambiente no contentor de carga de trabalho. O autor da carga de trabalho também tem de adicionar os nomes das variáveis de ambiente à política de lançamento, caso contrário, não são definidos. allow_env_override

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

tee-impersonate-service-accounts

Interage com:

String

Uma lista de contas de serviço que podem ser representadas pelo operador da carga de trabalho. O operador da carga de trabalho tem de ter autorização para se fazer passar pelas contas de serviço.

Podem ser indicadas várias contas de serviço, separadas por vírgulas.

Exemplo
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

Interage com:

Booleano

Se deve instalar o controlador de GPU de computação confidencial da NVIDIA. Requer um tipo de máquina que suporte a computação confidencial da NVIDIA (pré-visualização).

Exemplo
tee-install-gpu-driver=true

tee-monitoring-memory-enable

Interage com:

Booleano

A predefinição é false. Quando definida como true, ativa a monitorização da utilização de memória. As métricas recolhidas pela VM confidencial são do tipo guest/memory/bytes_used

Exemplo
tee-monitoring-memory-enable=true

tee-mount

Interage com:

String

Uma lista de definições de montagem separadas por pontos e vírgulas. Uma definição de montagem consiste numa lista separada por vírgulas de pares de chave-valor, que requer type, source e destination. destination tem de ser um caminho absoluto e type/source tem de ser tmpfs.

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

tee-restart-policy

Interage com:

String definida

A política de reinício do iniciador de contentores quando a carga de trabalho para

Os valores válidos são:

  • Never (predefinição)
  • Always
  • OnFailure

Esta variável só é suportada pela imagem do espaço confidencial de produção.

Exemplo
tee-restart-policy=OnFailure

tee-signed-image-repos

Interage com:

String

Uma lista de repositórios de contentores separados por vírgulas que armazenam as assinaturas geradas por Sigstore Cosign.

Exemplo
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

Dimensionar

Para a escalabilidade e a elevada disponibilidade das cargas de trabalho de produção do Confidential Space, consulte os grupos de instâncias geridos.