워크로드 배포


워크로드 운영자는 실행 전에 동작을 확인하기 위해 Confidential Space 워크로드 VM 인스턴스로 옵션을 전달할 수 있습니다. 일부 플래그에는 변경되지 않는 필수 값이 있지만 다음을 선택해야 합니다.

  • VM 인스턴스를 프로덕션 또는 디버그 Confidential Space 이미지에 기반할지 여부입니다.

  • AMD SEV, Intel TDX 또는 Intel TDX와 NVIDIA 컨피덴셜 컴퓨팅(미리보기)을 사용하여 워크로드 데이터를 비공개로 유지할지 여부입니다.

  • 실행할 워크로드 컨테이너 이미지, Cloud Logging에 로깅할지 여부, 설정할 환경 변수와 같은 세부정보를 포함하는 VM 메타데이터 변수를 전달해야 합니다.

  • 워크로드를 실행하기 위해 VM에 연결할 서비스 계정과 다른 프로젝트의 컨피덴셜 데이터에 액세스하고 결과를 어딘가에 쓸 수 있는 권한

  • VM 인스턴스가 실행되어야 하는 영역입니다.

다음은 컨피덴셜 VM을 만들고 WORKLOAD_CONTAINER_NAME라는 Docker 컨테이너를 실행하는 예시입니다.

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

다음 값을 제공합니다.

  • INSTANCE_NAME: 새 VM 인스턴스의 이름입니다.

  • CONFIDENTIAL_COMPUTING_TECHNOLOGY: 사용할 컨피덴셜 컴퓨팅 기술의 유형입니다. 다음 값 중 하나를 선택합니다.

    • SEV

    • TDX

  • MACHINE_TYPE_NAME: VM 머신 유형입니다(예: n2d-standard-2). 컨피덴셜 VM 인스턴스의 유효한 머신 유형은 선택한 컨피덴셜 컴퓨팅 기술(AMD SEV 또는 Intel TDX)에 따라 결정됩니다. 머신 유형, CPU, 영역을 참고하세요.

  • MAINTENANCE_POLICY: SEV를 사용하는 N2D 머신 유형의 경우 실시간 마이그레이션 지원을 위해 MIGRATE로 설정합니다. 다른 모든 머신 유형의 경우 라이브 마이그레이션을 지원하지 않으므로 이 값을 TERMINATE로 설정합니다.

  • IMAGE_FAMILY_NAME: Confidential Space 이미지의 계열입니다. 다음 중 하나를 선택합니다.

    • confidential-space 프로덕션 워크로드

    • 디버그 워크로드용 confidential-space-debug

  • WORKLOAD_AUTHOR_PROJECT: 워크로드 컨테이너가 저장된 Artifact Registry 저장소를 호스팅하는 프로젝트의 ID입니다.

  • REPOSITORY_NAME: 워크로드 컨테이너가 저장된 Artifact Registry 저장소 이름입니다.

  • WORKLOAD_CONTAINER_NAME: 워크로드 컨테이너의 이름입니다.

  • WORKLOAD_SERVICE_ACCOUNT_NAME: 워크로드를 실행하는 서비스 계정의 이름입니다.

  • WORKLOAD_OPERATOR_PROJECT_ID: 워크로드를 실행하는 프로젝트의 ID입니다.

  • ZONE_NAME: VM 인스턴스가 실행되는 영역입니다(예: us-west1-b). Confidential Space에는 특정 위치에서 제공되는 다음 서비스가 필요합니다.

  • PROJECT_ID: 선택사항. VM 인스턴스를 만들 프로젝트의 ID입니다.

GPU 기반 워크로드

