AWS가 제공해주는 관리형 Kubernetes Cluser
- Control Plain을 직접 Provisioning하거나 관리하지 않아도 되서 편리하다.
- WorkLoad가 실행되는 Node를 자유롭게 구성할 수 있다.
- Avaliability Zone 기반의 고가용성을 제공한다.
- 편리한 Cluser Version Upgrade를 지원한다.
- AWS 서비스들과 통합할 수 있다.
- Kubernetes Cluser는 Control Plane과 Node들로 구성되어 있다.
- Control Plane에는 DB역할을 하는 etcd와 Client와 통신을 하는 kube-api-server가 있고 Pod를 Schedule해주는 kube-scheduler와 Controller Manager들로 구성되어 있다.
- EKS 구성을 보면 EKS VPC와 Customer VPC가 있는데 Customer VPC가 AWS의 사용자를 의미한다.
- 사용자가 만든 VPC 내에서 EKS내에 Kubernetes Node들을 만들 수 있다.
- Control Plane은 EKS VPC 내의 AWS EKS Service에서 직접 운영을 해준다.
- Control Plane과 WorkNode들은 ENI를 통해서 통신한다.
- LoadBalancer 타입 Service
- 기본적으로 AWS ELB의 CLB(Classic Load Balancer)로 구성된다.
- Annotation 설정을 통해 AWS ELB의 NLB(Network Load Balancer)로 구성이 가능하다.
- Ingress (L7)
- aws-load-balancer-controller 추가 애드온 설치가 필요하다.
- AWS ELB의 ALB(Application Load Balancer)로 구성된다.
- AWS에서 기본으로 제공하는 Kubernetes Network 애드온이다.
- AWS EC2는 VPC의 ENI를 통해 IP를 할당받는다.
- ENI의 Secondary IP Addresses를 통해 Node내 Pod가 동일한 VPC IP 대역에서 Pod IP를 할당받는다.
- 때문에 ENI의 IP 주소 개수 제한 만큼 Node의 Pod 개수가 제한된다.
- gp2 타입 EBS에 대한 StorageClss 내장되어 바로 사용가능하다.
EBS & EFS CSI Driver
- CSI 드라이버 추가 구성을 통해 EBS/EFS 사용 및 최신 기능이 활용 가능하다.
- Cluster 생성 시 Logging 옵션을 통해 API Server, Audit, Authenticator, Scheduler, Controller Manager에 대한 Log를 Cloud Watch Logs로 수집이 가능하다.
- 기본 기능을 제공하지는 않지만, Fluentd나 Fluent Bit을 통해 CloudWatch Logs로 Pod Log 전송 가이드를 제공한다.
- Control Plane을 이해하고 직접 관리하는 것은 쉬운 일이 아니다.
- 비즈니스 성격에 따라 다르게지만 Cluster 운영과 비즈니스 서비스 운영 중 무엇이 중요한지 고민할 필요가 있다.
인프라 비용을 넘어 관리 비용도 고려
- 직접 쿠버네티스 제어영역을 Provisioning하여 관리하는게 인프라 비용은 더 저렴할 수 있다.
- 하지만 시스템을 관리하는 인력 및 시간에 대한 비용도 고려할 필요가 있다.