노드 자동 프로비저닝 사용


이 페이지에서는 표준 Google Kubernetes Engine(GKE) 클러스터에서 노드 자동 프로비저닝을 사용하는 방법을 설명합니다. 노드 자동 프로비저닝 개념에 익숙해야 합니다.

시작하기 전에

시작하기 전에 다음 태스크를 수행했는지 확인합니다.

  • Google Kubernetes Engine API를 사용 설정합니다.
  • Google Kubernetes Engine API 사용 설정
  • 이 태스크에 Google Cloud CLI를 사용하려면 gcloud CLI를 설치한 후 초기화합니다. 이전에 gcloud CLI를 설치한 경우 gcloud components update를 실행하여 최신 버전을 가져옵니다.

요구사항

노드 자동 프로비저닝은 다음 GKE 출시 버전에서 사용할 수 있습니다.

  • 영역 클러스터의 경우 버전 1.11.2-gke.25 이상
  • 리전 클러스터의 경우 버전 1.12.x 이상
  • Cloud TPU v4 및 v5e의 경우 버전 1.27.6 이상 또는 1.28 이상
  • Cloud TPU v5p의 경우 버전 1.28.7-gke.1020000 이상 및 1.29.2-gke.1035000 이상

노드 자동 프로비저닝 사용 설정

gcloud CLI 또는 Google Cloud 콘솔을 사용하여 클러스터에서 노드 자동 프로비저닝을 사용 설정할 수 있습니다.

노드 자동 프로비저닝에는 다음 리소스 제한사항이 있습니다.

노드 IP 주소 범위를 신중하게 계획해야 합니다. 클러스터를 만든 후 노드 IP 주소 범위를 확장할 수 있습니다. 하지만 새 범위를 소스로 포함하도록 방화벽 규칙을 업데이트해야 하므로 클러스터를 만든 후 노드 IP 주소 범위를 확장하지 않는 것이 좋습니다. 노드 자동 프로비저닝과 함께 연속되지 않은 멀티 포드 CIDR을 사용하여 포드 IP 주소 범위를 확장할 수 있습니다.

gcloud

노드 자동 프로비저닝을 사용 설정하려면 다음 명령어를 실행하세요.

gcloud container clusters update CLUSTER_NAME \
    --enable-autoprovisioning \
    --min-cpu MINIMUM_CPU \
    --min-memory MIMIMUM_MEMORY \
    --max-cpu MAXIMUM_CPU \
    --max-memory MAXIMUM_MEMORY \
    --autoprovisioning-scopes=https://www.googleapis.com/auth/logging.write,https://www.googleapis.com/auth/monitoring,https://www.googleapis.com/auth/devstorage.read_only

다음을 바꿉니다.

  • CLUSTER_NAME: 노드 자동 프로비저닝을 사용 설정할 클러스터의 이름입니다.
  • MINIMUM_CPU: 클러스터의 최소 코어 수입니다.
  • MINIMUM_MEMORY: 클러스터의 최소 메모리 용량(GB)입니다.
  • MAXIMUM_CPU: 클러스터의 최대 코어 수입니다.
  • MAXIMUM_MEMORY: 클러스터의 최대 메모리 용량(GB)입니다.

다음 예시는 dev-cluster에서 노드 자동 프로비저닝을 사용 설정하고 1 CPU 및 1GB 메모리의 총 클러스터 크기를 최대 10 CPU 및 64GB 메모리까지 확장하도록 허용합니다.

gcloud container clusters update dev-cluster \
    --enable-autoprovisioning \
    --min-cpu 1 \
    --min-memory 1 \
    --max-cpu 10 \
    --max-memory 64

콘솔

노드 자동 프로비저닝을 사용 설정하려면 다음 단계를 수행합니다.

  1. Google Cloud Console에서 Google Kubernetes Engine 페이지로 이동합니다.

    Google Kubernetes Engine으로 이동

  2. 클러스터 이름을 클릭합니다.

  3. 자동화 섹션의 노드 자동 프로비저닝에서 수정을 클릭합니다.

  4. 노드 자동 프로비저닝 사용 설정 체크박스를 선택합니다.

  5. 클러스터에 원하는 최소 및 최대 CPU 및 메모리 사용량을 설정합니다.

  6. 변경사항 저장을 클릭합니다.

자동 프로비저닝 구성 파일 사용

노드 자동 프로비저닝은 YAML 구성 파일을 사용하여 구성할 수 있습니다. 구성 파일이 하나의 설정을 변경하는 데 사용되는 경우 한 줄만 포함될 수 있습니다. 하나의 구성 파일에 여러 설정을 지정할 수 있습니다. 이 경우 구성 파일이 적용되면 지정한 모든 설정이 변경됩니다.

일부 고급 구성은 구성 파일을 사용해서만 지정할 수 있습니다.

예시 1: 다음 구성 파일을 적용하면 노드 자동 프로비저닝으로 생성된 모든 새 노드 풀에 노드 자동 복구 및 자동 업그레이드가 사용 설정됩니다.

management:
  autoRepair: true
  autoUpgrade: true

예시 2: 다음 구성 파일을 적용하면 다음 설정이 변경됩니다.

  • CPU, 메모리, GPU리소스 한도를 설정합니다. 클러스터의 총 크기가 지정된 리소스 한도를 초과하면 노드 자동 프로비저닝에서 노드를 만들지 않습니다.
  • 노드 자동 프로비저닝으로 생성된 모든 새 노드 풀에 노드 자동 복구 및 자동 업그레이드를 사용 설정합니다.
  • 노드 자동 프로비저닝으로 생성된 모든 새 노드 풀에 보안 부팅 및 무결성 모니터링을 사용 설정합니다.
  • 노드 자동 프로비저닝으로 생성된 모든 새 노드 풀의 부팅 디스크 크기를 100GB로 설정합니다.
resourceLimits:
  - resourceType: 'cpu'
    minimum: 4
    maximum: 10
  - resourceType: 'memory'
    maximum: 64
  - resourceType: 'nvidia-tesla-k80'
    maximum: 4
management:
  autoRepair: true
  autoUpgrade: true
