AWS EKS 클러스터를 업그레이드하거나 확장할 때, 기존 클러스터를 그대로 두고 새로운 EKS 클러스터를 생성하는 방식은 여러 가지 장점이 있습니다. 이 방법을 통해 기존 클러스터가 운영 중인 상태에서 새로운 클러스터를 설정하고, 단계적으로 애플리케이션을 마이그레이션하거나 새로운 기능을 테스트할 수 있습니다.
이 글에서는 기존 EKS 클러스터를 유지하면서 새로운 EKS 클러스터를 생성하는 방법을 단계별로 설명하겠습니다.
1. 새로운 EKS 클러스터 생성 준비
1.1 클러스터 설계 및 리전 선택
새 클러스터의 용도와 목표에 맞는 설계가 필요합니다. 여러 가지 요소를 고려해야 합니다:
- 클러스터가 실행될 AWS 리전을 선택합니다.
- 기존 클러스터와 다른 리전을 선택할 수 있으며, 같은 리전에 생성할 수도 있습니다.
- 노드 그룹을 Managed Node Group으로 할지, Self-managed Node Group을 선택할지 결정합니다.
1.2 새로운 VPC 설정 (필요 시)
새 클러스터를 기존 클러스터와 독립적으로 운영하려면 새로운 VPC를 설정하는 것이 좋습니다. VPC를 새로 설정하지 않으면 기존 클러스터와 네트워크 자원을 공유하게 되며, 별도의 VPC를 사용하면 완전히 격리된 환경을 만들 수 있습니다.
VPC 생성 방법:
1. AWS Management Console에서 VPC 서비스로 이동합니다.
2. Create VPC 버튼을 클릭하여 새 VPC와 서브넷을 생성합니다.
2. 새로운 EKS 클러스터 생성
2.1 AWS CLI로 EKS 클러스터 생성
AWS CLI를 사용하여 새로운 EKS 클러스터를 생성할 수 있습니다. 먼저, AWS CLI가 최신 버전인지 확인하고 새 클러스터를 생성하는 명령어를 실행합니다.
- AWS CLI 최신 버전 확인:
- aws --version
- 새 클러스터 생성:
다음 명령을 사용해 새로운 EKS 클러스터를 생성합니다. 리전, VPC 서브넷 ID, 클러스터 이름 등을 환경에 맞게 설정하세요.- --name: 클러스터 이름
- --region: 클러스터를 생성할 AWS 리전
- --version: Kubernetes 버전 (예: 1.31)
- --role-arn: EKS 클러스터에 부여할 IAM 역할
- --resources-vpc-config: VPC 서브넷 정보 (여러 서브넷이 필요한 경우 콤마로 구분)
- aws eks create-cluster \ --name new-cluster-name \ --region us-west-2 \ --version 1.31 \ --role-arn arn:aws:iam::<account-id>:role/EKSClusterRole \ --resources-vpc-config subnetIds=subnet-12345abcde,subnet-67890fghij
- 클러스터 상태 확인:
클러스터 생성이 완료되면 상태를 확인하여 클러스터가 정상적으로 실행 중인지 확인합니다. - aws eks describe-cluster --name new-cluster-name --query "cluster.status"
3. 새로운 노드 그룹 생성
클러스터가 생성되면 노드 그룹을 추가해야 합니다. EKS 클러스터는 노드 그룹을 통해 실제 워커 노드가 실행되며, 이 노드들이 Kubernetes 워크로드를 처리합니다.
3.1 Managed Node Group 생성
Managed Node Group은 AWS에서 관리하는 워커 노드로, 자동으로 패치 및 업데이트됩니다.
- Managed Node Group 생성:
- --cluster-name: 클러스터 이름
- --nodegroup-name: 노드 그룹 이름
- --subnets: 사용할 서브넷 ID
- --instance-types: EC2 인스턴스 타입 (예: t3.medium)
- --scaling-config: 최소, 최대, 원하는 노드 수 설정
- --node-role: 워커 노드에 부여할 IAM 역할
- aws eks create-nodegroup \ --cluster-name new-cluster-name \ --nodegroup-name new-node-group \ --subnets subnet-12345abcde subnet-67890fghij \ --instance-types t3.medium \ --scaling-config minSize=2,maxSize=5,desiredSize=3 \ --ami-type AL2_x86_64 \ --node-role arn:aws:iam::<account-id>:role/NodeInstanceRole
- 노드 그룹 상태 확인:
노드 그룹이 생성된 후에는 상태를 확인하여 노드가 정상적으로 생성되었는지 확인합니다. - aws eks describe-nodegroup --cluster-name new-cluster-name --nodegroup-name new-node-group --query "nodegroup.status"
3.2 수동 노드 그룹 생성 (Self-managed Node Group)
수동으로 노드를 관리하려면 EC2 인스턴스를 직접 설정하고, 새 클러스터에 등록해야 합니다. 아래는 수동 노드를 설정하는 일반적인 과정입니다.
- 최신 EKS AMI를 찾아 EC2 인스턴스를 실행합니다.
- 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
- EC2 인스턴스에 필요한 역할과 보안 그룹을 설정합니다.
- 인스턴스가 시작되면, 새 EKS 클러스터에 노드를 등록합니다.
4. 애플리케이션 마이그레이션
새 클러스터를 만들었다면 기존 클러스터에서 실행 중인 애플리케이션을 새 클러스터로 마이그레이션할 수 있습니다. 이를 위해 다음 단계들을 따릅니다.
4.1 애플리케이션 상태 백업
- 기존 클러스터에서 애플리케이션 구성 및 리소스 상태를 백업합니다.
kubectl get all --all-namespaces -o yaml > existing-cluster-backup.yaml
4.2 새 클러스터로 애플리케이션 마이그레이션
- 새 클러스터에 대한 kubeconfig를 설정하여 연결합니다.
- aws eks update-kubeconfig --name new-cluster-name --region us-west-2
- 백업한 애플리케이션을 새 클러스터에 적용합니다.
- kubectl apply -f existing-cluster-backup.yaml
5. 클러스터 테스트 및 모니터링
새 클러스터가 정상적으로 작동하는지 확인하기 위해 필요한 테스트를 수행하세요.
- 노드 상태 확인:
- kubectl get nodes
- 파드 상태 확인:
- kubectl get pods --all-namespaces
- 부하 테스트: 성능이 예상대로 나오는지 부하 테스트를 수행하여 새 클러스터가 제대로 설정되었는지 확인합니다.
결론
AWS EKS에서 기존 클러스터를 유지하면서 새로운 클러스터를 생성하는 방법은 매우 유용합니다. 기존 클러스터의 운영에 영향을 주지 않고 새로운 환경을 설정한 후, 점진적으로 애플리케이션을 이전하거나 테스트할 수 있기 때문입니다. 이 가이드에서 설명한 절차를 따르시면, 안전하게 새 클러스터를 생성하고 운영할 수 있을 것입니다.
이 글이 도움이 되었다면 공유해 주세요! 더 많은 AWS 관련 팁을 위해 블로그를 구독하세요.
이 가이드를 통해 AWS EKS 클러스터를 업그레이드하거나 새로운 클러스터를 설정하는 방법을 쉽게 이해하고 실무에 적용할 수 있습니다.