서버리스 Kubernetes, 통합된 연속 통합 및 지속적인 업데이트 환경, 엔터프라이즈급 보안 및 거버넌스를 제공하는 Azure 서비스입니다.
안녕하세요 동희님,
문의하신 “기존 노드는 그대로 두고 새로 생성되는 노드만 업그레이드된 이미지로 띄울 수 있느냐”에 대해 정리드리면, 현재 AKS가 제공하는 az aks nodepool upgrade --node-image-only 흐름은 아래와 같이 동작하며 특정 인스턴스(기존 노드)만 업그레이드를 제외하는 옵션은 없습니다.
- max-surge 만큼(예: 기본 1) 새 노드를 VMSS로 생성
- 기존 노드들 중 drain 가능한 순서대로 pod를 옮기며 하나씩 교체(reimage)
- 교체된 노드가 준비되면 다음 노드를 교체…를 반복
- 완료 후 max-surge 수만큼 생성된 임시 노드 삭제
즉, 노드풀 레벨에서 업그레이드는 “새 노드 생성 → 기존 노드 교체 → 교체된 노드 삭제” 과정을 거치고, 이 과정 중에는 기존 노드를 완전히 유지만 하는 모드는 제공되지 않습니다.
따라서 제안하신 세 가지 방법 중 실무에서 활용 가능한 패턴은 다음과 같습니다.
- 기본 제공 방식으로 업그레이드 – 기존 노드가 단계별로 교체되며, “기존 노드 완전 유지”는 불가능 – PodDisruptionBudget(PDB), 충분한 max-surge 설정(>0)으로 무중단에 가깝게 운영
- 동일 노드풀 내에서 ‘새 노드만’ 올리고 기존은 그대로 두는 방법 – 불가능. 업그레이드 커맨드는 VMSS의 모든 인스턴스 교체를 전제로 함
- 신규 노드풀(blue) 생성 → 워크로드 마이그레이션 → 기존 노드풀 삭제 (green) – 가장 안전하게 이미지 변경을 검증하면서 전환 가능 – subnet IP 부족 등의 리소스 제약이 있다면 사전에 quota 확인 필요
종합하면, “2번”은 AKS가 지원하지 않는 기능이어서 선택할 수 없고, “3번 blue/green 방식”을 추천드립니다.
• az aks nodepool add --name newpool --node-image-only …
• 새 노드풀에 워크로드가 정상 동작하는지 확인
• kubectl drain oldnodepool → 워크로드 이관 → az aks nodepool delete oldpool
추가로 무중단 전환을 위해 아래를 같이 고려해 보세요.
• 충분한 max-surge(예: 100% surge) 설정
• PodDisruptionBudget(PDB) 적용
• 필요하다면 우선순위가 낮은 워크로드부터 순차 이동
도움이 되셨길 바라며, 추가로 알려주시면 더 도와드리겠습니다.
참고 문서
- AKS Node Image 업그레이드 개요 https://learn.microsoft.com/azure/aks/upgrade-node-image
- VMSS 서지를 이용한 Node Image 업그레이드 https://learn.microsoft.com/azure/aks/node-image-upgrade#upgrade-node-images-with-node-surge
- 자동/수동 Node OS 이미지 업그레이드 채널 https://learn.microsoft.com/azure/aks/auto-upgrade-node-os-image
- Pod Disruption Budget 베스트 프랙티스 https://kubernetes.io/docs/concepts/workloads/pods/disruptions/