AWS 기술 블로그

Amazon EKS Auto Mode의 내부 동작 방식

본 게시글은 AWS Containers Blog에 게시된 Under the hood: Amazon EKS Auto Mode을 한국어 번역 및 편집하였습니다.

이 블로그 포스트는 Alex Kestner(Sr Product Manager – EKS), Todd Neal(Sr. Software Engineer – EKS), Neelendra Bhandari(Sr Software Dev Manager – EKS), Sai Vennam(Principal Specialist Solutions Architect)가 공동으로 작성하였습니다.

re:Invent 2024에서 AWS는 Amazon Elastic Kubernetes Service(Amazon EKS) Auto Mode를 출시했습니다. 이는 즉시 워크로드를 호스팅할 수 있는 프로덕션 준비가 완료된 Kubernetes 클러스터를 제공하는 새로운 기능입니다. 이 블로그에서는 이 기능이 사용자의 Kubernetes 워크로드에 어떤 의미가 있는지 살펴보고 EKS Auto Mode 클러스터의 내부 구조를 자세히 알아보겠습니다.

EKS Auto Mode 소개

EKS Auto Mode는 Kubernetes에서 애플리케이션을 실행하는 간소화된 방법입니다. Kubernetes 컨트롤 플레인과 워커 노드의 설정, 확장, 유지보수를 자동으로 관리하므로 기반 인프라에 대해 걱정할 필요가 없습니다. 사용자는 애플리케이션 배포에만 집중하면 되고 EKS Auto Mode가 나머지를 처리하므로, Kubernetes의 복잡성을 관리하지 않고도 Kubernetes를 사용하고자 하는 사용자에게 이상적입니다.

2017년 re:Invent에서 AWS는 사용자를 위해 Kubernetes 운영을 간소화한 Amazon EKS를 출시했습니다. 출시 당시 Amazon EKS는 AWS Identity and Access Management(IAM)와 같은 기존 서비스와 통합된 관리형 Kubernetes 컨트롤 플레인을 제공했습니다. AWS는 EKS 컨트롤 플레인의 상태 관리와 패치 작업을 책임지고 있으며, 현재 사용자들은 매년 수천만 개의 EKS 클러스터를 운영하고 있습니다. 하지만 사용자들은 여전히 워크로드가 실행되는 Amazon Elastic Compute Cloud(Amazon EC2) 노드인 Kubernetes 데이터 플레인을 운영해야 했습니다. Managed Node GroupsKarpenter와 같은 기능을 도입하여 데이터 플레인 운영 부담을 줄이고자 했으나, 사용자들은 여전히 적절한 OS 선택, 기반 노드 확장, CNI와 kube-proxy와 같은 핵심 애드온 및 구성 요소 관리에 대한 책임을 져야 했습니다.

그림 1: Amazon EKS(Auto Mode 제외)의 공동 책임 모델

EKS Auto Mode는 2017년에 도입한 운영 모델의 진화된 형태로, 이제 AWS에서 Kubernetes 클러스터의 데이터 플레인 부분에 대해 더 많은 책임을 지고 관리형 컴퓨팅, 네트워킹, 스토리지 기능을 제공합니다. EKS Auto Mode를 통해 사용자는 클러스터를 생성하고 즉시 프로덕션 준비가 완료된 환경에 워크로드 배포를 시작할 수 있습니다. AWS에서 EC2 인스턴스의 구성, 패치 적용, 상태 관리를 담당하므로 사용자는 VPC와 클러스터 구성, 그리고 실행 중인 애플리케이션 컨테이너에만 집중할 수 있습니다.

그림 2: EKS Auto Mode의 공동 책임 모델

EKS Auto Mode의 데이터 플레인

EKS Auto Mode 클러스터의 데이터 플레인을 구성하는 여러 핵심 구성 요소들이 있습니다:

  • EC2 관리형 인스턴스는 운영 제어권이 AWS 서비스에 위임된 표준 EC2 인스턴스입니다.
  • Bottlerocket은 컨테이너 실행을 위해 AWS에서 특별히 구축한 오픈 소스 운영 체제입니다.
  • 핵심 기능 및 애드온은 EKS Auto Mode 노드에 내장되어 있어, 사용자가 이러한 구성 요소들을 관리하고 유지보수할 필요가 없습니다.
  • 워커 노드 관리(Karpenter 기반)는 워커 노드의 상태를 자동으로 처리하며, 비용 효율성을 위해 이상적인 인스턴스 유형으로 노드를 삭제하고 교체하는 기능을 제공합니다.

