Arbeitslasten bereitstellen


Ein Arbeitslastoperator kann Optionen an eine Confidential Space-Arbeitslast-VM-Instanz übergeben, um ihr Verhalten vor der Ausführung zu bestimmen. Einige Flags haben erforderliche Werte, die sich nicht ändern. Sie müssen jedoch die folgenden Entscheidungen treffen:

  • Ob die VM-Instanz auf einem Confidential Space-Produktions- oder ‑Debugging-Image basieren soll.

  • Ob Sie AMD SEV, Intel TDX oder Intel TDX mit NVIDIA Confidential Computing (Vorabversion) verwenden möchten, um die Daten Ihrer Arbeitslast vertraulich zu halten.

  • Welche VM-Metadatavariablen übergeben werden müssen, einschließlich Details wie das auszuführende Container-Image für die Arbeitslast, ob in Cloud Logging protokolliert werden soll und welche Umgebungsvariablen festgelegt werden sollen.

  • Welches Dienstkonto an die VM angehängt werden soll, um die Arbeitslast auszuführen, und welche Berechtigungen es benötigt, um auf vertrauliche Daten in anderen Projekten zuzugreifen und die Ergebnisse zu schreiben.

  • Die Zone, in der die VM-Instanz ausgeführt werden soll.

Im folgenden Beispiel wird eine Confidential VM erstellt und ein Docker-Container mit dem Namen WORKLOAD_CONTAINER_NAME ausgeführt:

CPU-basierte Arbeitslasten

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

Geben Sie folgende Werte an:

  • INSTANCE_NAME: Der Name der neuen VM-Instanz.

  • CONFIDENTIAL_COMPUTING_TECHNOLOGY: Der Typ der zu verwendenden Confidential Computing-Technologie. Wählen Sie einen der folgenden Werte aus:

    • SEV

    • TDX

  • MACHINE_TYPE_NAME: Der Maschinentyp der VM, z. B. n2d-standard-2. Gültige Maschinentypen für Confidential VM-Instanzen werden durch die von Ihnen ausgewählte Confidential Computing-Technologie bestimmt, entweder AMD SEV oder Intel TDX. Weitere Informationen finden Sie unter Maschinentypen, CPUs und Zonen.

  • MAINTENANCE_POLICY: Legen Sie für N2D-Maschinentypen, die SEV verwenden, diesen Wert auf MIGRATE fest, um die Live-Migration zu unterstützen. Legen Sie für alle anderen Maschinentypen diesen Wert auf TERMINATE fest, da sie keine Live-Migration unterstützen.

  • IMAGE_FAMILY_NAME: Die Familie für die Confidential Space-Images. Wählen Sie eine der folgenden Optionen aus:

    • confidential-space für Produktionsarbeitslasten

    • confidential-space-debug für Debugging-Arbeitslasten

  • WORKLOAD_AUTHOR_PROJECT: Die ID des Projekts, in dem sich das Artifact Registry-Repository befindet, in dem der Workload-Container gespeichert ist.

  • REPOSITORY_NAME: Der Name des Artifact Registry-Repositorys, in dem der Arbeitslastcontainer gespeichert ist.

  • WORKLOAD_CONTAINER_NAME: Der Name des Arbeitslastcontainers.

  • WORKLOAD_SERVICE_ACCOUNT_NAME: Der Name des Dienstkontos, mit dem die Arbeitslast ausgeführt wird.

  • WORKLOAD_OPERATOR_PROJECT_ID: Die ID des Projekts, in dem der Workload ausgeführt wird.

  • ZONE_NAME: Die Zone, in der die VM-Instanz ausgeführt wird, z. B. us-west1-b. Für Confidential Space sind die folgenden Dienste erforderlich, die an bestimmten Standorten verfügbar sind:

  • PROJECT_ID: Optional. Die ID des Projekts, in dem die VM-Instanz erstellt werden soll.

GPU-basierte Arbeitslasten

