본문으로 건너뛰기
김신건의 로그

[AWS] EKS: managed Kubernetes

· 수정 · 📖 약 3분 · 1,122자/단어 #aws #eks #kubernetes #cloud #container
EKS, Amazon EKS, EKS Fargate, managed node group, Karpenter on EKS, EKS Anywhere, IRSA, EKS Pod Identity

정의

EKS (Elastic Kubernetes Service) = AWS 의 managed K8s control plane. worker node 는 사용자 (또는 Fargate). AWS IAM / VPC / ALB 등 AWS 통합.

control plane (etcd, API server, scheduler, controller manager) 을 AWS 가 완전 관리. 업그레이드, HA, 패치 포함. 사용자는 worker node 와 workload 만 책임.

아키텍처

flowchart TB
    User["kubectl / CI-CD"] --> CP["EKS Control Plane\n(AWS managed, Multi-AZ)"]
    CP --> NG["Managed Node Group\n(EC2 Auto Scaling)"]
    CP --> SN["Self-managed Nodes\n(EC2 직접)"]
    CP --> FG["Fargate Profile\n(serverless)"]
    NG --> Pods1[Pods]
    SN --> Pods2[Pods]
    FG --> Pods3[Pods]
    CP --> Addons["EKS Add-ons\n(CNI, CoreDNS, CSI)"]

Worker 3가지

종류의미관리 주체
Managed Node GroupEC2, AWS 가 자동 관리 + Auto ScalingAWS
Self-managed NodesEC2, 사용자 직접 ami/lifecycle 관리사용자
Fargate노드 없음, 서버리스, pod 단위 과금AWS

Karpenter = managed node group 의 진화. 더 빠른 scaling (초 단위) + spot 자동 활용 + 노드 통합(consolidation).

IAM Roles for Service Accounts (IRSA)

Pod 별 IAM 권한 부여의 표준. node IAM role 을 공유하지 않고 SA 단위로 분리.

apiVersion: v1
kind: ServiceAccount
metadata:
  name: s3-uploader
  annotations:
    eks.amazonaws.com/role-arn: arn:aws:iam::123456789:role/s3-uploader
sequenceDiagram
    participant Pod
    participant OIDC as "EKS OIDC Provider"
    participant STS as "AWS STS"
    participant S3

    Pod->>OIDC: JWT token (ServiceAccount)
    OIDC-->>Pod: signed token
    Pod->>STS: AssumeRoleWithWebIdentity(token)
    STS-->>Pod: temporary credentials
    Pod->>S3: API call (credentals)
  • OIDC provider 를 EKS cluster 에 연결 (cluster 당 1회)
  • SA 에 annotate 된 role 을 STS 로 assume
  • pod 내 SDK 가 자동으로 credentials 갱신

IMPORTANT

IRSA 가 2026 현재 표준. 옛 node IAM role 공유 방식은 node 위 모든 pod 가 동일 권한 = 최소 권한 원칙 위반.

EKS Pod Identity (2023+)

IRSA 의 간소화 버전. OIDC provider 설정 없이도 동작. EKS Pod Identity Agent add-on 필요.

aws eks create-pod-identity-association \
  --cluster-name prod \
  --namespace default \
  --service-account s3-uploader \
  --role-arn arn:aws:iam::123456789:role/s3-uploader
항목IRSAPod Identity
OIDC provider 필요아니오
설정 복잡도중간낮음
교차 계정가능가능
add-on 필요아니오예 (agent)

EKS Add-ons

AWS 가 관리하는 권장 add-on. EKS 콘솔 / API 로 버전 관리.

Add-on역할
VPC CNIPod IP 할당 (AWS VPC native)
CoreDNS클러스터 내부 DNS
kube-proxy서비스 네트워크 규칙
EBS CSI driverPersistent Volume (EBS)
EFS CSI driver공유 스토리지 (EFS)
AWS Load Balancer ControllerALB/NLB 자동 프로비저닝
ADOTOpenTelemetry 수집
GuardDuty Agent컨테이너 위협 탐지
Karpenter노드 자동 프로비저닝

