클러스터 자동 확장


이 페이지에서는 표준 Google Kubernetes Engine(GKE) 클러스터를 자동 확장하는 방법을 설명합니다. 클러스터 자동 확장 처리의 작동 방식을 알아보려면 클러스터 자동 확장 처리를 참조하세요.

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

클러스터 자동 확장 처리 사용

다음 섹션에서는 클러스터 자동 확장 처리를 사용하는 방법을 설명합니다.

자동 확장을 사용하는 클러스터 만들기

Google Cloud CLI 또는 Google Cloud 콘솔을 사용하여 자동 확장이 사용 설정된 클러스터를 만들 수 있습니다.

gcloud

자동 확장이 사용 설정된 클러스터를 만들려면 --enable-autoscaling 플래그를 사용하고 --min-nodes--max-nodes를 지정합니다.

gcloud container clusters create CLUSTER_NAME \
    --enable-autoscaling \
    --num-nodes NUM_NODES \
    --min-nodes MIN_NODES \
    --max-nodes MAX_NODES \
    --region=COMPUTE_REGION

다음을 바꿉니다.

  • CLUSTER_NAME: 만들 클러스터의 이름입니다.
  • NUM_NODES: 각 위치에서 만들 노드 수입니다.
  • MIN_NODES: 영역당 지정된 노드 풀에서 자동으로 확장되는 최소 노드 수입니다. GKE 버전 1.24 이상에서 전체 노드 풀의 최소 노드 수를 지정하려면 --total-min-nodes를 사용합니다. --total-min-nodes--total-max-nodes 플래그를 --min-nodes--max-nodes 플래그와 함께 사용할 수 없습니다.
  • MAX_NODES: 영역당 지정된 노드 풀에서 자동으로 확장되는 최대 노드 수입니다. GKE 버전 1.24 이상에서 전체 노드 풀의 최대 노드 수를 지정하려면 --total-max-nodes를 사용합니다. --total-min-nodes--total-max-nodes 플래그를 --min-nodes--max-nodes 플래그와 함께 사용할 수 없습니다.
  • COMPUTE_REGION: 새 클러스터의 Compute Engine 리전입니다. 영역 클러스터의 경우 --zone=COMPUTE_ZONE을 사용합니다.

예: 노드 자동 확장이 사용 설정되고 최소 및 최대 노드가 지정된 클러스터 만들기

다음 명령어는 리전의 3개 영역에 각각 30개씩 총 90개의 노드가 지정된 클러스터를 만듭니다. 노드 자동 확장이 사용 설정되고 클러스터 로드를 기준으로 노드 수를 조절합니다. 클러스터 자동 확장 처리는 기본 노드 풀 크기를 노드 15개로 줄이거나 노드 풀을 영역당 최대 50개의 노드로 늘릴 수 있습니다.

gcloud container clusters create my-cluster --enable-autoscaling \
    --num-nodes=30 \
    --min-nodes=15 --max-nodes=50 \
    --region=us-central

예: 노드 자동 확장이 사용 설정되고 총 노드 수가 지정된 클러스터 만들기

다음 명령어는 리전의 3개 영역에 각각 10개씩 총 30개의 노드가 지정된 클러스터를 만듭니다. 노드 자동 확장이 사용 설정되고 클러스터 로드를 기준으로 노드 수를 조절합니다. 이 예시에서는 영역 간 분산에 관계없이 클러스터의 총 크기가 10~60개 사이의 노드일 수 있습니다.

gcloud container clusters create my-cluster --enable-autoscaling \
    --num-nodes 10 \
    --region us-central1 \
    --total-min-nodes 10  --total-max-nodes 60

콘솔

기본 노드 풀에 자동 확장이 사용 설정된 새 클러스터를 만들려면 다음 안내를 따르세요.

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

    Google Kubernetes Engine으로 이동

  2. 만들기를 클릭합니다.

  3. 원하는 대로 클러스터를 구성합니다.

  4. 탐색창의 노드 풀에서 default-pool을 클릭합니다.

  5. 자동 확장 사용 설정 체크박스를 선택합니다.

  6. 최소 노드 수최대 노드 수 필드의 값을 원하는 대로 변경합니다.

  7. 만들기를 클릭합니다.

