Kubernetes에서의 좌충우돌: Autoscaling Workers

발행: (2026년 5월 10일 AM 10:31 GMT+9)
7 분 소요
원문: Dev.to

Source: Dev.to

번역을 진행하려면 번역하고자 하는 본문 텍스트를 제공해 주시겠어요? 현재는 링크만 포함되어 있어 실제 내용이 없으므로, 번역할 텍스트를 알려주시면 한국어로 번역해 드리겠습니다.

개요

우리의 초기 클러스터는 수동으로 구축되었습니다: 컨트롤 플레인은 직접 설정했고 각 워커 노드는 개별적으로 조인되었습니다. 이 방법은 학습에는 좋지만, 프로덕션 환경에서는 확장성이나 복원력이 부족합니다. 정적인 단일 노드 워커 풀을 넘어서는 세 가지 기능이 필요합니다:

  • 자동 조인 – 새 VM이 부팅되는 즉시 클러스터에 조인되어야 합니다.
  • 자체 복구 – 노드가 실패하면 자동으로 교체 노드가 프로비저닝되어야 합니다.
  • 스마트 스케일링 – 부하가 증가하면 클러스터가 확장되고, 부하가 감소하면 축소되어 비용을 절감해야 합니다.

핵심은 각 VM에 시작 스크립트를 두어 kubeadm join을 자동으로 실행하도록 하는 것입니다.

영구 조인 토큰 생성

표준 kubeadm 토큰은 24시간 후에 만료되며, 이는 몇 달 동안 실행될 수 있는 자동 스케일링 그룹에는 적합하지 않습니다. 컨트롤 플레인에서 TTL이 없는 토큰을 생성합니다:

kubeadm token create --print-join-command --ttl 0

출력된 전체 명령을 복사하세요; 나중에 시작 스크립트에 삽입할 것입니다.

인스턴스 템플릿 만들기

인스턴스 템플릿은 GCP에 VM(이미지, 머신 타입, 메타데이터 등)을 어떻게 만들지 알려줍니다. 위에서 복사한 명령어를 “ 안에 넣어 교체하세요.

gcloud compute instance-templates create k8s-worker-template \
  --image-family=k8s-node-family \
  --machine-type=e2-standard-2 \
  --tags=k8s-worker \
  --metadata startup-script='#! /bin/bash
'

참고: k8s-node-family는 이 시리즈 앞부분에서 만든 사용자 정의 이미지입니다.

지역 관리형 인스턴스 그룹(MIG) 만들기

지역 MIG는 고가용성을 위해 여러 영역에 걸쳐 노드를 분산합니다.

gcloud compute instance-groups managed create k8s-worker-mig \
  --template=k8s-worker-template \
  --size=1 \
  --region=us-central1

GCP는 즉시 하나의 노드를 시작하고, 부팅 후 시작 스크립트를 실행하여 자동으로 클러스터에 조인합니다.

자동 확장 활성화

CPU 사용률을 기준으로 MIG가 자동으로 확장되도록 구성합니다. 그룹은 최소 하나의 노드를 유지하고, 평균 CPU 사용량이 60 %를 초과하면 최대 다섯 개의 노드까지 확장될 수 있습니다.

gcloud compute instance-groups managed set-autoscaling k8s-worker-mig \
  --max-num-replicas=5 \
  --min-num-replicas=1 \
  --target-cpu-utilization=0.60 \
  --region=us-central1

Autoscaler 테스트

  1. 로드 생성기 만들기 – 무한 루프에서 CPU를 소모하는 busybox pod.

    kubectl create deployment load-generator --image=busybox -- /bin/sh -c "while true; do :; done"
  2. CPU 요청하기 – 파드가 필요한 CPU 양을 Kubernetes에 알려줍니다 (클러스터 Autoscaler가 동작하기 위해 필요합니다).

    kubectl set resources deployment load-generator --requests=cpu=200m
  3. 로드 증가시키기 – 복제본 수를 늘려 충분한 부하를 생성합니다.

    kubectl scale deployment load-generator --replicas=20
  4. 스케일링 동작 확인하기

    • 한 터미널에서 노드 목록을 실시간으로 확인합니다:

      kubectl get nodes -w
    • 다른 터미널에서 MIG 인스턴스를 확인합니다:

      gcloud compute instance-groups managed list-instances k8s-worker-mig --region=us-central1

    초기 노드가 가득 차고 파드가 Pending 상태가 되며, GCP Autoscaler가 추가 VM을 프로비저닝하여 부하가 만족될 때까지 진행되는 것을 볼 수 있습니다.

GKE와 비교

Google Kubernetes Engine을 사용하고 있었다면, 전체 설정을 한 줄 명령으로 대체할 수 있었을 것입니다:

gcloud container clusters create k8s-easy-cluster \
  --zone us-central1-a \
  --num-nodes 3 \
  --machine-type e2-medium

GKE가 기본 인프라를 추상화해 주는 반면, “하드웨이” 방식으로 클러스터를 직접 구축하면 각 구성 요소에 대한 깊은 이해를 얻을 수 있어, 문제 해결 시 더 뛰어난 운영자가 될 수 있습니다.

다음 단계

  • 다운타임 없이 컨트롤 플레인 업그레이드 – 롤링 업그레이드 학습을 위해 시리즈를 계속 진행하세요.
  • 추가 자동화 탐색 (예: 모니터링, 로깅, 네트워크 정책).

참고 문헌

0 조회
Back to Blog

관련 글

더 보기 »