노드 풀 자동 생성 정보

Google Kubernetes Engine (GKE)은 워크로드의 구성에 따라 클러스터에서 노드 풀을 자동으로 만들고 관리할 수 있습니다. 이 문서에서는 노드 풀 자동 생성의 작동 방식, 확장 매개변수 및 기본 동작을 설명하고 확장성을 개선하는 데 도움이 되는 권장사항을 제공합니다. 이 문서는 표준 모드 클러스터에서 수동 인프라 관리와 관련된 비용을 줄이려는 클러스터 관리자를 대상으로 합니다.

다음 개념에 익숙해야 합니다.

Autopilot 모드에서 GKE는 항상 워크로드를 기반으로 노드와 노드 풀을 만들고 관리합니다. Autopilot 클러스터 또는 Standard 클러스터의 Autopilot 워크로드에 대해 노드 풀 자동 생성을 수동으로 구성할 필요가 없습니다. 자세한 내용은 GKE Autopilot 개요를 참고하세요.

노드 풀 자동 생성이란 무엇인가요?

GKE에서 노드 풀은 노드의 논리적 그룹입니다. 노드 풀의 모든 노드는 해당 노드 풀의 다른 모든 노드와 동일한 구성을 갖습니다. 노드 풀 자동 생성은 GKE가 워크로드의 요구사항을 충족하는 새 노드 풀을 클러스터에 만들 수 있도록 하는 인프라 자동 확장 메커니즘입니다. GKE는 자동으로 생성된 이러한 노드 풀을 관리하여 노드 메타데이터 업데이트, 노드 풀의 노드 생성 및 삭제, 더 이상 필요하지 않은 경우 전체 노드 풀 삭제와 같은 작업을 실행합니다. 노드 풀 자동 생성은 개별 노드 풀의 노드를 자동으로 확장하는 GKE 클러스터 자동 확장 처리의 확장 프로그램입니다.

노드 풀 자동 생성은 GKE가 클러스터에서 비어 있는 노드 풀을 자동으로 축소하고 삭제할 수 있도록 설계되었습니다. 0보다 큰 최소 노드 수는 빈 노드 풀의 삭제를 방지하므로 자동 생성된 모든 노드 풀에 있어야 하는 최소 노드 수를 설정할 수 없습니다. 사용 사례에서 클러스터에서 항상 실행되는 최소 노드 수가 필요한 경우 자동 확장이 사용 설정된 노드 풀을 수동으로 만드세요.

작동 방식

노드 풀 자동 생성은 GKE 클러스터 자동 확장 처리기를 확장하여 GKE가 대기 중인 포드의 하드웨어 요구사항과 리소스 요청을 충족하는 새 노드 풀을 프로비저닝할 수 있도록 합니다. 다음과 같은 방법으로 하드웨어 요구사항을 정의할 수 있습니다.

  • ComputeClasses를 사용합니다. 그런 다음 노드 선택기를 사용하여 다양한 포드에서 선택합니다. 여러 워크로드에서 사용할 수 있는 공통 노드 구성을 중앙에서 정의할 수 있으므로 이 방법을 사용하는 것이 좋습니다.
  • 노드 선택기 또는 노드 어피니티를 사용하여 포드 사양에서 특정 GKE 노드 라벨을 요청합니다.

GKE는 다음과 같은 매개변수를 기반으로 새 노드 풀을 구성합니다.

  • DaemonSet으로 관리되는 포드를 포함하여 포드 및 컨테이너의 CPU, 메모리, 임시 스토리지 리소스 요청
  • 포드 사양 또는 ComputeClass의 GPUTPU 요청
  • 대기 중인 포드의 사양 또는 ComputeClass의 머신 유형이나 부팅 디스크 유형과 같은 하드웨어 요구사항
  • 일치하는 노드 선택기가 있는 보류 중인 포드의 사양에 있는 톨러레이션

GKE는 자동으로 생성된 노드 풀에 있는 각 노드의 리소스 용량이 대기 중인 포드의 리소스 요청보다 크거나 같도록 구성합니다. 포드가 예상대로 작동할 수 있도록 리소스 요청이 충분히 커야 합니다. 포드 요청이 너무 낮으면 GKE가 자동으로 생성된 노드에 포드를 예약한 후 포드가 예상대로 실행되지 않습니다.

노드 메타데이터 구성

