클러스터 자동 확장 정보


이 페이지에서는 Google Kubernetes Engine(GKE)이 워크로드 수요에 따라 Standard 클러스터의 노드 풀 크기를 자동으로 조절하는 방법을 설명합니다. 수요가 많은 경우 클러스터 자동 확장 처리에서 노드를 노드 풀에 추가합니다. 클러스터 자동 확장 처리를 구성하는 방법은 클러스터 자동 확장을 참조하세요.

Autopilot 클러스터를 사용하면 노드 풀이 노드 자동 프로비저닝을 통해 자동으로 프로비저닝되고 워크로드 요구사항이 충족되도록 자동으로 확장되므로 노드 프로비저닝이나 노드 풀 관리에 신경을 쓰지 않아도 됩니다.

클러스터 자동 확장 처리를 사용하는 이유

GKE의 클러스터 자동 확장 처리는 워크로드의 요구에 따라 지정된 노드 풀의 노드 수를 자동으로 조절합니다. 수요가 적은 경우 클러스터 자동 확장 처리에서 지정된 최소 크기로 축소 조정합니다. 이를 통해 필요한 경우 워크로드 가용성을 높이고 비용을 통제할 수 있습니다. 수동으로 노드를 추가, 삭제하거나 노드 풀을 과도하게 프로비저닝할 필요가 없습니다. 대신 노드 풀의 최소 및 최대 크기를 지정하면 나머지는 자동으로 지정됩니다.

클러스터를 자동 확장하는 동안 리소스가 삭제되거나 이동되면 워크로드가 일시적으로 중단될 수 있습니다. 예를 들어 워크로드가 단일 복제본이 포함된 컨트롤러로 구성되었으면, 현재 노드가 삭제된 경우 해당 복제본의 포드를 다른 노드에서 다시 예약할 수 있습니다. 클러스터 자동 확장 처리를 사용하기 전에 워크로드가 잠재적인 중단을 견딜 수 있도록 설계하거나 중요한 포드가 중단되지 않았는지 확인합니다.

새 노드의 워크로드가 더 빠르게 시작하도록 이미지를 로컬로 동시에 캐시하는 동안 적격한 컨테이너 이미지에서 필요한 이미지 데이터를 원격으로 스트리밍하는 이미지 스트리밍을 사용해서 클러스터 자동 확장 처리 성능을 향상시킬 수 있습니다.

클러스터 자동 확장 처리 작동 방식

클러스터 자동 확장 처리는 노드당 풀 기준으로 작동합니다. 클러스터 자동 확장 처리를 사용하여 노드 풀을 구성할 때 노드 풀의 최소 및 최대 크기를 지정합니다.

클러스터 자동 확장 처리는 노드 풀의 기본 Compute Engine 관리형 인스턴스 그룹(MIG)에서 가상 머신(VM) 인스턴스를 추가하거나 삭제하여 자동으로 노드 풀의 크기를 늘리거나 줄입니다. 클러스터 자동 확장 처리에서는 (실제 리소스 사용률이 아닌) 노드 풀의 노드에서 실행되는 포드의 리소스 요청에 따라 이러한 확장 결정을 내립니다. 주기적으로 포드 및 노드의 상태를 확인하고 작업을 수행합니다.

  • 노드 풀에 노드가 충분하지 않아 포드를 예약할 수 없는 경우 클러스터 자동 확장 처리가 노드 풀의 최대 크기까지 노드를 추가합니다.
  • 노드의 사용률이 적고 노드 풀에 있는 노드 수가 적은 상태에서도 모든 포드를 예약할 수 있는 경우 클러스터 자동 확장 처리는 노드를 제거하고 노드 풀의 최소 크기까지 축소합니다. 클러스터에 있는 다른 노드로 이동할 수 없는 노드에 포드가 있으면 클러스터 자동 확장 처리가 해당 노드를 축소하려고 시도하지 않습니다. 포드를 다른 노드로 이동할 수 있지만 시간 초과 기간(현재 10분) 후에 노드를 정상적으로 드레이닝할 수 없으면 노드가 강제로 종료됩니다. 유예 기간은 GKE 클러스터에 구성할 수 없습니다. 축소 작동 방식에 대한 자세한 내용은 클러스터 자동 확장 처리 문서를 참조하세요.

