AWS re:Invent는 아직 공식적으로 시작되지 않았지만, EKS에 쿠버네티스를 전문가처럼 사용할 수 있는 혁신적인 새로운 기능이 있습니다!!
*이 블로그에서는 EKS 자동 모드가 무엇인지 살펴보고, 기존 클러스터에서 EKS 자동 모드를 활성화하는 방법을 설명하며, 관리되는 노드 그룹 워크로드를 기존 클러스터의 EKS 자동 모드로 이전하려고 시도하지만, 그 이유는 블로그에서 확인해 보세요! *
*또한 EKS Auto의 가격과 운영의 단순성을 분석하여 활성화 여부를 현명하게 결정하는 데 도움을 주었습니다. *
저는 단 두 개의 명령어로 이 블로그를 빠르게 재현할 수 있는 terraform 저장소를 만들었습니다. EKS 자동 모드를 정복합시다.
동기
*2024년 12월 2일 (JST) – re:Invent 2024를 직전에, AWS는 *EKS 자동 모드를 소개하는 *흥미로운 업데이트를 발표했습니다. *
이번 업데이트가 여러분에게 어떤 의미인가요?
- EKS 클러스터의 모든 종류의 관리를 자동화하여 AWS가 워크로드의 원활한 운영을 가능하게 하는 인프라를 구축하고 관리할 수 있게 합니다.
- AWS가 관리하는 클러스터 인프라는 컴퓨트 자동 확장, 포드 및 서비스 네트워킹, 애플리케이션 부하 분산, 클러스터 DNS, 블록 저장소, GPU 지원 등 애드온이 아닌 핵심 구성 요소로 많은 Kubernetes의 기능을 포함합니다
- 새로운 EKS 자동 모드 클러스터를 배포하거나 기존 클러스터에서 EKS 자동 모드를 활성화할 수 있습니다
참고: Terraform 지원(아직 진행 중)은 아직 없으니 이번 블로그에서는 AWS 콘솔을 사용할 예정입니다.
이번 업데이트의 비용 고려사항
- https://aws.amazon.com/eks/pricing/ 에 따르면
- 두 가지 구성 요소에 대한 지급을 유지하게 됩니다:
- Amazon EKS 클러스터 가격: $0.10/클러스터/시간(확장판은 클러스터당 $0.60)
- 하지만 자동 모드를 사용하면 추가 비용을 지불해야 합니다!!
EKS 자동 모드는 EKS 자동 모드가 실행 및 관리하는 Amazon EC2 인스턴스의 지속 시간과 유형에 따라 비용을 지불합니다. 아래 Amazon EKS 자동 모드 가격은 EC2 인스턴스 자체를 포함하는 Amazon EC2 인스턴스 가격과 함께 제공됩니다.
*간단히 말해, EKS 자동 모드는 출시된 EC2 인스턴스 유형과 일반 EC2 인스턴스 비용에 따라 다르게 관리비를 부과합니다. *