shieldedInstanceConfig:
  enableSecureBoot: true
  enableIntegrityMonitoring: true
diskSizeGb: 100

자동 프로비저닝 구성 파일을 사용하려면 다음 안내를 따르세요.

  1. gcloud CLI가 액세스할 수 있는 위치에 원하는 구성으로 파일을 만듭니다.

  2. 다음 명령어를 실행하여 클러스터에 구성을 적용합니다.

    gcloud container clusters update CLUSTER_NAME \
       --enable-autoprovisioning \
       --autoprovisioning-config-file FILE_NAME

    다음을 바꿉니다.

    • CLUSTER_NAME: 클러스터의 이름입니다.
    • FILE_NAME: 구성 파일의 이름입니다.

    자세한 내용은 gcloud container clusters update 문서를 참조하세요.

자동 프로비저닝 기본값

노드 자동 프로비저닝은 클러스터의 포드 요구사항을 확인하여 해당 포드에 가장 적합한 노드 유형을 결정합니다. 그러나 일부 노드 풀 설정은 포드에 의해 직접 지정되지 않습니다(예: 노드 업그레이드와 관련된 설정). 이러한 설정의 기본값을 설정할 수 있으며 이 값은 새로 생성된 모든 노드 풀에 적용됩니다.

기본 노드 이미지 유형 설정

gcloud CLI 또는 구성 파일을 사용하여 모든 새로운 자동 프로비저닝된 노드 풀에 사용할 노드 이미지 유형을 지정할 수 있습니다. 이 설정은 GKE 클러스터 버전 1.20.6-gke.1800 이상에서만 사용할 수 있습니다.

gcloud

기본 노드 이미지 유형을 설정하려면 다음 명령어를 실행합니다.

gcloud container clusters update CLUSTER_NAME \
  --enable-autoprovisioning \
  --autoprovisioning-image-type IMAGE_TYPE

다음을 바꿉니다.

  • CLUSTER_NAME: 클러스터의 이름입니다.
  • IMAGE_TYPE: 노드 이미지 유형이며 다음 중 하나일 수 있습니다.

    • cos_containerd: containerd를 포함한 Container-Optimized OS입니다.
    • ubuntu_containerd: containerd를 포함한 Ubuntu입니다.

파일

모든 새로운 자동 프로비저닝된 노드 풀에 대해 구성 파일을 사용하여 사용할 노드 이미지 유형을 지정할 수 있습니다. 다음 YAML 구성은 새로운 자동 프로비저닝된 노드 풀의 경우 이미지 유형이 cos_containerd이고 CPU 및 메모리에 대한 관련 리소스 한도가 있도록 지정합니다. 자동 프로비저닝을 사용 설정하려면 CPU 및 메모리의 최댓값을 지정해야 합니다.

  1. YAML 구성을 저장합니다.

    resourceLimits:
      - resourceType: 'cpu'
        minimum: 4
        maximum: 10
      - resourceType: 'memory'
        maximum: 64
    imageType: 'cos_containerd'
    
  2. 구성을 적용합니다.

    gcloud container clusters update CLUSTER_NAME \
      --enable-autoprovisioning \
      --autoprovisioning-config-file FILE_NAME
    

    다음을 바꿉니다.

    • CLUSTER_NAME: 클러스터의 이름입니다.
    • FILE_NAME: 구성 파일의 이름입니다.

자동 프로비저닝된 노드 풀의 ID 기본값 설정

Google Cloud 리소스에 대한 권한은 ID를 통해 제공됩니다.

gcloud CLI를 사용하거나 구성 파일을 통해 새 자동 프로비저닝된 노드 풀의 기본 ID(서비스 계정 또는 범위 한 개 이상)를 지정할 수 있습니다.

gcloud

노드 자동 프로비저닝에 사용할 기본 IAM 서비스 계정을 지정하려면 다음 명령어를 실행합니다.

gcloud container clusters update CLUSTER_NAME \
    --enable-autoprovisioning --autoprovisioning-service-account=SERVICE_ACCOUNT

다음을 바꿉니다.

  • CLUSTER_NAME: 클러스터의 이름입니다.
  • SERVICE_ACCOUNT: 기본 서비스 계정의 이름입니다.

다음 예시는 test-service-account@google.comdev-cluster 클러스터에서 기본 서비스 계정으로 설정합니다.

gcloud container clusters update dev-cluster \
    --enable-autoprovisioning --autoprovisioning-service-account=test-service-account@google.com

노드 자동 프로비저닝에 사용하는 기본 범위를 지정하려면 다음 명령어를 실행합니다.

gcloud container clusters update CLUSTER_NAME \
    --enable-autoprovisioning --autoprovisioning-scopes=SCOPE

다음을 바꿉니다.

  • CLUSTER_NAME: 클러스터의 이름입니다.
  • SCOPE: 자동 프로비저닝된 노드 풀에서 사용되는 Google Cloud 범위입니다. 여러 범위를 지정하려면 범위를 쉼표로 구분합니다(예: SCOPE1, SCOPE2,...).

다음 예시에서는 dev-cluster 클러스터에서 기본 범위를 devstorage.read_only로 설정합니다.

gcloud container clusters update dev-cluster \
    --enable-autoprovisioning \
    --autoprovisioning-scopes=https://www.googleapis.com/auth/pubsub,https://www.googleapis.com/auth/devstorage.read_only

파일

구성 파일을 사용하여 노드 자동 프로비저닝에 사용되는 ID 기본값을 지정할 수 있습니다. 다음 YAML 구성은 IAM 서비스 계정을 설정합니다.

  serviceAccount: SERVICE_ACCOUNT

SERVICE_ACCOUNT를 기본 서비스 계정의 이름으로 바꿉니다.

또는 다음 YAML 구성을 사용하여 노드 자동 프로비저닝에 사용되는 기본 범위를 지정할 수 있습니다.

  scopes: SCOPE

SCOPE를 자동 프로비저닝된 노드 풀에서 사용하는 Google Cloud 범위로 바꿉니다. 여러 범위를 지정하려면 범위를 쉼표로 구분합니다(예: SCOPE1, SCOPE2,...).