포드가 너무 적은 리소스를 요청한 경우(또는 부족할 수 있는 기본값을 변경하지 않은 경우), 그리고 노드에 리소스 부족이 발생한 경우, 클러스터 자동 확장 처리는 이러한 상황을 해결하지 않습니다. 모든 워크로드에 명시적인 리소스 요청을 수행하여 클러스터 자동 확장 처리가 가능한 한 정확하게 작동하도록 보장할 수 있습니다.

작동 조건

클러스터 자동 확장 처리는 노드 풀 크기를 조절할 때 다음 가정을 따릅니다.

  • 복제된 모든 포드를 다른 일부 노드에서 다시 시작할 수 있으며, 결과적으로 일시적인 중단이 발생할 수 있습니다. 서비스가 중단의 내결함성이 없다면 클러스터 자동 확장 처리를 사용하지 않는 것이 좋습니다.
  • 사용자 또는 관리자가 노드를 수동으로 관리하지 않습니다. 사용자가 수행하는 수동 노드 관리 작업을 재정의할 수 있습니다.
  • 단일 노드 풀의 모든 노드에 동일한 라벨 집합이 포함됩니다.
  • 클러스터 자동 확장 처리는 여러 풀에서 인스턴스 유형의 상대적 비용을 고려하고, 가능한 한 비용이 가장 적은 노드 풀을 확장하려고 시도합니다. 선점형 VM을 포함하는 노드 풀의 감소된 비용을 고려합니다.
  • 클러스터 자동 확장 처리는 포드를 예약하기 전에 init 컨테이너 요청을 고려합니다. init 컨테이너 요청은 노드에서 사용 가능한 할당되지 않은 리소스를 사용하여 포드가 예약되지 않도록 할 수 있습니다. 클러스터 자동 확장 처리는 Kubernetes가 사용하는 것과 동일한 요청 계산 규칙을 따릅니다. 자세한 내용은 init 컨테이너 사용을 참조하세요.
  • 최초 클러스터 또는 노드 풀 생성 이후 수동으로 추가된 라벨은 추적되지 않습니다. 클러스터 자동 확장 처리에 의해 생성된 노드에는 노드 풀 생성 시 --node-labels로 지정된 라벨이 할당됩니다.
  • GKE 버전 1.21 이하에서는 클러스터 자동 확장 처리가 노드 풀의 기존 노드 taint 정보를 사용하여 전체 노드 풀을 나타냅니다. GKE 버전 1.22부터 클러스터 자동 확장 처리는 클러스터의 기존 노드와 노드 풀에 있는 정보를 결합합니다. 클러스터 자동 확장 처리는 수동 노드와 노드 풀 변경사항을 감지하여 수직 확장합니다.

영역 간 균형 조정

노드 풀에 동일한 인스턴스 유형의 관리형 인스턴스 그룹이 여러 개 포함된 경우 수직 확장할 때 클러스터 자동 확장 처리는 이러한 관리형 인스턴스 그룹 크기의 균형을 조정합니다. 이는 노드 풀의 여러 영역에 있는 관리형 인스턴스 그룹 간에 고르지 않은 노드 분배를 차단하는 데 도움이 됩니다. GKE는 축소할 때 자동 확장 정책을 고려하지 않습니다.

위치 정책

