97. 클러스터 오토스케일러 (CA, Cluster Autoscaler)
⚠️ 이 문서는 쿠버네티스에서 파드(Pod)의 개수를 미친 듯이 늘리는 HPA(수평 스케일러)가 작동하다가, 파드들을 담아낼 거대한 물리 서버(워커 노드, EC2)의 램(RAM)과 CPU 공간 자체가 꽉 차버려 파드가 갈 곳을 잃고 Pending(대기) 상태로 기절하는 참사를 막기 위해, **AWS나 GCP 클라우드에 직접 "야! 깡통 서버 기계 한 대 더 사 와서 클러스터에 빨리 끼워 넣어!"라고 물리적 인프라(VM) 자체를 자동으로 늘려주고 줄여주는 최후의 인프라 스케일러인 'CA(Cluster Autoscaler)'**를 다룹니다.
핵심 인사이트 (3줄 요약)
- 본질: 파드(컨테이너) 레벨의 장난이 아니다. 클라우드 벤더(AWS EC2, GCP GCE)의 인프라 API를 직접 찔러서 가상머신(VM 노드) 기계 통째를 켜고 끄는(Provisioning) 가장 묵직하고 비용 직결적인 물리 계층 스케일링이다.
- 가치: 블랙프라이데이 때 HPA가 파드 100개를 늘려달라고 소리쳤는데 노드가 3대뿐이라 파드 90개가 못 뜨고 죽어버리는 파국을 막는다. 깡통 노드를 10대로 확 늘려 파드를 수용하고, 손님이 빠지면 빈 깡통 노드들을 폐기해 클라우드 청구서 폭탄을 방어한다.
- 기술 체계: HPA는 'CPU 사용률'을 보고 튀어나오지만, CA는 절대 CPU를 보지 않는다. 오직 **방이 없어서 배정받지 못하고 떠돌아다니는 텐트(Pending 상태의 파드)**가 생기는 순간을 트리거로 삼아 기계(노드)를 추가 구매한다.
Ⅰ. HPA의 절망: 빈방이 없으면 분신술도 소용없다
파드(알바생) 100명을 복제해 냈는데, 일할 주방(물리 서버)이 좁아 터졌다.
- HPA(파드 복제)의 치명적 한계:
- 트래픽이 폭주했다. HPA가 기특하게 파드 1개를 100개로 복제(Scale-out)하라고 쿠버네티스(스케줄러)에게 명령했다.
- 쿠버네티스 스케줄러가 워커 노드(물리 서버 VM) 3대의 메모리 현황을 뒤져본다.
- "아씨, 노드 3대에 이미 다른 파드들이 꽉 차 있어서, 새로 복제된 90개의 파드를 욱여넣을 빈 공간(CPU/RAM Request 여유분)이 단 1byte도 없네?"
- Pending (대기 지옥) 상태의 발생:
- 갈 곳(스케줄링될 노드)을 잃은 불쌍한 90개의 파드는 에러를 뿜지도 못하고, 허공에서 빙글빙글 돌며 무한 대기 상태인
Pending상태에 빠진다. - 밖에서 몰려온 손님 1만 명은 빙글빙글 도는 로딩 창만 보다가 접속을 끊고 떠나버린다. 서비스가 뻗은 것이다.
- 갈 곳(스케줄링될 노드)을 잃은 불쌍한 90개의 파드는 에러를 뿜지도 못하고, 허공에서 빙글빙글 돌며 무한 대기 상태인
📢 섹션 요약 비유: 식당에 손님이 몰려 점장(HPA)이 대기실에 있던 알바생(파드) 10명을 추가로 주방으로 밀어 넣었습니다. 그런데 주방(노드) 평수가 5평밖에 안 돼서 10명이 들어갈 물리적인 공간 자체가 없습니다. 알바생들은 주방 문밖에서 유니폼을 입은 채 서성거리며(Pending 상태) 한 요리도 돕지 못하는 답답한 공간 부족의 딜레마입니다.
Ⅱ. 구원자 CA (Cluster Autoscaler)의 강림
"주방이 좁아? 당장 부동산(AWS)에 전화해서 옆 건물 주방 하나 더 뚫어!"
- CA의 방아쇠 (Trigger: Pending Pods):
- CA 로봇은 클러스터의 전체 CPU 사용률 따위는 신경 쓰지 않는다.
- 오직 쿠버네티스 클러스터 허공을 떠돌며 울고 있는
Pending상태의 파드가 단 1개라도 발생하는 그 찰나의 순간, 무섭게 깨어난다.
- 클라우드 Auto Scaling Group (ASG) 찌르기:
- CA는 즉시 쿠버네티스 바깥으로 손을 뻗어, AWS 클라우드의 오토 스케일링 그룹(ASG) 엔진을 직접 찌른다.
- "야 아마존! 내 클러스터에 지금 방 없는 파드가 90개나 떠돌고 있어. 당장 EC2 가상머신(워커 노드) 5대 결제해서 빨리 켜놔!"
- 노드 조인(Join)과 스케줄링의 완성:
- 1~2분 뒤, AWS에서 EC2 기계 5대가 징징거리며 부팅된다. 이 기계들이 쿠버네티스 클러스터에 찰칵 결합(Node Join)된다.
- 쿠버네티스 스케줄러는 새로 생긴 거대한 5개의 빈방(노드)을 발견하고 기쁨의 눈물을 흘리며, 허공에 떠돌던 90개의 Pending 파드들을 쏙쏙 꽂아 넣어 마침내 서비스를 폭발적으로 오픈시킨다.
📢 섹션 요약 비유: 주방 문밖에서 알바생들이 서성거리는(Pending) 모습을 발견한 대주주(CA)가 즉시 옆 건물 부동산(AWS)에 전화를 걸어 "오늘 하루만 30평짜리 주방(워커 노드) 5개 월세로 빌려!"라고 플렉스(결제)를 해버립니다. 1분 뒤 벽이 허물어지며 거대한 새 주방 5개가 연결되고, 밖에서 기다리던 알바생들이 일제히 주방으로 뛰어 들어가 불을 피우기 시작하는 압도적인 자본의 인프라 확장술입니다.
Ⅲ. 스케일 인(Scale-in)과 우아한 퇴장 (돈 아끼기)
파티가 끝나면 부동산 월세 방부터 즉각 빼야 회사가 산다.
- 축소 쿨다운 (Scale-down)의 조건:
- 밤 12시가 되어 손님이 다 빠졌다. HPA가 파드 개수를 100개에서 다시 10개로 팍 줄여버렸다.
- 이제 거대한 워커 노드 8대가 텅텅 빈 채로 AWS 전기세(시간당 수만 원)만 빨아먹고 있다.
- CA 봇은 노드들을 스캔하며 "특정 노드에 할당된 파드의 비율이 50% 미만(Utilization < 50%)으로 텅 비어있고, 그 상태가 10분 이상 지속되면" 방을 뺄 준비를 한다.
- 파드 대피소 (Eviction & Cordon):
- 텅 빈 노드 8대를 전기톱으로 바로 썰어버리면 그 안에 아직 남아있던 파드 1~2개(손님)가 압사당해 끊김(Downtime)이 발생한다.
- 똑똑한 CA는 죽일 노드에 출입 금지 딱지(
Cordon)를 붙이고, 남은 파드들에게 방 빼라고 쫓아낸다(Evict). 쫓겨난 파드들은 꽉 차 있는 다른 2대의 노드로 이사를 간다.
- 노드 폐기와 요금 절감:
- 노드가 100% 완벽한 빈 깡통이 된 것을 확인하면, CA는 AWS에 API를 날려 "이 EC2 기계 8대 전원 끄고 임대 반납해!"라고 명령한다.
- 불필요한 기계들이 깔끔하게 증발하며, 클라우드 청구서의 거품이 0원이 되는 완벽한 탄력성(Elasticity)이 완성된다.
📢 섹션 요약 비유: 파티가 끝나고 빌려둔 주방 5개가 텅텅 비었습니다. 대주주(CA)는 당장 월세를 아끼기 위해 빈 주방을 반납하려 합니다. 주방을 부수기 전, 혹시 남아있는 알바생 한두 명에게 "야, 너희 저쪽 1번 주방으로 합쳐서 들어가"라고 몰아넣습니다(대피 및 이사). 주방에 아무도 없는 것을 확인한 순간 열쇠를 부동산(AWS)에 던져주고 임대 계약을 해지하여 식당의 고정 유지비를 극한으로 방어하는 짠돌이 경제학입니다.