Blog

쿠알못이 Amazon EKS 로 안정적인 서비스 운영하기 ( 최용호, 넥슨코리아 )

내용

Master Node

컴포넌트들은 서로 통신하는게 없어서 컴포넌트가 장애가 발생하더라도 복원되면 문제가 없음
하지만 API 서버는 모든 컴포넌트들과 통신하고 있기 때문에 API 서버에 장애가 발생하면 모든 클러스터에 장애가 발생함
그래서 API 서버는 고가용성을 유지해야함
etcd 도 장애가 발생 시 모든 클러스터에 장애가 발생함
etcd 는 최소 3대를 유지해야 함
장애 발생 시 마스터 노드를 선택하는 투표를 하는데, 이를 위해 3대를 함
Amazon EKS 가 Master Node 를 다 관리 해줌 ( 접속 조차 할 필요가 없음 )

Woker Node

Kubelet 이 설치되어 있고, cAdvisor 등 을 사용함
Node / Container 지표 수집
Scheduler 는 Worker Node 의 상태를 확인하고 Node 에 Pod 를 할당함
Amazon EKS Node Groups 라는 기능이 추가되면서 Auto Scaling, 장애 복구 등을 다 관리해줌
EC2 는 사용자 계정에 생성됨

AWS EKS

설치 방법

AWS Management Console
AWS CLI
eksctl
제일 간단하고 쉽게 EKS 클러스터를 생성할 수 있음
$ eksctl create cluster \ --name eks-test \ --region ap-northeast-2 \ --version 1.14 \ --managed \ --asg-access
Shell
Terraform
인프라를 코드로 관리할 수 있음

인증 & 권한

EKS 를 생성한 AWS IAM User 가 Master 권한을 흭득함
Kubernetes Admin → kubectl 명령 ( API 호출 ) → Kube Master NodeAWS IAM
1.
Kubectl 명령
2.
Master Node 는 IAM 에 유저 체크
3.
Kube RBAC 인증
Kube RBAC
Role ( NameSpace 단위 )
Cluster Role ( Cluster 전역의 권한 할당 )
AWS IAM 과 유사함
Role 생성 ( Kube 리소스에 대한 사용 권한 설정, Policy 설정 ) → Role Binding 생성 ( 대상 Role 의 권한 부여 )
EKS 클러스터를 관리할 관리자가 추가되었다면?
mapUsers 에 IAM User 추가 및 권한 부여
IAM Role 기반 인증 방법
1.
IAM Role 생성
2.
aws-auth ConfigMap 에 추가
3.
Cluster Role 또는 Role 생성
4.
Role Binding 또는 Cluster Role Binding 생성
5.
AWS-Auth 쪽에 Kube RBAC 설정
6.
대상 사용자의 kubeconfig 파일에 인증 정보 설정

네트워크

eth0 (10.0.0.2) docker0 (172.17.0.1) veth0 (172.17.0.2), veth0 (172.0.0.3)
eth0 (10.0.0.2) docker0 (172.17.0.2) veth0 (172.17.0.2), veth0 (172.0.0.4)
Overlay Network ( AWS CNI 사용 )
실제 VPC에 있는 IP 를 할당 받음
VPC 에 IP Range 를 작게 잡으면 Pod 생성을 실패할 수 있음
IP Range 에 여유가 있더라도 ENI 의 제약을 받아 Pod 생성을 실패할 수 있음
Worker Node
DaemonSet ( IPAM )
IPAM 이 할당할 수 있는 아이피 대역이 제한됨
IPAM 이 할당할 수 있는 최대를 초과할 경우 ENI 가 추가됨
인스턴스 유형에 따라서 ENI 개수가 제한되어 있고, ENI 에 따라서 할당할 수 있는 IP 개수의 제한이 있음
Pod 최대 할당 개수 = 인스턴스 유형에 따른 ENI 수 * (ENI 별 IP 수 - 1)

Volume

안정적인 저장소 준비 → 컨테이너에 안정적인 저장소를 마운트
EBS, EFS 사용 가능
Worker Node 에 있는 File System 을 사용할 수 있음
연동 방법
1.
StorageClass 생성
volumeBindMode: WaitForFirstCosumer 최초로 컨테이너에 마운트 되는 시점에 EBS 가 생성됨
2.
PersistentVolumeClaim 설정
3.
컨테이너 마운트

모니터링

Master Node 의 컴포넌트 들의 로그들은 CloudWatch를 통해 확인할 수 있음 ( BlackBox )
EKS 클러스터 설정에서 로깅 부분에 보고싶은 로그들을 활성화 해야함
Pod 모니터링은 Container Insight 를 사용하면 간단하게 사용 가능
프로메테우스로 사용할 수 있지만, Container Insight 도 대체가 가능함
CloudWatchAgentServerPolicy 설정이 필요함
Node, Pod 에 대한 모니터링이 가능함
상세한 로그들도 확인이 가능함

결론

힘들고 어려운 부분들은 대부분 Amazon EKS 가 관리해줌