개요
간단히 EKS에 대해서 알아보고, AWS에서 직접 클러스터를 생성해보는 실습을 진행하려고 한다. 이번엔 프로젝트 적용을 위한 것이 아닌 개인 학습의 일환이기 때문에 뒤에서 알아볼 eksctl이라는 오픈소스 명령어 도구는 사용하지 않기로 했다.
EKS(Elastic Kubernetes Service)
Amazon Elastic Kubernetes Service(EKS)는 AWS 클라우드와 자체 데이터 센터에서 Kubernetes 클러스터를 손쉽게 구축, 운영할 수 있는 완전관리형 서비스다. EKS는 Kubernetes 컨트롤 플레인의 가용성과 확장성을 관리하여 사용자가 인프라 관리보다 애플리케이션 배포에 집중할 수 있게 한다. 쿠버네티스는 컨테이너식 애플리케이션의 배포, 확장 및 관리를 자동화하기 위한 오픈 소스 시스템으로, EKS는 이를 기반으로 운영된다.
주요 특징
EKS는 다양한 특징을 제공하여 운영 효율성과 안정성을 향상시킨다.
- 완전관리형 서비스 AWS가 Kubernetes 클러스터 설정, 운영, 유지 관리의 복잡한 작업을 대신 수행한다
- 고가용성 여러 AWS 가용 영역에 컨트롤 플레인을 분산 배포하여 높은 가용성을 보장한다
- AWS 서비스 통합 AWS의 다양한 서비스(로드 밸런싱, IAM, VPC 등)와 긴밀하게 통합된다
- 호환성 오픈 소스 Kubernetes의 최신 버전을 실행하므로 기존 플러그인과 도구를 그대로 활용할 수 있다
- 보안 및 규정 준수 AWS의 보안 서비스와 통합되어 데이터 보호 및 규정 준수를 지원한다
- 자동 확장 기능 Cluster Autoscaler, HPA, VPA를 지원하여 리소스를 동적으로 조정할 수 있다
EKS 접근 방식
Amazon EKS는 두 가지 주요 접근 방식을 제공한다.
- EKS 표준 AWS가 Kubernetes 컨트롤 플레인을 관리하며, 노드 관리, 워크로드 예약, AWS 클라우드 통합 등의 구성 요소가 자동으로 처리된다
- EKS Auto Mode EKS가 노드(Kubernetes 데이터 플레인)도 관리하도록 제어를 확장한다. 인프라 자동 프로비저닝, 최적의 컴퓨팅 인스턴스 선택, 리소스 동적 확장 등을 지원한다
EKS 아키텍처
EKS는 크게 두 부분으로 구성된다. AWS가 관리하는 컨트롤 플레인과 사용자가 관리하는 데이터 플레인(워커 노드).
컨트롤 플레인 아키텍처
EKS 컨트롤 플레인은 API 서버와 ETCD 클러스터의 고가용성 확보를 위해 여러 가용 영역(AZ)에 분산 배포된다. 주요 구성 요소는 다음과 같다.
- API 서버(kube-apiserver) 클러스터의 중앙 허브 역할을 하며, 모든 요청을 처리하고 인증 및 유효성 검사를 수행한다
- 컨트롤러 매니저(kube-controller-manager) 클러스터 상태를 모니터링하고 관리한다
- ETCD 클러스터 클러스터 데이터를 저장하는 분산 데이터베이스로, 고가용성을 위해 ELB를 통해 관리된다
네트워크 측면에서, API 서버는 NLB(Network Load Balancer)를 사용하여 TCP 프로토콜로 통신하면서 높은 처리량과 낮은 지연시간을 제공한다. ETCD 클러스터는 ELB(Elastic Load Balancer)를 통해 접근하여 트래픽을 균등하게 분산하고, 특정 노드 장애 시에도 시스템 영향을 최소화한다.
워커 노드 아키텍처
워커 노드는 사용자가 직접 관리하며, 사용자의 VPC 내부에 구축된다. 노드들은 다음과 같은 특징을 갖는다.
- 서로 상이한 AZ에 위치하여 재해복구시간 최소화 및 고가용성 확보
- kubelet, kube-proxy 등 일반적인 쿠버네티스 클러스터 구성 요소 포함
- EKS owned ENI(Elastic Network Interface)를 통해 컨트롤 플레인과 통신
EKS with Fargate
EKS는 AWS Fargate와 함께 사용할 수 있어 워커 노드 인스턴스 관리 책임을 줄일 수 있다.
- AWS Fargate 환경의 Micro VM을 이용하여 Pod별로 VM 할당
- 카타 컨테이너 기술을 활용하여 커널을 공유하지 않는 독립적인 환경 제공
- 보안성 강화와 네트워크 성능 개선 효과
EKS 사용의 장단점
장점
- 완전관리형 서비스 복잡한 쿠버네티스 클러스터 관리를 AWS가 대신함
- 확장성 AWS의 다양한 서비스와 연동 가능하며, AWS Fargate와 함께 사용해 서버리스 컨테이너 실행 가능
- 보안 및 준수 AWS IAM을 통한 클러스터 보안 강화와 다양한 AWS 보안 서비스 연동
단점
- 비용 완전관리형 서비스로 추가 비용이 발생하며, EC2 인스턴스 등 리소스에 대한 비용도 추가로 청구됨
- 복잡성 쿠버네티스에 대한 이해가 필요하며 학습 곡선이 가파름
- 유연성 제한 AWS에서 관리하는 서비스로 컨트롤 플레인의 세부 설정 변경이 제한적임
eksctl 도구 소개
eksctl은 Amazon EKS 클러스터를 생성하고 관리하기 위한 명령줄 유틸리티다. 내부적으로는 AWS의 CloudFormation 서비스를 사용하여 EKS 구성에 필요한 EC2, IAM Role 등의 AWS 리소스를 자동으로 생성한다.
eksctl 사용 준비
eksctl을 사용하기 위해서는 다음과 같은 도구들도 함께 설치해야 한다
- kubectl 쿠버네티스 API 서버와 통신하기 위한 CLI 도구
- AWS CLI AWS 서비스와 상호 작용하기 위한 명령줄 인터페이스
# kubectl 설치 예시 (Linux)
curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.21.2/2021-07-05/bin/linux/amd64/kubectl
chmod +x ./kubectl
mkdir -p $HOME/bin && cp ./kubectl $HOME/bin/kubectl && export PATH=$PATH:$HOME/bin
eksctl 기본 사용법
eksctl을 사용한 EKS 클러스터 생성은 두 가지 방식으로 가능하다
1. 명령줄을 통한 직접 생성
# 기본 EKS 클러스터 생성
eksctl create cluster --name my-cluster --region ap-northeast-2 --nodes 3
2. YAML 설정 파일을 통한 생성
# cluster.yaml
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
name: eks-cluster
region: ap-northeast-2
vpc:
subnets:
private:
ap-northeast-2a: {id: subnet-xxx}
ap-northeast-2b: {id: subnet-yyy}
nodeGroups:
- name: ng-workers
labels: {role: worker}
instanceType: t2.micro
desiredCapacity: 2
privateNetworking: true
ssh:
allow: true
# YAML 파일을 사용한 클러스터 생성
eksctl create cluster -f cluster.yaml
EKS 클러스터 구성 단계
EKS 클러스터를 AWS Management Console을 통해 구성하는 단계는 다음과 같다.
- AWS CLI 설치 로컬 환경에서 AWS CLI를 설치하고 설정
- kubectl 설치 쿠버네티스 클러스터를 제어하기 위한 커맨드라인 도구 설치
- IAM 역할 생성
- EKS 클러스터 IAM 역할 AmazonEKSClusterPolicy 정책 추가
- EKS 워커노드 IAM 역할 AmazonEKSWorkerNodePolicy, AmazonEKS_CNI_Policy 정책 추가
- VPC 및 서브넷 생성 클러스터와 노드가 위치할 네트워크 환경 구성
- EKS 클러스터 생성 앞서 생성한 IAM 역할과 VPC를 사용하여 클러스터 생성
- kubeconfig 생성 로컬에서 클러스터 접근을 위한 설정 파일 생성
- 노드 그룹 생성 클러스터에서 워크로드를 실행할 워커 노드 그룹 생성
EKS의 관리 인터페이스
EKS는 다양한 관리 인터페이스를 제공하여 클러스터의 프로비저닝, 관리 및 유지를 지원한다.
- AWS Management Console
- Amazon EKS API/SDK
- CDK
- AWS CLI
- eksctl CLI
- AWS CloudFormation
- Terraform
이러한 다양한 인터페이스를 통해 사용자는 자신의 요구사항과 기술 스택에 맞게 EKS 클러스터를 관리할 수 있다.
AWS에서 클러스터 생성
눈에 익힐 용도로 직접 AWS에서 클러스터를 생성해보자.
들어가면 보이겠지만 프로덕션 수준의 기본 설정으로 클러스터를 빠르게 생성할 수 있는 빠른 구성이 있고, 사용자가 지정할 수 있는 옵션을 제공하는 사용자 지정 구성이 있다.
AWS에서 제공하는 kubernetes cluster이므로 최소 권한의 원칙에 따라 IAM 역할을 정해줘야 한다. 물론 워커 노드도 마찬가지다.
VPC와 서브넷을 반드시 구성해놔야 한다. 여기서는 GUI로 생성할 수 있지만 하나하나 직접 구성하는 것보다 미리 작성해둔 yaml 파일로 cloudformation에서 구성하는 것이 시간 효율적이다.
모든 간단한 설정을 마친 후에 생성을 누르면 다음과 같이 클러스터가 생성된 것을 확인할 수 있다.
중간에 있는 리소스 탭을 누르면 다음과 같이 생성한 리소스(파드, 네트워크, 볼륨 등등)들을 확인할 수 있다.
이제 원한다면 터미널 환경에서 직접 리소스를 구성할 수 있다.
Fargate와 EKS auto mode(자율 모드)를 꼭 고려해보자.
클라우드 서비스를 사용할 때 고려해야 할 대목 중 하나는 비용이다. Fargate와 EKS auto mode는 비용최적화를 고민할 때 고를 수 있는 선택지다. SAA 혹은 관련 자격증을 취득하였으면 Fargate에 대해서 알고 있을 테니 auto mode만 가볍게 짚어보자!
EKS Auto Mode는 AWS가 Kubernetes 클러스터의 인프라를 자동으로 관리하는 완전 관리형 서비스이다. 사용자는 애플리케이션 개발에만 집중하고, 노드 프로비저닝과 확장, 보안 패치, 업그레이드 같은 인프라 관리는 AWS가 처리한다. 자동 스케일링으로 워크로드에 맞게 노드를 조정하고, 변경 불가능한 AMI와 노드 수명 제한으로 보안을 강화하며, 미사용 인스턴스 종료를 통해 비용을 최적화한다. 또한 Pod IP 할당, 네트워킹, 스토리지 같은 핵심 구성 요소도 자동으로 관리한다.
아래는 AWS 홈페이지 홍보하는 실사례다.
- 프론트엔드: 0.5 vCPU, 1GB 메모리 (6개 포드 필요)
- 백엔드: 2 vCPU, 5GB 메모리 (10개 포드 필요)
- 배치 데이터 처리: 1 vCPU, 8GB 메모리 (2개 포드 필요)
배치 데이터 처리 포드를 제외한 모든 포드는 고가용성을 위해 최소 2개의 가용 영역에서 실행된다. 미국 서부(오리건) 리전에 배포! EKS Auto Mode는 c6a.2xlarge, c6a.4xlarge, m5a.2xlarge, m5a.xlarge 인스턴스를 조합하여 가장 비용 효율적인 솔루션을 제공한다고 한다.
인스턴스 유형 | 수량 | EC2 인스턴스 비용 (USD) | EKS Auto Mode 관리 요금 (USD) |
c6a.2xlarge | 1 | 0.306 | 0.03672 |
c6a.4xlarge | 1 | 0.612 | 0.07344 |
m5a.2xlarge | 1 | 0.344 | 0.04128 |
m5a.xlarge | 1 | 0.172 | 0.02064 |
시간별 총액 | 1.434 | 0.17208 | |
월별 총액 | 1,046.82 | 125.62 |
'Cloud' 카테고리의 다른 글
[AWS] CloudWatch (0) | 2025.05.08 |
---|---|
[AWS] Lambda (1) | 2025.05.07 |
[AWS] IAM (0) | 2025.05.07 |
[AWS] VPC (0) | 2025.05.02 |
[AWS] CloudFormation (0) | 2025.05.02 |