EC2 관리형 인스턴스

EKS Auto Mode는 가장 기본적인 수준에서 re:Invent 2024에서 발표된 새로운 기능인 EC2 관리형 인스턴스를 사용합니다. 관리형 인스턴스는 표준 EC2 인스턴스와 대부분 동일하지만, 인스턴스에 대한 운영 제어권을 Amazon EKS와 같은 AWS 서비스에 위임한다는 점에서 차이가 있습니다. 본질적으로 운영 오버헤드와 일부 제어권을 포기하는 대신 향상된 보안을 얻게 됩니다. 예를 들어, 관리형 스토리지 기능이 워크로드에 필요한 EBS 볼륨의 연결 및 분리를 담당하기 때문에 더 이상 EKS Auto Mode 노드에서 Amazon Elastic Block Store(Amazon EBS) 볼륨을 수동으로 분리할 필요가 없습니다. 마찬가지로 노드에 직접 SSH로 접속하지 않지만, Amazon EKS 서비스를 통해 인스턴스와 상호작용하고 문제를 해결할 수 있는 기능은 유지됩니다. EKS 클러스터를 삭제하면 해당 클러스터와 연결된 EC2 관리형 인스턴스가 강제로 종료되기 때문에 EKS 클러스터의 정리가 더욱 간편해집니다.

EC2 관리형 인스턴스를 통해 EKS Auto Mode는 Kubernetes 워크로드를 위한 컴퓨팅 용량을 원활하게 관리할 수 있습니다. 따라서 노드를 관리하는 것 대신 애플리케이션을 배포하고 실행하는 것에 집중할 수 있습니다. 워크로드는 AWS가 사용자를 대신하여 워크로드를 실행하는 것과 동일한 기준(예: AWS Lambda 또는 AWS Fargate)으로 처리됩니다. 워크로드가 기존 노드의 용량을 초과하면 EKS Auto Mode는 Karpenter(아래 워커 노드 관리 섹션에서 자세히 다룸)를 사용하여 더 많은 EC2 관리형 인스턴스를 동적으로 프로비저닝하여 고가용성과 성능을 보장하므로 수동 스케일링 조정이 필요하지 않습니다.

인프라 관리 간소화 외에도 EC2 관리형 인스턴스는 비용 최적화에 도움이 됩니다. 예약 인스턴스 및 Savings Plans와 같은 기존 AWS 비용 절약 메커니즘을 사용할 수 있어 예측 가능한 비용을 유지하면서 유연성을 제공합니다.

EKS Auto Mode를 통한 EC2 관리형 인스턴스 사용으로 사용자는 AWS가 인프라를 처리하는 완전 관리형 Kubernetes 경험을 누릴 수 있으며, 사용자는 애플리케이션 개발 및 스케일링에 집중할 수 있습니다.

운영 체제로서의 Bottlerocket 선택

다른 EC2 인스턴스와 마찬가지로 EC2 관리형 인스턴스에도 운영 체제가 필요합니다. EKS Auto Mode는 Bottlerocket을 사용합니다. Bottlerocket은 컨테이너 실행을 위해 AWS에서 특별히 구축한 오픈 소스 운영 체제입니다. Bottlerocket은 Kubernetes 워크로드를 효율적이고 안전하게 실행하도록 설계되어 EKS Auto Mode의 이상적인 기반 운영 체제입니다. Bottlerocket은 컨테이너 실행에 필요한 필수 소프트웨어만 포함합니다. 해당 오픈 소스 프로젝트는 약 100개의 패키지 정의를 유지 관리하는데, 이는 대규모 범용 운영 체제의 50,000개와 비교됩니다. 이를 통해 불필요한 기능과 종속성이 빌드 시점에서 비활성화됩니다. 또한 이는 잠재적인 CVE(Common Vulnerabilities and Exposures, 공통 취약점 및 노출)의 공격 표면을 줄이는 동시에 컨테이너 사용 사례에 필요하지 않은 서비스를 제거하여 워크로드 자체에 더 많은 리소스를 제공합니다. Bottlerocket은 루트 파일시스템에 대한 암호화 무결성 검사와 SELinux와 같은 필수 접근 제어를 시행하여 컨테이너 이스케이프(Container Escape) 시 공격 표면을 줄입니다.