시작하기 전에

  • 컨피덴셜 스페이스는 H100 GPU에서 NVIDIA 컨피덴셜 컴퓨팅 (프리뷰)만 지원합니다.

  • 요청 중인 리소스에 대해 GPU 할당량이 충분한지 확인하려면 GPU 할당량을 확인하세요. GPU가 있는 컨피덴셜 VM 인스턴스의 경우 리소스를 사용하려면 선점형 GPU 할당량을 요청하세요. GPU 할당량을 요청하는 경우 각 리전에 생성하려는 GPU 모델의 할당량 외에도 모든 리전에 있는 모든 유형의 총 GPU 수에 적용할 전역 할당량(GPUs (all regions))을 추가로 요청해야 합니다.

  • 할당량 소비를 알아보려면 GPU VM 및 선점형 배정 할당량을 참고하세요.

  • MIG에서 크기 조절 요청을 만들기 위한 제한사항을 읽어봅니다.

  • NVIDIA 컨피덴셜 컴퓨팅 (미리보기)에 필요한 드라이버를 설치하려면 값이 true메타데이터 변수 tee-install-gpu-driver를 전달해야 합니다.

  • NVIDIA 드라이버 및 CUDA 툴킷의 경우 공간이 30GB 이상인 VM 부팅 디스크가 권장됩니다.

GPU 기반 워크로드 배포

GPU 기반 워크로드를 배포하려면 스팟 또는 flex-start(미리보기) 프로비저닝 모델을 사용하여 컨피덴셜 VM 인스턴스를 만들어야 합니다.

스팟

스팟 프로비저닝 모델을 사용하려면 가속기 최적화 VM 인스턴스를 만드세요.

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

다음 값을 제공합니다.

  • INSTANCE_NAME: 새 VM 인스턴스의 이름입니다.

  • IMAGE_FAMILY_NAME: Confidential Space 이미지의 계열입니다. 다음 중 하나를 선택합니다.

    • confidential-space-preview-cgpu 프로덕션 워크로드

    • 디버그 워크로드용 confidential-space-debug-preview-cgpu

  • WORKLOAD_AUTHOR_PROJECT: 워크로드가 실행되는 프로젝트 ID입니다.

  • REPOSITORY_NAME: Artifact Registry 저장소 이름입니다.

  • WORKLOAD_CONTAINER_NAME: 워크로드 컨테이너의 이름입니다.

  • WORKLOAD_SERVICE_ACCOUNT_NAME: 워크로드를 실행하는 서비스 계정의 이름입니다.

  • WORKLOAD_OPERATOR_PROJECT_ID: 워크로드를 실행하는 프로젝트의 ID입니다.

  • ZONE_NAME: NVIDIA 컨피덴셜 컴퓨팅을 지원하는 영역(미리보기) 중 하나입니다.

  • PROJECT_ID: 선택사항. VM 인스턴스를 만들 프로젝트의 ID입니다.

유연한 시작