실제로 무엇을 자동화하는 거야
EKS 자동 모드는 데이터 플레인 컴포넌트를 자동화하도록 설계되었으므로, 다음은 다음 컴포넌트와 함께 자동화된 기능들입니다:
EKS 자동 모드의 자동 데이터 평면 구성 요소
- 컴퓨트 관리: 노드 프로비저닝, 확장, 업그레이드, 부하 분산 등 클러스터 컴퓨팅의 핵심 측면을 자동화하여 번거로움 없는 Kubernetes 운영을 지원합니다.
- 노드:
- 필수 서비스를 가진 최적화된 AMI를 자동으로 선택합니다.
- SELinux, 읽기 전용 루트 파일, SSH/SSM 접근 금지를 사용하여 노드를 보호합니다.
- NVIDIA 및 뉴런 GPU에 대한 GPU 지원도 포함합니다.
- 자동 스케일링:
- Karpenter를 사용해 예약 불가능한 포드의 새로운 노드를 모니터링하고 배치합니다.
- 자원을 최적화하기 위해 사용하지 않는 노드를 동적으로 종료합니다.
- 노드:
- 업그레이드:
- 최소한의 작업 부하 방해로 OS 및 구성 요소 업데이트를 적용합니다.
- 보안과 안정성을 위해 최대 21일의 노드 수명을 강제합니다.
- 부하 분산:
- 자동 프로비저닝 및 확장을 위해 탄력적 부하 분산(ALB 및 NLB)과 통합됩니다.
- AWS 모범 사례에 부합하는 운영 준비 가능한 로드 밸런싱을 제공합니다.
- 스토리지 자동화
- 볼륨 설정, 암호화 및 삭제 정책을 자동으로 관리하는 임시 저장소를 최적의 용도로 구성합니다.
- 네트워킹 자동화
- IPv4/IPv6 지원을 통한 Pod 및 서비스 연결을 관리하고, 보조 CIDR 블록을 사용해 IP 공간을 확장합니다.
기존 클러스터에서 자동 모드 활성화
- 이번 블로그에서는 기존 클러스터에서 활성화하는 방법을 살펴보겠습니다. AWS 블로그에서 이미 새 클러스터에서 EKS 자동 모드를 다뤘기 때문입니다
- 기존 클러스터를 모방하려면, 제 저장소에서 Terraform을 사용해 EKS 관리 노드 그룹과 함께 EKS 클러스터를 배포할 수 있습니다
마이그레이션 지원

- 이 블로그 작성 시점에서 EKS 지원: Karpenter에서 EKS 자동 모드로의 마이그레이션, EKS 관리 노드 그룹에서 EKS 자동 모드로의 마이그레이션, EKS Fargate에서 EKS 자동 모드 노드로의 마이그레이션
- 이 블로그를 간단하게 하기 위해 EKS 관리 노드 그룹에서 EKS 자동 모드로 마이그레이션하는 방법을 보여드리겠습니다(가능하면 :) 있기를 바랍니다)
참고: 또한 Kubernetes 기반 자원을 자체 관리 컨트롤러나 EKS 자동 모드 중 하나에 소유하도록 설정하는 방법을 꼭 확인해 보세요.
전제 조건
- IAM 권한 업데이트 및 핵심 EKS 자동 모드 설정 설정 설정
- 특정 Amazon EKS 애드온의 최소 필수 버전입니다.
IAM 권한 업데이트 및 핵심 EKS 자동 모드 설정 설정
- EKS 클러스터의 클러스터 IAM 역할은 클러스터가 생성된 후 변경할 수 없습니다. EKS 자동 모드는 이 역할에 대한 추가 권한이 필요합니다. 현재 역할에 추가 정책을 첨부해야 합니다.
- 클러스터 IAM 역할로 탐색하고 다음 정책 추가
- 아마존 EKSComputePolicy
- 아마존EKSBlockStoragePolicy
- AmazonEKSLoadBalancingPolicy
- AmazonEKSNetworkingPolicy
- AmazonEKSClusterPolicy (저에게는 이미 존재합니다)

- 신뢰 정책을 수정하고 'sts:TagSession'을 추가하여 행동을 허용합니다.

특정 아마존 EKS 애드온의 최소 필수 버전
관점.
- Terraform 코드를 최신 버전의 애드온을 가져오도록 설정했으니 아무것도 하지 않아도 됩니다.
카펜터 노드 풀 생성
- EKS 자동 설정은 카펜터를 비하면에서 스케일링에 사용합니다.
Karpenter는 클러스터 확장성과 자원 활용도를 최적화하는 노드 프로비저닝 도구입니다. Karpenter의 NodePool 리소스를 사용하면 인스턴스 유형, 가용성 존, 아키텍처, 용량 유형 등 컴퓨팅 자원에 대한 구체적인 요구사항을 정의할 수 있습니다.