또한 GKE는 다음 예와 같이 워크로드 요구사항에 따라 노드 메타데이터 (예: 라벨, 주석, 노드 테인트)를 구성합니다.

  • N2 머신 시리즈를 요청하면 GKE는 각 노드에 cloud.google.com/machine-family: n2 노드 라벨을 추가합니다.
  • 포드에서 ComputeClass를 선택하면 GKE는 cloud.google.com/compute-class 키가 해당 ComputeClass의 이름으로 설정된 노드 라벨을 추가합니다.
  • 포드에 동일한 노드 라벨에 대한 내결함성과 노드 선택기가 모두 있는 경우 GKE는 이러한 내결함성에 대한 노드 taint를 자동 생성된 노드에 추가합니다.

자동 생성된 노드 풀 삭제

노드 풀 자동 생성 기능을 사용하면 클러스터 자동 확장 처리가 대기 중인 수신 포드를 실행하기 위해 새 노드 풀과 노드를 만들 수 있습니다. 자동 생성된 노드 풀의 포드 수가 감소하면 클러스터 자동 확장 처리가 노드 풀을 점진적으로 축소합니다. 가능한 경우 GKE는 노드 풀에서 사용률이 낮은 노드를 드레이닝하고, 다른 노드에 포드를 통합하고, 빈 노드를 삭제합니다.

자동으로 생성된 노드 풀의 노드 수가 0이면 GKE가 해당 노드 풀을 삭제합니다. GKE는 수동으로 생성된 노드 풀과 같이 노드 풀 자동 생성에서 제외한 노드 풀을 삭제하지 않습니다. 클러스터 자동 확장 처리에서 노드 풀을 축소하는 방법에 대한 자세한 내용은 클러스터 자동 확장 처리 작동 방식을 참고하세요.

GKE 확장 환경설정

GKE가 인프라를 자동 확장할 때는 다음 환경설정이 적용됩니다.

  • 낭비되는 컴퓨팅 리소스 감소: GKE는 클러스터에서 자동으로 생성된 기존 노드 풀의 리소스 용량을 사용하여 새 노드 풀에 사용할 머신 유형을 결정합니다. 클러스터 크기가 증가하면 GKE는 새 노드 풀에 더 큰 머신 유형을 사용하여 노드 풀의 각 노드에서 더 많은 포드를 실행할 수 있도록 합니다.
  • 확장성 및 지연 시간 최적화: GKE는 항상 새 노드 풀을 만드는 대신 기존의 호환되는 노드 풀을 확장하는 것을 우선시합니다. 이 환경설정의 강도는 클러스터의 고유한 노드 풀 수가 증가함에 따라 증가합니다. 별개의 노드 풀 수가 최적의 지연 시간과 확장성을 위해 지원되는 한도에 가까워지면 GKE는 새 노드 풀 생성의 우선순위를 낮춥니다.

이러한 우선순위는 다음 예시 시나리오와 같이 클러스터가 대규모로 효율적인 컴퓨팅 리소스 사용량을 갖도록 하는 데 도움이 됩니다.

  • 노드 풀 수가 적고 리소스 사용량이 적은 클러스터에서 GKE는 새 노드 풀을 더 자주 만들고 이러한 노드 풀에 더 작은 머신 유형을 사용합니다.
  • 노드 풀이 많은 클러스터에서는 리소스 사용량이 높습니다. GKE는 새 노드 풀을 더 적은 빈도로 만들고 이러한 노드 풀에 더 큰 머신 유형을 사용하므로 포드 예약이 계속되는 동시에 클러스터 확장성 및 지연 시간 제한으로의 진행 속도가 느려집니다.

priorities.machineFamily 필드priorities.minCores 필드 또는 priorities.minMemoryGb 필드가 있는 ComputeClass를 사용하여 GKE가 자동 생성된 노드 풀에 사용하는 인스턴스의 최소 크기를 수동으로 제어할 수 있습니다.

노드 풀 자동 생성 사용 설정 방법

클러스터를 구성하는 방식에 따라 GKE는 특정 ComputeClass 또는 호환되는 구성을 사용하는 모든 워크로드의 노드 풀을 자동으로 만들 수 있습니다.

사용 설정 방법
워크로드 수준 (권장)

GKE 버전 1.33.3-gke.1136000 이상에서는 ComputeClasses를 사용하여 클러스터 수준 노드 자동 프로비저닝을 사용하지 않고 노드 풀 자동 생성을 사용 설정합니다. GKE는 자동 생성이 사용 설정된 특정 ComputeClass를 선택하는 워크로드에 대해서만 새 노드 풀을 만듭니다. 클러스터의 기존 워크로드는 영향을 받지 않습니다.