flex-start (미리보기) 프로비저닝 모델을 사용하려면 인스턴스 템플릿을 만든 다음 관리형 인스턴스 그룹(MIG)을 만듭니다.

  1. 인스턴스 템플릿을 만듭니다.

    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
    

    다음 값을 제공합니다.

    • INSTANCE_TEMPLATE_NAME: 새 VM 인스턴스 템플릿의 이름입니다.

    • IMAGE_FAMILY_NAME: Confidential Space 이미지의 계열입니다. 다음 중 하나를 선택합니다.

      • confidential-space-preview-cgpu 프로덕션 워크로드

      • 디버그 워크로드용 confidential-space-debug-preview-cgpu

    • WORKLOAD_AUTHOR_PROJECT: 워크로드가 실행되는 프로젝트 ID입니다.

    • REPOSITORY_NAME: Artifact Registry 저장소 이름입니다.

    • WORKLOAD_CONTAINER_NAME: 워크로드 컨테이너의 이름입니다.

    • WORKLOAD_SERVICE_ACCOUNT_NAME: 워크로드를 실행하는 서비스 계정의 이름입니다.

    • WORKLOAD_OPERATOR_PROJECT_ID: 워크로드를 실행하는 프로젝트의 ID입니다.

    • RUN_DURATION: 요청된 VM 인스턴스를 실행할 기간입니다. 각각 d, h, m 또는 s를 사용하여 일, 시, 분 또는 초 순서로 값 형식을 지정해야 합니다. 예를 들어 30분의 경우 30m을, 1일 2시간 3분 4초의 경우 1d2h3m4s를 지정합니다. 값은 10분~7일 사이여야 합니다.

    • PROJECT_ID: 선택사항. VM 인스턴스를 만들 프로젝트의 ID입니다.

  2. instance-groups managed create 명령어를 사용하여 영역 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
    

    다음 값을 제공합니다.

  3. MIG에서 크기 조절 요청을 만듭니다. 원하는 GPU VM 인스턴스 수와 해당 VM 인스턴스를 실행할 기간을 지정합니다.

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

    다음 값을 제공합니다.

    • INSTANCE_GROUP_NAME: MIG 이름입니다.

    • INSTANCE_TEMPLATE_NAME: GPU VM 인스턴스의 인스턴스 템플릿 이름입니다.

    • ZONE_NAME: NVIDIA 컨피덴셜 컴퓨팅을 지원하는 영역(미리보기) 중 하나입니다.

    • RESIZE_REQUEST_NAME: 크기 조절 요청의 이름

    • COUNT: 그룹에 한 번에 모두 추가할 VM 인스턴스 수입니다.

    생성한 크기 조절 요청은 MIG가 요청한 모든 GPU VM 인스턴스를 만들 때까지 ACCEPTED 상태로 유지됩니다. 그룹에 모든 GPU VM 인스턴스가 생성되면 요청 상태가 SUCCEEDED로 변경됩니다.

  4. 크기 조절 요청에 충분한 리소스를 사용할 수 있는 경우 VM 인스턴스가 MIG에 추가되고 워크로드를 실행하기 위해 실행됩니다. MIG에 있는 인스턴스를 나열하려면 다음 명령어를 실행합니다.

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

    다음 값을 제공합니다.

    • INSTANCE_GROUP_NAME: MIG 이름입니다.

    • ZONE_NAME: VM 인스턴스 목록을 가져올 지원되는 영역입니다.

    • PROJECT_ID: 선택사항. VM 인스턴스 목록을 가져올 프로젝트의 ID입니다.

연결된 서비스 계정

워크로드를 실행하려면 서비스 계정을 워크로드의 컨피덴셜 VM에 연결해야 합니다. 서비스 계정은 다음과 같이 설정해야 합니다.

  • 다음 역할이 있는 경우

  • 데이터 공동작업자가 Cloud Storage 버킷이나 BigQuery 테이블과 같은 위치에 기밀 데이터를 저장하는 위치에 대한 읽기 액세스 권한이 있어야 합니다.

  • 워크로드가 데이터를 출력해야 하는 위치(예: Cloud Storage 버킷)에 대한 쓰기 액세스 권한이 있어야 합니다. 데이터 공동작업자에게는 이 위치에 대한 읽기 액세스 권한이 있어야 합니다.

또한 데이터 공동작업자와 워크로드 운영자는 다음을 설정해야 합니다.

  • 데이터 공동작업자가 직접 리소스 액세스 대신 서비스 계정 가장을 사용하는 경우 서비스 계정을 워크로드 아이덴티티 풀 제공업체에 속성 조건으로 추가해야 합니다.

    'WORKLOAD_SERVICE_ACCOUNT_NAME@DATA_COLLABORATOR_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts
    
  • 워크로드 운영자가 서비스 계정을 가장하려면 roles/iam.serviceAccountUser 역할이 필요합니다. 이를 통해 워크로드를 실행할 수 있도록 워크로드 VM 인스턴스에 연결할 수 있습니다.

메타데이터 변수

VM을 만들 때 변수를 --metadata 옵션에 전달하여 Confidential Space 워크로드 VM 동작을 변경할 수 있습니다.

여러 변수를 전달하려면 먼저 --metadata 값에 ^~^ 프리픽스를 지정하여 구분 기호를 설정합니다. 그러면 ,가 변수 값에 사용되기 때문에 구분 기호가 ~로 설정됩니다.

예를 들면 다음과 같습니다.

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

다음 표에는 워크로드 VM에 설정할 수 있는 메타데이터 변수가 자세히 나와 있습니다.

