무엇을 하려는지에 따라 쓰는 명령이 완전히 다르다. 먼저 목적을 정한다.
| 목적 | 방법 | 과금 |
|---|---|---|
| 점검 동안 워크로드만 비운다 | kubectl cordon + drain |
계속 발생 |
| 노드 풀 전체를 멈춰 비용을 줄인다 | az aks nodepool stop |
컴퓨트 중지, 디스크는 유지 |
| 노드 수를 줄인다 | az aks nodepool scale |
줄인 만큼 감소 |
| 클러스터 전체를 멈춘다 | az aks stop |
컨트롤 플레인 · 노드 모두 중지 |
kubectl cordon <node>
kubectl drain <node> --ignore-daemonsets --delete-emptydir-data
# 복귀
kubectl uncordon <node>
--delete-emptydir-data 없이는 emptyDir 볼륨을 쓰는 파드에서 drain 이 멈춘다. 이 옵션은 해당 볼륨의 내용을 버린다는 뜻이므로, 캐시가 아니라 작업 결과를 담고 있지 않은지 확인하고 준다. PodDisruptionBudget 이 걸려 있으면 순차적으로만 빠지므로 시간이 걸린다.
az aks nodepool stop -g <RG> --cluster-name <AKS> --nodepool-name <POOL>
az aks nodepool start -g <RG> --cluster-name <AKS> --nodepool-name <POOL>
az aks nodepool show -g <RG> --cluster-name <AKS> --nodepool-name <POOL> --query powerState
제약이 몇 가지 있다[1].
provisioningState 가 Succeeded 여야 한다.중지는 노드 풀 단위다. 특정 노드 한 대만 전원을 내리려면 VMSS 인스턴스를 직접 멈춰야 하는데, 이 경우 노드가 NotReady 로 남고 AKS 의 자동 복구가 다시 켤 수 있다. 권장하지 않는다. 반드시 drain 을 먼저 하고, 가능하면 노드 풀 단위 중지나 스케일 다운으로 대신한다.
az aks nodepool scale -g <RG> --cluster-name <AKS> -n <POOL> --node-count 0
az aks nodepool list -g <RG> --cluster-name <AKS> -o table
사용자 노드 풀은 0 까지 줄일 수 있다. 시스템 노드 풀은 최소 1 이다.
스케일 0 으로 바꿨는데 kubectl get nodes 에 노드가 계속 Ready 로 보인다면, 보고 있는 노드가 다른 노드 풀 소속인 경우가 대부분이다. 노드가 어느 풀에 속하는지는 라벨로 확인한다.
kubectl get nodes -L agentpool,kubernetes.azure.com/agentpool
OS 디스크 크기는 생성할 때만 정할 수 있다. az aks nodepool update 에 --node-osdisk-size 를 주면 unrecognized arguments 가 난다. VM 크기도 마찬가지로 기존 풀에 대해 바꿀 수 없다. 바꾸려면 새 풀을 만들고 옮긴 뒤 옛 풀을 지운다.
임시 OS 디스크(Ephemeral)는 VM 의 캐시 디스크 크기를 넘을 수 없다. 넘기면 생성 단계에서 다음과 같이 거부된다.
OS disk of Ephemeral VM with size greater than 256 GB is not allowed for VM size
Standard_NC24ads_A100_v4 when the DiffDiskPlacement is CacheDisk.
한계는 VM 계열마다 다르다. 해결은 둘 중 하나다. OS 디스크를 그 한계 이하로 줄여 임시 디스크를 유지하거나, --node-osdisk-type Managed 로 바꿔 관리 디스크를 쓴다. 임시 디스크는 빠르고 추가 비용이 없지만 노드 재배치 시 내용이 사라진다. 컨테이너 이미지와 /var/lib/kubelet 이 여기 올라가므로 용량을 너무 줄이면 이미지 풀에서 디스크가 부족해진다.
바꿀 수 없는 노드 라벨이 있다. 다음 키를 --labels 에 넣으면 거부된다.
kubernetes.io/arch, kubernetes.io/os, kubernetes.io/hostname,
kubernetes.io/instance-type, node.kubernetes.io/instance-type,
topology.kubernetes.io/region, topology.kubernetes.io/zone,
beta.kubernetes.io/*, failure-domain.beta.kubernetes.io/*,
agentpool, storageprofile, storagetier, accelerator
accelerator=nvidia 를 직접 붙이려다 막히는 경우가 흔하다. 이 키는 AKS 가 관리하므로 워크로드 선택용으로는 다른 키를 쓴다.
테인트와 라벨도 생성 시점에만 지정할 수 있다. 오토스케일러 설정은 나중에 바꿀 수 있다.
az aks nodepool add \
-g <RG> --cluster-name <AKS> -n compute \
--node-vm-size Standard_NC24ads_A100_v4 \
--node-count 2 \
--node-osdisk-type Ephemeral --node-osdisk-size 128 \
--mode User \
--node-taints workload.example.com/class=compute:NoSchedule \
--labels workload.example.com/class=compute hardware=gpu
AKS 노드 풀 중지 · 시작 — 2026-09-20 확인. https://learn.microsoft.com/en-us/azure/aks/start-stop-nodepools ↩︎