Blog

AWS Fargate on EKS 실전 사용하기 ( 용찬호, 데브시스터즈 )

내용

Fargate On EKS

Fargate (ECS)
완전 관리형 컨테이너 서비스
범용 목적의 서버리스 컨테이너
EKS
관리형 쿠버네티스 서비스
EC2 노드 그룹을 Worker 로 사용
EKS + Fargate
Fargate 에 EKS 의 App 배포 가능
오케스트레이터: Kubernetes
Control Plane + Data Plane 의 완전한 Serverless
관리해야 할 EC2 Instance 가 존재하지 않음
완전한 서버리스형 쿠버네티스 서비스
coreDNS, add-on 등을 모두 Fargate 에 Deploy 가능
기존 Node Group 과 함께 WorkLoad 운영 가능 ( 하이브리드 운영 가능 )

장점

관리의 복잡도가 줄어든다
Cluster AutoScaler 를 사용할 필요가 없음
비용 청구의 단위가 Pod 의 실행 시간이 된다
Pod 를 사용해도 VM 수준의 격리가 가능
Fargate 의 내부 구조에 의함
기존 애플리케이션의 변경 없이 Fargate 로 이전 가능

단점

Resource 상한선 존재 ( 최대 4vCPU, 30GB 메모리 )
Stateful한 workload 사용 불가능
Daemonset 을 비롯한 Privileged Pod 사용 불가능
NLB / ELB 사용 불가능
ELB + Ingree 조합을 사용할 수 있음

Use Case

Stateless 하고 리소스를 크게 요구하지 않으며 특별한 권한이 필요 없는 workload 에 적합함
Hybrid 로 구성
Fargate On EKS 에는 Stateless 한 서버
EC2 에는 Stateful 한 서버

사용 방법

현재 버지니아, 오하이오, 아일랜드, 도쿄에서 지원
EKS 클러스터 1.14 이상
Fargate Profile 생성 ( Fargate 에 Pod 를 생성하는 조건을 명시 )
생성하는데 30초 ~ 1분 정도 걸림

Fargate On EKS 사용해보기 ( Demo 영상 )

EC2 Node Group 으로 띄우는것보다 훨씬 빠르게 스케일링이 가능함

Fargate On EKS 내부 구조 Deep Dive

네트워크 구조

물리 서버 VM 수준의 가상화 레이어 Fargate 에이전트 컨테이너 런타임 ( docker 등 )
Fargate 는 1개의 컨테이너에 2개 이상의 Task 를 올리는것을 허용하지 않음
1개의 Pod = 1개의 Node
IP 절약 측면에서 이점
VM 수준의 격리 가능
Maximum Node: 5,000개
Kube 는 최대 5천개의 Pod 만 사용 가능

스케줄링

스케줄링 순서
1.
Pod 생성 요청
2.
Admission Controller for Fargate
3.
변경된 Pod Spec
4.
Fargate Scheduler
5.
Fargate Pod 할당
보이지 않는 AWS Admission Controller 가 Pod Spec 을 변경
Pod Spec 에 compute-type 주석과 Fargate Profile 을 함께 사용할 경우
compute-type 주석의 우선순위가 더 높음 ( 강제로 EC2 에 생성 )

요금 체계

Resource + 256MB ( 쿠버네티스 컴포넌트 )
과금 되는 리소스 타입 0.5vCPU / 1GB
EC2 인스턴스보다 좀 더 Find-Grained 한 리소스 사용 가능
Burst 시나리오에서의 동작 유의 필요
Best Effort, Bustable QoS 클래스의 Pod 의 경우, Limit 이 의미가 없음
요금 체계는 Request 를 기준으로 함
무조건 Fargate On EKS 가 저렴하지 않을 수 있음
Fargate On EKS 를 위한 Spot Instance, Saving Plan 지원 예정

결론

Fargate On EKS 는 stateless 한 workload 를 수행하기에 적합
EKS 에서 Fargate + EC2 를 혼합해 사용 가능
stateless + stateful 의 혼합형 workload 구성 가능
여러분의 용도에 맞게, 좀 더 저렴한 방법을 선택