메타데이터 키 유형 설명 및 값

tee-image-reference

상호작용:

문자열

필수 입력란입니다. 워크로드 컨테이너의 위치를 가리킵니다.

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

tee-added-capabilities

상호작용:

JSON 문자열 배열

워크로드 컨테이너에 추가 Linux 기능을 추가합니다.

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

tee-cgroup-ns

상호작용:

불리언

기본값은 false입니다. true로 설정하면 /sys/fs/cgroup에서 네임스페이스 cgroup 마운트를 사용 설정합니다.

tee-cgroup-ns=true

tee-cmd

상호작용:

JSON 문자열 배열

워크로드 컨테이너의 Dockerfile에 지정된 CMD 명령어를 재정의합니다.

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

tee-container-log-redirect

상호작용:

정의된 문자열

confidential-space-launcher 필드 아래에서 워크로드 컨테이너의 STDOUTSTDERR을 Cloud Logging 또는 직렬 콘솔로 출력합니다.

유효한 값은 다음과 같습니다.

  • false: (기본값) 로깅이 발생하지 않습니다.
  • true: 직렬 콘솔 및 Cloud Logging에 출력합니다.
  • cloud_logging: Cloud Logging에만 출력합니다.
  • serial: 직렬 콘솔에만 출력됩니다.

직렬 콘솔의 로그 볼륨이 높으면 워크로드 성능에 영향을 줄 수 있습니다.

tee-container-log-redirect=true

tee-dev-shm-size-kb

정수

/dev/shm 공유 메모리 마운트의 크기를 kB 단위로 설정합니다.

tee-dev-shm-size-kb=65536

tee-env-ENVIRONMENT_VARIABLE_NAME

상호작용:

문자열

워크로드 컨테이너에서 환경 변수를 설정합니다. 워크로드 작성자는 환경 변수 이름을 allow_env_override 출시 정책에도 추가해야 합니다. 그렇지 않으면 설정되지 않습니다.

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

tee-impersonate-service-accounts

상호작용:

문자열

워크로드 운영자가 가장할 수 있는 서비스 계정 목록입니다. 워크로드 운영자가 서비스 계정을 가장하도록 허용해야 합니다.

쉼표로 구분하여 여러 서비스 계정을 나열할 수 있습니다.

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

상호작용:

불리언

NVIDIA의 컨피덴셜 컴퓨팅 GPU 드라이버를 설치할지 여부입니다. NVIDIA 컨피덴셜 컴퓨팅 (미리보기)을 지원하는 머신 유형이 필요합니다.

tee-install-gpu-driver=true

tee-monitoring-memory-enable

상호작용:

불리언

기본값은 false입니다. true로 설정하면 메모리 사용량 모니터링이 사용 설정됩니다. 컨피덴셜 VM에서 수집한 측정항목은 guest/memory/bytes_used 유형이며 Cloud Logging 또는 측정항목 탐색기에서 볼 수 있습니다.

tee-monitoring-memory-enable=true

tee-mount

상호작용:

문자열

세미콜론으로 구분된 마운트 정의 목록입니다. 마운트 정의는 type, source, destination가 필요한 쉼표로 구분된 키-값 쌍 목록으로 구성됩니다. destination은 절대 경로여야 하고 type/sourcetmpfs여야 합니다.

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

tee-restart-policy

상호작용:

정의된 문자열

워크로드가 중지될 때 컨테이너 런처의 다시 시작 정책

유효한 값은 다음과 같습니다.

  • Never(기본)
  • Always
  • OnFailure

이 변수는 프로덕션 Confidential Space 이미지에서만 지원됩니다.

tee-restart-policy=OnFailure

tee-signed-image-repos

상호작용:

문자열

Sigstore Cosign에서 생성된 서명을 저장하는 쉼표로 구분된 컨테이너 저장소 목록입니다.

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

확장

프로덕션 Confidential Space 워크로드의 확장 및 고가용성은 관리형 인스턴스 그룹을 참고하세요.