1.33.3-gke.1136000 이전 버전의 GKE에서도 ComputeClass는 워크로드의 인프라를 요청하고 구성하는 데 권장되는 방법입니다. ComputeClasses는 고유한 기능을 제공하며 클러스터에서 확장성을 최적화하는 유연한 방법을 제공합니다. 자세한 내용은 커스텀 ComputeClass 정보를 참고하세요.

클러스터 수준

전체 클러스터에 대해 노드 자동 프로비저닝을 사용 설정합니다. 클러스터에서 CPU 및 메모리와 같은 리소스의 한도를 설정해야 합니다. 이러한 한도는 전체 클러스터에 적용됩니다. 1.33.3-gke.1136000 이전 버전의 GKE에서 노드 풀 자동 생성을 사용 설정하려면 클러스터 수준 구성이 필요합니다.

GKE는 포드 사양의 ComputeClass 또는 선택기를 사용하여 클러스터의 대기 중인 워크로드에 새 노드 풀을 만들 수 있습니다.

이러한 구성 방법은 상호 배타적이지 않습니다. ComputeClasses를 사용하여 노드 자동 프로비저닝을 사용하는 클러스터에서 노드 풀을 자동으로 만들 수 있습니다. 이 두 가지 방법을 모두 사용하여 클러스터에서 노드 풀 자동 생성을 사용 설정하는 경우 GKE는 다음 우선순위에 따라 노드 풀에 사용할 구성 설정 값을 찾습니다.

  1. ComputeClass 또는 포드 사양: ComputeClass 또는 포드 사양에 설정 (예: 머신 유형)을 지정하면 GKE에서 해당 설정을 사용합니다.
  2. 클러스터 수준 노드 자동 프로비저닝 기본값: ComputeClass 또는 포드 사양에 설정이 지정되지 않은 경우 GKE는 클러스터에서 노드 자동 프로비저닝의 기본값을 설정했는지 확인합니다. 클러스터 수준 기본값이 있으면 GKE에서 해당 값을 사용합니다.
  3. 클러스터 수준 기본값: ComputeClasses, 포드 사양 또는 클러스터 수준 노드 자동 프로비저닝의 기본값으로 설정이 지정되지 않은 경우 GKE는 Google Cloud에서 클러스터에 설정한 기본값을 사용합니다.

예를 들어 GKE가 자동으로 생성된 노드 풀에 사용할 머신 유형을 찾으려고 시도하는 시나리오를 생각해 보세요. 위의 우선순위는 다음과 같이 적용됩니다.

  1. GKE는 포드 사양 또는 포드의 ComputeClass가 머신 유형을 지정하는지 확인합니다.
  2. 포드 사양 또는 ComputeClass에서 머신 유형을 지정하지 않으면 GKE는 클러스터에서 노드 자동 프로비저닝의 기본 머신 유형을 설정했는지 확인합니다.
  3. 노드 자동 프로비저닝의 기본 머신 유형을 설정하지 않은 경우 GKE는 클러스터의 기본 머신 유형을 사용합니다.

대부분의 상황에서는 ComputeClass 사용 설정 방법만 사용하는 것이 좋습니다. 다음 섹션에서는 제한사항과 고려사항을 비롯하여 이러한 각 구성 방법에 대해 자세히 설명합니다.

ComputeClasses를 사용한 워크로드 수준 지원

ComputeClass 사양에서 다음 필드 중 하나를 사용하여 클러스터의 모든 ComputeClass에 대해 노드 풀 자동 생성을 사용 설정할 수 있습니다.

  • nodePoolAutoCreation: 필요에 따라 GKE가 노드 풀을 자동으로 만들도록 합니다. 노드 풀과 상호작용할 수는 있습니다. GKE는 사용자가 구성한 설정 또는 제약 조건만 구현합니다.
  • autopilot: 이 ComputeClass를 선택하는 워크로드를 Autopilot 모드에서 실행합니다. Autopilot 클러스터와 마찬가지로 GKE는 노드를 완전히 관리하고 다양한 Autopilot 제약 조건과 설정을 구현합니다. autopilot 필드를 사용하는 경우 이 문서를 건너뛸 수 있습니다. 자세한 내용은 Standard의 Autopilot 모드 워크로드 정보를 참고하세요.

다음 요구사항을 충족하는 클러스터에서는 클러스터 수준에서 노드 자동 프로비저닝을 사용 설정하지 않고도 ComputeClass에서 이러한 필드를 사용할 수 있습니다.

  • GKE 버전 1.33.3-gke.1136000 이상을 사용합니다.
  • 빠른 출시 채널에 등록되어 있습니다.

