01. eksctl에서 AWS EKS 배포
myeks-host에서 eksctl create cluster 명령을 수행하면 단일 EKS 클러스터가 구성이 된다. 이 때, 옵션에 따라 다르지만 eksctl 명령어 한 번으로 EKS 클러스터는 물론이고 노드그룹까지 한 번에 생성이 가능하다. 우선 eksctl create cluster 명령으로 EKS 클러스터를 위한 IAM 역할을 생성하고 Control Plane을 구성, kubeconfig 정보를 업데이트 하는 순서로 이어진다.
eksctl이 EKS 클러스터 생성을 위한 다양한 리소스를 동적으로 만드는 원리는 Cloudformation을 활용한 것이다. 요청에 의해 CloludFormation 스택을 생성하고, 스택에 정의된 자원을 동적으로 생성한다. 추가적으로 EKS 클러스터는 EKS 클러스터를 위한 클러스터 IAM 역할과 노드 IAM 역할이 생성되고, Control Plane과 Node Group이 동적으로 생성된다.
01-1. eksctl 테스트
# 실습에 앞서 확인해야 하는 환경 변수
echo $AWS_DEFAULT_REGION
echo $CLUSTER_NAME
echo $VPCID
echo $PubSubnet1
echo $PubSubnet2
실습에 앞서 확인해야 하는 환경변수는 위와 같다
# eksctl 명령어
eksctl
# eksctl create 명령어
eksctl create
# eksctl create cluster or nodegroup 명령어(--help)
eksctl create cluster -h
eksctl create nodegroup -h
# 지원하는 K8s 버전 정보
eksctl create cluster -h | grep version
eksctl 관련 커멘드는 위와 같으며 create, delete 등의 명령어를 통해 클러스터 구성이 가능하다
01-2. eksctl create cluster
# 클러스터 + 노드그룹 생성
eksctl create cluster \
--name $CLUSTER_NAME \
--region=$AWS_DEFAULT_REGION \
--dry-run | yh
# 노드 그룹 생성 없이 클러스터만 생성
eksctl create cluster \
--name $CLUSTER_NAME \
--region=$AWS_DEFAULT_REGION \
--without-nodegroup \
--dry-run | yh
# 노드 그룹 생성 없이 클러스터 생성 + 가용영역은 A, C zone
eksctl create cluster \
--name $CLUSTER_NAME \
--region=$AWS_DEFAULT_REGION \
--without-nodegroup \
--zones=ap-northeast-2a,ap-northeast-2c \
--dry-run | yh
# EKS 클러스터 생성 확인
# 노드 그룹 생성(이름, 인스턴스 타입, EBS 볼륨, SSH 접속), 가용 영역, VPC IP 대역
eksctl create cluster \
--name $CLUSTER_NAME \
--region=$AWS_DEFAULT_REGION \
--nodegroup-name=$CLUSTER_NAME-nodegroup \
--node-type=t3.medium \
--node-volume-size=30 \
--zones=ap-northeast-2a,ap-northeast-2c \
--vpc-cidr=172.x.x.x/16 \
--ssh-access \
--dry-run | yh
accessConfig:
authenticationMode: API_AND_CONFIG_MAP # 인증 모드는 API 및 ConfigMap 사용
addonsConfig: {} # 추가 기능 (addons) 설정 (현재 없음)
apiVersion: eksctl.io/v1alpha5 # eksctl 설정 파일의 API 버전
availabilityZones: # 클러스터가 사용할 가용영역 지정
- ap-northeast-2a
- ap-northeast-2c
cloudWatch:
clusterLogging: {} # Cloudwatch 로깅 설정
iam:
vpcResourceControllerPolicy: true # VPC 리소스 컨트롤러 IAM 정책을 활성화 후 리소스 관리 가능
withOIDC: false # OIDC 제공자를 비활성화 (IAM Roles for service accounts)
kind: ClusterConfig # 클러스터 구성 파일 종류
kubernetesNetworkConfig:
ipFamily: IPv4 # IPv4 사용
managedNodeGroups: # 관리형 노드 그룹 설정
- amiFamily: AmazonLinux2023 # AWS Linux 2023 AMI 사용
desiredCapacity: 2 # 원하는 노드 개수
disableIMDSv1: true
disablePodIMDS: false
iam:
withAddonPolicies:
albIngress: false
appMesh: false
appMeshPreview: false
autoScaler: false
awsLoadBalancerController: false
certManager: false
cloudWatch: false
ebs: false
efs: false
externalDNS: false
fsx: false
imageBuilder: false
xRay: false
instanceSelector: {}
instanceType: t3.medium
labels:
alpha.eksctl.io/cluster-name: myeks
alpha.eksctl.io/nodegroup-name: myeks-nodegroup
maxSize: 2
minSize: 2
name: myeks-nodegroup
privateNetworking: false
releaseVersion: ""
securityGroups:
withLocal: null
withShared: null
ssh:
allow: true
publicKeyPath: ~/.ssh/id_rsa.pub
tags:
alpha.eksctl.io/nodegroup-name: myeks-nodegroup
alpha.eksctl.io/nodegroup-type: managed
volumeIOPS: 3000
volumeSize: 30
volumeThroughput: 125
volumeType: gp3
metadata:
name: myeks
region: ap-northeast-2
version: "1.30"
privateCluster:
enabled: false
skipEndpointCreation: false
vpc:
autoAllocateIPv6: false # 자동 IPv6 할당 비활성화
cidr: 172.x.x.x/16 # VPC의 CIDR 블록 설정
clusterEndpoints: # 클러스터 엔드포인트 접근 방식
privateAccess: false # 프라이빗 비활성화
publicAccess: true # 퍼블릭 활성화
manageSharedNodeSecurityGroupRules: true # 노드 공유 보안 그룹 규칙 자동 관리
nat:
gateway: Single
01-3. eks 클러스터 + 관리형 노드 그룹 생성
# EKS 클러스터 및 관리형 노드 그룹 생성 전 정보 확인 (dry-run 옵션)
eksctl create cluster \
--name $CLUSTER_NAME \
--region=$AWS_DEFAULT_REGION \
--nodegroup-name=$CLUSTER_NAME-nodegroup \
--node-type=t3.medium \
--node-volume-size=30 \
--vpc-public-subnets "$PubSubnet1, $PubSubnet2" \
--version 1.33 \
--ssh-access \
--external-dns-access \
--dry-run | yh
# EKS 클러스터 및 관리형 노드 그룹 생성
eksctl create cluster \
--name $CLUSTER_NAME \
--region=$AWS_DEFAULT_REGION \
--nodegroup-name=$CLUSTER_NAME-nodegroup \
--node-type=t3.medium \
--node-volume-size=30 \
--vpc-public-subnets "$PubSubnet1, $PubSubnet2" \
--version 1.33 \
--ssh-access \
--external-dns-access \
--verbose 4
- —name: 클러스터명 지정
- —region: EKS 클러스터의 리전 지정
- —nodegroup-name: 노드 그룹 이름 지정
- —node-type: 노드의 EC2 인스턴스 유형 지정
- —node-volume-size: 노드의 EBS 볼륨 크기 지정
- —vpc-public-subnets: 퍼블릭 서브넷 지정
- —version: EKS 클러스터 버전 지정
- —ssh-access: SSH 접근 허용(기본적으로 false임)
- —external-dns-access: external-dns 컨트롤러가 Route 53을 관리할 수 있도록 IAM 정책 적용
- —verbose: eksctl 실행 로그 출력 수준(verbosity level) 조정
01-4. eksctl 기반 생성 리소스 구성도

- 우선 eksctl create cluster를 수행하면 위와 같은 리소스가 생성이 된다
- 후에 EKS 클러스터 IAM과 EKS 노드 IAM이 연결되어 자격 증명을 수행한다
- AWS Managed VPC에는 Control Plane, 사용자 VPC에는 워커 노드가 구성된다
- Cluster Access Endpoint는 기본 값이 퍼블릭으로 구성된다
- API 서버와 워커 노드 간의 통신을 위해 eks owned ENI가 구성된다
99. 참고 자료
실습 개요 | CloudNet@와 함께하는 Amazon EKS 기본 강의
실습 개요
www.inflearn.com
'Public Cloud > AWS - EKS CloudNet@' 카테고리의 다른 글
| [EKS] AWS VPC CNI? (0) | 2025.09.11 |
|---|---|
| [EKS] eksctl에서 AWS EKS 확인 및 설정 (0) | 2025.09.09 |
| [EKS] 관리 콘솔에서 EKS 배포 (0) | 2025.09.09 |
| [EKS] CloudFormation 기본 인프라 배포 (0) | 2025.09.09 |
| [EKS] AWS EKS 소개 및 배포, Control Plane과 Data Plan 그리고 Cluster Endpoint Access (0) | 2025.09.09 |