Hinweise

  • Confidential Space unterstützt NVIDIA Confidential Computing (Vorschau) nur auf H100-GPUs.

  • Prüfen Sie Ihr GPU-Kontingent, damit Ihr Kontingent für die angeforderten Ressourcen ausreicht. Für Confidential VM-Instanzen mit GPUs müssen Sie ein GPU-Kontingent auf Abruf anfordern, um die Ressourcen verwenden zu können. Wenn Sie ein GPU-Kontingent anfordern, müssen Sie ein Kontingent für die GPU-Modelle, die Sie in den einzelnen Regionen erstellen möchten, sowie ein zusätzliches globales Kontingent (GPUs (all regions)) für die Gesamtzahl der GPUs aller Typen in allen Regionen anfordern.

  • Informationen zum Kontingentverbrauch finden Sie unter GPU-VMs und Zuteilungskontingente auf Abruf.

  • Beschränkungen beim Erstellen einer Anfrage zur Größenänderung in einer MIG

  • Wenn Sie die für NVIDIA Confidential Computing (Vorabversion) erforderlichen Treiber installieren möchten, müssen Sie die Metadatavariable tee-install-gpu-driver mit dem Wert true übergeben.

  • Für NVIDIA-Treiber und das CUDA-Toolkit wird ein VM-Bootlaufwerk mit mindestens 30 GB Speicherplatz empfohlen.

GPU-basierte Arbeitslast bereitstellen

Wenn Sie eine GPU-basierte Arbeitslast bereitstellen möchten, müssen Sie eine Confidential VM-Instanz mit dem Bereitstellungsmodell Spot oder Flex-Start (Vorschau) erstellen.

Spot

Wenn Sie das Spot-Bereitstellungsmodell verwenden möchten, erstellen Sie eine beschleunigungsoptimierte VM-Instanz.

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

Geben Sie folgende Werte an:

  • INSTANCE_NAME: Der Name der neuen VM-Instanz.

  • IMAGE_FAMILY_NAME: Die Familie für die Confidential Space-Images. Wählen Sie eine der folgenden Optionen aus:

    • confidential-space-preview-cgpu für Produktionsarbeitslasten

    • confidential-space-debug-preview-cgpu für Debugging-Arbeitslasten

  • WORKLOAD_AUTHOR_PROJECT: Die Projekt-ID, in der der Arbeitslast ausgeführt wird.

  • REPOSITORY_NAME: Der Name des Artifact Registry-Repositorys.

  • WORKLOAD_CONTAINER_NAME: Der Name des Arbeitslastcontainers.

  • WORKLOAD_SERVICE_ACCOUNT_NAME: Der Name des Dienstkontos, mit dem die Arbeitslast ausgeführt wird.

  • WORKLOAD_OPERATOR_PROJECT_ID: Die ID des Projekts, in dem der Workload ausgeführt wird.

  • ZONE_NAME: Eine der Zonen, die NVIDIA Confidential Computing unterstützen (Vorschau).

  • PROJECT_ID: Optional. Die ID des Projekts, in dem die VM-Instanz erstellt werden soll.

Flex-Start