VPC CNI 와 IP 관리

EKS 기본 CNI = AWS VPC CNI. Pod 가 VPC IP 를 직접 할당.

장점: VPC 내 native. SG, NetworkPolicy, VPC flow logs 그대로 적용. AWS LB 통합 자연스러움.

단점: IP 소모가 큼. EC2 instance type 별 ENI / IP 한도 존재.

c5.large = 최대 3 ENI × 10 IP = 30 Pod 한도
m5.4xlarge = 8 ENI × 30 IP = 240 Pod 한도

해결책:

  • secondary CIDR 추가 (100.64.0.0/16 등)
  • prefix delegation 활성 (ENI 당 /28 블록 할당, Pod 한도 대폭 확대)
  • 대안 CNI: Cilium (eBPF, overlay), Calico

비용

항목요금
Control Plane73/월)
Managed Node GroupEC2 온디맨드 / 스팟 가격
FargatevCPU 0.004445/GB/시간
EKS Anywhere별도 라이선스

비용 최적화:

  • Karpenter + Spot instance 조합으로 node 비용 60-80% 절감 가능
  • Fargate 는 소규모 intermittent workload 에 적합, 상시 고밀도 워크로드는 EC2 가 저렴
  • 미사용 cluster 는 node group 을 0으로 (control plane 비용은 유지)

EKS Anywhere

온프레미스에서 동일 EKS API 로 K8s 운영. AWS Outposts 와는 별개.

  • VMware vSphere, bare metal, Nutanix 등 지원
  • EKS Anywhere 라이선스 + 지원 비용
  • GitOps 기반 클러스터 관리 (Flux)

EKS vs ECS 선택

자세한 내용은 aws-ecs-fargate 참조.

flowchart TD
    Q{"워크로드 성격"}
    Q -->|"AWS 전용, 빠른 시작, 단순 컨테이너"| ECS["ECS\n(운영 오버헤드 낮음)"]
    Q -->|"K8s 생태계, 이식성, 복잡한 마이크로서비스"| EKS["EKS\n(표준 K8s API)"]
    EKS --> Fargate["Fargate 모드\n(노드 관리 불필요)"]
    EKS --> EC2["EC2 노드\n(제어권 최대)"]

업그레이드 전략

EKS 버전은 3개 마이너 버전 지원. 평균 4개월마다 신버전 출시.

  1. Control plane 먼저 업그레이드 (마이너 버전 1씩, n+1 만 허용)
  2. Add-on 업그레이드 (버전 호환성 확인)
  3. Node group 순차 업그레이드 (롤링)
flowchart LR
    CP["Control Plane\n1.29 → 1.30"] --> Addons["Add-ons 업그레이드\n(CNI, CoreDNS, kube-proxy)"]
    Addons --> NG["Node Group\n1.29 → 1.30\n(롤링 교체)"]
    NG --> Done["완료"]

WARNING

control plane 과 node 버전 차이 최대 2 minor. node 가 너무 뒤처지면 업그레이드 불가.

모니터링 / 관찰성

CloudWatch Container Insights = EKS 메트릭 + 로그 통합
  - pod CPU/메모리 사용률
  - node 수준 지표
  - 네임스페이스 집계

Prometheus + Grafana = 커스텀 메트릭
  - kube-state-metrics (deployment replicas, pod phase)
  - node-exporter (node 시스템 지표)

AWS Distro for OpenTelemetry (ADOT)
  - traces → X-Ray / Jaeger
  - metrics → CloudWatch / Prometheus

로그 수집 전략:

  • Fargate: AWS for FluentBit 사이드카 자동 (CloudWatch Logs)
  • EC2 node: DaemonSet (FluentBit, Fluentd) 또는 ADOT

Karpenter 핵심 개념

Karpenter = node 자동 프로비저닝. managed node group 보다 훨씬 빠른 스케일링.

# NodePool 예시
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
  name: default
