특정 영역의 Compute Engine 인스턴스를 예약하여 필요할 때 워크로드에 리소스를 사용할 수 있습니다. 예약 관리 방법에 대한 자세한 내용은 Compute Engine 영역별 리소스 예약을 참조하세요.
예약한 후 GKE에서 예약된 리소스를 사용할 수 있습니다. GKE는 Compute Engine과 동일한 사용 모드를 지원합니다.
- 모든 예약의 리소스 사용: Standard 모드만 해당
- 특정 예약의 리소스 사용: Standard 및 Autopilot
- 예약을 사용하지 않고 노드 만들기: Standard 및 Autopilot
시작하기 전에
시작하기 전에 다음 태스크를 수행했는지 확인합니다.
- Google Kubernetes Engine API를 사용 설정합니다. Google Kubernetes Engine API 사용 설정
- 이 태스크에 Google Cloud CLI를 사용하려면 gcloud CLI를 설치한 후 초기화합니다. 이전에 gcloud CLI를 설치한 경우
gcloud components update
를 실행하여 최신 버전을 가져옵니다.
Autopilot 클러스터에서 예약한 용량 사용
Autopilot 클러스터는 동일한 프로젝트 또는 공유 프로젝트에서 Compute Engine 용량 예약의 리소스 사용을 지원합니다. 대상 예약의 소비 유형 속성을 특정으로 설정하고 매니페스트에서 해당 예약을 명시적으로 선택해야 합니다. 예약을 명시적으로 지정하지 않으면 Autopilot 클러스터는 예약을 사용하지 않습니다. 예약 소비 유형에 대한 자세한 내용은 예약의 작동 원리를 참조하세요.
이러한 예약은 Compute 가변형 약정 사용 할인 대상이 됩니다. 예약 용량을 사용하려면 Accelerator
컴퓨팅 클래스 또는 Performance
컴퓨팅 클래스를 사용해야 합니다.
시작하기에 앞서 다음 버전을 실행하는 Autopilot 클러스터를 만듭니다.
- 가속기 컴퓨팅 클래스를 사용하여 예약된 가속기 사용하려면 1.28.6-gke.1095000 이상이 필요합니다.
- 성능 컴퓨팅 클래스를 사용하려면 1.28.6-gke.1369000 이상 또는 1.29.1-gke.1575000 버전 이상이어야 합니다.
Autopilot 용량 예약
Autopilot 포드는 클러스터와 동일한 프로젝트 또는 다른 프로젝트에서 공유된 예약의 특정 소비 유형 속성이 있는 예약을 사용할 수 있습니다. 매니페스트에서 예약을 명시적으로 참조하여 예약된 하드웨어를 사용할 수 있습니다. Autopilot에서 다음 유형의 하드웨어에 대해 예약을 사용할 수 있습니다.
- 다음 유형의 GPU:
nvidia-h100-80gb
: NVIDIA H100(80GB)(가속기 컴퓨팅 클래스에서만 사용 가능)nvidia-a100-80gb
: NVIDIA A100(80GB)nvidia-tesla-a100
: NVIDIA A100(40GB)nvidia-l4
: NVIDIA L4nvidia-tesla-t4
: NVIDIA T4
용량을 예약하려면 다음 리소스를 참조하세요. 예약은 다음 요구사항을 충족해야 합니다.
- 머신 유형, 가속기 유형, 가속기 수량이 워크로드에서 사용하는 것과 일치합니다.
예약은 특정 소비 유형을 사용합니다. 예를 들어 gcloud CLI에서 예약을 만들 때
--require-specific-reservation
플래그를 지정해야 합니다.
Autopilot 클러스터의 동일한 프로젝트에서 특정 예약 사용
이 섹션에서는 클러스터와 동일한 프로젝트에 있는 특정 예약 용량을 사용하는 방법을 보여줍니다. kubectl 또는 Terraform을 사용할 수 있습니다.
kubectl
다음 매니페스트를
specific-autopilot.yaml
로 저장합니다. 이 매니페스트에는 특정 예약을 사용하는 노드 선택기가 있습니다. VM 인스턴스 또는 가속기를 사용할 수 있습니다.VM 인스턴스
apiVersion: v1 kind: Pod metadata: name: specific-same-project-pod spec: nodeSelector: cloud.google.com/compute-class: Performance cloud.google.com/machine-family: MACHINE_SERIES cloud.google.com/reservation-name: RESERVATION_NAME cloud.google.com/reservation-affinity: "specific" containers: - name: my-container image: "k8s.gcr.io/pause" resources: requests: cpu: 12 memory: "50Gi" ephemeral-storage: "200Gi"
다음을 바꿉니다.
MACHINE_SERIES
: 특정 용량 예약에 있는 VM의 머신 유형을 포함하는 머신 시리즈입니다. 예를 들어c3-standard-4
머신 유형을 예약하는 경우MACHINE_SERIES
필드에C3
을(를) 지정합니다.RESERVATION_NAME
: Compute Engine 용량 예약의 이름
가속기
apiVersion: v1 kind: Pod metadata: name: specific-same-project-pod spec: nodeSelector: cloud.google.com/gke-accelerator: ACCELERATOR cloud.google.com/reservation-name: RESERVATION_NAME cloud.google.com/reservation-affinity: "specific" containers: - name: my-container image: "k8s.gcr.io/pause" resources: requests: cpu: 12 memory: "50Gi" ephemeral-storage: "200Gi" limits: nvidia.com/gpu: QUANTITY
다음을 바꿉니다.
ACCELERATOR
: Compute Engine 용량 예약에서 예약한 가속기입니다. 다음 값 중 하나여야 합니다.nvidia-h100-80gb
: NVIDIA H100(80GB)(가속기 컴퓨팅 클래스에서만 사용 가능)nvidia-a100-80gb
: NVIDIA A100(80GB)nvidia-tesla-a100
: NVIDIA A100(40GB)nvidia-l4
: NVIDIA L4nvidia-tesla-t4
: NVIDIA T4
RESERVATION_NAME
: Compute Engine 용량 예약의 이름QUANTITY
: 컨테이너에 연결할 GPU의 수입니다. 지원되는 GPU 수량에 설명된 것처럼 지정된 GPU에 대해 지원되는 수량이어야 합니다.
포드를 배포합니다.
kubectl apply -f specific-autopilot.yaml
Autopilot은 지정된 예약의 예약된 용량을 사용하여 포드를 배치하도록 새 노드를 프로비저닝합니다.
Terraform
Terraform을 사용하여 VM 인스턴스와 동일한 프로젝트에서 특정 예약을 사용하려면 다음 예시를 참조하세요.
Terraform을 사용하여 가속기 컴퓨팅 클래스가 있는 동일한 프로젝트에서 특정 예약을 사용하려면 다음 예시를 참조하세요.
Terraform 사용에 대한 자세한 내용은 GKE에 대한 Terraform 지원을 참조하세요.
Autopilot에서 특정 공유 예약 사용
이 섹션에서는 다음 용어가 사용됩니다.
- 소유자 프로젝트: 예약을 소유하고 다른 프로젝트와 공유하는 프로젝트입니다.
- 소비자 프로젝트: 공유 예약을 사용하는 워크로드를 실행하는 프로젝트입니다.
공유 예약을 사용하려면 GKE 서비스 에이전트에 예약 소유자 프로젝트의 예약에 대한 액세스 권한을 부여해야 합니다. 다음 단계를 따르세요.
소유자 프로젝트에서
compute.reservations.list
권한이 포함된 커스텀 IAM 역할을 만듭니다.gcloud iam roles create ROLE_NAME \ --project=OWNER_PROJECT_ID \ --permissions='compute.reservations.list'
다음을 바꿉니다.
ROLE_NAME
: 새 역할의 이름입니다.OWNER_PROJECT_ID
: 용량 예약을 소유한 프로젝트의 프로젝트 ID입니다.
소유자 프로젝트의 공유 예약을 나열할 수 있는 액세스 권한을 소비자 프로젝트의 GKE 서비스 에이전트에 부여합니다.
gcloud projects add-iam-policy-binding OWNER_PROJECT_ID \ --project=OWNER_PROJECT_ID \ --member=serviceAccount:service-CONSUMER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com \ --role='projects/OWNER_PROJECT_ID/roles/ROLE_NAME'
CONSUMER_PROJECT_NUMBER
를 소비자 프로젝트의 숫자 프로젝트 번호로 바꿉니다. 이 번호를 찾으려면 Resource Manager 문서의 프로젝트 식별을 참조하세요.다음 매니페스트를
shared-autopilot.yaml
로 저장합니다. 이 매니페스트에는 GKE에 특정 공유 예약을 사용하라고 지시하는 nodeSelector가 있습니다.VM 인스턴스
apiVersion: v1 kind: Pod metadata: name: performance-pod spec: nodeSelector: cloud.google.com/compute-class: Performance cloud.google.com/machine-family: MACHINE_SERIES cloud.google.com/reservation-name: RESERVATION_NAME cloud.google.com/reservation-project: OWNER_PROJECT_ID cloud.google.com/reservation-affinity: "specific" containers: - name: my-container image: "k8s.gcr.io/pause" resources: requests: cpu: 12 memory: "50Gi" ephemeral-storage: "200Gi"
다음을 바꿉니다.
MACHINE_SERIES
: 특정 용량 예약에 있는 VM의 머신 유형을 포함하는 머신 시리즈입니다. 예를 들어c3-standard-4
머신 유형을 예약하는 경우MACHINE_SERIES
필드에C3
을(를) 지정합니다.RESERVATION_NAME
: Compute Engine 용량 예약의 이름입니다.OWNER_PROJECT_ID
: 용량 예약을 소유한 프로젝트의 프로젝트 ID입니다.
가속기
apiVersion: v1 kind: Pod metadata: name: specific-same-project-pod spec: nodeSelector: cloud.google.com/gke-accelerator: ACCELERATOR cloud.google.com/reservation-name: RESERVATION_NAME cloud.google.com/reservation-project: OWNER_PROJECT_ID cloud.google.com/reservation-affinity: "specific" containers: - name: my-container image: "k8s.gcr.io/pause" resources: requests: cpu: 12 memory: "50Gi" ephemeral-storage: "200Gi" limits: nvidia.com/gpu: QUANTITY
다음을 바꿉니다.
ACCELERATOR
: Compute Engine 용량 예약에서 예약한 가속기입니다. 다음 값 중 하나여야 합니다.nvidia-h100-80gb
: NVIDIA H100(80GB)(가속기 컴퓨팅 클래스에서만 사용 가능)nvidia-a100-80gb
: NVIDIA A100(80GB)nvidia-tesla-a100
: NVIDIA A100(40GB)nvidia-l4
: NVIDIA L4nvidia-tesla-t4
: NVIDIA T4
RESERVATION_NAME
: Compute Engine 용량 예약의 이름입니다.OWNER_PROJECT_ID
: 용량 예약을 소유한 프로젝트의 프로젝트 ID입니다.QUANTITY
: 컨테이너에 연결할 GPU의 수입니다. 지원되는 GPU 수량에 설명된 것처럼 지정된 GPU에 대해 지원되는 수량이어야 합니다.
포드를 배포합니다.
kubectl apply -f shared-autopilot.yaml
Autopilot은 지정된 예약의 예약된 용량을 사용하여 포드를 배치하도록 새 노드를 프로비저닝합니다.
Autopilot에서 예약 사용 문제 해결
- 머신 유형, 가속기 유형, 로컬 SSD 구성, 가속기 수량이 워크로드에서 사용하는 것과 일치하는지 확인합니다. 일치해야 하는 속성의 전체 목록은 Compute Engine 용량 예약 속성을 참조하세요.
- 예약이 특정 어피니티로 생성되었는지 확인합니다.
- 공유 예약을 사용할 때는 소비자 프로젝트의 GKE 서비스 에이전트에 소유자 프로젝트의 공유 예약을 나열할 권한이 있는지 확인합니다.
GKE Standard에서 예약된 인스턴스 사용
클러스터 또는 노드 풀을 만들 때 --reservation-affinity
플래그를 지정하여 예약 사용 모드를 표시할 수 있습니다.
일치하는 예약 사용
gcloud CLI 또는 Terraform을 사용하여 예약 및 인스턴스를 생성하여 예약을 사용할 수 있습니다.
gcloud
일치하는 예약을 자동으로 사용하려면 예약 어피니티 플래그를 --reservation-affinity=any
로 설정합니다. Compute Engine에 정의된 기본값이 any
이므로 예약 어피니티 플래그를 완전히 생략할 수 있습니다.
any
예약 사용 모드에서는 공유 예약이 다른 프로젝트에 더 많이 제공되기 때문에 공유 예약 전에 먼저 모든 단일 프로젝트 예약의 용량이 노드에 사용됩니다. 인스턴스가 자동으로 사용되는 방법에 대한 자세한 내용은 사용 순서를 참조하세요.
VM 인스턴스 3개에 대한 예약을 생성합니다.
gcloud compute reservations create RESERVATION_NAME \ --machine-type=MACHINE_TYPE --vm-count=3
다음을 바꿉니다.
RESERVATION_NAME
: 생성할 예약의 이름MACHINE_TYPE
: 예약에 사용할 머신 유형(이름만 해당)입니다. 예를 들면n1-standard-2
입니다.
예약이 생성되었는지 확인:
gcloud compute reservations describe RESERVATION_NAME
노드가 1개인 클러스터를 만들어 일치하는 예약을 어느 것이든 사용합니다.
gcloud container clusters create CLUSTER_NAME \ --machine-type=MACHINE_TYPE --num-nodes=1 \ --reservation-affinity=any
CLUSTER_NAME
을 만들 클러스터의 이름으로 바꿉니다.노드 3개가 있는 노드 풀을 만들어 일치하는 예약을 사용합니다.
gcloud container node-pools create NODEPOOL_NAME \ --cluster CLUSTER_NAME --num-nodes=3 \ --machine-type=MACHINE_TYPE --reservation-affinity=any
NODEPOOL_NAME
을 만들 노드 풀의 이름으로 바꿉니다.
총 노드 수는 4개이며, 이는 예약 용량을 초과합니다. 마지막 노드가 일반 Compute Engine 리소스 풀에서 용량을 가져오는 동안 노드 중 3개가 예약을 사용합니다.
Terraform
Terraform을 사용하여 3개의 VM 인스턴스 예약을 생성하려면 다음 예시를 참조하세요.
Terraform을 사용하여 일치하는 예약을 모두 사용할 노드가 하나 있는 클러스터를 만들려면 다음 예시를 참조하세요.
Terraform을 사용하여 일치하는 예약을 사용할 노드 3개가 있는 노드 풀을 만들려면 다음 예시를 참조하세요.
Terraform 사용에 대한 자세한 내용은 GKE에 대한 Terraform 지원을 참조하세요.
특정 단일 프로젝트 예약 사용
특정 예약을 사용하려면 예약 어피니티 플래그를 --reservation-affinity=specific
으로 설정하고 특정 예약 이름을 지정합니다. 이 모드에서 인스턴스는 영역의 지정된 예약에서 용량을 가져와야 합니다. 예약에 충분한 용량이 없으면 요청이 실패합니다.
예약을 만들고 특정 예약을 사용할 인스턴스를 만들려면 다음 단계를 수행합니다. gcloud CLI 또는 Terraform을 사용할 수 있습니다.
gcloud
VM 인스턴스 3개에 대한 특정 예약을 생성합니다.
gcloud compute reservations create RESERVATION_NAME \ --machine-type=MACHINE_TYPE --vm-count=3 \ --require-specific-reservation
다음을 바꿉니다.
RESERVATION_NAME
: 생성할 예약의 이름MACHINE_TYPE
: 예약에 사용할 머신 유형(이름만 해당)입니다. 예를 들면n1-standard-2
입니다.
특정 단일 프로젝트 예약을 사용하도록 단일 노드가 있는 노드 풀을 만듭니다.
gcloud container node-pools create NODEPOOL_NAME \ --cluster CLUSTER_NAME \ --machine-type=MACHINE_TYPE --num-nodes=1 \ --reservation-affinity=specific --reservation=RESERVATION_NAME
다음을 바꿉니다.
NODEPOOL_NAME
: 만들 노드 풀의 이름입니다.CLUSTER_NAME
: 생성한 클러스터의 이름입니다.
Terraform
Terraform을 사용하여 특정 예약을 만들려면 다음 예시를 참조하세요.
Terraform을 사용하여 특정 단일 프로젝트 예약을 사용하도록 단일 노드가 있는 노드 풀을 만들려면 다음 예시를 참조하세요.
Terraform 사용에 대한 자세한 내용은 GKE에 대한 Terraform 지원을 참조하세요.
특정 공유 예약 사용
특정 공유 예약을 만들고 공유 예약을 사용하려면 다음 단계를 수행합니다. gcloud CLI 또는 Terraform을 사용할 수 있습니다.
- 공유 예약 만들기 및 수정에서 프로젝트 허용 및 제한의 단계를 수행합니다.
gcloud
특정 공유 예약을 만듭니다.
gcloud compute reservations create RESERVATION_NAME \ --machine-type=MACHINE_TYPE --vm-count=3 \ --zone=ZONE \ --require-specific-reservation \ --project=OWNER_PROJECT_ID \ --share-setting=projects \ --share-with=CONSUMER_PROJECT_IDS
다음을 바꿉니다.
RESERVATION_NAME
: 만들려는 예약 이름입니다.MACHINE_TYPE
: 예약에 사용할 머신 유형의 이름입니다. 예를 들면n1-standard-2
입니다.OWNER_PROJECT_ID
: 이 공유 예약을 만들려는 프로젝트의 프로젝트 ID입니다.--project
플래그를 생략하면 GKE에서 현재 프로젝트가 기본적으로 소유자 프로젝트로 사용됩니다.CONSUMER_PROJECT_IDS
: 이 예약을 공유할 프로젝트의 쉼표로 구분된 프로젝트 ID 목록입니다. 예를 들면project-1,project-2
입니다. 소비자 프로젝트를 1~100개 포함할 수 있습니다. 이러한 프로젝트는 소유자 프로젝트와 동일한 조직에 있어야 합니다.OWNER_PROJECT_ID
는 기본적으로 이 예약을 사용할 수 있으므로 포함하지 마세요.
공유 예약을 사용합니다.
gcloud container node-pools create NODEPOOL_NAME \ --cluster CLUSTER_NAME \ --machine-type=MACHINE_TYPE --num-nodes=1 \ --reservation-affinity=specific \ --reservation=projects/OWNER_PROJECT_ID/reservations/RESERVATION_NAME
다음을 바꿉니다.
NODEPOOL_NAME
: 만들 노드 풀의 이름입니다.CLUSTER_NAME
: 생성한 클러스터의 이름입니다.
Terraform
Terraform을 사용하여 특정 공유 예약을 만들려면 다음 예시를 참조하세요.
Terraform을 사용하여 특정 공유 예약을 사용하려면 다음 예시를 참조하세요.
Terraform 사용에 대한 자세한 내용은 GKE에 대한 Terraform 지원을 참조하세요.
특정 예약에서 사용 시 추가 고려사항
클러스터 생성 중에 특정 예약 어피니티를 사용하여 생성된 노드 풀(기본 노드 풀 포함)은 노드 풀의 전체 기간 동안 특정 예약의 용량으로 크기가 제한됩니다. 이는 다음과 같은 GKE 기능에 영향을 줍니다.
- 여러 영역이 있는 클러스터: 영역 클러스터 또는 멀티 영역 클러스터에서 노드 풀의 노드는 여러 영역에 걸쳐 있을 수 있습니다. 예약은 단일 영역에 국한되므로 여러 예약이 필요합니다. 이러한 클러스터에서 특정 예약을 사용하는 노드 풀을 만들려면 노드 풀의 각 영역에서 이름과 머신 속성이 똑같은 예약을 만들어야 합니다.
- 클러스터 자동 확장 및 노드 풀 업그레이드: 특정 예약에 추가 용량이 없는 경우 두 작업 모두 추가 인스턴스를 만들어야 하므로 노드 풀 업그레이드 또는 노드 풀 자동 확장이 실패할 수 있습니다. 이 문제를 해결하려면 예약 크기를 변경하거나 제한된 리소스 중 일부를 확보하면 됩니다.
예약을 사용하지 않고 노드 만들기
예약에서 리소스를 사용하지 않도록 명시적으로 지정하려면 어피니티를 --reservation-affinity=none
으로 설정합니다.
예약을 사용하지 않는 클러스터를 만듭니다.
gcloud container clusters create CLUSTER_NAME --reservation-affinity=none
CLUSTER_NAME
을 만들 클러스터의 이름으로 바꿉니다.예약을 사용하지 않는 노드 풀을 만듭니다.
gcloud container node-pools create NODEPOOL_NAME \ --cluster CLUSTER_NAME \ --reservation-affinity=none
NODEPOOL_NAME
을 만들 노드 풀의 이름으로 바꿉니다.
영역 간에 사용 가능한 예약 팔로잉
서로 다른 예약을 갖는 여러 영역에서 실행되는 노드 풀을 사용하는 경우 --location_policy=ANY
플래그를 사용할 수 있습니다. 이렇게 하면 클러스터에 새 노드가 추가될 때 아직 사용되지 않은 예약이 있는 영역에 노드가 생성됩니다.
TPU 예약
TPU 예약은 다른 머신 유형과 다릅니다. 다음은 TPU 예약을 만들 때 고려해야 하는 TPU 관련 측면입니다.
- GKE의 TPU를 사용할 때
gcloud container node-pools create
의--reservation-affinity
플래그에 지원되는 유일한 값은SPECIFIC
입니다. - TPU 예약은 프로젝트 간에 공유할 수 없습니다.
자세한 내용은 TPU 예약을 참조하세요.
삭제
이 페이지에서 사용한 리소스 비용이 Cloud Billing 계정에 청구되지 않게 하려면 다음 안내를 따르세요.
각 클러스터에 다음 명령어를 실행하여 생성한 클러스터를 삭제합니다.
gcloud container clusters delete CLUSTER_NAME
각 예약에 다음 명령어를 실행하여 생성한 예약을 삭제합니다.
gcloud compute reservations delete RESERVATION_NAME