자동 확장을 사용하는 노드 풀 추가

gcloud CLI 또는 Google Cloud 콘솔을 사용하여 자동 확장이 사용 설정된 노드 풀을 만들 수 있습니다.

gcloud

자동 확장을 사용하는 노드 풀을 기존 클러스터에 추가하려면 다음 명령어를 사용합니다.

gcloud container node-pools create POOL_NAME \
    --cluster=CLUSTER_NAME \
    --enable-autoscaling \
    --min-nodes=MIN_NODES \
    --max-nodes=MAX_NODES \
    --region=COMPUTE_REGION

다음을 바꿉니다.

  • POOL_NAME: 원하는 노드 풀의 이름입니다.
  • CLUSTER_NAME: 노드 풀이 생성되는 클러스터의 이름입니다.
  • MIN_NODES: 영역당 지정된 노드 풀에서 자동으로 확장되는 최소 노드 수입니다. GKE 버전 1.24 이상에서 전체 노드 풀의 최소 노드 수를 지정하려면 --total-min-nodes를 사용합니다. --total-min-nodes--total-max-nodes 플래그를 --min-nodes--max-nodes 플래그와 함께 사용할 수 없습니다.
  • MAX_NODES: 영역당 지정된 노드 풀에서 자동으로 확장되는 최대 노드 수입니다. GKE 버전 1.24 이상에서 전체 노드 풀의 최대 노드 수를 지정하려면 --total-max-nodes를 사용합니다. --total-min-nodes--total-max-nodes 플래그를 --min-nodes--max-nodes 플래그와 함께 사용할 수 없습니다.
  • COMPUTE_REGION: 새 클러스터의 Compute Engine 리전입니다. 영역 클러스터의 경우 --zone=COMPUTE_ZONE을 사용합니다.

예시: 노드 자동 확장이 사용 설정된 노드 풀 추가

다음 명령어는 노드 풀이 최대 5개, 최소 1개인 노드 자동 확장을 사용하여 노드 풀을 만듭니다.

gcloud container node-pools create my-node-pool \
    --cluster my-cluster \
    --enable-autoscaling \
    --min-nodes 1 --max-nodes 5 \
    --zone us-central1-c

콘솔

자동 확장을 사용하는 노드 풀을 기존 클러스터에 추가하려면 다음 안내를 따르세요.

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

    Google Kubernetes Engine으로 이동

  2. 클러스터 목록에서 수정하려는 클러스터 이름을 클릭합니다.

  3. 노드 풀 추가를 클릭합니다.

  4. 노드 풀을 원하는 대로 구성합니다.

  5. 크기에서 자동 확장 사용 설정 체크박스를 선택합니다.

  6. 최소 노드 수최대 노드 수 필드의 값을 원하는 대로 변경합니다.

  7. 만들기를 클릭합니다.

기존 노드 풀의 자동 확장 사용 설정

gcloud CLI 또는 Google Cloud 콘솔을 사용하여 기존 노드 풀의 자동 확장을 사용 설정할 수 있습니다.

gcloud

기존 노드 풀에 자동 확장을 사용 설정하려면 다음 명령어를 사용합니다.

gcloud container clusters update CLUSTER_NAME \
    --enable-autoscaling \
    --node-pool=POOL_NAME \
    --min-nodes=MIN_NODES \
    --max-nodes=MAX_NODES \
    --region=COMPUTE_REGION