EKS Auto Mode의 Amazon Machine Images(AMI)는 맞춤형 Bottlerocket 변형(variant)을 생성하기 위해 간소화된 메커니즘인 Out of Tree Build(OOTB) 시스템을 사용하는 맞춤형 Bottlerocket 변형입니다. 이러한 변형들은 맞춤형 변형이 독립적으로 발전하고 Bottlerocket 코어 업데이트를 안전하게 사용할 수 있도록 하는 방식으로 Bottlerocket 코어에 대한 종속성을 정의합니다. 커널 키트코어 키트는 Bottlerocket의 핵심을 구성하며, EKS Auto Mode AMI는 Bottlerocket 프로젝트의 이러한 두 키트를 모두 사용하여 보안에 중점을 두고 신중하게 선별된 종속성을 활용합니다.

새로운 EKS Auto Mode 전용 노드 기능을 제공하는 것 외에도, Auto Mode AMI는 기본 Bottlerocket 구성에 몇 가지 변경을 더합니다. 예를 들어, 표준 Bottlerocket은 SSH나 콘솔을 통한 대화형 로그인을 지원하지 않습니다. 대신 사용자가 접근을 제공하기 위해 호스트 컨테이너라고 하는 특별한 유형의 컨테이너를 사용할 수 있도록 합니다. EKS Auto Mode에서는 Bottlerocket 호스트 컨테이너를 비활성화하는 대신 노드 로그 검색노드와의 직접 상호작용을 위한 Kubernetes 네이티브 메커니즘을 제공합니다. 예를 들어 노드에 네트워크 연결이 없을 때 노드 문제 해결 정보를 검색하는 것과 같은 기능입니다. EKS Auto Mode는 또한 부트스트랩 명령과 같은 새로운 Bottlerocket 기능을 사용하여 이를 지원하는 인스턴스 유형에서 노드의 로컬 인스턴스 스토리지를 구성합니다. 이를 통해 해당 인스턴스 유형에 포함된 임시 로컬 스토리지가 컨테이너 이미지, 파드 임시 데이터 및 로그에 자동으로 사용되도록 합니다.

코어 노드 기능

Kubernetes 노드는 일반적으로 필수적인 노드 레벨의 기능을 제공하기 위해 노드당 하나의 파드를 생성하는 여러 개의 DaemonSet이 필요합니다. 이러한 구성 요소들을 관리하고, 패치하며, 호환성을 보장하는 것이 어렵고 시간이 많이 소요된다는 사용자들의 불편 사항이 자주 보고되었습니다. 이를 반영하여 EKS Auto Mode의 일환으로, 가장 자주 사용되는 구성 요소에 대한 반복적이고 불필요한 작업을 제거했습니다. 먼저 대다수의 EKS 클러스터에서 사용되는 핵심 노드 기능들을 식별한 후, 이러한 기능들을 EKS Auto Mode 노드에 직접 구축하는 작업을 진행했습니다:

  • 네트워킹: 노드 로컬 네트워킹 구성, DNS, Network Policy enforcement
  • 스토리지: Amazon EBS로 백업되는 영구 볼륨과 임시 데이터용 로컬 인스턴스 스토리지의 운영 체제 레벨 구성
  • 아이덴티티: 구성된 파드에 IAM Identity 제공
  • 특수 하드웨어 지원
    • AWS Neuron: Inferentia 및 Trainium 가속기를 파드에서 사용할 수 있도록 하는 드라이버 및 디바이스 플러그인
    • NVIDIA: NVIDIA GPU를 파드에서 사용할 수 있도록 하는 드라이버 및 디바이스 플러그인
    • Elastic Fabric Adapter (EFA): EFA 디바이스를 파드에서 사용할 수 있도록 하는 드라이버 및 디바이스 플러그인
  • 헬스: 노드 상태 모니터링, 특정 장애 모드의 보고 및 자동 복구 활성화