자동 프로비저닝 구성 파일을 사용하려면 다음 안내를 따르세요.

  1. gcloud CLI가 액세스할 수 있는 위치에 ID 기본값을 지정하는 구성 파일을 만듭니다.

  2. 다음 명령어를 실행하여 클러스터에 구성을 적용합니다.

    gcloud container clusters update CLUSTER_NAME \
       --enable-autoprovisioning \
       --autoprovisioning-config-file FILE_NAME

다음을 바꿉니다.

  • CLUSTER_NAME: 클러스터의 이름입니다.
  • FILE_NAME: 구성 파일의 이름입니다.

고객 관리 암호화 키(CMEK)

새 자동 프로비저닝된 노드 풀에서 사용되는 고객 관리 암호화 키(CMEK)를 지정할 수 있습니다.

구성 파일을 사용하여 부팅 드라이브에 고객 관리 암호화를 사용 설정할 수 있습니다. 다음 YAML 구성은 CMEK 키를 설정합니다.

  bootDiskKmsKey: projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME

다음을 바꿉니다.

  • KEY_PROJECT_ID: 키 프로젝트 ID입니다.
  • LOCATION: 키링의 위치입니다.
  • KEY_RING: 키링의 이름입니다.
  • KEY_NAME: 키의 이름입니다.

자동 프로비저닝 구성 파일을 사용하려면 다음 안내를 따르세요.

  1. gcloud CLI가 액세스할 수 있는 위치에 CMEK 키를 지정하는 구성 파일을 만듭니다.

  2. 다음 명령어를 실행하여 클러스터에 구성을 적용합니다.

    gcloud container clusters update CLUSTER_NAME \
       --enable-autoprovisioning \
       --autoprovisioning-config-file FILE_NAME

    다음을 바꿉니다.

    • CLUSTER_NAME: 클러스터의 이름입니다.
    • FILE_NAME: 구성 파일의 이름입니다.

노드 무결성

노드 자동 프로비저닝은 보안 부팅 및 무결성 모니터링이 사용 설정된 노드 풀 만들기를 지원합니다.

구성 파일을 사용하여 보안 부팅 및 무결성 모니터링을 사용 설정할 수 있습니다. 다음 YAML 구성은 보안 부팅을 사용 설정하고 무결성 모니터링을 사용 중지합니다.

  shieldedInstanceConfig:
    enableSecureBoot: true
    enableIntegrityMonitoring: false

자동 프로비저닝 구성 파일을 사용하려면 다음 안내를 따르세요.

  1. 위의 구성을 gcloud CLI가 액세스할 수 있는 위치의 파일로 복사합니다. enableSecureBootenableIntegrityMonitoring의 값을 수정합니다. 파일을 저장합니다.

  2. 다음 명령어를 실행하여 클러스터에 구성을 적용합니다.

    gcloud container clusters update CLUSTER_NAME \
       --enable-autoprovisioning \
       --autoprovisioning-config-file FILE_NAME

    다음을 바꿉니다.

    • CLUSTER_NAME: 클러스터의 이름입니다.
    • FILE_NAME: 구성 파일의 이름입니다.

노드 자동 복구 및 자동 업그레이드

노드 자동 프로비저닝은 노드 자동 복구 및 노드 자동 업그레이드를 사용 설정하여 노드 풀 만들기를 지원합니다.

gcloud

모든 새로운 자동 프로비저닝된 노드 풀에 대해 자동 복구 및 자동 업그레이드를 사용 설정하려면 다음 명령어를 실행합니다.

gcloud container clusters update CLUSTER_NAME \
    --enable-autoprovisioning --enable-autoprovisioning-autorepair \
    --enable-autoprovisioning-autoupgrade

CLUSTER_NAME을 클러스터 이름으로 바꿉니다.

모든 새 자동 프로비저닝된 노드 풀에서 자동 복구와 자동 업그레이드를 사용 중지하려면 다음 명령어를 실행합니다.

gcloud container clusters update CLUSTER_NAME \
    --enable-autoprovisioning --no-enable-autoprovisioning-autorepair \
    --no-enable-autoprovisioning-autoupgrade

CLUSTER_NAME을 클러스터 이름으로 바꿉니다.

파일

구성 파일을 사용하여 노드 자동 복구 및 자동 업그레이드를 사용 설정하거나 사용 중지할 수 있습니다. 다음 YAML 구성은 자동 복구를 사용 설정하고 자동 업그레이드를 사용 중지합니다.

  management:
    autoRepair: true
    autoUpgrade: false

자동 프로비저닝 구성 파일을 사용하려면 다음 안내를 따르세요.

  1. 위의 구성을 gcloud CLI가 액세스할 수 있는 위치의 파일로 복사합니다. autoUpgradeautoRepair의 값을 수정합니다. 파일을 저장합니다.

  2. 다음 명령어를 실행하여 클러스터에 구성을 적용합니다.

gcloud container clusters update CLUSTER_NAME \
    --enable-autoprovisioning \
    --autoprovisioning-config-file FILE_NAME

다음을 바꿉니다.

  • CLUSTER_NAME: 클러스터의 이름입니다.
  • FILE_NAME: 구성 파일의 이름입니다.

새 자동 프로비저닝된 노드 풀에 일시 급증 업그레이드 사용

gcloud CLI 또는 구성 파일을 사용하여 새로운 자동 프로비저닝된 노드 풀 전체에 일시 급증 업그레이드 설정을 지정할 수 있습니다. 기본적으로 GKE는 노드 업그레이드 전략일시 급증 업그레이드로 설정합니다.

gcloud

모든 새로운 자동 프로비저닝된 노드 풀에 대해 일시 급증 업그레이드 설정을 지정하려면 다음 명령어를 실행합니다.

gcloud container clusters update CLUSTER_NAME \
    --enable-autoprovisioning \
    --autoprovisioning-max-surge-upgrade MAX_SURGE \
    --autoprovisioning-max-unavailable-upgrade MAX_UNAVAILABLE