클러스터에 노드 자동 프로비저닝을 사용 설정하지 않고 ComputeClass에서 노드 풀 자동 생성을 구성하면 GKE는 ComputeClass를 사용하는 워크로드에 대해서만 새 노드 풀을 만듭니다. 다른 워크로드는 영향을 받지 않습니다.

다음 ComputeClass 매니페스트는 ComputeClass를 사용하는 모든 포드에 대해 노드 풀 자동 생성을 사용 설정합니다.

apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
  name: example-computeclass
spec:
  priorities:
  - machineFamily: n4
  - machineFamily: c4
  whenUnsatisfiable: ScaleUpAnyway
  nodePoolAutoCreation:
    enabled: true

노드 자동 프로비저닝을 사용한 클러스터 수준 사용 설정

전체 클러스터에 대해 노드 풀 자동 생성을 사용 설정하려면 Google Kubernetes Engine API를 사용하여 클러스터에 대해 노드 자동 프로비저닝 기능을 사용 설정합니다. 노드 자동 프로비저닝을 사용하면 GKE가 포드 사양 또는 ComputeClass 구성에 따라 클러스터의 모든 워크로드에 필요한 새 노드 풀을 만들 수 있습니다. GKE는 클러스터의 기존 노드 풀을 관리하지 않지만 클러스터에 노드 자동 프로비저닝을 사용 설정한 후 개별 노드 풀을 자동 프로비저닝으로 표시할 수 있습니다.

다음과 같은 상황에서 노드 자동 프로비저닝을 사용 설정합니다.

  • GKE가 1.33.3-gke.1136000 이전 버전의 GKE를 실행하는 클러스터에서 노드 풀을 자동으로 생성하도록 하려고 합니다.
  • 클러스터 전체 리소스 한도를 수동으로 설정하려는 경우 1.33.3-gke.1136000 이전 버전의 GKE에서는 ComputeClass를 사용하더라도 클러스터 전체 리소스 한도를 설정해야 합니다.

  • ComputeClasses에서 지원하지 않는 특정 기능이나 구성을 사용하고 싶습니다.

  • 전체 클러스터의 기본 노드 구성 값을 설정하려고 합니다.

노드 자동 프로비저닝을 사용 설정한 후 Google Cloud CLI 또는 YAML 구성 파일을 사용하여 다양한 노드 설정의 기본값을 구성할 수 있습니다.

노드 자동 프로비저닝을 사용하는 클러스터 수준 리소스 한도

전체 클러스터에 노드 자동 프로비저닝을 사용 설정하는 경우 클러스터에서 CPU, 메모리, GPU, TPU와 같은 리소스의 한도도 구성해야 합니다. 이러한 한도는 수동으로 생성된 노드 풀 및 ComputeClass를 포함하여 클러스터의 모든 리소스 용량의 합계에 적용됩니다. 작업이 이러한 리소스 한도 중 하나를 초과하는 경우 GKE는 새 노드나 노드 풀을 만들지 않습니다.

이러한 클러스터 수준 리소스 한도는 클러스터에서 노드 자동 프로비저닝을 사용 설정한 경우에만 필요합니다. 다음 요구사항을 충족하는 클러스터에서는 노드 자동 프로비저닝을 사용 설정하지 않고도 ComputeClasses에서 노드 풀 자동 생성을 사용할 수 있습니다.

  • GKE 버전 1.33.3-gke.1136000 이상을 사용합니다.
  • 빠른 출시 채널에 등록되어 있습니다.

클러스터가 이러한 요구사항을 충족하는 경우 ComputeClass만 사용하여 자동 생성된 노드 풀을 구성하는 것이 좋습니다.

자동 생성된 노드 풀의 기본 설정

워크로드 수준 또는 클러스터 수준에서 GKE가 자동 생성된 노드 풀에 적용하는 기본값을 지정할 수 있습니다.

  • 워크로드 수준 기본 설정: ComputeClass 사양의 spec.nodePoolConfig 필드와 spec.priorityDefaults 필드를 사용하여 특정 노드 설정의 기본값을 설정할 수 있습니다. 이러한 기본값은 GKE가 해당 ComputeClass에 대해 만드는 노드 풀에만 적용됩니다.
  • 클러스터 수준 기본 설정: 노드 자동 프로비저닝을 구성할 때 자동 생성된 노드 풀의 기본값을 설정할 수 있습니다. 기본값을 지정하려면 gcloud CLI 또는 YAML 구성 파일을 사용합니다.