Wenn Sie das Bereitstellungsmodell „Flex-Start“ (Vorabversion) verwenden möchten, erstellen Sie zuerst eine Instanzvorlage und dann eine verwaltete Instanzgruppe (MIG).

  1. Instanzvorlage erstellen:

    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
    

    Geben Sie folgende Werte an:

    • INSTANCE_TEMPLATE_NAME: Der Name der neuen VM-Instanzvorlage.

    • IMAGE_FAMILY_NAME: Die Familie für die Confidential Space-Images. Wählen Sie eine der folgenden Optionen aus:

      • confidential-space-preview-cgpu für Produktionsarbeitslasten

      • confidential-space-debug-preview-cgpu für Debugging-Arbeitslasten

    • WORKLOAD_AUTHOR_PROJECT: Die Projekt-ID, in der die Arbeitslast ausgeführt wird.

    • REPOSITORY_NAME: Der Name des Artifact Registry-Repositorys.

    • WORKLOAD_CONTAINER_NAME: Der Name des Arbeitslastcontainers.

    • WORKLOAD_SERVICE_ACCOUNT_NAME: Der Name des Dienstkontos, mit dem die Arbeitslast ausgeführt wird.

    • WORKLOAD_OPERATOR_PROJECT_ID: Die ID des Projekts, in dem die Arbeitslast ausgeführt wird.

    • RUN_DURATION: die Dauer, für die die angeforderten VM-Instanzen ausgeführt werden sollen. Sie müssen den Wert als Anzahl von Tagen, Stunden, Minuten oder Sekunden gefolgt von d, h, m bzw. s formatieren. Geben Sie beispielsweise 30m für 30 Minuten oder 1d2h3m4s für einen Tag, zwei Stunden, drei Minuten und vier Sekunden an. Der Wert muss zwischen 10 Minuten und 7 Tagen liegen.

    • PROJECT_ID: Optional. Die ID des Projekts, in dem die VM-Instanzen erstellt werden sollen.

  2. Erstellen Sie mit dem Befehl instance-groups managed create eine zonale MIG:

    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
    

    Geben Sie folgende Werte an:

  3. Erstellen Sie in der MIG eine Anfrage zur Größenanpassung. Geben Sie die Anzahl der gewünschten GPU-VM-Instanzen und die Dauer an, für die diese VM-Instanzen ausgeführt werden sollen.

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

    Geben Sie folgende Werte an:

    • INSTANCE_GROUP_NAME: Name der MIG.

    • INSTANCE_TEMPLATE_NAME: Der Name der Instanzvorlage für GPU-VM-Instanzen.

    • ZONE_NAME: Eine der Zonen, die NVIDIA Confidential Computing unterstützen (Vorschau).

    • RESIZE_REQUEST_NAME: Der Name der Anfrage zur Größenänderung.

    • COUNT: Die Anzahl der VM-Instanzen, die alle gleichzeitig in der Gruppe hinzugefügt werden sollen.

    Die von Ihnen erstellte Anfrage zur Größenanpassung bleibt im Status ACCEPTED, bis die MIG alle angeforderten GPU-VM-Instanzen erstellt hat. Nachdem alle GPU-VM-Instanzen in der Gruppe erstellt wurden, ändert sich der Status der Anfrage zu SUCCEEDED.

  4. Wenn genügend Ressourcen für die Anfrage zur Größenänderung verfügbar sind, werden der MIG VM-Instanzen hinzugefügt und gestartet, um Ihre Arbeitslast auszuführen. Führen Sie den folgenden Befehl aus, um die Instanzen in der MIG aufzulisten:

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

    Geben Sie folgende Werte an:

    • INSTANCE_GROUP_NAME: Name der MIG.

    • ZONE_NAME: Die unterstützte Zone, aus der eine Liste von VM-Instanzen abgerufen werden soll.

    • PROJECT_ID: Optional. Die ID des Projekts, aus dem eine Liste von VM-Instanzen abgerufen werden soll.

Angehängtes Dienstkonto

Ein Dienstkonto muss an die Confidential VM einer Arbeitslast angehängt werden, damit die Arbeitslast ausgeführt werden kann. Das Dienstkonto muss so eingerichtet sein:

  • Mit den folgenden Rollen:

  • Mit Lesezugriff auf den Speicherort, an dem die Datenmitwirkenden ihre vertraulichen Daten speichern, z. B. ein Cloud Storage-Bucket oder eine BigQuery-Tabelle.

  • Schreibzugriff auf den Ort, an dem die Arbeitslast die Daten ausgeben soll, z. B. ein Cloud Storage-Bucket. Mitbearbeiter von Daten sollten Lesezugriff auf diesen Speicherort haben.

Außerdem müssen Datenmitbearbeiter und Arbeitslastbetreiber Folgendes einrichten:

  • Wenn Datenmitarbeiter die Identität des Dienstkontos anstelle des direkten Ressourcenzugriffs übernehmen, müssen sie das Dienstkonto ihrem Anbieter für den Workload Identity-Pool als Attributbedingung hinzufügen:

    'WORKLOAD_SERVICE_ACCOUNT_NAME@DATA_COLLABORATOR_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts
    
  • Der Arbeitslastoperator benötigt die Rolle roles/iam.serviceAccountUser, um die Identität des Dienstkontos übernehmen zu können. So können sie sie an eine Arbeitslast-VM-Instanz anhängen, damit die Arbeitslast ausgeführt werden kann.

Metadatavariablen

Sie können das Verhalten der Confidential Space-Arbeitslast-VM ändern, indem Sie beim Erstellen der VM Variablen an die Option --metadata übergeben.

Wenn Sie mehrere Variablen übergeben möchten, legen Sie zuerst das Trennzeichen fest, indem Sie dem --metadata-Wert ^~^ voranstellen. Dadurch wird das Trennzeichen auf ~ festgelegt, da , in Variablenwerten verwendet wird.

Beispiel:

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

In der folgenden Tabelle sind die Metadatavariablen aufgeführt, die Sie für Ihre Arbeitslast-VM festlegen können.

