AWS EKS(Elastic Kubernetes Service)는 자동으로 관리되는 Kubernetes 클러스터를 제공하여 Kubernetes 클러스터 운영을 간소화해 줍니다. 새로운 버전이 릴리스될 때마다 성능과 보안이 향상되며, 새로운 기능들이 추가됩니다. 이 글에서는 AWS EKS 1.28에서 1.31로 업그레이드하는 방법을 자세히 설명하겠습니다. 업그레이드 과정을 통해 클러스터를 최신 상태로 유지하고, 새로운 기능을 사용할 수 있게 됩니다.
1. EKS 업그레이드 전 준비 사항
1.1 클러스터 업그레이드 필요성 확인
EKS 클러스터를 업그레이드하기 전에, 사용 중인 버전과 새 버전의 차이점과 종속성을 확인해야 합니다. EKS 1.31에서는 새로운 기능과 성능 개선이 포함되지만, 일부 API나 기능이 더 이상 지원되지 않을 수 있습니다.
- API Deprecation: 1.28에서 1.31로 업그레이드 시 일부 API가 더 이상 지원되지 않을 수 있습니다. 이에 대한 안내는 AWS 문서와 Kubernetes 릴리스 노트를 참고하세요.
- 종속성 업데이트: 사용 중인 Helm 차트나 기타 종속성이 새로운 Kubernetes 버전에서 호환 가능한지 확인하세요.
1.2 백업 생성
업그레이드 전에는 항상 데이터 백업과 구성 백업을 생성하는 것이 중요합니다. 특히 클러스터 내의 중요한 데이터를 보호하기 위해 아래 작업을 수행하세요.
- kubectl을 사용해 애플리케이션 상태를 백업합니다.
- ETCD 백업을 통해 클러스터 데이터베이스를 보호합니다.
- Terraform, Helm 등을 사용한 인프라 구성을 백업해 두세요.
kubectl get all --all-namespaces > all-resources-backup.yaml
2. EKS 업그레이드 절차
2.1. 클러스터 업그레이드
- AWS CLI 확인: AWS CLI가 최신 버전인지 확인합니다. EKS 클러스터 관리를 위해서는 최신 AWS CLI 버전이 필요합니다.
aws --version
최신 AWS CLI를 설치하려면 AWS CLI 설치 가이드를 참조하세요.
- kubectl 버전 확인: kubectl 버전이 업그레이드하려는 Kubernetes 버전과 호환되는지 확인합니다. 최신 버전을 설치하려면 아래 명령을 실행하세요.
kubectl version --short --client
- 클러스터 업그레이드 시작: 다음 명령어를 사용하여 EKS 클러스터를 업그레이드할 수 있습니다. EKS 클러스터의 이름과 업그레이드할 Kubernetes 버전을 명시합니다.
aws eks update-cluster-version --name <your-cluster-name> --kubernetes-version 1.31
이 명령은 클러스터 제어 플레인(Control Plane)을 업그레이드합니다. 이 과정에서 몇 분이 소요될 수 있으며, 제어 플레인은 중단 없이 업그레이드됩니다.
- 클러스터 상태 확인: 업그레이드가 완료되면 클러스터 상태를 확인해야 합니다. 아래 명령어를 사용하여 업그레이드 상태를 모니터링하세요.
aws eks describe-cluster --name <your-cluster-name> --query cluster.version
3. 워커 노드 업그레이드
클러스터의 제어 플레인이 업그레이드되었으면, 이제 워커 노드(Node Group)를 업그레이드해야 합니다. 워커 노드 업그레이드는 수동으로 관리하거나 Managed Node Group을 사용하여 자동으로 관리할 수 있습니다.
3.1 Managed Node Group 사용 시
- Node Group 업그레이드: Managed Node Group을 사용하는 경우, AWS 관리 콘솔이나 CLI에서 노드 그룹을 쉽게 업그레이드할 수 있습니다.
aws eks update-nodegroup-version --cluster-name <your-cluster-name> --nodegroup-name <your-node-group> --kubernetes-version 1.31
- 노드 상태 확인: 노드 그룹 업그레이드가 완료되었는지 확인하려면 아래 명령어를 사용하세요.
kubectl get nodes
모든 노드가 업그레이드된 상태로 나타나야 합니다.
3.2 수동 워커 노드 업그레이드
수동 노드를 사용하는 경우, 새 AMI를 기반으로 새 워커 노드를 생성한 후 기존 노드를 교체해야 합니다.
- 새 AMI 찾기: EKS에 맞는 최신 Kubernetes 버전의 AMI를 찾습니다.
aws ssm get-parameters --names /aws/service/eks/optimized-ami/1.31/amazon-linux-2/recommended/image_id --region <your-region> --query 'Parameters[0].[Value]' --output text
- 새 노드 그룹 생성: 최신 AMI를 사용하여 새 노드 그룹을 생성한 후, 애플리케이션을 새 노드로 스케줄링하세요.
- 기존 노드 드레이닝: 기존 노드를 드레인하여 애플리케이션이 새 노드로 이동하도록 합니다.
kubectl drain <node-name> --ignore-daemonsets
- 기존 노드 그룹 삭제: 모든 애플리케이션이 새 노드로 이동하면, 기존 노드 그룹을 삭제합니다.
4. 업그레이드 후 작업
4.1 애플리케이션 상태 확인
업그레이드 후 모든 애플리케이션이 정상적으로 작동하는지 확인합니다.
kubectl get pods --all-namespaces
모든 파드(Pod)가 정상적으로 실행되고 있는지, 오류가 발생하지 않았는지 확인합니다.
4.2 Helm 차트 및 종속성 업데이트
업그레이드된 Kubernetes 버전에 맞게 Helm 차트와 기타 종속성을 업데이트합니다.
helm repo update
helm upgrade <release-name> <chart>
4.3 테스트 수행
모든 주요 기능이 예상대로 작동하는지 확인하기 위해 클러스터에서 부하 테스트나 기능 테스트를 수행합니다.
결론
AWS EKS 1.28에서 1.31로 업그레이드는 클러스터의 보안과 성능을 개선할 수 있는 중요한 작업입니다. 제어 플레인과 워커 노드를 차례대로 업그레이드하고, 애플리케이션 상태와 종속성을 확인하는 것이 중요합니다. 이 가이드에서 설명한 단계를 따라 안전하게 업그레이드하고, 최신 Kubernetes 버전의 혜택을 누리시기 바랍니다.
이 가이드가 도움이 되었다면 공유해 주세요! 최신 AWS와 Kubernetes 관련 정보를 받기 위해 블로그를 구독하세요.
이 가이드를 통해 AWS EKS 업그레이드 과정에 대한 명확한 이해와 실무 적용 방법을 알 수 있습니다.