2. 저의 이름은 용찬호입니다.
2019 ~ 현재 : Devisters R&D Center 연구원
2017, 2020 : “시작하세요! 도커 / 쿠버네티스” 저
Simple is Best
컨테이너 소모임
3. 목차
1. Fargate on EKS
1) What: Fargate on EKS 소개
2) Why: Fargate on EKS의 장점
3) Not: Fargate on EKS의 제약사항
4) How: Fargate on EKS 사용 방법
2. Fargate on EKS 사용해보기 (Demo)
3. Fargate on EKS 내부 구조 Deep Dive
4. 요금 체계
5. 결론
5. 1. Fargate on EKS
(1) What: Fargate on EKS 소개
Fargate (ECS)
- 완전 관리형 컨테이너 서비스
- 범용 목적의 서버리스 컨테이너
EKS
- 관리형 쿠버네티스 서비스
- EC2 노드 그룹을 Worker로 사용
EKS + Fargate
- Fargate에 EKS의 App 배포 가능
- 오케스트레이터 : 쿠버네티스
Control Plane + Data Plane의 완전한 서버리스화
6. 1. Fargate on EKS
(1) What: Fargate on EKS 소개
EKS Cluster
AZ AZ
Auto Scaling Group
(EC2 Instance)
…
…
User Managed EC2 Instances
EC2 Instance에 Pod 할당
Pod
7. 1. Fargate on EKS
(1) What: Fargate on EKS 소개
EKS Cluster
Fargate
AWS Managed EC2 Instances
Fargate에 Pod 할당
Pod
…
Pod Pod
8. 1. Fargate on EKS
(1) What: Fargate on EKS 소개
Serverless
관리해야 하는 EC2 인스턴스가 존재하지 않음.
- 완전한 서버리스형 쿠버네티스 서비스
- coreDNS, add-on등을 모두 Fargate에 Deploy 가능
- 기존 Node Group과 함께 워크로드 운영 가능
하지만 Fargate on EKS가 모든 것을 해결해 주지는 않음.
9. 1. Fargate on EKS
(2) Why: Fargate on EKS의 장점
관리의 복잡도가 줄어듭니다.
1. Cluster Autoscaler를 사용할 필요가 없습니다.
2. 비용 청구의 단위가 Pod의 실행 시간이 됩니다.
3. Pod를 사용해도 VM 수준의 격리가 가능합니다.
- Fargate의 내부 구조에 의함
4. 기존 애플리케이션의 변경 없이 Fargate로 이전할 수 있습니다.
10. 1. Fargate on EKS
1. 리소스 상한선 존재 (최대 4vCPU, 30GB 메모리)
2. Stateful한 워크로드 사용 불가능
3. Daemonset을 비롯한 privileged Pod 사용 불가능
4. NLB / ELB 사용 불가능?
à ELB + Ingress 조합을 사용하실 수도 있습니다.
(1) Stateless하고
(2) 리소스를 크게 요구하지 않으며
(3) 특별한 권한이 필요 없는 워크로드
(3) Not: Fargate on EKS의 제약사항
11. 1. Fargate on EKS
Fargate
Pod
Pod
Pod
EKS
ALB
Stateless한 프론트엔드 서버 Stateful한 백엔드 서버
EKS를 Fargate와 EC2 인스턴스 영역으로 나눠 사용
à Fargate on EKS에는 Stateless한 서버
à EKS (EC2 인스턴스) 에는 Stateful한 서버
Use Case?
12. 1. Fargate on EKS
(4) How: Fargate on EKS 사용 방법
Virginia (us-east-1)
Ohio (us-east-2)
Dublin (eu-west-1)
Tokyo (ap-northeast-1)
EKS 클러스터 1.14 이상
Fargate Profile
> eksctl create cluster my-cluster --region ap-northeast-1
프로파일 생성
Fargate에 포드를 생성하는 조건을 명시
14. 1. Fargate on EKS
(4) How: Fargate on EKS 사용 방법
EKS Cluster
Fargate
Auto Scaling Group
(EC2 Instance)
…
…
1. 일반 Pod의 경우
2. Fargate Profile 조건과
일치할 경우
Pod 생성 요청
개발자 alice
15. 1. Fargate on EKS
(4) How: Fargate on EKS 사용 방법
Fargate Profile
Web Console에서도 Fargate Profile 생성 & 확인 가능
17. 2. Fargate on EKS 사용해보기 (Demo)
Fargate on EKS – 준비 단계
> eksctl create cluster my-cluster
--region ap-northeast-1
1. 최신 버전의 EKS 클러스터 준비 2. Fargate Profile 생성 3. Pod 생성하기
...
"selectors": [
{
"namespace": "default",
"labels": {
"my-allocation-label": ”alice"
}
}
...
Pod
18. 2. Fargate on EKS 사용해보기 (Demo)
Fargate on EKS – 준비 단계
> eksctl create cluster my-cluster
--region ap-northeast-1
1. 최신 버전의 EKS 클러스터 준비 2. Fargate Profile 생성 3. Pod 생성하기
...
"selectors": [
{
"namespace": "default",
"labels": {
"my-allocation-label": ”alice"
}
}
...
Pod
19. 2. Fargate on EKS 사용해보기 (Demo)
Fargate on EKS – Demo
Demo
21. 3. Fargate on EKS 내부 구조 Deep Dive
(1) EKS + Fargate 네트워크 구조
22. 3. Fargate on EKS 내부 구조 Deep Dive
(1) EKS + Fargate 네트워크 구조
물리 서버
VM 수준의 가상화 레이어
Fargate 에이전트
컨테이너 런타임 (docker 등)
EC2 인스턴스 또는 Firecracker
VM 상의 격리된 영역
Fargate
Task A
Fargate
Task B
eni0
eni1
Control Plane VPC
(AWS 관할)
Customer VPC
23. 3. Fargate on EKS 내부 구조 Deep Dive
(1) EKS + Fargate 네트워크 구조
물리 서버
VM 수준의 가상화 레이어
Fargate 에이전트
컨테이너 런타임 (docker 등)
EC2 인스턴스 또는 Firecracker
VM 상의 격리된 영역
Fargate
Task A
Fargate
Task B
신뢰할 수 없는 컨테이너 영역
eni0
eni1
Control Plane VPC
(AWS 관할)
Customer VPC
24. 3. Fargate on EKS 내부 구조 Deep Dive
(1) EKS + Fargate 네트워크 구조
물리 서버
VM 수준의 가상화 레이어
Fargate 에이전트
컨테이너 런타임 (docker 등)
EC2 인스턴스 또는 Firecracker
VM 상의 격리된 영역
Fargate
Task A
신뢰할 수 없는 컨테이너 영역
eni0
eni1
Control Plane VPC
(AWS 관할)
Customer VPC
25. 3. Fargate on EKS 내부 구조 Deep Dive
(1) EKS + Fargate 네트워크 구조
물리 서버
VM 수준의 가상화 레이어
Fargate 에이전트
(kubelet, kube-proxy 포함)
컨테이너 런타임 (docker 등)
EC2 인스턴스 또는 Firecracker
VM 상의 격리된 영역
Fargate
Pod A
신뢰할 수 없는 컨테이너 영역
eni0
eni1
Control Plane VPC
(AWS 관할)
Node IP = Pod IP
EKS Cluster
26. 3. Fargate on EKS 내부 구조 Deep Dive
(1) EKS + Fargate 네트워크 구조
1개의 Pod = 1개의 Node
à IP 절약 측면에서 이점? VM 수준의 격리 가능?
Maximum Node : 5000개
à 최대 5천개의 Pod만 사용 가능
5000+ Node?Pod
EC2 or Firecracker
27. 3. Fargate on EKS 내부 구조 Deep Dive
(2) Fargate on EKS에서 Pod의 스케줄링
EKS Cluster
Pod 생성 요청
개발자 alice
Fargate Scheduler
Admission Controller
for Fargate
Default Scheduler
변경된
Pod Spec
Fargate
Pod 할당
보이지 않는 AWS Admisson Controller가 Pod Spec을 변경
28. 3. Fargate on EKS 내부 구조 Deep Dive
(2) Fargate on EKS에서 Pod의 스케줄링
labels:
eks.amazonaws.com/component: coredns
eks.amazonaws.com/fargate-profile: kube-system-profile
...
nodeName: fargate-ip-192-168-114-89.ap-northeast-1.compute.internal
priority: 2000001000
priorityClassName: system-node-critical
restartPolicy: Always
schedulerName: fargate-scheduler
securityContext: {}
...
변경된
Pod Spec
29. 3. Fargate on EKS 내부 구조 Deep Dive
(2) Fargate on EKS에서 Pod의 스케줄링
compute-type 주석과 Fargate Profile이 함께 사용될 경우의 우선 순위?
CoreDNS Deployment의 기본 설정
Fargate Profile
CoreDNS를 Fargate에 생성하도록 지정
à compute-type 주석의 우선순위가 더 높음 (강제로 EC2에 생성)
>
31. 4. 요금 체계
(1) Fargate on EKS 요금 체계
...
Pod Spec
resources:
cpu:
request: 300m
memory:
request: 500Mi
+
256 MB
(쿠버네티스 컴포넌트)
반올림 (round-up)
CPU 메모리
0.25 vCPU 512MB, 1GB, 2GB
0.5 vCPU 1GB, 2GB, 3GB, 4GB
Fargate 리소스 타입
32. 4. 요금 체계
(1) Fargate on EKS 요금 체계
...
Pod Spec
resources:
cpu:
request: 300m
memory:
request: 500Mi
+
256 MB
(쿠버네티스 컴포넌트)
반올림 (round-up)
CPU 메모리
0.25 vCPU 512MB, 1GB, 2GB
0.5 vCPU 1GB, 2GB, 3GB, 4GB
Fargate 리소스 타입
CPU : 300m
메모리 : 500 + 256 = 756MB
à 과금되는 리소스 타입 : [0.5vCPU / 1GB]
33. 4. 요금 체계
(1) Fargate on EKS 요금 체계
EC2 인스턴스보다 좀 더 Find-grained한 리소스 사용 가능
Burst 시나리오에서의 동작 유의 필요
- BestEffort, Burstable QoS 클래스의 포드의 경우, Limit이 의미가 없음
무조건 Fargate on EKS가 저렴하지 않을 수도 있음
- Fargate on EKS를 위한 spot instance, saving plan 지원 예정?
34. 4. 요금 체계
(1) Fargate on EKS 요금 체계
requeste CPU 750m à [1vCPU 할당] 실제로는 1vCPU까지 사용 가능
36. 5. 결론
1. Fargate on EKS는 stateless한 워크로드를 수행하기에 적합
2. EKS에서 Fargate + EC2를 혼합해 사용 가능
- Stateless와 Stateful의 혼합형 워크로드 구성 가능
3. 여러분의 용도에 맞게, 좀 더 저렴한 방법을 선택하시면 됩니다.
37. Q & A
Email : alice_k106@naver.com
Twitter : @alice_k106