GKE 버전 1.24.1-gke.800부터는 GKE 클러스터 자동 확장 처리의 위치 정책을 변경할 수 있습니다. 다음 값 중 하나로 location_policy 플래그를 지정하여 클러스터 자동 확장 처리 배포 정책을 제어할 수 있습니다.

  • BALANCED: 자동 확장 처리가 포드 요구사항과 각 영역의 리소스 가용성을 고려합니다. 자동 확장 처리는 특정 영역의 가용 용량 및 수직 확장을 트리거한 포드의 영역 어피니티를 포함한 여러 요소를 고려하므로 유사한 노드 그룹의 크기가 정확히 같지 않을 수도 있습니다.
  • ANY: 자동 확장 처리에서 사용되지 않은 예약의 사용률에 우선 순위를 지정하고 가용 리소스의 현재 제약조건을 고려합니다. 스팟 VM을 사용하거나 영역 간에 같지 않은 VM 예약을 사용하려는 경우에 이 정책을 사용하는 것이 좋습니다.

예약

GKE 버전 1.27부터 클러스터 자동 확장 처리는 확장 결정을 내릴 때 항상 예약을 고려합니다. 확장되지 않은 예약과 일치하는 노드 풀은 확장할 노드 풀을 선택할 때 우선순위가 가장 높은 노드 풀이 아닌 경우에도 우선순위가 지정됩니다. 또한 사용되지 않은 예약은 다중 영역 수직 확장의 균형을 맞출 때 항상 우선순위가 지정됩니다.

기본값

Spot VM 노드 풀의 경우 기본 클러스터 자동 확장 처리 배포 정책은 ANY입니다. 이 정책에서 Spot VM은 선점될 위험이 낮습니다.

비선점형 노드 풀의 경우 기본 클러스터 자동 확장 처리 배포 정책은 BALANCED입니다.

최소 및 최대 노드 풀 크기

새 노드 풀을 만들 때 클러스터에 있는 각 노드 풀의 최소 및 최대 크기를 지정할 수 있으며, 클러스터 자동 확장 처리는 이러한 확장 제약조건 내에서 크기 조절을 결정합니다. 최소 크기를 업데이트하려면 새 최솟값을 지정한 후 클러스터의 크기를 새 제약조건 내의 크기로 수동 조정합니다. 그러면 클러스터 자동 확장 처리가 새 제약조건을 기준으로 크기 조절 결정을 내립니다.

현재 노드 풀 크기 클러스터 자동 확장 처리 작업 확장 제약조건
지정한 최솟값보다 작음 클러스터 자동 확장 처리가 대기 중인 포드를 프로비저닝하도록 확장됩니다. 축소가 사용 중지되었습니다. 노드 풀이 지정된 값 미만으로 축소되지 않습니다.
지정한 최소 및 최대 크기 이내 클러스터 자동 확장 처리는 수요에 따라 확장 또는 축소됩니다. 노드 풀은 지정된 크기 한도 내에서 유지됩니다.
지정한 최댓값보다 큼 클러스터 자동 확장 처리는 안전하게 삭제할 수 있는 노드만 축소합니다. 확장이 사용 중지되었습니다. 노드 풀은 지정된 값을 초과하여 확장되지 않습니다.

Standard 클러스터에서 클러스터 자동 확장 처리는 클러스터를 0개 노드로 자동 축소하지 않습니다. 시스템 포드를 실행하려면 항상 클러스터에서 하나 이상의 노드를 사용할 수 있어야 합니다. 또한 노드를 수동 삭제하여 현재 노드 수가 0이면 클러스터 자동 확장 처리 및 노드 자동 프로비저닝이 0개 노드 클러스터에서 확장될 수 있습니다.

자동 확장 처리 결정에 대해 자세히 알아보려면 클러스터 자동 확장 처리 제한사항을 참조하세요.

자동 확장 제한

노드 풀을 확장할 때 사용할 클러스터 자동 확장 처리의 최소 및 최대 노드 수를 설정할 수 있습니다. --min-nodes--max-nodes 플래그를 사용하여 영역당 최소 및 최대 노드 수를 설정합니다.

