Esegui il deployment dei carichi di lavoro


Un operatore di workload può passare opzioni a un'istanza VM di workload Confidential Space per determinarne il comportamento prima dell'esecuzione. Anche se alcuni flag hanno valori obbligatori che non cambiano, devi comunque effettuare le seguenti scelte:

  • Se basare l'istanza VM su un'immagine Confidential Space di produzione o di debug.

  • Se utilizzare AMD SEV, Intel TDX o Intel TDX con NVIDIA Confidential Computing (anteprima) per mantenere privati i dati del carico di lavoro.

  • Quali variabili dei metadati VM devono essere passate, tra cui dettagli come l'immagine del container del carico di lavoro da eseguire, se eseguire la registrazione in Cloud Logging e quali variabili di ambiente impostare.

  • Quale service account collegare alla VM per eseguire il workload e quali autorizzazioni deve avere per accedere ai dati riservati in altri progetti e scrivere i risultati da qualche parte.

  • La zona in cui deve essere eseguita l'istanza VM.

Ecco un esempio che crea una Confidential VM ed esegue un container Docker denominato WORKLOAD_CONTAINER_NAME:

Workload basati su 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

Fornisci i seguenti valori:

  • INSTANCE_NAME: il nome della nuova istanza VM.

  • CONFIDENTIAL_COMPUTING_TECHNOLOGY: Il tipo di tecnologia Confidential Computing da utilizzare. Scegli uno dei seguenti valori:

    • SEV

    • TDX

  • MACHINE_TYPE_NAME: il tipo di macchina della VM, ad esempio n2d-standard-2. I tipi di macchina validi per le istanze Confidential VM sono determinati dalla tecnologia Confidential Computing che hai scelto, ovvero AMD SEV o Intel TDX. Consulta Tipi di macchine, CPU e zone.

  • MAINTENANCE_POLICY: per i tipi di macchine N2D che utilizzano SEV, imposta questo valore su MIGRATE per il supporto della migrazione live. Per tutti gli altri tipi di macchine, imposta questo valore su TERMINATE, in quanto non supportano la migrazione live.

  • IMAGE_FAMILY_NAME: la famiglia per le immagini di Confidential Space. Scegli una delle opzioni seguenti:

    • confidential-space per i workload di produzione

    • confidential-space-debug per i carichi di lavoro di debug

  • WORKLOAD_AUTHOR_PROJECT: l'ID del progetto che ospita il repository Artifact Registry in cui è archiviato il container del workload.

  • REPOSITORY_NAME: il nome del repository Artifact Registry in cui è archiviato il container del workload.

  • WORKLOAD_CONTAINER_NAME: il nome del container del workload.

  • WORKLOAD_SERVICE_ACCOUNT_NAME: il nome del account di servizio che esegue il workload.

  • WORKLOAD_OPERATOR_PROJECT_ID: l'ID del progetto che esegue il workload.

  • ZONE_NAME: la zona in cui viene eseguita l'istanza VM, ad esempio us-west1-b. Confidential Space richiede i seguenti servizi, disponibili in località specifiche:

  • PROJECT_ID: (Facoltativo) L'ID del progetto in cui creare l'istanza VM.

Carichi di lavoro basati su GPU

Prima di iniziare

  • Confidential Space supporta solo NVIDIA Confidential Computing (anteprima) sulle GPU H100.

  • Per assicurarti di disporre di una quota GPU sufficiente per le risorse che stai richiedendo, controlla la quota GPU. Per le istanze VM confidenziali con GPU, richiedi una quota di GPU prerilasciabile per utilizzare le risorse. Quando richiedi una quota GPU, devi richiederne una per i modelli di GPU che vuoi creare in ciascuna regione e una globale aggiuntiva (GPUs (all regions)) per il numero totale di GPU di tutti i tipi in tutte le regioni.

  • Per comprendere il consumo di quota, leggi VM GPU e quote di allocazione preemptible.

  • Leggi le limitazioni per la creazione di una richiesta di ridimensionamento in un gruppo di istanze gestite.

  • Per installare i driver richiesti per NVIDIA Confidential Computing (anteprima), devi trasmettere la variabile di metadati tee-install-gpu-driver con un valore di true.

  • Per i driver NVIDIA e il toolkit CUDA, è consigliato un disco di avvio della VM con almeno 30 GB di spazio.

Esegui il deployment di un carico di lavoro basato su GPU

Per eseguire il deployment di un carico di lavoro basato su GPU, devi creare un'istanza Confidential VM utilizzando il modello di provisioning spot o flex-start (anteprima).

Spot

Per utilizzare il modello di provisioning spot, crea un'istanza VM ottimizzata per l'acceleratore.

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