다음을 바꿉니다.

  • CLUSTER_NAME: 클러스터의 이름입니다.
  • MAX_SURGE: 업그레이드 중에 노드 풀에 추가할 수 있는 최대 노드 수입니다.
  • MAX_UNAVAILABLE: 업그레이드 중에 동시에 사용할 수 없는 노드 풀의 최대 노드 수입니다.

파일

다음과 같은 구성 파일을 사용하여 새 자동 프로비저닝된 모든 노드 풀에 일시 급증 업그레이드 설정을 지정할 수 있습니다.

  upgradeSettings:
    maxSurgeUpgrade: 1
    maxUnavailableUpgrade: 2

자동 프로비저닝 구성 파일을 사용하려면 다음 안내를 따르세요.

  1. 위의 구성을 gcloud가 액세스할 수 있는 위치의 파일로 복사합니다. maxSurgeUpgrademaxUnavailableUpgrade의 값을 수정합니다. 파일을 저장합니다.

  2. 다음 명령어를 실행하여 클러스터에 구성을 적용합니다.

gcloud container clusters update CLUSTER_NAME \
    --enable-autoprovisioning \
    --autoprovisioning-config-file FILE_NAME

다음을 바꿉니다.

  • CLUSTER_NAME: 클러스터의 이름입니다.
  • FILE_NAME: 구성 파일의 이름입니다.

자세한 내용은 gcloud container clusters update 문서를 참조하세요.

새 자동 프로비저닝된 노드 풀에 대해 일시 급증 업그레이드를 사용하도록 다시 전환하려면 다음 명령어를 실행합니다.

gcloud container clusters update CLUSTER_NAME \
  --enable-autoprovisioning \
  --enable-autoprovisioning-surge-upgrade

CLUSTER_NAME을 클러스터 이름으로 바꿉니다.

이전 명령어에서와 같이 특정 설정에 대해 플래그를 선택적으로 포함할 수 있습니다. GKE에서는 설정된 경우 업그레이드 전략에 대한 이전 구성이 다시 사용됩니다.

새 자동 프로비저닝된 노드 풀에 대해 블루-그린 업그레이드 사용

gcloud CLI를 사용하여 모든 새 자동 프로비저닝된 노드 풀에 대해 블루-그린 업그레이드를 사용할 수 있습니다. 블루-그린 업그레이드의 경우 기본 설정을 사용하거나 환경에 맞게 최적화할 수 있습니다. 블루-그린 업그레이드에 대해 자세히 알아보려면 블루-그린 업그레이드를 참조하세요.

기존 자동 프로비저닝된 노드 풀에 대한 노드 업그레이드 전략을 업데이트하려면 기존 노드 풀에 대한 일시 급증 업그레이드 설정 또는 해제기존 노드 풀 블루-그린 업그레이드 전략 업데이트를 참조하세요.

아래 명령어에 사용되는 변수는 다음과 같습니다.

  • CLUSTER_NAME: 노드 풀의 클러스터 이름입니다.
  • COMPUTE_ZONE: 클러스터의 영역입니다.
  • NODE_POOL_NAME: 노드 풀의 이름입니다.
  • NUMBER_NODES: 각 클러스터 영역의 노드 풀에 있는 노드 수입니다.
  • BATCH_NODE_COUNT: 블루 풀 드레이닝 단계 중 일괄 처리에서 드레이닝할 블루 노드 수입니다. 기본값은 1입니다. 0으로 설정하면 블루 풀 드레이닝 단계를 건너뜁니다.
  • BATCH_PERCENT: 블루 풀 드레이닝 단계 중 일괄 처리에서 드레이닝할 블루 노드의 비율입니다. 범위는 [0.0, 1.0] 이내여야 합니다.
  • BATCH_SOAK_DURATION: 각 일괄 드레이닝 이후 대기할 시간(초)입니다. 기본값은 0입니다.
  • NODE_POOL_SOAK_DURATION: 모든 일괄 처리의 드레이닝을 완료한 후 대기할 시간(초)입니다. 기본값은 3,600초입니다.

블루-그린 업그레이드의 기본 설정은 다음과 같습니다.

  • BATCH_NODE_COUNT = 1
  • BATCH_SOAK_DURATION = 0초
  • NODE_POOL_SOAK_DURATION = 3,600초(1시간)

새 자동 프로비저닝된 노드 풀에 블루-그린 업그레이드를 사용하도록 클러스터 업데이트

다음 명령어는 gcloud container clusters update를 사용하여 새 자동 프로비저닝된 노드 풀에 대한 노드 업그레이드 전략을 업데이트합니다.

다음 경우에도 이러한 플래그를 사용할 수 있습니다.

새 자동 프로비저닝된 노드 풀에 대한 기본 설정으로 블루-그린 업그레이드를 사용하도록 클러스터를 업데이트하려면 다음 명령어를 사용합니다.

gcloud container clusters update CLUSTER_NAME \
  --enable-autoprovisioning \
  --enable-autoprovisioning-blue-green-upgrade

새 자동 프로비저닝된 노드 풀에 대한 특정 설정으로 블루-그린 업그레이드를 사용하도록 클러스터를 업데이트할 수 있습니다. 또한 이러한 명령어는 설정을 업데이트하는 --enable-autoprovisioning-blue-green-upgrade 플래그 없이 사용될 수 있습니다.

다음 명령어는 BATCH_NODE_COUNT를 사용하여 절대 노드 수 배치 크기를 설정합니다.

gcloud container clusters update CLUSTER_NAME \
  --enable-autoprovisioning \
  --enable-autoprovisioning-blue-green-upgrade \
  --autoprovisioning-node-pool-soak-duration=NODE_POOL_SOAK_DURATION \
  --autoprovisioning-standard-rollout-policy=batch-node-count=BATCH_NODE_COUNT,batch-soak-duration=BATCH_SOAK_DURATION

또한 BATCH_PERCENT를 사용하여 백분율 기반 배치 크기를 설정할 수 있습니다. 마지막 명령어의 batch-node-countbatch-percent로 바꾸고 0~1 사이의 숫자를 사용합니다(예: 25%는 0.25). 백분율 기반 배치 크기의 설정 방법을 보려면 백분율 기반 배치 크기를 사용하여 블루/그린 업그레이드로 노드 풀 업데이트를 참조하세요.