노드 IAM 역할에 추천 역할 생성
저는 미리 설정된 노드 풀을 사용하고 있지만, 이 예시
처럼 자신만의 yaml 파일을 사용해 직접 구성할 수도 있습니다기본 권한 선택 및 역할 생성

- 역할이 생성되고 다음(next)을 선택하면 자동 모드가 활성화된 알림을 볼 수 있습니다

- 활성화되면 콘솔의 '개요' 탭을 통해 자동 모드 옵션을 확인할 수 있습니다

- 활성화 단계에서 활성화된 상태에서 EKS는 노드 풀도 생성했습니다.
EKS 자동 모드 비활성화
기존 EKS 클러스터에서 EKS 자동 모드를 비활성화할 수 있습니다. 이것은 파괴적인 작업입니다.
- EKS는 EKS 자동 모드로 운영되는 모든 EC2 인스턴스를 종료합니다.
- EKS는 자동 모드로 작동하는 모든 로드 밸런서를 삭제합니다.
EKS 관리 노드 그룹에서 EKS 자동 모드로 마이그레이션
Amazon EKS 클러스터를 EKS 자동 모드로 전환할 때, eksctl CLI 도구를 사용해 기존 워크로드를 관리되는 노드 그룹에서 원활하게 이전할 수 있습니다.
이 과정은 EKS 자동 모드가 컴퓨팅 자원을 최적화하는 동안 애플리케이션의 지속적인 가용성을 보장합니다. 마이그레이션은 실행 중인 애플리케이션에 최소한의 방해 없이 수행할 수 있습니다.
전제 조건
- EKS 자동 모드 활성화된 클러스터
- Eksctl CLI가 클러스터에 설치되어 연결되어 있습니다. 자세한 내용은 Amazon EKS 사용 설정 문서를 참조하세요.
- Karpenter는 클러스터에 설치되어 있지 않습니다.
포드의 현재 상태
- 2개의 포드가 관리형 노드 그룹에서 실행되고 있습니다.
jatin.mehrotra@CK0662-001 eks-auto-mode-% kubectl get po -o wide
이름 준비 상태 재시작 연령 IP 노드 지정 노드 준비 게이트
test-65b7dbddd4-jdxhw 1/1 Running 0 2m29s 10.0.2.52 ip-10-0-2-85.ec2.internal <none><none>
test-65b7dbddd4-lzd4r 1/1 Running 0 2m29s 10.0.1.118 ip-10-0-1-128.ec2.internal <none><none>

- 문서에 따르면, 기존 관리형 노드 그룹 인스턴스에서 포드를 드레인하기 위해 다음 eksctl CLI 명령을 사용하세요. EKS 자동 모드는 자리를 바꾸는 포드를 백업할 새 노드를 생성합니다.
EkscTL 업데이트 auto-mode-config --cluster eks-auto-test --drain-nodegroup --region us-east-1 --profile ck-test
제 eksctl 버전 때문인 줄 알았는데, 제 eksctl은 아직 이 플래그에 대한 업데이트가 없는 것 같습니다. 공식 eksctl 저장소에도 열린 이슈가 있습니다