다음을 바꿉니다.

  • CLUSTER_NAME: 업데이트할 클러스터의 이름입니다.
  • POOL_NAME: 원하는 노드 풀의 이름입니다. 노드 풀이 하나뿐이면 default-pool을 값으로 제공합니다.
  • MIN_NODES: 영역당 지정된 노드 풀에서 자동으로 확장되는 최소 노드 수입니다. GKE 버전 1.24 이상에서 전체 노드 풀의 최소 노드 수를 지정하려면 --total-min-nodes를 사용합니다. --total-min-nodes--total-max-nodes 플래그를 --min-nodes--max-nodes 플래그와 함께 사용할 수 없습니다.
  • MAX_NODES: 영역당 지정된 노드 풀에서 자동으로 확장되는 최대 노드 수입니다. GKE 버전 1.24 이상에서 전체 노드 풀의 최대 노드 수를 지정하려면 --total-max-nodes를 사용합니다. --total-min-nodes--total-max-nodes 플래그를 --min-nodes--max-nodes 플래그와 함께 사용할 수 없습니다.
  • COMPUTE_REGION: 새 클러스터의 Compute Engine 리전입니다. 영역 클러스터의 경우 --zone=COMPUTE_ZONE을 사용합니다.

콘솔

기존 노드 풀에 자동 확장을 사용 설정하려면 다음 안내를 따르세요.

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

    Google Kubernetes Engine으로 이동

  2. 클러스터 목록에서 수정하려는 클러스터 이름을 클릭합니다.

  3. 노드 탭을 클릭합니다.

  4. 노드 풀 아래에서 수정할 노드 풀의 이름을 클릭한 다음 수정을 클릭합니다.

  5. 크기에서 자동 확장 사용 설정 체크박스를 선택합니다.

  6. 최소 노드 수최대 노드 수 필드의 값을 원하는 대로 변경합니다.

  7. 저장을 클릭합니다.

기존 노드 풀의 자동 확장이 사용 설정되어 있는지 확인

클러스터가 Google Cloud CLI 또는 Google Cloud 콘솔을 사용하여 자동 확장을 사용하고 있는지 확인합니다.

gcloud

클러스터의 노드 풀을 설명합니다.

gcloud container node-pools describe NODE_POOL_NAME --cluster=CLUSTER_NAME |grep autoscaling -A 1

다음을 바꿉니다.

  • POOL_NAME: 선택한 새 노드 풀의 이름
  • CLUSTER_NAME: 클러스터의 이름

자동 확장이 사용 설정되면 출력은 다음과 비슷합니다.

autoscaling:
  enabled: true

콘솔

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

    Google Kubernetes Engine으로 이동

  2. 클러스터 목록에서 확인할 클러스터 이름을 클릭합니다.

  3. 노드 탭을 클릭합니다.

  4. 노드 풀에서 노드 풀 Autoscalling 상태가 표시되는지 확인합니다.

사용되지 않은 예약의 최적화에 우선순위를 두는 노드 풀 만들기

노드 풀을 만들 때 --location_policy=ANY 플래그를 사용하여 클러스터 자동 확장 처리에 사용되지 않은 예약의 사용률에 우선순위를 두도록 지시할 수 있습니다.

gcloud container node-pools create POOL_NAME \
    --cluster=CLUSTER_NAME \
    --location_policy=ANY

다음을 바꿉니다.

  • POOL_NAME: 선택한 새 노드 풀의 이름
  • CLUSTER_NAME: 클러스터의 이름

기존 노드 풀의 자동 확장 사용 중지

gcloud CLI 또는 Google Cloud 콘솔을 사용하여 기존 노드 풀의 자동 확장을 사용 중지할 수 있습니다.

gcloud

특정 노드 풀의 자동 확장을 사용 중지하려면 --no-enable-autoscaling 플래그를 사용하세요.

gcloud container clusters update CLUSTER_NAME \
    --no-enable-autoscaling \
    --node-pool=POOL_NAME \
    --region=COMPUTE_REGION

다음을 바꿉니다.

  • CLUSTER_NAME: 업데이트할 클러스터의 이름입니다.
  • POOL_NAME: 원하는 노드 풀의 이름입니다.
  • COMPUTE_REGION: 새 클러스터의 Compute Engine 리전입니다. 영역 클러스터의 경우 --zone=COMPUTE_ZONE을 사용합니다.

클러스터 크기는 클러스터의 현재 기본 노드 풀 크기로 고정되어 있으며 수동으로 업데이트 가능합니다.

콘솔