기본값을 설정하는 이러한 방법은 상호 배타적이지 않습니다. ComputeClass의 특정 설정과 전체 클러스터에 기본값을 구성하면 GKE는 ComputeClass의 값을 사용합니다. ComputeClass에서 해당 설정의 값을 지정하지 않으면 GKE는 클러스터 수준 기본값을 대신 사용합니다.

구성 파일이 있는 클러스터 수준 기본 설정

노드 자동 프로비저닝을 사용 설정하면 YAML 구성 파일을 사용하여 자동 생성된 노드 풀의 클러스터 전체 기본 설정을 지정할 수 있습니다. 단일 구성 파일에서 여러 설정을 지정할 수 있습니다. 일부 고급 구성 (예: 자동 복구 설정)은 구성 파일을 사용해서만 지정할 수 있습니다.

  • 다음 예시 구성 파일은 새로 자동 생성된 노드 풀에 노드 자동 복구 및 자동 업그레이드를 사용 설정합니다.

    management:
      autoRepair: true
      autoUpgrade: true
    
  • 다음 예시 구성 파일은 노드 자동 프로비저닝의 클러스터 전체 리소스 제한을 설정하고 여러 기본 설정을 구성합니다.

    resourceLimits:
      - resourceType: 'cpu'
        minimum: 4
        maximum: 10
      - resourceType: 'memory'
        maximum: 64
      - resourceType: 'nvidia-tesla-t4'
        maximum: 4
    management:
      autoRepair: true
      autoUpgrade: true
    shieldedInstanceConfig:
      enableSecureBoot: true
      enableIntegrityMonitoring: true
    diskSizeGb: 100
    

    이 구성 파일은 다음 기본값을 설정합니다.

구성 파일을 클러스터에 적용하면 GKE는 클러스터에서 새로 자동 생성된 노드 풀에만 파일의 설정을 사용합니다. 파일에 지정한 새 설정 또는 수정된 설정은 GKE가 클러스터에서 만든 기존 노드 풀에는 적용되지 않습니다. 이전에 클러스터에 설정된 값을 업데이트하면 GKE는 모든 새 노드 풀에 새 값을 사용합니다. 예를 들어 이전에 기본 머신 시리즈를 N2로 설정한 경우 구성 파일에서 값을 N4로 업데이트하면 모든 새 노드 풀에서 N4 머신 유형을 사용합니다.

클러스터 수준 구성 파일을 사용하는 방법에 대한 자세한 내용은 노드 자동 프로비저닝 구성 파일로 설정 구성을 참고하세요.

노드 풀 자동 생성 사용 사례

다음 섹션에서는 노드 풀 자동 생성의 인기 있는 사용 사례와 지원되는 하드웨어를 설명합니다. 추가 사용 사례 및 지원되는 구성에 관한 자세한 내용은 특정 사용 사례에 관한 문서를 참고하세요.

머신 시리즈 또는 머신 유형 선택

다음 방법 중 하나로 GKE가 자동 생성된 노드 풀에 사용할 Compute Engine 머신 시리즈 또는 머신 유형을 선택할 수 있습니다.

  • ComputeClasses: machineFamily 또는 machineType 우선순위 규칙을 사용합니다.
  • 포드 사양: 머신 시리즈의 경우 cloud.google.com/machine-family 노드 라벨의 노드 선택기를 사용합니다. 머신 유형의 경우 cloud.google.com/machine-familynode.kubernetes.io/instance-type 노드 라벨을 모두 사용합니다. 자세한 내용은 머신 시리즈 또는 머신 유형 선택을 참고하세요.

머신을 명시적으로 선택하지 않으면 GKE는 E2 머신 시리즈 또는 워크로드에서 요청하는 하드웨어와 호환되는 머신 유형을 사용합니다. 예를 들어 GKE는 GPU에 GPU 머신 유형을 사용하고 TPU 리소스에는 특수 머신을 사용합니다.

머신 시리즈 또는 머신 유형을 요청할 때는 다른 노드 선택기와 포드 리소스 요청이 지정된 머신과 호환되는지 확인하세요. 예를 들어 GPU와 N2 머신 시리즈를 동시에 요청할 수는 없습니다.

지원되는 머신 시리즈

ComputeClass 또는 워크로드에서 지원되는 Compute Engine 머신 시리즈 또는 머신 유형을 명시적으로 요청할 수 있습니다. 노드 풀 자동 생성은 특정 GKE 버전에서만 다음 머신 시리즈를 지원합니다.

다른 머신 시리즈는 모든 GKE 버전에서 지원됩니다.

