Kubernetes에서의 좌충우돌: Autoscaling Workers
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 테스트
-
로드 생성기 만들기 – 무한 루프에서 CPU를 소모하는 busybox pod.
kubectl create deployment load-generator --image=busybox -- /bin/sh -c "while true; do :; done" -
CPU 요청하기 – 파드가 필요한 CPU 양을 Kubernetes에 알려줍니다 (클러스터 Autoscaler가 동작하기 위해 필요합니다).
kubectl set resources deployment load-generator --requests=cpu=200m -
로드 증가시키기 – 복제본 수를 늘려 충분한 부하를 생성합니다.
kubectl scale deployment load-generator --replicas=20 -
스케일링 동작 확인하기
-
한 터미널에서 노드 목록을 실시간으로 확인합니다:
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가 기본 인프라를 추상화해 주는 반면, “하드웨이” 방식으로 클러스터를 직접 구축하면 각 구성 요소에 대한 깊은 이해를 얻을 수 있어, 문제 해결 시 더 뛰어난 운영자가 될 수 있습니다.
다음 단계
- 다운타임 없이 컨트롤 플레인 업그레이드 – 롤링 업그레이드 학습을 위해 시리즈를 계속 진행하세요.
- 추가 자동화 탐색 (예: 모니터링, 로깅, 네트워크 정책).
참고 문헌
- Kubernetes The Hard Way – Kelsey Hightower의 기본 가이드.
- Kubernetes Documentation – 모든 구성 요소에 대한 권위 있는 문서.
- Google Kubernetes Engine Documentation – 완전한 GKE 가이드.