spec:
  template:
    spec:
      requirements:
        - key: karpenter.sh/capacity-type
          operator: In
          values: ["spot", "on-demand"]
        - key: kubernetes.io/arch
          operator: In
          values: ["amd64"]
      nodeClassRef:
        name: default
  disruption:
    consolidationPolicy: WhenEmptyOrUnderutilized
    consolidateAfter: 1m

장점:

  • 수초 내 노드 프로비저닝 (managed group 의 3-5분 대비)
  • spot 자동 활용 + on-demand fallback
  • 미사용 노드 자동 통합 (consolidation) 으로 비용 절감

흔한 함정

WARNING

  1. VPC IP 고갈: pod 수 × ENI 한도. secondary CIDR 또는 prefix delegation 사전 적용.
  2. EKS 버전 업그레이드 순서: control plane → add-on → node 순. minor 한 번씩만.
  3. kubeconfig 의 AWS auth: aws eks update-kubeconfig. IAM 변경 시 인증 깨짐 주의.
  4. Fargate + DaemonSet 미지원: log/metric 수집을 sidecar 컨테이너로 각 pod 에 붙여야 함.
  5. IRSA OIDC provider: cluster 당 1회 생성. 누락 시 AssumeRoleWithWebIdentity 실패.

CAUTION

aws-auth ConfigMap 잘못 수정 시 cluster 접근 완전 차단. IAM Identity Center 또는 EKS access entries 로 대체 권장.

관련 위키

이 글의 용어 (9개)
[AWS] ECR (Elastic Container Registry)cloud
정의 Amazon Elastic Container Registry (ECR) 는 AWS 가 관리하는 OCI 컨테이너 이미지 및 Helm chart 레지스트리 입니다. Docker…
[AWS] ECS + Fargate: 컨테이너 오케스트레이션cloud
정의 ECS (Elastic Container Service) = AWS 의 컨테이너 오케스트레이션. K8s 보다 단순하고 AWS 네이티브. Fargate = ECS (또는 EK…
[AWS] IAM: User, Role, Policy, STScloud
정의 IAM (Identity and Access Management) = AWS 의 권한 관리 전부. User, Group, Role, Policy 로 구성. "누가 어떤 리소…
[AWS] VPC: subnet, route, NAT, peeringcloud
정의 VPC (Virtual Private Cloud) = AWS 안의 논리적 격리 네트워크. CIDR 정의 + subnet 분할 + 라우팅. AWS 리소스를 격리된 네트워크에 …
[K8s] Deployment: ReplicaSet, rolling update, rollbackkubernetes
정의 Deployment = stateless 워크로드를 위한 컨트롤러. 내부적으로 ReplicaSet 관리 + rolling update / rollback. 사용 시나리오 |…
[K8s] Pod: 컨테이너의 최소 단위, sidecar, lifecyclekubernetes
정의 Pod = K8s 의 가장 작은 배포 단위. 1개 이상의 컨테이너 + 공유 네트워크 + 공유 스토리지. [!IMPORTANT] Pod 는 컨테이너의 wrapping 이 아니…
[K8s] RBAC: Role, ClusterRole, ServiceAccount, RoleBindingkubernetes
정의 RBAC (Role-Based Access Control) = K8s 의 권한 부여 모델. 주체 + 권한 + 바인딩. 사용 시나리오 | 상황 | RBAC 역할 | |---|…
[LLM Eval] HELM: Holistic Evaluation of Language Modelsai
정의 HELM (Holistic Evaluation of Language Models) 는 Stanford CRFM (Center for Research on Foundation…
Kuberneteskubernetes
정의 Kubernetes (k8s) 는 컨테이너화된 애플리케이션의 배포, 스케일링, 관리 를 자동화하는 오픈소스 오케스트레이터입니다. Google 이 2014년 발표하고 2015…

💬 댓글

사이트 검색 / 명령어

검색

스크롤 = 확대/축소 · 드래그 = 이동 · 0 = 원래 크기 · ESC = 닫기