GKE 버전 1.24부터는 새 클러스터에 --total-min-nodes--total-max-nodes 플래그를 사용할 수 있습니다. 이러한 플래그는 모든 영역의 노드 풀에 있는 총 노드 수의 최소 수와 최대 수를 설정합니다.

최소 및 최대 노드 예시

다음 명령어는 초기에 영역 3개 간에 노드 6개가 포함되고 영역당 최소 노드 수가 1개이고 영역당 최대 노드 수가 4개인 자동 확장 멀티 영역 클러스터를 만듭니다.

gcloud container clusters create example-cluster \
    --num-nodes=2 \
    --zone=us-central1-a \
    --node-locations=us-central1-a,us-central1-b,us-central1-f \
    --enable-autoscaling --min-nodes=1 --max-nodes=4

이 예시에서 클러스터의 총 크기는 3개 영역에 분산된 3~12개의 노드일 수 있습니다. 영역 중 하나가 실패할 경우 클러스터의 총 크기는 2~8개의 노드일 수 있습니다.

총 노드 예시

GKE 버전 1.24 이상에서 사용할 수 있는 다음 명령어는 초기에 영역 3개 간에 노드 6개가 포함되고 모든 영역에서 노드 풀의 노드 최소 수가 3개이고 최대 노드 수가 12개인 자동 확장 멀티 영역 클러스터를 만듭니다.

gcloud container clusters create example-cluster \
    --num-nodes=2 \
    --zone=us-central1-a \
    --node-locations=us-central1-a,us-central1-b,us-central1-f \
    --enable-autoscaling --total-min-nodes=3 --total-max-nodes=12

이 예시에서는 영역 간 분산에 관계없이 클러스터의 총 크기가 노드 3~12개 사이일 수 있습니다.

프로필 자동 확장

노드를 언제 제거할지 결정하기 위해서는 사용률 기준 최적화와 리소스의 가용성 사이에서 절충이 필요합니다. 사용률이 낮은 노드를 삭제하면 클러스터 사용률이 향상되지만, 리소스가 실행되기 전에 다시 프로비저닝될 때까지 새 워크로드가 기다려야 할 수 있습니다.

이러한 결정을 내릴 때 사용할 자동 확장 프로필을 지정할 수 있습니다. 사용 가능한 프로필은 다음과 같습니다.

  • balanced: Standard 클러스터의 기본 프로필입니다. Autopilot 클러스터에는 balanced 프로필을 사용할 수 없습니다.
  • optimize-utilization: 클러스터에 예비 리소스를 유지하는 것보다 사용률 최적화에 우선순위를 둡니다. 이 프로필을 사용 설정하면 클러스터 자동 확장 처리가 클러스터를 더 공격적으로 축소합니다. GKE가 더 많은 노드를 삭제하고 더 빠르게 노드를 삭제할 수 있습니다. GKE가 이미 CPU, 메모리 또는 GPU 할당이 높은 노드에서 포드를 예약하는 것을 선호합니다. 그러나 동일한 배포, StatefulSet 또는 서비스에 속하는 포드가 노드 전체에 분산되는 등 다른 요인이 예약에 영향을 미칩니다.

optimize-utilization 자동 확장 프로필은 클러스터 자동 확장 처리가 활용률이 낮은 노드를 식별하고 삭제하는 데 도움이 됩니다. 이러한 최적화를 달성하기 위해 GKE는 포드 사양에서 스케줄러 이름을 gke.io/optimize-utilization-scheduler로 설정합니다. 커스텀 스케줄러를 지정하는 포드는 영향을 받지 않습니다.

다음 명령어는 기존 클러스터에서 optimize-utilization 자동 확장 프로필을 사용 설정합니다.

gcloud container clusters update CLUSTER_NAME \
    --autoscaling-profile optimize-utilization

포드 예약 및 중단 고려