특정 노드 풀의 자동 확장을 사용 중지하려면 다음 안내를 따르세요.

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

    Google Kubernetes Engine으로 이동

  2. 클러스터 목록에서 수정하려는 클러스터 이름을 클릭합니다.

  3. 노드 탭을 클릭합니다.

  4. 노드 풀 아래에서 수정할 노드 풀의 이름을 클릭한 다음 수정을 클릭합니다.

  5. 크기에서 자동 확장 사용 설정 체크박스의 선택을 취소합니다.

  6. 저장을 클릭합니다.

노드 풀 크기 조정

자동 확장이 사용 설정된 클러스터의 경우 클러스터 자동 확장 처리가 최소 크기(--min-nodes) 및 최대 크기(--max-nodes) 값 또는 최소 총 크기(--total-min-nodes) 및 최대 총 크기(--total-max-nodes)로 지정된 경계 내에서 노드 풀의 크기를 자동으로 조정합니다. 이 플래그들은 상호 배타적입니다. 이러한 값을 변경하여 노드 풀의 크기를 수동으로 조정할 수 없습니다.

자동 확장을 사용 설정한 클러스터의 노드 풀 크기를 수동으로 조절하려면 다음을 수행합니다.

  1. 노드 풀의 자동 확장을 사용 중지합니다.
  2. 수동으로 클러스터 크기를 조절합니다.
  3. 자동 확장을 다시 사용 설정하고 최소 및 최대 노드 풀 크기를 지정합니다.

선택한 노드에서 포드 예약 방지

사용 사례에 따라 startup 또는 status taint를 사용하여 선택한 노드에서 포드 예약을 방지할 수 있습니다.

이 기능은 GKE 버전 1.28 이상에서 사용할 수 있습니다.

시작 taint

노드에서 포드를 실행하기 전에 완료해야 하는 작업이 있으면 startup taint를 사용합니다. 예를 들어 노드의 드라이버 설치가 완료될 때까지 포드를 실행해서는 안 됩니다.

클러스터 자동 확장 처리는 startup taint로 taint된 노드를 준비되지 않은 것으로 취급하지만, 곧 확장될 것으로 가정하여 확장 로직에서 이를 고려합니다.

시작 taint는 프리픽스가 startup-taint.cluster-autoscaler.kubernetes.io/인 모든 taint로 정의됩니다.

상태 taint

GKE가 지정된 노드를 사용하여 포드를 실행해서는 안 되는 경우에는 status taint를 사용하세요.

클러스터 자동 확장 처리는 status taint로 taint된 노드를 준비 상태로 취급하지만 수직 확장 로직 중에는 무시합니다. taint된 노드가 준비되었더라도 포드를 실행하면 안 됩니다. 포드에 더 많은 리소스가 필요한 경우 GKE는 클러스터를 확장하고 taint된 노드를 무시합니다.

상태 taint는 프리픽스가 status-taint.cluster-autoscaler.kubernetes.io/인 모든 taint로 정의됩니다.

무시 taint

무시 taint는 프리픽스가 ignore-taint.cluster-autoscaler.kubernetes.io/인 모든 taint로 정의됩니다.

문제 해결

클러스터 자동 확장 처리의 제한사항 중 하나로 인해 발생한 문제인지 확인합니다. 그렇지 않으면 클러스터 자동 확장 처리에 대한 다음 문제 해결 정보를 참조하세요.

클러스터가 축소되지 않음

