Cloud/Cloud 기술

AKS 클러스터 버전 업그레이드 (drain 이용)

DongT 2025. 8. 27. 11:42
728x90
반응형

 



방법이야 많이 있겠지만 여기서는 최대한 안전하다고 생각되는 방법으로 업그레이드 하는걸 기술한다.

[사전준비]

1. 업그레이드 계획 수립

현재 사용 중인 버전의 EOL 일정을 확인하고 그 전에 업그레이드를 진행함.

AKS 지원 버전 문서에서 EOL 일정을 확인할 수 있음.

 

2. 현재 버전 확인
# 컨트롤 플레인 버전 확인
az aks list --subscription SUB -o table
kubectl version

# 노드풀 버전 확인
kubectl get node -o wide
포털에서 현재버전 확인
 
 
3. 목표 버전 확인

새 클러스터 생성 시 기본값 버전을 참고하여 업그레이드 목표 버전을 정함.

 
 
4. 업그레이드 영향도 검토

API Deprecation Guide를 참고하여 영향을 받을 리소스를 확인함.

AKS 지원 버전 문서  주의 사항을 확인하고 운영중인 시스템에 문제가 있을지 확인해야함.

만약 개발 영역이 있다면 사전 테스트를 진행.

변경사항 점검
 
 
5. AKS 백업 확인
etcd를 백업하나, Azure에서는 MasterNode를 MS가 직접 관리하니 굳이 불필요.
노드 업그레이드가 아닌 신규 노드 생성으로 복원방안 강구함.

 


[본 작업]

1. 컨트롤 플레인 업그레이드

포털에서 컨트롤 플레인만 업그레이드 진행(약 5분 소요). 노드풀 버전은 변경되지 않아야 함. (영향도 검토가 완벽하다면 해도 됨)

마스터 플레인만 업그레이드 함
#현재버전 확인
az aks list --subscription SUB -o table
kubectl version
#컨트롤플레인만 업그레이드 했기 때문에 노드쪽은 버전이 그대로임
kubectl get node -o wide
 
컨트롤플레인과 노드플레인 버전이 다른것 확인
 
2. 신규 노드풀 생성

system, user 각각 생성함. 테인트 설정은 필수.

노드풀 기본 및 스펙 설정. old 노드풀 설정을 참고하는중.

 

노드풀 테인트 설정. old 노드풀 설정을 참고하는중.

 

서비스 pod를 user 노드에만 유지하기 위해 system 노드풀은 반드시 테인트 설정이 있어야 함. 

# az명령어 예시 참고
# system nodepool 생성
az aks nodepool add \
  --subscription SUB \
  --resource-group SUB-cdh-test-rg \
  --cluster-name cdh-test-aks \
  --name systempoolnew \
  --mode System \
  --node-count 1 \
  --node-vm-size Standard_D2s_v5 \
  --node-taints CriticalAddonsOnly=true:NoSchedule \
  --os-type Linux \
  --enable-cluster-autoscaler \
  --min-count 1 \
  --max-count 3

# 테인트 확인
kubectl describe nodes <nodepool-name> | findstr Taints

# user nodepool 생성
az aks nodepool add \
  --subscription SUB \
  --resource-group SUB-cdh-test-rg \
  --cluster-name cdh-test-aks \
  --name userpoolnew \
  --mode User \
  --node-count 2 \
  --node-vm-size Standard_D4s_v5 \
  --os-type Linux

 

 

3. 더 이상 Pod 할당 안되도록 구 노드풀 설정 변경 

 

(필요시) Taint 까지 설정

# 노드에 Pod 할당금지 설정
kubectl cordon <노드명>

# cordon만 해도 충분하지만 확실히 하기 위해 테인트로 할당 스케쥴 금지 설정
az aks nodepool update --subscription SUB \
  --resource-group SUB-cdh-test-rg \
  --cluster-name cdh-test-aks \
  --name userpoolold \
  --node-taints CriticalAddonsOnly=true:NoSchedule
 
 
 
 
4. 구 노드에서 신 노드로 Pod 이동

Drain 또는 Replica 조정 방식으로 파드를 신규 노드풀로 이동함.

# Drain 방식
kubectl drain <노드명> --ignore-daemonsets --delete-emptydir-data

# Replica 수 조정 시 주의: 번호 낮은 노드부터 삭제됨
 
 
5. Pod 이관 상태 점검
   제대로 넘어가지 않았다면 증상 및 로그 확인해야함. pending, restart 위주로 점검.
# 노드 상태 (cordon, 수량 확인용)
kubectl get node -o wide 

# 노드명으로 파이프 필터하여 Pod 이관 확인
kubectl get pod -A -o wide | findstr userpoolold
kubectl get pod -A -o wide | findstr userpoolnew
 
 
 

[사후 작업]

 
비용 절감을 위해서 구버전 리소스는 정리해야한다.
1) 구 노드풀 중지 및 삭제

정책에 따라 일정 기간 모니터링 후 삭제. (단, system 노드풀은 중지 기능 없음)

 
2) OpenLens 및 kubectl로 상태를 확인함.
kubectl get pod -A -o wide

 Openlens > Workloads > Overview > 주황색,빨간색 확인

 

 


참고 명령어

kubectl config use-context "AKS이름"
kubectl config current-context

 


덤) 사실 업그레이드 작업보단 영향도 검토하는게 더 어렵다.

 



 

728x90