클러스터 자동 확장 처리

이 페이지에서는 표준 Google Kubernetes Engine(GKE) 클러스터의 노드 풀 크기를 워크로드 수요에 따라 자동으로 조절하는 방법을 설명합니다. 수요가 많은 경우 클러스터 자동 확장 처리에서 노드를 노드 풀에 추가합니다. 수요가 적은 경우 클러스터 자동 확장 처리에서 지정된 최소 크기로 축소 조정합니다. 이를 통해 필요한 경우 워크로드 가용성을 높이고 비용을 통제할 수 있습니다. 클러스터에서 클러스터 자동 확장 처리를 구성할 수도 있습니다.

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

개요

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

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

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

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

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

  • 노드 풀에 노드가 충분하지 않아 Pod를 예약할 수 없는 경우 클러스터 자동 확장 처리가 노드 풀의 최대 크기까지 노드를 추가합니다.
  • 노드의 사용률이 적고 노드 풀에 있는 노드 수가 적은 상태에서도 모든 Pod를 예약할 수 있는 경우 클러스터 자동 확장 처리는 노드를 제거하고 노드 풀의 최소 크기까지 축소합니다. 노드가 시간 초과(현재 10분) 후에 정상적으로 유출되지 않으면 노드가 강제로 종료됩니다. 유예 기간은 GKE 클러스터에 구성할 수 없습니다.

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

작동 조건

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

  • 복제된 모든 Pod를 다른 일부 노드에서 다시 시작할 수 있으며, 결과적으로 일시적인 중단이 발생할 수 있습니다. 서비스가 중단의 내결함성이 없다면 클러스터 자동 확장 처리를 사용하지 않는 것이 좋습니다.
  • 사용자 또는 관리자가 노드를 수동으로 관리하지 않습니다. 사용자가 수행하는 수동 노드 관리 작업을 재정의할 수 있습니다.
  • 단일 노드 풀의 모든 노드에 동일한 라벨 집합이 포함됩니다.
  • 클러스터 자동 확장 처리는 여러 풀에서 인스턴스 유형의 상대적 비용을 고려하고, 가능한 한 비용이 가장 적은 노드 풀을 확장하려고 시도합니다. Spot VM(미리보기)을 포함하는 노드 풀의 감소된 비용을 고려합니다.
  • 최초 클러스터 또는 노드 풀 생성 이후 수동으로 추가된 라벨은 추적되지 않습니다. 클러스터 자동 확장 처리에 의해 생성된 노드에는 노드 풀 생성 시 --node-labels로 지정된 라벨이 할당됩니다.

영역 간 균형 조정

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

클러스터 자동 확장 처리가 균형 조정을 수행하는 방법에 대한 자세한 내용은 Kubernetes 문서 자동 확장 FAQ를 참조하세요.

최소 및 최대 노드 풀 크기

클러스터의 각 노드 풀에 대해 최소 및 최대 크기를 지정할 수 있으며, 클러스터 자동 확장 처리는 이러한 경계 내에서 크기 조절을 결정합니다. 자동 확장을 사용 설정할 때 현재 노드 풀 크기가 지정된 최솟값보다 작거나 지정된 최댓값보다 크면, 자동 확장 처리는 노드 풀에 새 노드가 필요할 때까지 또는 노드 풀에서 노드를 안전하게 삭제할 수 있을 때까지 적용을 기다립니다.

자동 확장 제한

노드 풀을 확장할 때 사용할 클러스터 자동 확장 처리의 최소 및 최대 노드 수를 설정할 수 있습니다. 클러스터의 영역이 여러 영역에 있는 경우 최소 및 최대 노드 수가 각 영역에 적용됩니다.

예를 들어 다음 명령어는 처음에 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개의 노드일 수 있습니다.

지정할 수 있는 플래그의 전체 목록은 gcloud container clusters create 문서를 참조하세요.

프로필 자동 확장

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

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

  • balanced: 기본 프로필입니다.
  • optimize-utilization: 클러스터에 예비 리소스를 유지하는 것보다 사용률 최적화에 우선순위를 둡니다. 선택하면 클러스터 자동 확장 처리가 클러스터를 더 공격적으로 축소합니다. 더 많은 노드를 삭제하고 노드를 더 빨리 삭제할 수 있습니다. 이 프로필은 시작 지연 시간에 민감하지 않은 일괄 워크로드에 사용하도록 최적화되었습니다. 현재, 작업 중인 워크로드에는 이 프로필 사용을 권장하지 않습니다.

GKE 버전 1.18 이상에서 optimize-utilization 자동 확장 프로필을 지정할 때, GKE는 이미 활용률이 높은 노드에서 pod를 예약하여, 클러스터 자동 확장 처리가 활용률이 낮은 노드를 식별하고 삭제할 수 있게 해줍니다. 이러한 최적화를 달성하기 위해 GKE는 pod 사양에서 스케줄러 이름을 gke.io/optimize-utilization-scheduler로 설정합니다. 커스텀 스케줄러를 지정하는 pod는 영향을 받지 않습니다.

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

gcloud container clusters update example-cluster \
--autoscaling-profile optimize-utilization

Pod 예약 및 중단 고려

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

  • 포드의 어피니티 또는 안티어피니티 규칙에 따라 재예약이 방지됩니다.
  • 포드에 로컬 저장소가 포함됩니다.
  • 포드가 배포, StatefulSet, 작업 또는 ReplicaSet와 같은 컨트롤러로 관리되지 않습니다.

애플리케이션의 PodDisruptionBudget도 자동 확장을 방지할 수 있습니다. 노드를 삭제하여 예산이 초과될 수 있으면, 클러스터가 축소되지 않습니다.

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

추가 정보

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

제한사항

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

다음 단계