제 eksctl 버전 출력 (최신 버전입니다)
Eksctl 정보
EkscTL 버전: 0.194.0
- 내 클러스터에서 eksctl의 다른 명령어들이 실행 중이라 연결 문제는 전혀 아니라고 할 수 있습니다
jatin.mehrotra@CK0662-001 eks-auto-mode % eksctl get addons --cluster eks-auto-test --region us-east-1 --profile ck-test
2024-12-02 12:29:41 [i] 클러스터 "eks-auto-test"에서 사용 중인 Kubernetes 버전 "1.30"
2024-12-02 12:29:41 [i] 모든 애드온 받기
2024-12-02 12:29:44 [i] 애드온 실행 문제를 보기 위해 'eksctl get addon --name <addon-name> --cluster <cluster-name>'
이름 버전 상태 문제, IAMROLE 업데이트 가능한 구성 값, POD 식별 연관 역할
amazon-cloudwatch-observability v2.5.0-eksbuild.1 ACTIVE 0
AWS-EBS-CSI-DRIVER V1.37.0-EKSBUILD.1 ACTIVE 0
coreDNS v1.11.1-eksbuild.8 ACTIVE 0 v1.11.3-eksbuild.2,v1.11.3-eksbuild.1,v1.11.1-eksbuild.13,v1.11.1-eksbuild.11,v1.11.1-eksbuild.9
kube-proxy v1.30.6-eksbuild.3 ACTIVE 0
VPC-CNI v1.19.0-EKSBUILD.1 ACTIVE 0
업데이트: 12월 3일, 오전 12:20 JST
- AWS 팀이 eksctl의 새 버전을 출시했음에도 불구하고 문제는 여전히 존재하며 문서도 잘못되어 있습니다.
'-drain-all-nodegroups'와 console이나 terraform으로 생성된 기존 클러스터에 대해 생성하기 매우 어려운 cluster-config 파일이 필요합니다.
eksctl update auto-mode-config --drain-all-nodegroups -f eks-config.yaml --profile ck-test
AWS가 이 버그를 고칠 때까지 더 기다려야 합니다. 이 버그에 대한 새로운 문제가 생겼습니다.
EKS 자동 모드 클러스터의 쿠버네티스 버전 업데이트 조사
- Amazon EKS 자동 모드의 컴퓨트 기능은 Kubernetes 버전의 노드를 제어합니다. 제어 평면을 업그레이드한 후, EKS 자동 모드는 관리되는 노드를 점진적으로 업데이트하기 시작합니다. EKS 자동 모드는 포드 방해 예산을 준수합니다.
- Amazon EKS 자동 모드의 컴퓨트 자동 확장, 블록 저장, 부하 분산 기능을 수동으로 업그레이드할 필요가 없습니다.
- 자동 모드는 제어 평면 업데이트와 노드 교체의 조정을 처리하여 버전 업데이트 과정을 단순화하고, 포드 중단 예산을 통해 워크로드 가용성을 유지합니다.
- 자동 모드 클러스터를 업그레이드할 때, 전통적으로 수동 업데이트가 필요했던 많은 구성 요소가 이제 서비스의 일부로 관리됩니다.
- 제어 평면 업그레이드를 시작하면 EKS 자동 모드가 클러스터 내 노드를 교체하기 시작합니다. 새 노드는 해당 새로운 Kubernetes 버전을 가지고 있습니다. EKS 자동 모드는 노드를 업그레이드할 때 포드 방해 예산을 관찰합니다.
- 코어DNS
- 큐브프록시
- AWS 로드 밸런서 컨트롤러
- 카펜터
- AWS EBS CSI 드라이버
- 하지만 업데이트는 여전히 귀하에게 책임이 있습니다:
- 클러스터에 배포된 앱과 워크로드
- 자체 관리 애드온 및 컨트롤러
- 아마존 EKS 애드온
솔루션 아키텍트 관점에서
- 이 블로그에서는 EKS 자동 모드가 인프라 관리를 AWS로 위임하여 쿠버네티스 운영을 어떻게 단순화하는지 살펴보았습니다.
- 최적의 EC2 인스턴스를 자동으로 선정하고, 컴퓨트 비용을 최적화하며, 수요에 따라 자원을 동적으로 확장합니다.
- 이 기능은 보안, 성능, 가용성을 향상시키면서 깊은 전문성, 용량 계획, 수동 관리의 필요성을 줄입니다.
- 하지만 블로그에서 보았듯이 아직 새로운 기능이라 업데이트와 버그 수정이 필요할 수 있습니다.
- *네, 운영을 단순화하고 사용자가 PRO처럼 안전하게 쿠네버티스를 운영할 수 있게 해주는 것은 사실이지만, 그 대가를 치러야 합니다. *
*처음에는 비용이 증가할 것 같지만, 장기간 사용하면 추가 비용을 상쇄하는 진짜 이점이 적용될 것입니다. *