GPU 선택

다음 방법 중 하나로 자동 생성된 노드 풀에 GPU를 요청할 수 있습니다.

  • ComputeClasses:
    1. gpu 우선순위 규칙을 사용하여 GPU를 구성합니다.
    2. 포드에서 GPU 리소스를 요청합니다.
  • 포드 사양:
    1. 노드 자동 프로비저닝을 위한 클러스터 전체 GPU 한도를 구성합니다.
    2. 노드 선택기를 사용하여 GPU를 구성합니다.
    3. 포드에서 GPU 리소스를 요청합니다.

GKE는 GPU 수를 지원할 수 있을 만큼 큰 GPU 머신 유형을 선택합니다. 선택한 GPU 수는 노드의 CPU 및 메모리 용량에 영향을 미칩니다.

Cloud TPU 선택

다음과 같은 방법으로 자동 생성된 노드 풀에 Cloud TPU 리소스를 요청할 수 있습니다.

단일 호스트 TPU 슬라이스 노드 풀멀티 호스트 TPU 슬라이스 노드 풀 모두 자동 확장 및 노드 풀 자동 생성을 지원합니다. 노드 풀 자동 생성의 경우 GKE는 대기 중인 워크로드의 요구사항을 충족하는 TPU 버전 및 토폴로지를 사용하여 단일 호스트 또는 멀티 호스트 TPU 슬라이스 노드 풀을 만듭니다.

Cloud TPU의 GKE 버전 요구사항

노드 풀 자동 생성은 특정 GKE 버전에서만 다음 Cloud TPU를 지원합니다.

  • Cloud TPU v5p:
    • 1.28.7-gke.1020000 이상
    • 1.29.2-gke.1035000 이상
  • TPU Trillium: 1.31.1-gke.1146000 이상

다른 Cloud TPU 유형은 모든 GKE 버전에서 지원됩니다.

Cloud TPU 노드 풀 자동 확장

GKE는 다음과 같은 방법 중 하나로 클러스터 자동 스케일러를 사용하는 자동으로 생성된 또는 수동으로 생성된 Cloud TPU 노드 풀을 자동으로 확장합니다.

  • 단일 호스트 TPU 슬라이스 노드 풀: GKE는 기존 노드 풀에서 TPU 노드를 추가하거나 삭제합니다. 노드 풀은 0부터 --max-nodes--total-max-nodes 자동 확장 플래그에 따라 결정되는 노드 풀의 최대 크기 사이의 TPU 노드 수를 포함할 수 있습니다. 노드 풀의 모든 TPU 노드의 머신 유형과 토폴로지는 동일합니다. 단일 호스트 TPU 슬라이스 노드 풀을 만드는 방법에 대한 자세한 내용은 노드 풀 만들기를 참고하세요.
  • 멀티 호스트 TPU 슬라이스 노드 풀: GKE는 노드 풀을 0부터 TPU 토폴로지를 충족하는 데 필요한 노드 수로 원자적으로 수직 확장합니다. 예를 들어 ct5lp-hightpu-4t 머신 유형과 16x16 토폴로지가 있는 TPU 노드 풀의 경우 노드 풀에는 항상 64개의 노드 또는 0개의 노드가 있습니다. 노드 풀에 TPU 워크로드가 없으면 GKE가 노드 풀을 축소합니다. 노드 풀을 축소하기 위해 GKE는 예약된 모든 포드를 제거하고 노드 풀의 모든 노드를 삭제합니다. 멀티 호스트 TPU 슬라이스 노드 풀을 만드는 방법에 대한 자세한 내용은 노드 풀 만들기를 참고하세요.

Cloud TPU 노드 풀 구성

GKE는 포드 또는 ComputeClass의 구성을 사용하여 TPU 노드의 구성을 결정합니다. 다음 매니페스트는 포드 사양에서 TPU를 요청하는 배포 사양의 예시입니다. 클러스터 수준 노드 자동 프로비저닝 설정이 사용 설정된 경우 이 배포는 노드 풀 자동 생성을 트리거합니다. 이 예시 배포를 만들면 GKE는 2x2x2 토폴로지와 2개의 ct4p-hightpu-4t 머신이 있는 TPU v4 슬라이스가 포함된 노드 풀을 만듭니다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: tpu-workload
  labels:
    app: tpu-workload
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx-tpu
  template:
    metadata:
      labels:
        app: nginx-tpu
    spec:
      nodeSelector:
        cloud.google.com/gke-tpu-accelerator: tpu-v4-podslice
        cloud.google.com/gke-tpu-topology: 2x2x2
        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