커스텀 부팅 디스크

노드 자동 프로비저닝은 커스텀 부팅 디스크로 노드 풀 만들기를 지원합니다.

구성 파일을 사용하여 부팅 디스크 설정을 맞춤설정할 수 있습니다. GKE는 kubelet 함수를 위해 노드 부팅 디스크의 일부를 예약합니다. 자세한 내용은 노드 부팅 디스크를 기반으로 하는 임시 스토리지를 참조하세요.

다음 YAML 구성을 사용하면 노드 자동 프로비저닝이 100GB SSD 디스크가 있는 노드 풀을 만듭니다.

  diskSizeGb: 100
  diskType: pd-ssd

다음 사항을 지정합니다.

  • diskSizeGb: GB 단위로 지정된 디스크 크기입니다.
  • diskType: 디스크 유형이며 다음 값 중 하나일 수 있습니다.
    • pd-balanced(기본)
    • pd-standard
    • pd-ssd. GKE 버전 1.22 이하에서 pd-ssd를 지정하면 노드 풀을 만들 때 노드 자동 프로비저닝에서 N1 머신 유형만 고려합니다.

자동 프로비저닝 구성 파일을 사용하려면 다음 안내를 따르세요.

  1. gcloud CLI가 액세스할 수 있는 위치에 원하는 부팅 디스크 구성이 있는 파일을 만듭니다.

  2. 다음 명령어를 실행하여 클러스터에 구성을 적용합니다.

    gcloud container clusters update CLUSTER_NAME \
       --enable-autoprovisioning \
       --autoprovisioning-config-file FILE_NAME

    다음을 바꿉니다.

    • CLUSTER_NAME: 클러스터의 이름입니다.
    • FILE_NAME: 구성 파일의 이름입니다.

워크로드에서 kube-system 포드 분리

클러스터 관리자는 워크로드에서 kube-system 포드를 분리할 수 있습니다. 이 구성을 사용하면 kube-system 포드가 실행 중인 사용량이 적은 노드에서 클러스터가 축소되는 것을 방지할 수 있습니다.

다음 예시에서는 노드 자동 프로비저닝과 taint 톨러레이션(toleration)을 함께 사용하여 kube-system 포드를 클러스터 워크로드에서 분리하는 방법을 보여줍니다.

  1. 기본 노드 풀이 e2-standard-2 VM인 클러스터를 만듭니다.

    gcloud container clusters create test --machine-type=e2-standard-2
    
  2. default-pool 노드 풀에 taint를 적용합니다.

    kubectl taint nodes -l cloud.google.com/gke-nodepool=default-pool CriticalAddonsOnly=true:NoSchedule
    

    출력은 다음과 비슷합니다.

    node/gke-test-default-pool-66fd7aed-7xbd tainted
    node/gke-test-default-pool-66fd7aed-kg1x tainted
    node/gke-test-default-pool-66fd7aed-ljc7 tainted
    
  3. 클러스터에 대해 노드 자동 프로비저닝을 사용 설정합니다.

    gcloud container clusters update test \
        --enable-autoprovisioning \
        --min-cpu 1 \
        --min-memory 1 \
        --max-cpu 10 \
        --max-memory 64 \
        --autoprovisioning-scopes= \
          https://www.googleapis.com/auth/logging.write,\
          https://www.googleapis.com/auth/monitoring, \
          https://www.googleapis.com/auth/devstorage.read_only
    

    클러스터는 CPU 1개 및 1GB 메모리에서 최대 CPU 10개 및 64GB 메모리까지 총 클러스터 크기를 확장할 수 있습니다.

  4. 다음 샘플 매니페스트를 nginx.yaml로 저장하여 이 구성을 테스트합니다.

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx
      labels:
        env: test
    spec:
      containers:
      - name: nginx
        image: nginx
        imagePullPolicy: IfNotPresent
      tolerations:
      - key: dedicated
        operator: Equal
        value: ui-team
        effect: NoSchedule
      nodeSelector:
        dedicated: ui-team
    

    이 매니페스트는 클러스터에 nodeSelector 라벨과 dedicated: ui-team 노드 taint를 사용하여 테스트 워크로드 포드를 배포합니다. 노드 자동 프로비저닝이 없으면 적절한 라벨과 taint가 있는 노드 풀이 없으므로 이 워크로드 포드를 예약할 수 없습니다.

  5. 클러스터에 매니페스트를 적용합니다.

    kubectl apply -f nginx.yaml
    

    출력은 다음과 비슷합니다.

    pod/nginx created
    
  6. ui-team 라벨에 맞는 새 노드 풀을 확인합니다.

    kubectl get node --selector=dedicated=ui-team
    

    출력은 다음과 비슷합니다.

    NAME                                            STATUS   ROLES    AGE   VERSION
    gke-test-nap-e2-medium-14b723z1-19f89fa8-jmhr   Ready    <none>   14s   v1.21.11-gke.900
    

노드 자동 프로비저닝 및 taint 톨러레이션(toleration)을 사용하여 클러스터는 kube-system를 워크로드 포드와 분리합니다.

새 자동 프로비저닝된 노드 풀에 가속기 사용

노드 자동 프로비저닝을 사용 설정하고 GKE 또는 Cloud TPU 가속기를 자동으로 프로비저닝하도록 구성하여 AI/ML 워크로드를 예약하는 데 필요한 용량을 확보할 수 있습니다.

GPU 제한 구성

GPU와 함께 노드 자동 프로비저닝을 사용하는 경우 gcloud CLI 또는 Google Cloud 콘솔을 사용하여 클러스터의 GPU 유형에 최대 제한을 설정할 수 있습니다. GPU 제한 수는 최대 GPU 수입니다. 예를 들어 16개의 GPU가 있는 VM은 이 한도에서 1이 아닌 16으로 계산됩니다. 여러 유형의 GPU를 구성하려면 구성 파일을 사용해야 합니다.

