여기서 EKS란 Elastic Kubernetes Service로 AWS에서 Kubernetes를 실행하는 데 사용할 수 있는 완전 관리형 서비스입니다.
kubectl run nginx --image=nginx
다음 명령어를 실행하면 Pod가 생성됩니다.
Pod가 생성되는 순서
1. Deployment가 만들어집니다.
2. Deployment로 인해 ReplicaSet이 만들어집니다.
3. ReplicaSet에 의해 최종적으로 Pod가 만들어집니다.
Kubernetes 클러스터 구조
빨간색 박스 부분 : 컴포넌트
Watch
kubectl run nginx --image=nginx
다시 위에 명령어를 실행한다면 다음과 같은 과정을 거칩니다.
: CAdvisor와 같은 매니저들이 정보를 수집하여 API 서버로 그 정보를 전달합니다.
: 이후 적절한 Worker Node를 선정합니다.
: 그 외 스케쥴러의 여러 설정으로도 결정에 영향을 미칩니다.
클러스터 전체에 대한 장애가 됩니다.
따라서 두 개 이상의 API 서버를 유지하여 고가용성을 유지합니다.
클러스터 전체에 대한 장애가 됩니다.
따라서 3개 이상의 etcd를 유지하여 고가용성을 유지합니다.
왜 3개? -> etcd는 내부에서 결정할 때 홀수로 진행하는 투표로 결정하는데, 1개면 고가용성이 성립하지 않기에 투표가 가능한 최소의 홀수인 3개를 유지합니다.
언급되었던 위의 모든 과정을 Amazon EKS가 대신 처리해줍니다.
그래서 사용됩니다.
1. Kubeconfig 파일에 인증 정보를 포함합니다. - Kubenetes API 서버 인증 토큰, IAM 인증 토큰
2. 요청한 사용자가 AWS IAM User가 맞는지만 검증합니다.
다음 명령어를 실행하면,
kubectl edit configmap aws-auth -n kube-system
EKS를 생성하면 aws-auth라는 configmap이 생성되어있습니다.
++ groups는 Kubernetes RBAC에 해당합니다.
- 부트스트래퍼든지 노드에 대한 권한을 갖게 됩니다.
3. RBAC
: 모든 사용자들에게 master 권한을 줄 수는 없겠지요?
kubectl edit configmap aws-auth -n kube-system
- mapRoles : IAM Role을 대상으로 mapRoles에 추가합니다.
- mapUsers : IAM User를 대상으로 mapRoles에 추가합니다.
- 일반적인 네트워크 구조
- eth0 : 물리 네트워크 인터페이스
- docker0 : 브릿지 네트워크
- veth0 : 컨테이너에 할당되는 가상 네트워크 인터페이스
- EKS 네트워크 구조 = Overlay 네트워크 구조
: 호스트가 여러개가 되어도 각 컨테이너를 찾아갈 수 있게 각기 다른 IP를 할당하는 네트워크 구조
- VPC의 IP Range 내 IP를 할당합니다.
Master Node의 컴포넌트들의 로그를 CloudWatch를 통해 확인할 수 있습니다.
Pod 모니터링은 Container Insights를 사용하면 간단하게 할 수 있습니다.
우리는 kubectl를 이용해서 안정적인 서비스를 운영하면 된다.
왜냐? 어려운건 쟤네가 다 해줌.
쿠알못이 Amazon EKS로 안정적인 서비스 운영하기 - 최용호 (넥슨코리아) :: AWS Community Day 2020