이 매니페스트에서 다음 필드는 TPU 구성을 정의합니다.

  • cloud.google.com/gke-tpu-accelerator: TPU 버전 및 유형입니다. 예를 들어 다음 중 하나를 사용할 수 있습니다.
    • TPU v4(tpu-v4-podslice 사용)
    • TPU v5e 및 tpu-v5-lite-podslice
    • tpu-v5p-slice가 있는 TPU v5p
    • TPU Trillium (v6e) 및 tpu-v6e-slice
  • cloud.google.com/gke-tpu-topology: TPU 슬라이스 내의 TPU 칩의 수와 물리적 배열입니다. 자세한 내용은 토폴로지 선택을 참고하세요.
  • limits.google.com/tpu: TPU VM의 TPU 칩 수입니다. 대부분의 구성에는 올바른 값이 하나만 있습니다. 자세한 내용은 GKE의 TPU 작동 방식을 참고하세요.
  • cloud.google.com/reservation-name: TPU 리소스를 가져오는 데 사용할 용량 예약의 이름입니다. 생략하면 워크로드에서 예약을 사용하지 않습니다.

자동으로 생성된 노드 풀의 구성은 선택한 TPU 유형, TPU 토폴로지, TPU 칩 수에 따라 달라집니다. 노드 풀 유형, 크기, 구성을 예측하려면 다음 단계를 따르세요.

  1. 토폴로지 선택에서 지정된 TPU 유형(예: TPU Trillium 또는 TPU v5e)에 대해 Standard로 표를 필터링합니다.
  2. 다음과 같이 지정한 값을 사용하여 노드 풀 구성을 식별합니다.
    1. gke-tpu-topology: 토폴로지 값이 동일한 테이블의 행을 찾습니다.
    2. limits: 표에서 TPU 칩 수 값을 VM 수 값으로 나눕니다. 표에서 지정한 값과 결과 값이 동일한 행을 찾습니다.

예를 들어 2x4 토폴로지로 tpu-v6e-slice (TPU Trillium)를 요청한 시나리오를 생각해 보겠습니다. 이 시나리오에서는 토폴로지 선택의 표를 TPU Trillium으로 필터링합니다. 그런 다음 다음과 같이 지정된 구성에 해당하는 행을 식별합니다.

  • gke-tpu-topology: TPU Trillium에는 2x4 토폴로지에 다음과 같은 구성이 있습니다.
    • 하나의 ct6e-standard-8t 인스턴스에 8개의 TPU 칩이 있는 단일 호스트 TPU 슬라이스 노드 풀
    • 두 개의 ct6e-standard-4t 인스턴스에 걸쳐 8개의 TPU 칩이 분산된 멀티 호스트 TPU 슬라이스 노드 풀
  • limits: TPU Trillium에는 2x4 토폴로지에 여러 옵션이 있으므로 limits 필드에 지정하는 값은 원하는 노드 풀 유형에 따라 다음과 같이 달라집니다.
    • 단일 호스트 TPU 슬라이스 노드 풀: limits.google.com/tpu: 8를 지정하여 TPU 칩 8개와 VM 1개가 있는 노드 풀을 가져옵니다. 8개의 칩이 모두 해당 VM에 연결됩니다.
    • 멀티 호스트 TPU 슬라이스 노드 풀: limits.google.com/tpu: 4를 지정하여 TPU 칩 8개와 VM 2개가 있는 노드 풀을 가져옵니다. 각 VM에는 4개의 칩이 있습니다.

스팟 VM 선택

다음 방법 중 하나로 자동 생성된 노드 풀에 스팟 VM을 선택할 수 있습니다.

  • ComputeClasses: 우선순위 규칙에서 spot 필드를 사용합니다.
  • 포드 사양: NoSchedule 효과가 있는 cloud.google.com/gke-spot="true" 노드 라벨에 대한 톨러레이션(toleration)을 사용합니다. cloud.google.com/gke-spot=true 또는 cloud.google.com/gke-provisioning=spot 노드 라벨의 노드 선택기를 추가합니다. 또는 내결함성 및 노드 선택기에서 cloud.google.com/gke-preemptible 노드 라벨을 사용하여 선점형 VM을 선택할 수 있습니다. 하지만 대신 Spot VM을 사용하는 것이 좋습니다.

임시 스토리지 구성