사용 가능한 resourceTypes를 나열하려면 gcloud compute accelerator-types list를 실행합니다.

gcloud

gcloud container clusters update CLUSTER_NAME \
    --enable-autoprovisioning \
    --max-cpu MAXIMUM_CPU \
    --max-memory MAXIMUM_MEMORY \
    --min-accelerator type=GPU_TYPE,count=MINIMUM_ACCELERATOR \
    --max-accelerator type=GPU_TYPE,count=MAXIMUM_ACCELERATOR

다음을 바꿉니다.

  • CLUSTER_NAME: 클러스터의 이름입니다.
  • MAXIMUM_CPU: 클러스터의 최대 코어 수입니다.
  • MAXIMUM_MEMORY: 클러스터의 최대 메모리 용량(GB)입니다.
  • GPU_TYPE: GPU 유형입니다.
  • MINIMUM_ACCELERATOR: 클러스터의 최소 GPU 가속기 수입니다.
  • MAXIMUM_ACCELERATOR: 클러스터의 최대 GPU 가속기 수입니다.

다음 예시는 dev-cluster 클러스터의 nvidia-tesla-k80 GPU 가속기 유형에 GPU 제한을 설정합니다.

gcloud container clusters update dev-cluster \
    --enable-autoprovisioning \
    --max-cpu 10 \
    --max-memory 64 \
    --min-accelerator type=nvidia-tesla-k80,count=1 \
    --max-accelerator type=nvidia-tesla-k80,count=4

파일

구성 파일을 사용하여 여러 GPU 유형에 대한 제한을 로드할 수 있습니다. 다음 YAML 구성은 두 가지 GPU 유형을 구성합니다.

  resourceLimits:
    - resourceType: 'cpu'
      minimum: 4
      maximum: 10
    - resourceType: 'memory'
      maximum: 64
    - resourceType: 'nvidia-tesla-k80'
      maximum: 4
    - resourceType: 'nvidia-tesla-v100'
      maximum: 2

자동 프로비저닝 구성 파일을 사용하려면 다음 안내를 따르세요.

  1. 위의 구성을 gcloud CLI가 액세스할 수 있는 위치의 파일로 복사합니다. cpumemory의 값을 수정합니다. resourceType에 필요한 만큼 값을 추가합니다. 파일을 저장합니다.

  2. 다음 명령어를 실행하여 클러스터에 구성을 적용합니다.

gcloud container clusters update CLUSTER_NAME \
    --enable-autoprovisioning \
    --autoprovisioning-config-file FILE_NAME

다음을 바꿉니다.

  • CLUSTER_NAME: 클러스터의 이름입니다.
  • FILE_NAME: 구성 파일의 이름입니다.

자세한 내용은 gcloud container clusters update 문서를 참조하세요.

콘솔

GPU 리소스와 함께 노드 자동 프로비저닝을 사용 설정하려면 다음 단계를 수행합니다.

  1. Google Cloud Console에서 Google Kubernetes Engine 페이지로 이동합니다.

    Google Kubernetes Engine으로 이동

  2. 클러스터 이름을 클릭합니다.

  3. 자동화 섹션의 노드 자동 프로비저닝에서 수정을 클릭합니다.

  4. 노드 자동 프로비저닝 사용 설정 체크박스를 선택합니다.

  5. 클러스터에 원하는 최소 및 최대 CPU 및 메모리 사용량을 설정합니다.

  6. 리소스 추가를 클릭합니다.

  7. 추가할 GPU 유형(예: NVIDIA TESLA K80)을 선택합니다. 클러스터에 추가할 최소 및 최대 GPU 수를 설정합니다.

  8. GKE의 GPU 제한에 동의합니다.

  9. 변경사항 저장을 클릭합니다.

설치할 드라이버 버전 선택

GKE 버전 1.29.2-gke.1108000 이상에서는 자동 프로비저닝된 GPU 노드에 자동으로 설치할 GKE용 GPU 드라이버 버전을 선택할 수 있습니다. 매니페스트에 다음 필드를 추가합니다.

spec:
  nodeSelector:
    cloud.google.com/gke-gpu-driver-version: "DRIVER_VERSION"

DRIVER_VERSION을 다음 값 중 하나로 바꿉니다.

  • default - 노드 GKE 버전의 기본 정식 드라이버입니다. 매니페스트에서 nodeSelector를 생략하는 경우 기본 옵션입니다.
  • latest - 노드 GKE 버전에 사용 가능한 최신 드라이버 버전입니다.

Cloud TPU 구성

GKE 버전 1.28부터는 Cloud TPU에서 노드 자동 프로비저닝을 사용할 수 있습니다. 하지만 v5p는 노드 자동 프로비저닝 및 클러스터 자동 확장이 지원되지 않습니다. 클러스터 수준에서 TPU 한도를 정의하고 TPU 노드 풀을 만듭니다. TPU에서 노드 자동 프로비저닝이 작동하는 방식에 대한 자세한 내용은 지원되는 머신러닝 가속기를 참조하세요.

gcloud CLI를 사용하여 클러스터를 만들고 TPU 리소스를 사용하도록 포드를 구성합니다. 여러 유형의 TPU를 구성하려면 구성 파일을 사용해야 합니다.

