AWS EKS(Amazon Elastic Kubernetes Service) 생성 가이드 요약
1. EKS란?
EKS(Amazon Elastic Kubernetes Service)는 AWS에서 제공하는 쿠버네티스 관리형 서비스이다.
쿠버네티스를 직접 구축·운영할 때 필요한 마스터 노드 관리, 보안 설정, 업데이트 등의 작업을 AWS가 대신 처리해줌.
핵심 특징
| 특징 | 설명 |
|---|---|
| 관리형 컨트롤 플레인 | 쿠버네티스의 컨트롤 플레인을 AWS가 직접 운영, 가용성 자동 관리 |
| 높은 보안성 | AWS IAM과 연동되어 권한 관리가 세밀하고 안전 |
| 유연한 컴퓨팅 옵션 | EC2: 서버 직접 제어 / Fargate: 서버리스 방식 |
| 표준 쿠버네티스 준수 | 오픈소스 쿠버네티스와 100% 호환 |
EKS를 쓰는 이유 (장점)
| 특징 | 설명 |
|---|---|
| 운영 부담 감소 | 업데이트, 패치, 백업 등 복잡한 인프라 관리를 AWS에 위임 |
| 고가용성 | 컨트롤 플레인이 여러 가용 영역(AZ)에 복제되어 안정성 확보 |
| 에코시스템 | ELB, VPC, CloudWatch 등 AWS 서비스와 연동 |
동작 구조
- 클러스터 생성: AWS 콘솔 또는 CLI에서 EKS 클러스터 생성
- 노드 연결: 컨테이너가 실행될 서버(EC2 또는 Fargate)를 클러스터에 연결
- 애플리케이션 배포:
kubectl등 표준 도구로 컨테이너 이미지 배포
2. EKS 생성 - 권한 준비
- AWS 콘솔 IAM에서 계정 생성 후 Admin 권한 부여
- Access Key, Secret Key 생성 후 안전한 곳에 보관
- 명령 서버 또는 PC에서 AWS CLI 설정:
aws configure
# AWS Access Key ID: AKIA2E...
# AWS Secret Access Key: JGgwvJFIQM...
# Default region name: ap-northeast-2
# Default output format: (엔터)
3. OS별 EKS 설치법
Windows (PowerShell - 관리자 권한)
# AWS CLI
msiexec.exe /i https://awscli.amazonaws.com/AWSCLIV2.msi
# eksctl (Chocolatey 경유)
Set-ExecutionPolicy Bypass -Scope Process -Force; ...
choco install eksctl
# kubectl
curl.exe -LO "https://dl.k8s.io/release/v1.28.0/bin/windows/amd64/kubectl.exe"
macOS (Homebrew)
brew install awscli eksctl kubectl
Linux (Ubuntu / Amazon Linux 2)
# AWS CLI v2
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
# eksctl
curl --silent --location \
"https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" \
| tar xz -C /tmp
sudo mv /tmp/eksctl /usr/local/bin
# kubectl
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
참고: AWS CloudFormation으로 EC2 1대를 생성하여 EKS 생성 명령 서버로 활용하는 방법도 있음.
4. eksctl로 EKS 클러스터 생성
YAML 설정 파일 작성
# eks-freetier-setup.yaml
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
name: free-vpc-cluster
region: ap-northeast-2
version: "1.34"
vpc:
clusterEndpoints:
publicAccess: true
privateAccess: true
nat:
gateway: Single # 비용 절감: NAT 게이트웨이 1개만 생성
managedNodeGroups:
- name: standard-nodes
# 인스턴스 타입 가이드:
# t3.micro : 프리티어 (K8s 시스템 Pod 실행 시 리소스 부족 가능)
# t3.small : 가성비 추천 (시스템 안정성 확보)
# c7i-flex.large (2cpu/4gb): 연산 위주
# m7i-flex.large (2cpu/8gb): 메모리 여유
instanceType: t3.small
minSize: 1
maxSize: 2
desiredCapacity: 1 # 비용 절감: 노드 1대로 시작
privateNetworking: true
iam:
withAddonPolicies:
imageBuilder: true
autoScaler: true
cloudWatch: true
addons:
- name: vpc-cni
- name: coredns
- name: kube-proxy
클러스터 생성 명령
eksctl create cluster -f eks-freetier-setup.yaml
# 약 15분 소요 (내부적으로 CloudFormation을 사용하여 생성)
# 생성 확인
kubectl get nodes
5. 다른 리눅스에서 kubectl get nodes 되게 하기
다른 리눅스 서버에서 EKS 클러스터에 접속하려면 두 가지 작업이 필요
1단계: 도구 설치 (AWS CLI + kubectl)
위의 Linux 설치 방법 참고
2단계: AWS 자격 증명 설정
aws configure
# IAM 사용자의 Access Key, Secret Key 입력
3단계: kubeconfig 업데이트 (가장 중요)
aws eks update-kubeconfig --region ap-northeast-2 --name free-vpc-cluster
# 클러스터 이름이 정확히 일치해야 함.
kubectl get nodes
6. Kubernetes 내부 ConfigMap 등록
클러스터를 생성한 계정(A)과 접속할 계정(B)이 다른 경우, aws-auth ConfigMap에 계정 B를 등록해야 함.
방법 A: eksctl 사용 (권장)
# Windows PowerShell
eksctl create iamidentitymapping `
--cluster free-vpc-cluster `
--region ap-northeast-2 `
--arn arn:aws:iam::계정ID:user/사용자명 `
--group system:masters `
--username admin-user
방법 B: ConfigMap 직접 수정
kubectl edit -n kube-system configmap/aws-auth
data:
mapUsers: |
- userarn: arn:aws:iam::계정ID:user/사용자명
username: admin-user
groups:
- system:masters
리눅스 서버에서 접속 설정 업데이트
aws configure # 계정 B의 Access Key 등록
aws eks update-kubeconfig --region ap-northeast-2 --name free-vpc-cluster
kubectl get nodes
# 현재 로그인된 사용자 ARN 확인
aws sts get-caller-identity
⚠️
system:masters는 슈퍼 유저 권한. 실제 운영 환경에서는 필요한 권한만 가진 별도의 Role을 만드는 것을 권장.
7. 삭제
# EKS 클러스터 삭제 (약 5분 소요)
eksctl delete cluster --name free-vpc-cluster
삭제 후 아래 리소스도 수동으로 확인하여 정리:
- CloudFormation 스택
- 로드밸런서
- VPC