GKE는 포드 임시 스토리지에 노드 부팅 디스크의 일부를 사용합니다. 다음 방법 중 하나를 사용하여 GKE가 자동 생성된 노드에 사용하는 부팅 디스크의 크기를 맞춤설정할 수 있습니다.

  • ComputeClasses: 우선순위 규칙에서 storage.bootDiskSizestorage.bootDiskType 필드를 사용합니다. ComputeClass마다 다른 부팅 디스크 설정을 구성할 수 있습니다.
  • 포드 사양: 클러스터 수준 구성 파일에서 diskSizeGbdiskType 필드를 사용합니다. 이 방법을 사용하면 개별 포드의 부팅 디스크 크기와 유형을 제어할 수 없습니다.

자세한 내용은 커스텀 부팅 디스크를 참고하세요. 부팅 디스크 설정을 명시적으로 수정하지 않으면 기본값은 용량이 100GiB인 pd-balanced 볼륨입니다.

GKE는 지정된 부팅 디스크가 포함된 노드의 할당 가능한 임시 스토리지가 보류 중인 포드의 임시 스토리지 요청보다 크거나 같은 경우에만 새 노드 풀을 만듭니다. 임시 스토리지 요청이 노드의 할당 가능한 임시 스토리지보다 크면 GKE가 새 노드 풀을 만들지 않고 포드가 대기 상태로 유지됩니다. GKE는 포드 임시 스토리지 요청에 따라 부팅 디스크 크기를 동적으로 조정하지 않습니다.

워크로드 분리

클러스터의 다른 포드와 별도의 노드에서 특정 포드가 항상 실행되도록 요청할 수 있습니다. GKE는 노드 taint를 사용하여 다른 워크로드가 이러한 노드에서 실행되지 않도록 합니다. 다음과 같은 방법으로 자동 생성된 노드 풀에서 워크로드 분리를 구성할 수 있습니다.

  • ComputeClasses: GKE가 특정 ComputeClass에 대해 만드는 노드는 해당 ComputeClass를 선택하는 포드만 실행할 수 있습니다. Pod 사양을 수정할 필요가 없습니다. 포드 간 어피니티 및 안티-어피니티를 사용하여 ComputeClass 내의 포드를 분리할 수 있습니다.
  • 포드 사양: 클러스터에 노드 자동 프로비저닝을 사용 설정하면 포드 사양의 필드를 사용하여 워크로드 분리를 구성할 수 있습니다. 노드 풀 자동 생성 중에 GKE는 다음 조건이 모두 충족되는 경우 라벨과 taint를 사용하여 노드 풀을 만들 수 있습니다.
    • 포드는 노드 선택기를 사용하여 맞춤 노드 라벨 키와 값을 요청합니다. 워크로드 분리에는 시스템 노드 라벨을 사용할 수 없습니다.
    • 포드에는 동일한 노드 라벨 키에 대한 내결함성이 있습니다.
    • 내결함성 효과는 NoSchedule, NoExecute 또는 지정되지 않습니다.

이러한 필드 구성 및 제한사항에 대한 자세한 내용은 GKE에서 워크로드 분리 구성을 참고하세요.

제한사항

  • 클러스터 자동 확장 처리기의 모든 제한사항은 노드 풀 자동 생성에도 적용됩니다.
  • 총 노드 풀이 200개를 초과하는 클러스터의 경우 자동 확장 중에 지연 시간이 증가할 수 있습니다. 워크로드 분리 또는 여러 ComputeClass 사용과 같이 새 노드 풀 생성을 트리거하는 구성은 이 숫자를 늘립니다. 클러스터 한도에 대한 자세한 내용은 '대규모 클러스터 계획'의 한도 및 권장사항을 참고하세요.
  • 노드 자동 프로비저닝을 사용 설정할 때 클러스터에 설정한 리소스 제한은 GKE가 ComputeClass에 대해 만드는 노드 풀에도 적용됩니다.
  • 다음 설정은 ComputeClasses에서 지원되지 않습니다.
    • 일시 급증 업그레이드 또는 블루/그린 업그레이드
    • 노드 무결성 및 보안 부팅
  • 1.33.3-gke.1136000 이전 버전의 GKE에서 ComputeClass의 노드 풀 자동 생성을 사용 설정하려면 클러스터 수준 노드 자동 프로비저닝도 사용 설정해야 합니다. 이 제한사항은 GKE 버전 1.33.3-gke.1136000 이상에 적용되지 않습니다.

지원되지 않는 구성

GKE는 다음 구성을 사용하는 새 노드 풀을 만들지 않습니다.

클러스터 자동 확장 처리는 이러한 구성을 사용하는 기존 노드 풀의 노드를 확장할 수 있습니다.

다음 단계