gcloud

  1. 클러스터를 만들고 TPU 한도를 정의합니다.

    gcloud container clusters create CLUSTER_NAME \
        --enable-autoprovisioning \
        [--min-cpu  MINIMUM_CPU ] \
        --max-cpu MAXIMUM_CPU \
        [--min-memory MINIMUM_MEMORY ] \
        --max-memory MAXIMUM_MEMORY \
        [--min-accelerator=type=TPU_TYPE,count= MINIMUM_ACCELERATOR ] \
        --max-accelerator=type=TPU_TYPE,count= MAXIMUM_ACCELERATOR
    

    다음을 바꿉니다.

    • CLUSTER_NAME: 클러스터의 이름입니다.
    • MINIMUM_CPU: 클러스터의 최소 vCPU 수입니다.
    • MAXIMUM_CPU: 클러스터의 최대 vCPU 수입니다.
    • MINIMUM_MEMORY: 클러스터의 최소 메모리 용량(GB)입니다.
    • MAXIMUM_MEMORY: 클러스터의 최대 메모리 용량(GB)입니다.
    • TPU_TYPE: 선택한 TPU 유형입니다. tpu-v4-podslice를 사용하여 TPU v4를 선택합니다. ct5lp-로 시작하는 머신 유형에서 TPU v5e를 선택하려면 tpu-v5-lite-podslice를 사용합니다. ct5l-로 시작하는 머신 유형에서 TPU v5e를 선택하려면 tpu-v5-lite-device를 사용합니다.
    • MINIMUM_ACCELERATOR: 클러스터의 최소 TPU 칩 수입니다.
      • MINIMUM_ACCELERATORcount 슬라이스 슬라이스의 TPU 칩 수보다 적더라도 멀티 호스트 TPU 슬라이스의 축소를 차단할 수 있습니다.
    • MAXIMUM_ACCELERATOR: 클러스터의 최대 TPU 칩 수입니다.
      • 포드 구성에서 멀티 호스트 TPU 슬라이스를 요청하면 GKE는 이러한 슬라이스를 원자적으로 만듭니다. 개수 값을 지정된 토폴로지의 모든 TPU 칩을 프로비저닝할 수 있도록 충분히 높게 설정합니다. 각 TPU 슬라이스의 칩 수는 토폴로지의 곱과 같습니다. 예를 들어 멀티 호스트 TPU 슬라이스의 토폴로지가 2x2x2이면 TPU 칩 수가 8와 같으므로 MAXIMUM_ACCELERATOR는 8보다 커야 합니다.

    다음 예시에서는 dev-cluster 클러스터의 ct5lp-hightpu-1t, ct5lp-hightpu-4t, ct5lp-hightpu-8t 머신 유형에 대한 TPU 한도를 설정합니다. 예를 들어 각각 TPU 칩 4개, vCPU 112개, 메모리 192GiB를 사용하는 ct5lp-hightpu-4t 머신을 최대 10개까지 프로비저닝할 수 있습니다.

    gcloud container clusters create dev-cluster-inference \
          --enable-autoprovisioning \
          --min-cpu 0 \
          --max-cpu 1120 \
          --min-memory 0 \
          --max-memory 1920 \
          --min-accelerator=type=tpu-v5-lite-podslice,count=0 \
          --max-accelerator=type=tpu-v5-lite-podslice,count=40
    
  2. 포드가 TPU 리소스를 요청하는 배포 사양을 만듭니다. 예를 들어 다음 매니페스트는 GKE가 4개의 ct5lp-hightpu-4t 노드를 프로비저닝하도록 합니다.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: tpu-workload
      labels:
        app: tpu-workload
    spec:
      replicas: 4
      selector:
        matchLabels:
          app: nginx-tpu
      template:
        metadata:
          labels:
            app: nginx-tpu
        spec:
          nodeSelector:
            cloud.google.com/gke-tpu-accelerator: tpu-v5-lite-podslice
            cloud.google.com/gke-tpu-topology:  2x2
            cloud.google.com/reservation-name: my-reservation
          containers:
          - name: nginx
            image: nginx:1.14.2
            resources:
              requests:
                google.com/tpu: 4
              limits:
                google.com/tpu: 4
            ports:
            - containerPort: 80
    

    nodeSelector 필드에서 TPU 유형, TPU 토폴로지, 가속기 수를 정의합니다. 각 항목의 의미는 다음과 같습니다.

    • cloud.google.com/gke-tpu-accelerator: TPU 유형 정의. 예를 들면 tpu-v4-podslice입니다.
    • cloud.google.com/gke-tpu-topology: TPU 토폴로지 정의(예: 2x2x1 또는 4x4x8)

    워크로드에 기존 예약을 사용하려면 nodeSelector 필드에 추가 라벨을 지정합니다. * cloud.google.com/reservation-name: GKE가 노드를 자동 프로비저닝하는 데 사용하는 예약의 이름을 정의합니다.

    limits: google.com/tpu에서 노드당 칩 수를 정의합니다.

파일

구성 파일을 사용하여 여러 유형의 TPU에 한도를 할당할 수 있습니다. 다음 YAML 구성은 두 가지 TPU 유형을 구성합니다.

  resourceLimits:
    - resourceType: 'cpu'
      maximum: 10000
    - resourceType: 'memory'
      maximum: 10000
    - resourceType: 'tpu-v4-podslice'
      maximum: 32
    - resourceType: 'tpu-v5-lite'
      maximum: 64

자동 프로비저닝 구성 파일을 사용하려면 다음 안내를 따르세요.

  1. 위의 구성을 gcloud CLI가 액세스할 수 있는 위치의 파일로 복사합니다. resourceTypemaximum의 값을 수정합니다. resourceType에 필요한 만큼 값을 추가합니다. 파일을 저장합니다.

  2. 다음 명령어를 실행하여 클러스터에 구성을 적용합니다.

gcloud container clusters update CLUSTER_NAME \
    --enable-autoprovisioning \
    --autoprovisioning-config-file FILE_NAME

다음을 바꿉니다.

  • CLUSTER_NAME: 클러스터의 이름입니다.
  • FILE_NAME: 구성 파일의 이름입니다.

자세한 내용은 gcloud container clusters update 문서를 참조하세요.

노드 자동 프로비저닝 위치

노드 자동 프로비저닝이 새 노드 풀을 만들 수 있는 영역을 설정합니다. 리전 위치는 지원되지 않습니다. 영역은 클러스터와 동일한 리전에 속해야 하지만 클러스터 수준에서 정의된 노드 위치로 제한되지 않습니다. 노드 자동 프로비저닝 위치를 변경해도 기존 노드 풀에는 영향을 주지 않습니다.

노드 자동 프로비저닝이 새 노드 풀을 만들 수 있는 위치를 설정하려면 gcloud CLI 또는 구성 파일을 사용합니다.

gcloud

다음 명령어를 실행합니다.