Fornisci i seguenti valori:

  • INSTANCE_NAME: il nome della nuova istanza VM.

  • IMAGE_FAMILY_NAME: la famiglia per le immagini di Confidential Space. Scegli una delle opzioni seguenti:

    • confidential-space-preview-cgpu per i workload di produzione

    • confidential-space-debug-preview-cgpu per i carichi di lavoro di debug

  • WORKLOAD_AUTHOR_PROJECT: l'ID progetto in cui viene eseguito il workload.

  • REPOSITORY_NAME: il nome del repository Artifact Registry.

  • WORKLOAD_CONTAINER_NAME: il nome del container del workload.

  • WORKLOAD_SERVICE_ACCOUNT_NAME: il nome del account di servizio che esegue il workload.

  • WORKLOAD_OPERATOR_PROJECT_ID: l'ID del progetto che esegue il workload.

  • ZONE_NAME: una delle zone che supportano NVIDIA Confidential Computing (anteprima).

  • PROJECT_ID: (Facoltativo) L'ID del progetto in cui creare l'istanza VM.

Avvio flessibile

Per utilizzare il modello di provisioning con avvio flessibile (anteprima), crea un modello di istanza, seguito da un gruppo di istanze gestite (MIG).

  1. Crea un modello di istanza:

    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
    

    Fornisci i seguenti valori:

    • INSTANCE_TEMPLATE_NAME: il nome del nuovo template di istanza VM.

    • IMAGE_FAMILY_NAME: la famiglia per le immagini di Confidential Space. Scegli una delle opzioni seguenti:

      • confidential-space-preview-cgpu per i workload di produzione

      • confidential-space-debug-preview-cgpu per i carichi di lavoro di debug

    • WORKLOAD_AUTHOR_PROJECT: l'ID progetto in cui viene eseguito il workload.

    • REPOSITORY_NAME: il nome del repository Artifact Registry.

    • WORKLOAD_CONTAINER_NAME: il nome del container del workload.

    • WORKLOAD_SERVICE_ACCOUNT_NAME: il nome del account di servizio che esegue il workload.

    • WORKLOAD_OPERATOR_PROJECT_ID: l'ID del progetto che esegue il carico di lavoro.

    • RUN_DURATION: la durata per cui vuoi eseguire le istanze VM richieste. Devi formattare il valore come numero di giorni, ore, minuti o secondi seguito rispettivamente da d, h, m o s. Ad esempio, specifica 30m per 30 minuti o 1d2h3m4s per un giorno, due ore, tre minuti e quattro secondi. Il valore deve essere compreso tra 10 minuti e sette giorni.

    • PROJECT_ID: (Facoltativo) L'ID del progetto in cui creare le istanze VM.

  2. Crea un gruppo di istanze gestite a livello di zona utilizzando il 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
    

    Fornisci i seguenti valori:

  3. Nel gruppo di istanze gestite, crea una richiesta di ridimensionamento. Specifica il numero di istanze VM GPU che vuoi e la durata di esecuzione di queste istanze VM.

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

    Fornisci i seguenti valori:

    • INSTANCE_GROUP_NAME: il nome del MIG.

    • INSTANCE_TEMPLATE_NAME: il nome del template di istanza per le istanze VM con GPU.

    • ZONE_NAME: una delle zone che supportano NVIDIA Confidential Computing (anteprima).

    • RESIZE_REQUEST_NAME: il nome della richiesta di ridimensionamento.

    • COUNT: il numero di istanze VM da aggiungere contemporaneamente al gruppo.

    La richiesta di ridimensionamento che crei rimane nello stato ACCEPTED finché il MIG non crea tutte le istanze di VM GPU richieste. Dopo aver creato tutte le istanze VM con GPU nel gruppo, lo stato della richiesta cambia in SUCCEEDED.

  4. Quando sono disponibili risorse sufficienti per la richiesta di ridimensionamento, le istanze VM vengono aggiunte al MIG e avviate per eseguire il workload. Per elencare le istanze presenti nel MIG, esegui questo comando:

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

    Fornisci i seguenti valori:

    • INSTANCE_GROUP_NAME: il nome del MIG.

    • ZONE_NAME: la zona supportata da cui recuperare un elenco di istanze VM.

    • PROJECT_ID: (Facoltativo) L'ID del progetto da cui ottenere un elenco di istanze VM.

Account di servizio collegato

Per eseguire il workload, è necessario collegare un account di servizio alla VM Confidential del workload. Il account di servizio deve essere configurato nel seguente modo:

  • Con i seguenti ruoli:

  • Con accesso in lettura alla posizione in cui i collaboratori dei dati archiviano i dati riservati, ad esempio un bucket Cloud Storage o una tabella BigQuery.

  • Con accesso in scrittura alla posizione in cui il workload deve restituire i dati, ad esempio un bucket Cloud Storage. I collaboratori dei dati devono avere accesso in lettura a questa posizione.