따라서 EKS Auto Mode 클러스터를 사용하면 NetworkPolicy enforcement과 같이 올바르게 구성된 네트워킹을 가지고, Pod Identity를 사용하여 AWS 서비스에 요청을 하며, 데이터를 저장하는 EBS 백업 영구 볼륨을 가진 파드를 생성할 수 있습니다. NodePool 가속화된 인스턴스 유형을 지원하는 경우, 동일한 파드가 파드 리소스 요청을 통해 리소스를 요청함으로써 Neuron 가속기나 NVIDIA GPU도 사용할 수 있습니다. 사용자의 부담을 더욱 줄이기 위해 내장된 상태 모니터링은 Amazon EKS 운영을 통해 파악된 일련의 문제 및 오류 모드를 주기적으로 확인하고 Kubernetes 이벤트 및 조건을 통해 보고합니다. 응답하지 않는 kubelet이나 모든 프로세스 ID 고갈과 같은 오류 상황에서 EKS Auto Mode는 애플리케이션의 중단을 최소화하기 위해 노드를 교체하여 자동으로 복구할 수 있습니다.

워커 노드 관리

Karpenter로 구동되는 EKS Auto Mode 컴퓨팅 기능은 EC2 관리형 인스턴스와 Bottlerocket 기반 EKS Auto Mode AMI를 결합하여 EKS Auto Mode 노드를 생성합니다. 워크로드 실행에 필요한 컴퓨팅 용량을 제공하기 위해 필요에 따라 해당 노드들을 자동으로 시작하고 종료합니다. 이러한 노드들은 비용 효율성을 위해 구성된 NodePool과 클러스터 내 워크로드 요구사항을 기반으로 지속적으로 최적화됩니다.

이 프로세스는 워크로드 요구사항(CPU, 메모리 또는 특수 하드웨어 요구사항 등)과 Kubernetes 스케줄링 제약 조건을 충족하는 가장 비용 효율적인 인스턴스 유형을 식별하는 것으로 시작됩니다. 워크로드 또는 NodePool 요구사항을 통해 인스턴스 유형 선택을 정밀하게 제어하거나, 더 광범위한 인스턴스 유형을 허용하여 유연성을 유지함으로써 잠재적으로 비용을 절감할 수 있습니다. 적합한 인스턴스가 식별되면, EKS Auto Mode는 해당 특정 인스턴스 유형에 호환되는 Auto Mode AMI를 사용하여 필요한 EC2 관리형 인스턴스를 시작합니다.

시간이 지나면서 워크로드가 수요에 맞춰 확장되거나 축소되거나, 워크로드가 클러스터에 추가되거나 제거됨에 따라 워크로드 요구사항이 변경될 수 있습니다. EKS Auto Mode는 통합 프로세스의 일환으로 전체 클러스터를 지속적으로 평가하여 워크로드를 더 비용 효율적으로 실행할 수 있는지 판단합니다. 높은 수준에서 이를 달성하기 위해 두 가지 방법을 사용합니다:

  • 노드 삭제: 노드는 해당 노드의 모든 파드가 클러스터 내 다른 노드의 가용 용량 안에서 실행될 수 있을 때 삭제 대상이 됩니다.
  • 노드 교체: 노드를 교체하려면 해당 노드의 모든 파드를 기존 노드의 가용 용량과 비용이 더 저렴한 단일 교체 노드에 재분배할 수 있어야 합니다.

사용자는 이러한 신속한 노드 프로비저닝과 지속적인 비용 최적화의 원활한 통합을 통해 EKS Auto Mode가 노드 관리 작업을 처리하는 동안, 클러스터의 워크로드에 집중할 수 있습니다.

생명주기 및 유지보수

EKS Auto Mode 이전에는 사용자가 노드 수준의 구성 요소와 EKS 클러스터 컨트롤 플레인 간의 호환성을 검증하고, 해당 구성 요소를 배포하며, 패치 적용를 적용하고 최신 상태로 유지해야할 책임이 있었습니다. Cluster Insights와 같은 기능이 비호환성을 표시하여 일부 부담을 줄여주었지만, 배포 및 패치 적용은 여전히 사용자의 책임이었습니다. EKS Auto Mode를 사용하면 AWS가 모든 핵심 노드 기능을 포함하는 테스트를 거친 최신 AMI를 모든 EKS Auto Mode 노드에 지속적으로 제공함으로써 이러한 책임을 맡게 됩니다. Auto Mode AMI 빌드 및 릴리스 프로세스는 다음을 담당하는 지속적 배포 파이프라인에 의해 구동됩니다:

  • CVE 스캐닝
  • AMI 빌드
  • AMI 검증
    • Kubernetes 적합성 테스트
    • 구성 요소 기능 테스트 (예: 파드가 EKS Pod Identity를 통해 IAM 자격 증명을 얻을 수 있는지 검증)
    • 보안 테스트
  • AMI 배포