Metadatenschlüssel Typ Beschreibung und Werte

tee-image-reference

Interagiert mit:

String

Pflichtangabe. Dies verweist auf den Speicherort des Arbeitslast-Containers.

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

tee-added-capabilities

Interagiert mit:

JSON-String-Array

Fügt dem Arbeitslastcontainer zusätzliche Linux-Berechtigungen hinzu.

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

tee-cgroup-ns

Interagiert mit:

Boolesch

Die Standardeinstellung ist false. Wenn dieser Parameter auf true gesetzt ist, wird eine Namespaced-Cgroup-Bereitstellung unter /sys/fs/cgroup aktiviert.

Beispiel
tee-cgroup-ns=true

tee-cmd

Interagiert mit:

JSON-String-Array

Überschreibt die CMD-Anweisungen, die im Dockerfile des Arbeitslastcontainers angegeben sind.

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

tee-container-log-redirect

Interagiert mit:

Definierter String

Gibt STDOUT und STDERR aus dem Arbeitslastcontainer in Cloud Logging oder der seriellen Konsole aus, unter dem Feld confidential-space-launcher.

Die gültigen Werte sind:

  • false: (Standard) Es erfolgt kein Logging.
  • true: Ausgaben an die serielle Konsole und Cloud Logging.
  • cloud_logging: Ausgabe nur in Cloud Logging.
  • serial: Nur Ausgaben an die serielle Konsole.

Ein hohes Logvolumen in der seriellen Konsole kann sich auf die Leistung der Arbeitslast auswirken.

Beispiel
tee-container-log-redirect=true

tee-dev-shm-size-kb

Ganzzahl

Legt die Größe der Bereitstellung des gemeinsamen Arbeitsspeichers /dev/shm in kB fest.

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

tee-env-ENVIRONMENT_VARIABLE_NAME

Interagiert mit:

String

Legt Umgebungsvariablen im Arbeitslastcontainer fest. Der Autor der Arbeitslast muss die Namen der Umgebungsvariablen auch der allow_env_override -Startrichtlinie hinzufügen, da sie sonst nicht festgelegt werden.

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

tee-impersonate-service-accounts

Interagiert mit:

String

Eine Liste der Dienstkonten, deren Identität vom Arbeitslastoperator übernommen werden kann. Der Arbeitslastoperator muss die Identität der Dienstkonten übernehmen dürfen.

Es können mehrere Dienstkonten durch Kommas getrennt aufgeführt werden.

Beispiel
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

Interagiert mit:

Boolesch

Gibt an, ob der GPU-Treiber für Confidential Computing von NVIDIA installiert werden soll. Erfordert einen Maschinentyp, der NVIDIA Confidential Computing unterstützt (Vorschau).

Beispiel
tee-install-gpu-driver=true

tee-monitoring-memory-enable

Interagiert mit:

Boolesch

Die Standardeinstellung ist false. Wenn true festgelegt ist, wird die Überwachung der Speichernutzung aktiviert. Die von der Confidential VM erfassten Messwerte haben den Typ guest/memory/bytes_used und können in Cloud Logging oder im Metrics Explorer aufgerufen werden.

Beispiel
tee-monitoring-memory-enable=true

tee-mount

Interagiert mit:

String

Eine Liste von durch Semikolons getrennten Mount-Definitionen. Eine Mount-Definition besteht aus einer durch Kommas getrennten Liste von Schlüssel/Wert-Paaren, für die type, source und destination erforderlich sind. destination muss ein absoluter Pfad sein und type/source muss tmpfs sein.

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

tee-restart-policy

Interagiert mit:

Definierter String

Die Neustart-Richtlinie des Container-Launchers, wenn die Arbeitslast beendet wird.

Die gültigen Werte sind:

  • Never (Standard)
  • Always
  • OnFailure

Diese Variable wird nur vom Confidential Space-Produktions-Image unterstützt.

Beispiel
tee-restart-policy=OnFailure

tee-signed-image-repos

Interagiert mit:

String

Eine Liste durch Kommas getrennter Container-Repositories, in denen die von Sigstore Cosign generierten Signaturen gespeichert werden.

Beispiel
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

Skalierung

Informationen zur Skalierung und Hochverfügbarkeit von Confidential Space-Arbeitslasten in der Produktion finden Sie unter Verwaltete Instanzgruppen.