본문 바로가기

AWS/EKS

[EKS] EKS 안정적인 버전 업그레이드 절차

반응형

 

1. 사전 준비

1) EKS 릴리즈 노트 확인
 - AWS 공식 문서에서 EKS 릴리즈 노트(https://docs.aws.amazon.com/eks/latest/userguide/kubernetes-versions.html)를 확인하여 변경 사항, deprecated 기능 등을 사전에 파악합니다.

2) EKS 업그레이드 지원 여부 확인
 - EKS는 한 번에 하나의 minor 버전만 업그레이드할 수 있습니다.
  예: 1.24 → 1.25 가능, 1.24 → 1.26 불가

3) 클러스터 백업
 - etcd는 AWS가 관리하지만, Kubernetes 리소스 (Deployments, Services, CRDs 등) 를 kubectl get all --all-namespaces -o yaml 형태로 백업.
 - Helm 리소스도 helm get values 등을 이용해 백업

4) 노드그룹 상태 확인
 - 자동 노드 업그레이드가 노드 그룹 단위로 이루어짐
 - 모든 노드가 정상 상태인지 (Ready) 확인

 

2. 컨트롤 플레인 업그레이드
 - EKS 콘솔 혹은 AWS CLI, eksctl을 이용해서 수행

$ eksctl upgrade cluster --name your-cluster-name --approve

 

 - 업그레이드 시간은 10~15분 내외이며, 중단은 거의 없음

  ⚠️ 업그레이드 후 확인 사항:
  - kubectl version으로 서버 버전 확인
  - kubectl get cs / kubectl get nodes로 API 서버 정상 여부 확인

 

3. 노드 그룹 업그레이드
 - 노드는 자동으로 업그레이드되지 않음.
 - 권장 방법: 기존 노드그룹 유지 → 새 노드그룹 생성 → 워크로드 마이그레이션 → 기존 노드 삭제

$ eksctl create nodegroup --cluster your-cluster-name --name new-ng --kubelet-extra-args '--node-labels=upgrade=true'

 

- 새 노드 그룹 준비가 되면 kubectl cordon + kubectl drain을 이용해 점진적으로 워크로드 이동

$ kubectl cordon <old-node-name>
$ kubectl drain <old-node-name> --ignore-daemonsets --delete-emptydir-data

 

- 충분히 테스트 후 기존 노드그룹 삭제

 

4. 애드온 및 툴링 업데이트
 - EKS 업그레이드 후 다음 컴포넌트들도 버전에 맞게 업데이트해야 함:
  * CoreDNS

  * kube-proxy

  * Amazon VPC CNI

$ eksctl utils update-coredns --cluster your-cluster-name --approve
$ eksctl utils update-kube-proxy --cluster your-cluster-name --approve
$ eksctl utils update-aws-node --cluster your-cluster-name --approve

 

 - Helm, ArgoCD, Prometheus, Istio 등 기타 툴은 각자의 방식으로 업그레이드 필요

 

5. 애플리케이션 및 기능 점검
 - 테스트 및 Health check 수행
 - CI/CD 파이프라인 테스트
 - 롤백 전략 수립 (eksctl을 통한 클러스터 스냅샷은 직접 불가능하므로 IaC 재생성 방법이나 클러스터 이중화 고려)

 

[베스트 프랙티스]

업그레이드 순서 Dev → Stage → Prod 환경 순서로 테스트 후 진행
운영시간 비업무 시간에 수행 권장
모니터링 CloudWatch, Datadog, Prometheus 등을 이용한 실시간 모니터링
노드 자동 교체 Karpenter 또는 Cluster Autoscaler와 함께 rolling upgrade 자동화 가능
버전 호환성 체크 CRD, API, Helm chart가 새로운 버전과 호환되는지 사전 확인

 

반응형