AWS의 EKS 시작하기: 기초부터 클러스터 구축까지
안녕하세요! 오늘은 제가 최근에 Amazon EKS(Elastic Kubernetes Service)를 이용한 클러스터 구성에 대한 후기를 공유하려고 합니다. 이전에는 Ansible을 사용하여 Kubernetes 클러스터를 구성했었는데, 이번에 EKS를 통해 클러스터를 구성해보며 느낀 점들을 솔직하게 나누고자 합니다.
개요
kubernetes는 컨테너화된 애플리케이션의 배포, 확장 및 관리를 자동화하는 오픈소스 시스템입니다. AWS의 Elastic Kubernetes Service(EKS)는 AWS 클라우드에서 쿠버네티스를 쉽고 빠르게 실행할 수 있도록 해주는 관리형 서비스입니다.
간단한 커맨드라인으로 쿠버네티스 클러스터의 구성요소들의 설치와 설정이 자동으로 이루어지기 때문에, 개발자는 이미 안정적으로 만들어진 클러스터에 어플리케이션만 배포하면 된다.
준비사항
윈도우 용 패키지 관리자 설치
Installing Chocolatey
Chocolatey is software management automation for Windows that wraps installers, executables, zips, and scripts into compiled packages. Chocolatey integrates w/SCCM, Puppet, Chef, etc. Chocolatey is trusted by businesses to manage software deployments.
chocolatey.org
# Windows PowerShell 관리자 권한으로 실행
# 설치 확인 명령어
$ choco
# eksctl 설치
$ choco install eksctl
# awscli 설치
$ choco install awscli
# kubectl 설치
choco install kubernetes-cli --version=1.29
AWS Configure 구성
# AWS 키 생성
AWS 루트 계정 로그인 -> 우측 상단 내 계정 클릭 -> 보안 자격 증명 -> 엑세스 키 만들기
# aws configure 구성
$ aws configure

EKS IAM 설정
- 클러스터 IAM 역할 생성



- 워커노드 IAM 역할 생성
# 워커노드는 EC2에서 동작하기 때문에 새로운 IAM 역할 생성
서비스 : EC2
권한 정책
AmazonEKS_CNI_Policy : EKS 클러스터 내의 Pod가 AWS의 네트워킹 서비스와 통신할 수 있도록 필요한 권한
AmazonEKSWorkerNodePolicy : EKS 워커 노드가 EKS 클러스터와 통신하고 관리될 수 있도록 필요한 권한
AmazonEC2ContainerRegistryReadOnly : ECR에 저장된 컨테이너 이미지 읽기 전용 접근 권한
EKS 구성파일 준비
# yaml
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
name: my-cluster-test
region: us-west-2
version: "1.29"
iam:
serviceRoleARN: arn:aws:iam::533266979611:role/cluster
withOIDC: true
serviceAccounts: []
nodeGroups:
- name: my-nodes
instanceType: c1.medium
desiredCapacity: 2
iam:
instanceRoleARN: arn:aws:iam::533266979611:role/worker
EKS 클러스터 생성
$ eksctl create cluster -f cluster-config.yaml

kubeconfig 설정
kubectl 명령어로 클러스터에 접근하기 위해 config 파일 생성
$ aws eks --region ap-northeast-2 update-kubeconfig --name my-cluster-test
# 노드 조회
$ kubectl get node

# pod 조회
$ kubectl get pod -A

kubeconfig 설정
Console이나 AWS CLI로 클러스터 삭제하면 Elastic IP, NAT 등이 남아 요금이 부과될 수 있으니 클러스터 삭제할 때 eksctl을 사용해야한다.
$ eksctl delete cluster --name my-cluster-test --region ap-northeast-2
마치며
kubernetes 클러스터를 Ansible로 구성할 때 세밀한 설정을 할 수 있었지만 그럴수록 더 복잡했고 클러스터 구성과 관리에 있어 상당한 시간과 노력이 필요했었다. 특히 초기 설정이나 환경 변경 시에 많은 스크립트를 수정하고 테스트하는 과정이 반복했었지만 EKS 클러스터를 eksctl로 구성하니 클러스터 구성이 단순해서 편리했다.
추가로 EKS 클러스터는 AWS Console과 AWS CLI 명령어로 생성할 수 있지만 eksctl을 사용하면 선언적 구성으로 인프라를 코드로 관리할 수 있으며 버전관리 시스템을 통해 변경 사항 추적할 수 있고 VPC, IAM, EC2 인스턴스 타입, CloudFormation 스택, Auto Scaling Group 등을 쉽게 설정할 수 있어 클러스터를 운영하는데 필요한 다양한 서비스와 연동을 간편하게 만들 수 있다고 한다.