gcloud container clusters update CLUSTER_NAME \
  --enable-autoprovisioning --autoprovisioning-locations=ZONE

다음을 바꿉니다.

  • CLUSTER_NAME: 클러스터의 이름입니다.
  • ZONE: 노드 자동 프로비저닝이 새 노드 풀을 만들 수 있는 영역입니다. 여러 영역을 지정하려면 영역을 쉼표로 구분합니다(예: ZONE1, ZONE2,...).

파일

노드 자동 프로비저닝이 새 노드 풀을 만들 수 있는 위치를 설정하려면 구성 파일을 사용하면 됩니다.

새 노드 풀 위치를 설정하는 다음 YAML 구성을 추가합니다.

    autoprovisioningLocations:
      - ZONE

ZONE을 노드 자동 프로비저닝이 새 노드 풀을 만들 수 있는 영역으로 바꿉니다. 여러 영역을 지정하려면 목록에 영역을 더 추가합니다. 파일을 저장합니다.

자동 프로비저닝 구성 파일을 사용하려면 다음 안내를 따르세요.

  1. gcloud CLI가 액세스할 수 있는 위치에 구성 파일을 만듭니다.

  2. 클러스터에 구성을 적용합니다.

    gcloud container clusters update CLUSTER_NAME \
        --enable-autoprovisioning \
        --autoprovisioning-config-file FILE_NAME
    

    다음을 바꿉니다.

    • CLUSTER_NAME: 클러스터의 이름입니다.
    • FILE_NAME: 구성 파일의 경로입니다.

압축 배치로 물리적으로 더 가까운 노드

GKE 버전 1.25부터 노드 자동 프로비저닝은 압축 배치 정책을 지원합니다. 압축 배치 정책을 사용하면 영역 내에서 서로 가까운 곳에 노드 풀을 만들도록 GKE에 지시할 수 있습니다.

압축 배치 정책을 정의하려면 다음 키를 사용하여 포드 사양에 nodeSelector를 추가합니다.

  • cloud.google.com/gke-placement-group는 동일한 압축 배치 그룹에서 함께 실행해야 하는 포드 그룹에 할당하는 식별자입니다.

  • cloud.google.com/machine-family는 머신 계열 이름입니다. 자세한 내용은 압축 배치를 지원하는 머신 계열을 참조하세요.

다음 예시에서는 배치 그룹 식별자가 placement-group-1이고 머신 계열이 c2인 압축 배치 정책을 설정합니다.

apiVersion: v1
kind: Pod
metadata:
  ...
spec:
  ...
  nodeSelector:
    cloud.google.com/gke-placement-group: placement-group-1
    cloud.google.com/machine-family: c2

자세한 내용은 GKE 노드를 위한 압축 배치 정의 방법을 참조하세요.

노드 자동 프로비저닝 사용 중지

클러스터의 노드 자동 프로비저닝을 사용 중지하면 노드 풀이 더 이상 자동으로 프로비저닝되지 않습니다.

gcloud

클러스터의 노드 자동 프로비저닝을 사용 중지하려면 다음 명령어를 실행합니다.

gcloud container clusters update CLUSTER_NAME \
  --no-enable-autoprovisioning

CLUSTER_NAME을 클러스터 이름으로 바꿉니다.

파일

Google Cloud 콘솔을 사용하여 노드 자동 프로비저닝을 사용 중지하려면 다음 단계를 따르세요.

  1. Google Cloud Console에서 Google Kubernetes Engine 페이지로 이동합니다.

    Google Kubernetes Engine으로 이동

  2. 클러스터 이름을 클릭합니다.

  3. 노드 자동 프로비저닝자동화 섹션에서 수정을 클릭합니다.

  4. 노드 자동 프로비저닝 사용 설정 체크박스를 선택 취소합니다.

  5. 변경사항 저장을 클릭합니다.

노드 풀을 자동 프로비저닝으로 표시

클러스터의 노드 자동 프로비저닝을 사용 설정한 후 어느 노드 풀을 자동 프로비저닝할지 지정할 수 있습니다. 자동 프로비저닝된 노드 풀은 워크로드에서 사용되지 않는 경우 자동으로 삭제됩니다.

노드 풀을 자동 프로비저닝으로 표시하려면 다음 명령어를 실행합니다.

gcloud container node-pools update NODE_POOL_NAME \
  --enable-autoprovisioning

NODE_POOL_NAME을 노드 풀의 이름으로 바꿉니다.

노드 풀을 자동 프로비저닝되지 않은 것으로 표시

노드 풀을 자동 프로비저닝되지 않은 것으로 표시하려면 다음 명령어를 실행합니다.

gcloud container node-pools update NODE_POOL_NAME \
  --no-enable-autoprovisioning

NODE_POOL_NAME을 노드 풀의 이름으로 바꿉니다.

커스텀 머신 계열 사용

GKE 1.19.7-gke.800부터 워크로드에 머신 계열을 선택할 수 있습니다. T2D 머신 계열은 GKE 버전 1.22 이상에서 지원됩니다.

워크로드의 머신 제품군을 선택하려면 다음 태스크 중 하나를 수행합니다.

  • cloud.google.com/machine-family 키, In 연산자, 원하는 머신 계열(예: n2)에 해당하는 값으로 노드 어피니티를 설정합니다.
  • cloud.google.com/machine-family 키와 원하는 머신 계열에 해당하는 값으로 nodeSelector를 추가합니다.

다음은 nodeAffinityn2의 머신 계열로 설정하는 예시입니다.

spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: cloud.google.com/machine-family
            operator: In
            values:
            - n2

변경사항을 적용한 후 노드 자동 프로비저닝은 지정된 머신 계열 내에서 머신 유형으로 최적의 노드 풀을 선택합니다. 일치 표현식에 여러 값이 사용된 경우 값 하나가 임의로 선택됩니다.

최소 CPU 플랫폼

노드 자동 프로비저닝은 지정된 최소 CPU 플랫폼으로 노드 풀을 만들 수 있습니다. 워크로드 수준(권장)이나 클러스터 수준에서 최소 CPU 플랫폼을 지정할 수 있습니다.

다음 단계