클러스터를 올바르게 확장한 후 축소를 시도하였을 때, 사용률이 낮은 노드는 사용 설정된 상태로 유지되면서 클러스터가 축소되지 않습니다. 이 오류는 다음 이유 중 하나로 발생합니다.

  • 제한사항 때문에 자동 확장 처리로 노드가 삭제되지 않을 수 있습니다. 노드에 다음 조건의 포드가 포함된 경우에는 GKE가 노드 삭제를 방지하기도 합니다.

    • 포드의 어피니티 또는 안티어피니티 규칙이 재예약을 방지하는 경우
    • GKE 버전 1.21 이하에서 포드에 로컬 스토리지가 있는 경우
    • 포드가 배포, StatefulSet, 작업 또는 ReplicaSet와 같은 컨트롤러로 관리되지 않는

    이 문제를 해결하려면 포드에서 클러스터 자동 확장 처리 예약 및 제거 규칙을 설정하세요. 자세한 내용은 포드 예약 및 중단을 참조하세요.

  • 시스템 포드가 노드에서 실행 중입니다. 노드에서 kube-system 포드를 실행 중인지 확인하려면 다음 단계를 수행합니다.

    1. Google Cloud 콘솔의 로그 탐색기 페이지로 이동합니다.

      로그 탐색기로 이동

    2. 쿼리 빌더를 클릭합니다.

    3. 다음 쿼리를 사용하여 모든 네트워크 정책 로그 기록을 찾습니다.

        - resource.labels.location="CLUSTER_LOCATION"
        resource.labels.cluster_name="CLUSTER_NAME"
        logName="projects/PROJECT_ID/logs/container.googleapis.com%2Fcluster-autoscaler-visibility"
        jsonPayload.noDecisionStatus.noScaleDown.nodes.node.mig.nodepool="NODE_POOL_NAME"
      

      다음을 바꿉니다.

      • CLUSTER_LOCATION: 클러스터가 있는 리전
      • CLUSTER_NAME: 클러스터 이름
      • PROJECT_ID: 클러스터가 생성되는 프로젝트의 ID
      • NODE_POOL_NAME: 노드 풀의 이름

        노드 풀에서 kube-system 포드가 실행 중이면 출력은 다음과 같습니다.

        "no.scale.down.node.pod.kube.system.unmovable"
        

    이 문제를 해결하려면 다음 중 하나를 수행해야 합니다.

    • kube-system 포드에 대해 PodDisruptionBudget을 추가하세요. kube-system 포드의 PodDisruptionBudget을 수동으로 추가하는 방법에 대한 상세 설명은 Kubernetes 클러스터 자동 확장 처리 FAQ를 참조하세요.
    • 노드 풀 taint 및 톨러레이션(toleration)을 조합하여 kube-system 포드를 애플리케이션 포드와 분리합니다. 자세한 내용은 GKE의 노드 자동 프로비저닝을 참조하세요.

노드 풀 크기 불일치

노드 풀 크기를 구성할 때 다음 문제가 발생합니다.

  • 기존 노드 풀 크기가 클러스터에 지정한 최소 노드 수보다 작습니다.

다음 목록은 이 동작의 일반적인 원인입니다.

  • 기존 노드 수가 더 많은 경우 새로운 최소 노드 수를 지정했습니다.
  • 노드 풀이나 기본 관리형 인스턴스 그룹을 수동으로 축소했습니다. 이 수동 작업에서 최소 노드 수보다 적은 노드 수를 지정했습니다.
  • 노드 풀 내에 선점된 스팟 VM을 배포했습니다.
  • 포드에 로컬 스토리지가 포함되고 GKE 제어 영역 버전이 1.22 미만입니다. 제어 영역 버전 1.22 이상이 있는 GKE 클러스터에서 로컬 스토리지가 있는 포드는 더 이상 축소를 차단하지 않습니다.
  • 포드에 "cluster-autoscaler.kubernetes.io/safe-to-evict": "false" 주석이 있습니다.

    축소 이벤트 중에 발생하는 추가 문제 해결 단계는 클러스터가 축소되지 않음을 참조하세요.

  • 축소할 때는 클러스터 자동 확장 처리에 최대 10분의 포드 종료 유예 기간을 적용합니다. 10분 후에는 포드가 강제로 종료됩니다.

  • 노드 풀 크기가 클러스터에 지정한 최소 노드 수보다 작을 수 있습니다. 이는 자동 확장 처리가 축소를 결정해야 하는 경우에만 최소 노드 수 매개변수를 사용하기 때문입니다. 다음은 이 동작의 가능한 일반적인 원인 목록입니다.

이 문제를 해결하려면 수동으로 노드 풀 크기를 최소한 최소 노드 수 이상으로 늘립니다. 자세한 내용은 수동으로 클러스터 크기 조정 방법을 참조하세요.

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

다음 단계