Amazon EKS로 안정적인 서비스 운영하기

CHAN LIM·2022년 7월 3일
0

Sessions Summary

목록 보기
3/3

왜 Amazon EKS인가?

여기서 EKS란 Elastic Kubernetes Service로 AWS에서 Kubernetes를 실행하는 데 사용할 수 있는 완전 관리형 서비스입니다.

kubectl run nginx --image=nginx

다음 명령어를 실행하면 Pod가 생성됩니다.

Pod가 생성되는 순서

1. Deployment가 만들어집니다.

2. Deployment로 인해 ReplicaSet이 만들어집니다.

3. ReplicaSet에 의해 최종적으로 Pod가 만들어집니다.

위에 과정에 대해 Kubernetes 클러스터 내부에서는 어떤 일이?

Kubernetes 클러스터 구조

빨간색 박스 부분 : 컴포넌트

  • 각 컴포넌트들은 Watch 매커니즘을 가지고 있습니다.

Watch

  • Subscribe와 유사한데, API서버는 etcd를 감시하고 컴포넌트들은 API 서버를 감시합니다.
  • 변경사항에 대해 알림을 보냅니다.
kubectl run nginx --image=nginx

다시 위에 명령어를 실행한다면 다음과 같은 과정을 거칩니다.

  • Master node의 Controller ManagerWorker node의 kublet은 API 서버에 Watch하고 있는 컴포넌트들입니다.
  • API 서버는 실제로는 API서버를 통해 etcd에 저장되는 리소스 정보들입니다.

: 마지막에 Scheduler는 어떻게 노드를 결정할까요?

: CAdvisor와 같은 매니저들이 정보를 수집하여 API 서버로 그 정보를 전달합니다.
: 이후 적절한 Worker Node를 선정합니다.
: 그 외 스케쥴러의 여러 설정으로도 결정에 영향을 미칩니다.


: API 서버에서 장애가 발생했다면?

  • 클러스터 전체에 대한 장애가 됩니다.

  • 따라서 두 개 이상의 API 서버를 유지하여 고가용성을 유지합니다.


: etcd에서 장애가 발생한다면?

  • 클러스터 전체에 대한 장애가 됩니다.

  • 따라서 3개 이상의 etcd를 유지하여 고가용성을 유지합니다.

  • 왜 3개? -> etcd는 내부에서 결정할 때 홀수로 진행하는 투표로 결정하는데, 1개면 고가용성이 성립하지 않기에 투표가 가능한 최소의 홀수인 3개를 유지합니다.


그래서 EKS를 사용하는 이유가?

언급되었던 위의 모든 과정을 Amazon EKS가 대신 처리해줍니다.
그래서 사용됩니다.


Amazon EKS 설치

  • AWS Console
  • AWS CLI
  • eksctl
  • Terraform

인증 및 권한

  • EKS를 생성하려면 Amazon IAM이 필요합니다.

인증 절차

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

  • Role
    - 특정 Namespace 내 리소스 사용 권한을 설정합니다.
  • Cluster Role
    - Kubernetes Cluster 전역의 리소스 사용 권한을 설정합니다.
  1. Role 생성 : Kubernetes 리소스에 대한 사용 권한 설정합니다.
  2. Role Binding 생성 : 대상 Role의 권한을 할당할 사용자 또는 그룹을 설정합니다.

EKS 클러스터를 관리할 관리자가 추가되었다면?

: 모든 사용자들에게 master 권한을 줄 수는 없겠지요?

kubectl edit configmap aws-auth -n kube-system

  • mapRoles : IAM Role을 대상으로 mapRoles에 추가합니다.
  • mapUsers : IAM User를 대상으로 mapRoles에 추가합니다.

사용자 추가 및 권한 할당 흐름


네트워크

  • EKS는 조금 다른 네트워크 구조를 가지고 있습니다.
  • 일반적인 네트워크 구조
  • eth0 : 물리 네트워크 인터페이스
  • docker0 : 브릿지 네트워크
  • veth0 : 컨테이너에 할당되는 가상 네트워크 인터페이스
  • EKS 네트워크 구조 = Overlay 네트워크 구조

    : 호스트가 여러개가 되어도 각 컨테이너를 찾아갈 수 있게 각기 다른 IP를 할당하는 네트워크 구조
  • VPC의 IP Range 내 IP를 할당합니다.
  • 하나의 클러스터 내의 Pod 수가 굉장히 많다면 VPC IP Range에 대한 검토가 필요합니다.
  • VPC IP Range가 여유롭더라도 ENI에 의해 Pod 생성이 실패할 수 있습니다.


  • 최대 Pod 수 = (인스턴스 유형에 따른 ENI 수 * (ENI 별 IP 수 - 1))
    - ENI 자신에게 할당된 IP 제외
    - ENI : Elastic Network Interface

볼륨

  • 안정적인 데이터 관리는 어떻게 할까요?
    1. 안정적인 저장소 준비 : EBS, EFS
    2. 컨테이너에 안정적인 저장소를 마운트

EBS에 마운트하려면?


모니터링

  • Master Node의 컴포넌트들의 로그를 CloudWatch를 통해 확인할 수 있습니다.

  • Pod 모니터링은 Container Insights를 사용하면 간단하게 할 수 있습니다.


결론

우리는 kubectl를 이용해서 안정적인 서비스를 운영하면 된다.

왜냐? 어려운건 쟤네가 다 해줌.


Reference

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

profile
클라우드, 데이터, DevOps 엔지니어 지향 || 글보단 사진 지향

0개의 댓글