파이프라인은 안전하고 자동화된 배포를 위한 표준 모범 사례를 준수합니다. 프로세스는 새로 테스트된 AMI를 단일 리전의 소규모 EKS Auto Mode 클러스터 하위 집합에 배포하는 것으로 시작되며, 잠재적 문제를 감지하기 위한 베이크 타임 기간을 갖습니다. AMI 안정성에 대한 신뢰도가 높아지면서 더 많은 클러스터와 더 큰 규모로, 그리고 더 많은 AWS 리전에 걸쳐 점진적으로 롤아웃되며, 배포 간 베이크 타임은 줄어듭니다.

EKS Auto Mode는 사용자가 모든 컨트롤 플레인 업그레이드를 제어하고 트리거할 수 있도록 합니다. 데이터 플레인 업데이트의 경우, 사용자는 Pod Disruption BudgetNode Disruption Budget을 사용하여 업데이트 프로세스를 관리할 수 있습니다. 이러한 도구들은 파드 및 노드 수준 모두에서 세밀한 제어를 제공합니다:

  • Pod Disruption Budget은 업데이트 중 특정 워크로드에 허용되는 최대 중단 횟수를 정의합니다.
  • Node Disruption Budget은 사용자가 유지보수 윈도우를 지정하고 동시에 업데이트할 수 있는 노드 수를 제어할 수 있게 합니다.

AWS가 보안 패치가 포함된 새로운 EKS Auto Mode AMI를 릴리스할 때, EKS Auto Mode는 Kubernetes 스케줄링 제약 조건과 구성된 중단 예산(disruption budgets)을 준수하면서 워커 노드를 자동으로 업그레이드할 수 있습니다. Amazon EKS 모범 사례 문서는 업데이트 중 애플리케이션 안정성 유지를 위한 구체적인 권장 사항과 같이 이러한 제어를 효과적으로 구현하는 방법에 대한 상세한 지침을 제공합니다.

결론

Amazon EKS Auto Mode는 사용자가 AWS에서 Kubernetes를 실행하는 방식에 있어 중요한 진화를 나타냅니다. 보안 컴퓨팅 관리를 위한 Amazon EC2 관리형 인스턴스, 컨테이너 최적화 운영 체제인 Bottlerocket, 그리고 필수 기능을 위한 내장 노드 기능을 결합함으로써, EKS Auto Mode는 사용자가 인프라 관리에서 애플리케이션 개발로 초점을 전환할 수 있도록 합니다. 노드 구성 요소 설정, 보안 패치 관리, 그리고 운영 도구 유지보수에 시간을 소비하는 대신, 사용자는 비즈니스에 중요한 애플리케이션 배포와 확장에 집중할 수 있습니다.

EKS Auto Mode를 시작할 준비가 되셨나요? eksctl, AWS CLI, AWS Management Console, EKS API 또는 선호하는 Infrastructure-as-Code 도구를 사용하여 새로운 EKS Auto Mode 클러스터를 배포하거나 기존 클러스터에서 EKS Auto Mode를 활성화할 수 있습니다. 워크로드 배포 과정을 안내하고 Auto Mode의 기능을 탐색할 수 있는 실습 워크숍을 체험해 보세요. 본인의 AWS 계정에서 실행하거나 AWS 주최 이벤트에 등록할 수 있습니다.

Ryann Keum

Ryann Keum

금나연 Cloud Support Engineer는 Amazon EKS 서비스의 Subject Matter Expert(SME)로 활동하며, Containers, Infrastructure as Code (IaC), 그리고 Code Delivery and Analysis (CDA) 분야의 전문가로서 고객들의 복잡한 기술적 도전과제를 해결하는 데 전념하고 있습니다.