Déployer des charges de travail


Un opérateur de charge de travail peut transmettre des options à une instance de VM de charge de travail Confidential Space pour déterminer son comportement avant son exécution. Bien que certaines options aient des valeurs requises qui ne changent pas, vous devez toujours faire les choix suivants :

  • Indique si l'instance de VM doit être basée sur une image Confidential Space de production ou de débogage.

  • Indiquez si vous souhaitez utiliser AMD SEV, Intel TDX ou Intel TDX avec NVIDIA Confidential Computing (version preview) pour protéger la confidentialité des données de vos charges de travail.

  • Les variables de métadonnées de VM à transmettre, qui incluent des détails tels que l'image de conteneur de charge de travail à exécuter, si la journalisation doit être effectuée dans Cloud Logging et les variables d'environnement à définir.

  • Le compte de service à associer à la VM pour exécuter la charge de travail, ainsi que les autorisations dont il a besoin pour accéder aux données confidentielles dans d'autres projets et écrire les résultats quelque part.

  • Zone dans laquelle l'instance de VM doit s'exécuter.

Voici un exemple qui crée une Confidential VM et exécute un conteneur Docker appelé WORKLOAD_CONTAINER_NAME :

Charges de travail basées sur le processeur

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

Indiquez les valeurs suivantes :

  • INSTANCE_NAME : nom de la nouvelle instance de VM.

  • CONFIDENTIAL_COMPUTING_TECHNOLOGY : type de technologie d'informatique confidentielle à utiliser. Choisissez l'une des valeurs suivantes :

    • SEV

    • TDX

  • MACHINE_TYPE_NAME : type de machine de la VM, par exemple n2d-standard-2. Les types de machines valides pour les instances de Confidential VM sont déterminés par la technologie d'informatique confidentielle que vous avez choisie : AMD SEV ou Intel TDX. Consultez Types de machines, processeurs et zones.

  • MAINTENANCE_POLICY : pour les types de machines N2D qui utilisent SEV, définissez cette valeur sur MIGRATE pour la prise en charge de la migration à chaud. Pour tous les autres types de machines, définissez cette valeur sur TERMINATE, car elles ne sont pas compatibles avec la migration à chaud.

  • IMAGE_FAMILY_NAME : famille des images Confidential Space. Choisissez l'une des options suivantes :

    • confidential-space pour les charges de travail de production

    • confidential-space-debug pour les charges de travail de débogage

  • WORKLOAD_AUTHOR_PROJECT : ID du projet qui héberge le dépôt Artifact Registry dans lequel le conteneur de charge de travail est stocké.

  • REPOSITORY_NAME : nom du dépôt Artifact Registry dans lequel le conteneur de charge de travail est stocké.

  • WORKLOAD_CONTAINER_NAME : nom du conteneur de charge de travail.

  • WORKLOAD_SERVICE_ACCOUNT_NAME : nom du compte de service qui exécute la charge de travail.

  • WORKLOAD_OPERATOR_PROJECT_ID : ID du projet qui exécute la charge de travail.

  • ZONE_NAME : zone dans laquelle l'instance de VM s'exécute, par exemple, us-west1-b. Confidential Space nécessite les services suivants, qui sont disponibles dans des emplacements spécifiques :

  • PROJECT_ID : facultatif. ID du projet dans lequel créer l'instance de VM.

Charges de travail basées sur GPU

Avant de commencer

  • Confidential Space n'est compatible qu'avec NVIDIA Confidential Computing (Preview) sur les GPU H100.

  • Pour vous assurer que vous disposez d'un quota de GPU suffisant pour les ressources que vous demandez, vérifiez votre quota de GPU. Pour les instances de VM confidentielles avec GPU, demandez un quota de GPU préemptifs pour utiliser les ressources. Lorsque vous demandez un quota de GPU, vous devez inclure les modèles de GPU que vous souhaitez créer dans chaque région, mais également demander un quota mondial supplémentaire (GPUs (all regions)) pour le nombre total de GPU de tous types, dans toutes les régions.

  • Pour comprendre la consommation de quotas, consultez VM GPU et quotas d'allocation préemptive.

  • Consultez les limites pour créer une demande de redimensionnement dans un MIG.

  • Pour installer les pilotes requis pour le Confidential Computing NVIDIA (Preview), vous devez transmettre la variable de métadonnées tee-install-gpu-driver avec la valeur true.

  • Pour les pilotes NVIDIA et CUDA Toolkit, un disque de démarrage de VM avec 30 Go d'espace ou plus est recommandé.

Déployer une charge de travail basée sur GPU

Pour déployer une charge de travail basée sur un GPU, vous devez créer une instance Confidential VM à l'aide du modèle de provisionnement spot ou flex-start (aperçu).

Spot

Pour utiliser le modèle de provisionnement Spot, créez une instance de VM optimisée pour les accélérateurs.

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

