[2] 250909~ 클라우드/[b] 12월 : Terraform + Ansible

[42] EKS

페페 더 엔지니어 2026. 2. 11. 21:47

 

 

[0]

ECS(Fargate)

서비스 -> 태스크 -> 컨테이너

 

EKS

컨트롤 플레인 -> node -> pod -> 컨테이너

 

-

 

[1]

컨트롤 플레인 (= 마스터 노드)

k8s의 API서버, 스케쥴러, 컨트롤러 매니저, etcd 같은 핵심 구성요소 묶음

EKS는 이 컨트롤 플레인을 AWS가 관리 (사용자가 직접x)

 

-

 

[2]

Node

파드가 직접 뛰는 워커 머신

EC2 인스턴스 라고 생각하면 됨 (Managed Node Group이면 ASG로 관리)

포드(컨테이너들) 은 결국 노드 위에서 실행

 

-

 

[3]

Pod = k8s의 최소 실행 단위

- 컨테이너 1개 이상을 묶는 단위

- 같은 파드 안 컨테이너들은 IP/포트 네임스페이스를 공유 (그래서 Localhost로 서로 붙을 수 있음)

- ECS의 TASK와 제일 비슷한 포지션이 Pod (또는 Deployment의 Replica)

 

-

 

[4]

deployment / Replia Set / K8s Service

- deployment : 파드를 몇 개 (Replica) 유지할지 선언하고 롤링 업데이트

- Service : 파드가 늘었다 줄었다 해도 고정된 접속점 (가상 IP/DNS) 제공

- 외부 노출은 보통 Service + Ingress(ALB Ingress Controller) 조합으로 간다

 

-

 

[5]  

ECS -> EKS

- ECS(fargate) + TASK/Service 로 컨테이너 1개 띄우고(8080) + 퍼블릭으로 붙이는 그림

- 이걸 EKS로 옮기면, 컨테이너를 띄우는 주체와 '서비스 노출' 방식이 완전히 바뀐다.

- 핵심은 AWS가 태스크를 직접 관리(ECS) 하던 걸, K8s가 Pod/Service를 관리 하도록 바뀜

 

-

 

[6]

ECS(Fargate)

ECS cluster : 논리 컨테이너 풀

Task Definition : 컨테이너 스펙(이미지 / 포트 / 로그)

Service : desired_count + awsvpc(ENI) 붙여 실행

Networking :  assign_public_ip = true면 Task ENI가 퍼블릭 IP 받아서 바로 접근 가능

IAM: Task Execution Role (로그 / ECR pull  등)

 

EKS

- EKS cluster(Control Plane) : K8 API 관리

- Worker Node(노드 그룹) 또는 Fargate Profile: 실제 Pod가 실행될 컴퓨트

- Deployment : Pod를 몇 개 유지할지 선언 (ECS의 Service와 유사)

- Service : Pod에 접근하는 고정 엔드포인트(L4 / L7 노출)

                   ㄴ type=LoadBalancer쓰면 AWS가 ELB / NLB를 만들어 외부로 노출

- Networking(CNI) : 기본은 VPC CNI라서 Pod도 VPC IP를 쓰지만, 외부 노츨은 보통 서비스(LB)를 통해 들어옴

- IAM : EKS Cluster Role + Node Role(또는 Pod단위 IRSA) 로 분리

 

정리하면

ECS는 AWS가 Service/Task로 컨테이너를 직접 스케쥴링

EKS는 K8s가 Deployment/Pod로 스케쥴링하고, AWS는 클러스터/노드/로드밸런서 인프라를 제공

 

-

 

[7]

SIDECAR

메인 컨테이너 옆에서 보조 기능 수행하는 컨테이너

Task / Pod
 ├─ App Container
 └─ Sidecar Container

대표 역할 4개

- 프록시 / 트래픽 제어

- 로그 수집

- 설정 동기화

- 보안 / 인증

 

-

 

[8]

같은 IP(당연)

Network Namespace

VOl(공유 가능)

 

-

 

[9]

Metrics 컨테이너

애플리케이션의 상태를 수치로 수집하는 컨테이너

 

- CPU

- Memory

- Request count

- Latency

- Error rate

- Queue Length

 

앱 : 8080  for service

sidecar 15001 for proxy

metrics 9090 for Exporter

 

Client
 ↓
Envoy Sidecar
 ↓
App (8080)
 ↓
Metrics Exporter (9090)