내용
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 Node → AWS 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 가 관리해줌