Indiquez les valeurs suivantes :

  • INSTANCE_NAME : nom de la nouvelle instance de VM.

  • IMAGE_FAMILY_NAME : famille des images Confidential Space. Choisissez l'une des options suivantes :

    • confidential-space-preview-cgpu pour les charges de travail de production

    • confidential-space-debug-preview-cgpu pour les charges de travail de débogage

  • WORKLOAD_AUTHOR_PROJECT : ID du projet dans lequel la charge de travail est exécutée.

  • REPOSITORY_NAME : nom du dépôt Artifact Registry.

  • WORKLOAD_CONTAINER_NAME : nom du conteneur de charge de travail.

  • WORKLOAD_SERVICE_ACCOUNT_NAME : nom du compte de service qui exécute la charge de travail.

  • WORKLOAD_OPERATOR_PROJECT_ID : ID du projet qui exécute la charge de travail.

  • ZONE_NAME : l'une des zones compatibles avec le Confidential Computing NVIDIA (version bêta).

  • PROJECT_ID : facultatif. ID du projet dans lequel créer l'instance de VM.

Démarrage Flex

Pour utiliser le modèle de provisionnement Démarrage flexible (aperçu), créez un modèle d'instance, puis un groupe d'instances géré (MIG).

  1. Créez un modèle d'instance :

    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
    

    Indiquez les valeurs suivantes :

    • INSTANCE_TEMPLATE_NAME : nom du nouveau modèle d'instance de VM.

    • IMAGE_FAMILY_NAME : famille des images Confidential Space. Choisissez l'une des options suivantes :

      • confidential-space-preview-cgpu pour les charges de travail de production

      • confidential-space-debug-preview-cgpu pour les charges de travail de débogage

    • WORKLOAD_AUTHOR_PROJECT : ID du projet dans lequel la charge de travail est exécutée.

    • REPOSITORY_NAME : nom du dépôt Artifact Registry.

    • WORKLOAD_CONTAINER_NAME : nom du conteneur de charge de travail.

    • WORKLOAD_SERVICE_ACCOUNT_NAME : nom du compte de service qui exécute la charge de travail.

    • WORKLOAD_OPERATOR_PROJECT_ID : ID du projet qui exécute la charge de travail.

    • RUN_DURATION : durée d'exécution des instances de VM demandées. Vous devez formater la valeur en nombre de jours, d'heures, de minutes ou de secondes, suivis respectivement de d, h, m ou s. Par exemple, spécifiez 30m pour 30 minutes ou 1d2h3m4s pour un jour, deux heures, trois minutes et quatre secondes. Cette valeur doit être comprise entre 10 minutes et sept jours.

    • PROJECT_ID : facultatif. ID du projet dans lequel créer les instances de VM.

  2. Créez un MIG zonal à l'aide de la commande 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
    

    Indiquez les valeurs suivantes :

  3. Dans le MIG, créez une demande de redimensionnement. Spécifiez le nombre d'instances de VM avec GPU souhaité et la durée d'exécution de ces instances.

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

    Indiquez les valeurs suivantes :

    • INSTANCE_GROUP_NAME : nom du MIG.

    • INSTANCE_TEMPLATE_NAME : nom du modèle d'instance pour les instances de VM avec GPU.

    • ZONE_NAME : l'une des zones compatibles avec le Confidential Computing NVIDIA (version bêta).

    • RESIZE_REQUEST_NAME : nom de la requête de redimensionnement.

    • COUNT : nombre d'instances de VM à ajouter simultanément dans le groupe.

    La requête de redimensionnement que vous créez reste à l'état ACCEPTED jusqu'à ce que le MIG crée toutes les instances de VM avec GPU demandées. Une fois toutes les instances de VM avec GPU créées dans le groupe, l'état de la requête passe à SUCCEEDED.

  4. Lorsque suffisamment de ressources sont disponibles pour la demande de redimensionnement, des instances de VM sont ajoutées au MIG et lancées pour exécuter votre charge de travail. Pour lister les instances présentes dans le MIG, exécutez la commande suivante :

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

    Indiquez les valeurs suivantes :

    • INSTANCE_GROUP_NAME : nom du MIG.

    • ZONE_NAME : zone compatible à partir de laquelle obtenir la liste des instances de VM.

    • PROJECT_ID : facultatif. ID du projet à partir duquel obtenir la liste des instances de VM.

Compte de service associé

Un compte de service doit être associé à une VM confidentielle de charge de travail pour exécuter la charge de travail. Le compte de service doit être configuré comme suit :

  • Avec les rôles suivants :

  • Avec un accès en lecture à l'emplacement où les collaborateurs de données stockent leurs données confidentielles (par exemple, un bucket Cloud Storage ou une table BigQuery).

  • Un accès en écriture à l'emplacement où la charge de travail doit générer les données (par exemple, un bucket Cloud Storage). Les collaborateurs de données doivent disposer d'un accès en lecture à cet emplacement.