축소 시에 클러스터 자동 확장 처리는 포드에 설정된 예약 및 축출 규칙을 고려합니다. 이러한 제한에 따라 자동 확장 처리로 노드가 삭제되지 않을 수 있습니다. 다음 조건의 포드가 포함된 경우에는 노드 삭제가 방해될 수 있습니다.

  • 포드의 어피니티 또는 안티어피니티 규칙에 따라 재예약이 방지됩니다.
  • 포드가 배포, StatefulSet, 작업 또는 ReplicaSet와 같은 컨트롤러로 관리되지 않습니다.
  • 포드에 로컬 스토리지가 포함되고 GKE 제어 영역 버전이 1.22 미만입니다. 제어 영역 버전 1.22 이상이 있는 GKE 클러스터에서 로컬 스토리지가 있는 포드는 더 이상 축소를 차단하지 않습니다.
  • 포드에 "cluster-autoscaler.kubernetes.io/safe-to-evict": "false" 주석이 있습니다.
  • 노드 삭제가 구성된 PodDisruptionBudget을 초과합니다.

클러스터 자동 확장 처리 및 장애 방지에 대한 자세한 내용은 클러스터 자동 확장 처리 FAQ에서 다음 항목을 참조하세요.

GKE에서 TPU 자동 확장

GKE는 Tensor Processing Unit(TPU)을 지원하여 머신러닝 워크로드를 가속화합니다. 단일 호스트 TPU 슬라이스 노드 풀멀티 호스트 TPU 슬라이스 노드 풀 모두 자동 확장과 자동 프로비저닝을 지원합니다.

GKE 클러스터에서 --enable-autoprovisioning 플래그를 사용하면 GKE는 대기 중인 워크로드의 요구사항을 충족하는 TPU 버전 및 토폴로지를 사용하여 단일 호스트 또는 멀티 호스트 TPU 슬라이스 노드 풀을 만들거나 삭제합니다.

--enable-autoscaling을 사용하는 경우 GKE는 다음과 같이 해당 유형을 기준으로 노드 풀을 확장합니다.

  • 단일 호스트 TPU 슬라이스 노드 풀: GKE는 기존 노드 풀에서 TPU 노드를 추가하거나 삭제합니다. 노드 풀은 0부터 --max-nodes--total-max-nodes 플래그에 따라 결정되는 노드 풀의 최대 크기 사이의 TPU 노드 수를 포함할 수 있습니다. 노드 풀이 확장되면 노드 풀의 모든 TPU 노드는 머신 유형 및 토폴로지가 동일합니다. 단일 호스트 TPU 슬라이스 노드 풀을 만드는 방법은 노드 풀 만들기를 참조하세요.

  • 멀티 호스트 TPU 슬라이스 노드 풀: GKE는 노드 풀을 0부터 TPU 토폴로지를 충족하는 데 필요한 노드 수로 원자적으로 수직 확장합니다. 예를 들어 머신 유형이 ct5lp-hightpu-4t이고 토폴로지가 16x16인 TPU 노드 풀에서 노드 풀은 64개의 노드를 포함합니다. GKE 자동 확장 처리는 이 노드 풀에 노드가 정확히 0개 또는 64개 포함되도록 합니다. 축소하면 GKE는 모든 예약된 포드를 제거하고 전체 노드 풀을 0으로 드레이닝합니다. 멀티 호스트 TPU 슬라이스 노드 풀을 만드는 방법은 노드 풀 만들기를 참조하세요.

추가 정보

클러스터 자동 확장 처리에 대한 자세한 내용은 오픈소스 Kubernetes 프로젝트의 자동 확장 처리 FAQ를 참조하세요.

제한사항

클러스터 자동 확장 처리에는 다음과 같은 제한사항이 있습니다.

알려진 문제

  • GKE 제어 영역 버전 1.22 이하에서는 GKE 클러스터 자동 확장 처리가 빈(노드 0개) 클러스터에서 모든 노드 풀 수직 확장을 중지합니다. GKE 버전 1.22 이상에서는 이 동작이 발생하지 않습니다.

다음 단계