Inoltre, i collaboratori dei dati e gli operatori dei workload devono configurare quanto segue:

  • Se i collaboratori dei dati utilizzano l'imitazione dell'account di servizio anziché l'accesso diretto alle risorse, devono aggiungere l'account di servizio al provider del pool di identità del carico di lavoro come condizione dell'attributo:

    'WORKLOAD_SERVICE_ACCOUNT_NAME@DATA_COLLABORATOR_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts
    
  • L'operatore del workload richiede il ruolo roles/iam.serviceAccountUser per impersonare ilaccount di serviziot. In questo modo, possono collegarlo a un'istanza VM del carico di lavoro in modo che possa eseguire il carico di lavoro.

Variabili dei metadati

Puoi modificare il comportamento della VM del workload Confidential Space passando le variabili all'opzione --metadata quando crei la VM.

Per inserire più variabili, imposta prima il delimitatore aggiungendo il prefisso --metadata al valore ^~^. Il delimitatore viene impostato su ~, poiché , viene utilizzato nei valori delle variabili.

Ad esempio:

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

La tabella seguente descrive in dettaglio le variabili di metadati che puoi impostare per la VM del carico di lavoro.

Chiave dei metadati Tipo Descrizione e valori

tee-image-reference

Interazione con:

Stringa

Obbligatorio. Indica la posizione del container del workload.

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

tee-added-capabilities

Interazione con:

Array di stringhe JSON

Aggiunge funzionalità Linux aggiuntive al container del workload.

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

tee-cgroup-ns

Interazione con:

Booleano

Il valore predefinito è false. Se impostato su true, abilita il montaggio di un cgroup con spazio dei nomi in /sys/fs/cgroup.

Esempio
tee-cgroup-ns=true

tee-cmd

Interazione con:

Array di stringhe JSON

Esegue l'override delle istruzioni CMD specificate nel Dockerfile del container del carico di lavoro.

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

tee-container-log-redirect

Interazione con:

Stringa definita

Output STDOUT e STDERR dal container del workload a Cloud Logging o alla console seriale, nel campo confidential-space-launcher.

I valori validi sono:

  • false: (predefinito) non viene eseguito alcun logging.
  • true: output nella console seriale e Cloud Logging.
  • cloud_logging: l'output viene inviato solo a Cloud Logging.
  • serial: output solo sulla console seriale.

Un volume elevato di log nella console seriale potrebbe influire sulle prestazioni del workload.

Esempio
tee-container-log-redirect=true

tee-dev-shm-size-kb

Numero intero

Imposta le dimensioni in kB del punto di montaggio della memoria condivisa /dev/shm.

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

tee-env-ENVIRONMENT_VARIABLE_NAME

Interazione con:

Stringa

Imposta le variabili di ambiente nel container del workload. L'autore del workload deve anche aggiungere i nomi variabile di ambiente alle norme di avvio allow_env_override , altrimenti non verranno impostate.

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

tee-impersonate-service-accounts

Interazione con:

Stringa

Un elenco di service account che possono essere rappresentati dall'operatore del workload. L'operatore del carico di lavoro deve avere l'autorizzazione per impersonare i service account.

È possibile elencare più service account separati da virgole.

Esempio
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

Interazione con:

Booleano

Se installare il driver GPU Confidential Computing di NVIDIA. Richiede un tipo di macchina che supporti NVIDIA Confidential Computing (anteprima).

Esempio
tee-install-gpu-driver=true

tee-monitoring-memory-enable

Interazione con:

Booleano

Il valore predefinito è false. Se impostato su true, attiva il monitoraggio dell'utilizzo della memoria. Le metriche raccolte da Confidential VM sono di tipo guest/memory/bytes_used e possono essere visualizzate in Cloud Logging o Metrics Explorer.

Esempio
tee-monitoring-memory-enable=true

tee-mount

Interazione con:

Stringa

Un elenco di definizioni di montaggio separate da punto e virgola. Una definizione di montaggio è costituita da un elenco separato da virgole di coppie chiave-valore, che richiedono type, source e destination. destination deve essere un percorso assoluto e type/source deve essere tmpfs.

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

tee-restart-policy

Interazione con:

Stringa definita

La policy di riavvio del launcher del container quando il workload si arresta

I valori validi sono:

  • Never (valore predefinito)
  • Always
  • OnFailure

Questa variabile è supportata solo dall'immagine Confidential Space di produzione.

Esempio
tee-restart-policy=OnFailure

tee-signed-image-repos

Interazione con:

Stringa

Un elenco di repository di container separati da virgole che archiviano le firme generate da Sigstore Cosign.

Esempio
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

Scalabilità

Per lo scaling e l'alta affidabilità dei workload Confidential Space di produzione, consulta Gruppi di istanze gestite.