De plus, les collaborateurs de données et les opérateurs de charge de travail doivent configurer les éléments suivants :

  • Si les collaborateurs de données utilisent l'emprunt d'identité de compte de service au lieu de l'accès direct aux ressources, ils doivent ajouter le compte de service à leur fournisseur de pool d'identités de charge de travail en tant que condition d'attribut :

    'WORKLOAD_SERVICE_ACCOUNT_NAME@DATA_COLLABORATOR_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts
    
  • L'opérateur de charge de travail a besoin du rôle roles/iam.serviceAccountUser pour emprunter l'identité du compte de service. Cela leur permet de l'associer à une instance de VM de charge de travail afin qu'elle puisse exécuter la charge de travail.

Variables de métadonnées

Vous pouvez modifier le comportement de la VM de charge de travail Confidential Space en transmettant des variables à l'option --metadata lorsque vous créez la VM.

Pour transmettre plusieurs variables, commencez par définir le délimiteur en préfixant la valeur --metadata avec ^~^. Cela définit le délimiteur sur ~, car , est utilisé dans les valeurs de variables.

Exemple :

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

Le tableau suivant détaille les variables de métadonnées que vous pouvez définir pour la VM de votre charge de travail.

Clé de métadonnée Type Description et valeurs

tee-image-reference

Interagit avec :

Chaîne

Obligatoire. Cette valeur pointe vers l'emplacement du conteneur de la charge de travail.

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

tee-added-capabilities

Interagit avec :

Tableau de chaînes JSON

Ajoute des capacités Linux supplémentaires au conteneur de charge de travail.

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

tee-cgroup-ns

Interagit avec :

Booléen

La valeur par défaut est false. Si la valeur est définie sur true, un montage cgroup avec espace de noms est activé sur /sys/fs/cgroup.

Exemple
tee-cgroup-ns=true

tee-cmd

Interagit avec :

Tableau de chaînes JSON

Remplace les instructions CMD spécifiées dans le Dockerfile du conteneur de charge de travail.

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

tee-container-log-redirect

Interagit avec :

  • Auteur de la charge de travail : règle de lancement log_redirect .
Chaîne définie

affiche STDOUT et STDERR du conteneur de charge de travail vers Cloud Logging ou la console série, dans le champ confidential-space-launcher.

Les valeurs valides sont les suivantes :

  • false : (par défaut) aucune journalisation n'a lieu.
  • true : sorties vers la console série et Cloud Logging.
  • cloud_logging : les journaux sont écrits dans Cloud Logging uniquement.
  • serial : sorties vers la console série uniquement.

Un volume de journaux élevé dans la console série peut avoir un impact sur les performances de la charge de travail.

Exemple
tee-container-log-redirect=true

tee-dev-shm-size-kb

Integer

Définit la taille en Ko du point de montage de la mémoire partagée /dev/shm.

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

tee-env-ENVIRONMENT_VARIABLE_NAME

Interagit avec :

Chaîne

Définit les variables d'environnement dans le conteneur de charge de travail. L'auteur de la charge de travail doit également ajouter les noms des variables d'environnement aux règles de lancement allow_env_override . Sinon, elles ne seront pas définies.

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

tee-impersonate-service-accounts

Interagit avec :

Chaîne

Liste des comptes de service dont l'identité peut être empruntée par l'opérateur de charge de travail. L'opérateur de charge de travail doit être autorisé à emprunter l'identité des comptes de service.

Plusieurs comptes de service peuvent être répertoriés, séparés par une virgule.

Exemple
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

Interagit avec :

Booléen

Indique si le pilote de GPU NVIDIA pour le Confidential Computing doit être installé. Nécessite un type de machine compatible avec l'informatique confidentielle NVIDIA (aperçu).

Exemple
tee-install-gpu-driver=true

tee-monitoring-memory-enable

Interagit avec :

Booléen

La valeur par défaut est false. Si la valeur est définie sur true, la surveillance de l'utilisation de la mémoire est activée. Les métriques collectées par la VM confidentielle sont de type guest/memory/bytes_used et peuvent être consultées dans Cloud Logging ou l'explorateur de métriques.

Exemple
tee-monitoring-memory-enable=true

tee-mount

Interagit avec :

Chaîne

Liste des définitions de montage séparées par un point-virgule. Une définition de montage se compose d'une liste de paires clé/valeur séparées par une virgule, nécessitant type, source et destination. destination doit être un chemin absolu, et type/source doit être tmpfs.

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

tee-restart-policy

Interagit avec :

Chaîne définie

Règle de redémarrage du lanceur de conteneurs lorsque la charge de travail s'arrête

Les valeurs valides sont les suivantes :

  • Never (par défaut)
  • Always
  • OnFailure

Cette variable n'est compatible qu'avec l'image de production Confidential Space.

Exemple
tee-restart-policy=OnFailure

tee-signed-image-repos

Interagit avec :

Chaîne

Liste de dépôts de conteneurs séparés par une virgule qui stockent les signatures générées par Sigstore Cosign.

Exemple
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

Scaling

Pour le scaling et la haute disponibilité des charges de travail Confidential Space de production, consultez Groupes d'instances gérés.