EKS 노드 AMI와 구성
Referenced by
1. 서론 (Context & Tension)
Amazon EKS 업그레이드에서 메모리/리소스 이슈를 분석할 때, “쿠버네티스 버전”만 보면 가정이 깨질 수 있습니다. 실제 운영 영향은 노드 AMI(특히 AL2 → AL2023)와 cgroup 구성 변화 에서 주로 발생하기 때문입니다.
이 문서는 EKS 1.31~1.34 범위에서 노드 측 변경점을 “설계 판단에 필요한 수준”으로 정리하고, 상세 개념은 Atomic Note로 링크합니다.
2. 문제 분해 (Problem Decomposition)
- 무엇이 바뀌었는가?: 노드 OS/AMI, cgroup(v1/v2), kubelet 드라이버 자동 설정 등
- 무엇이 직접 영향을 주는가?: 메모리 limit/request의 커널 매핑, eviction/OOM 경로, 알파 기능 지원 가능성
- 무엇이 ‘있어도 못 쓰는가’?: EKS에서 feature gate 제약으로 비활성인 기능(예: 알파 기능)
3. 탐구 과정 (Investigation)
3.1. Amazon Linux 2023 (AL2023) 도입
- EKS 1.30 버전부터 신규 Managed Node Group 생성 시 기본 AMI가 AL2에서 AL2023으로 전환 되었습니다.
- Kubernetes 1.33부터는 AL2 AMI를 더 이상 제공하지 않고 AL2023과 Bottlerocket만 지원합니다.
- AL2023은 기본적으로 cgroup v2를 활성화 하며, containerd 런타임에 최적화되어 있습니다.
3.2. 노드 구성과 cgroup 드라이버 자동 설정
- AL2023 기반 EKS 노드는 containerd + systemd(cgroup v2) 조합으로 Kubelet이 자동 설정됩니다.
- Kubernetes 1.34에서 Node cgroup driver autoconfiguration 기능이 GA(General Availability)됨에 따라, Kubelet이 cgroup 드라이버를 자동으로 감지하므로 수동 설정이 더 이상 필요하지 않습니다.
3.3. 알파 기능 지원 정책
- Amazon EKS는 관리형 서비스이므로 알파(Alpha) 단계의 기능은 기본적으로 지원하지 않습니다.
- 따라서 K8s MemoryQoS와 같은 알파 기능은 EKS에서 사실상 사용할 수 없으며, 기능이 베타(Beta) 이상으로 승격되고 AWS가 공식적으로 지원하기 전까지는 고려 대상에서 제외해야 합니다.
3.4. 버전별 주요 차이 요약표
| 구분 | EKS 1.31 (K8s 1.31) | EKS 1.32 (K8s 1.32) | EKS 1.33 (K8s 1.33) | EKS 1.34 (K8s 1.34) |
|---|---|---|---|---|
| MemoryQoS 기능 상태 | 알파 단계 (EKS 미지원) | 알파 단계 (EKS 미지원) | 알파 단계 (EKS 미지원) | 알파 단계 (EKS 미지원) |
| Kubelet 메모리 관리 | 메모리 매니저 베타 | 메모리 매니저 GA | 메모리 매니저 GA | 메모리 매니저 GA |
| QoS 클래스 및 Eviction | 기본 정책 유지 | Guaranteed 파드 안정성 향상 (메모리 매니저) | 기본 정책 유지 | 기본 정책 유지 |
| 노드 AMI 및 기본 구성 | AL2 및 AL2023 사용 가능 | AL2 최종 지원,AL2023 기본 | AL2023만 지원 | AL2023만 지원, cgroup 드라이버 자동설정 GA |
4. 개념 연결 (Concept Linking)
5. 결정과 트레이드오프 (Decision & Trade-offs)
- 선택: EKS 업그레이드 이슈를 분석할 때는 “컨트롤 플레인 버전”뿐 아니라 노드 AMI/OS/cgroup 조합을 1급 변수 로 두고 검증합니다.
- 포기: 업스트림 알파 기능을 전제로 한 설계(예: MemoryQoS 기반 하한 보호)는 EKS에서는 성립하지 않을 수 있음을 받아들입니다.
6. 결론 (Takeaways)
- EKS 업그레이드의 리소스 이슈는 노드 AMI/OS 변화(AL2023, cgroup v2)에서 시작하는 경우가 많습니다.
- 업스트림에 기능이 있어도(E.g. MemoryQoS), EKS에서 “사용 가능”은 별개의 질문입니다.
- 메모리 관련 가정(request 보호 등)은 실제 환경에서 관찰로 검증해야 합니다.
References