본문 바로가기

개발관련/Kubernetes

AWS EKS에 대해서

반응형

참고 문서 :

 

EKS Hands-On 학습 가이드

 

필요 선행 과정 : 

 

Kubernetes's Objects Detail

Kubernetes를 이루는 기본적인 오브젝트들에 관한 설명이다. EKS를 이해하는데 많은 도움이 될 것 같다.

  • Pod - A thin wrapper around one or more containers
  • DaemonSet - Implements a single instance of a pod on a worker node
  • Deployment - Details how to roll out (or roll back) across versions of your application
  • ReplicaSet - Ensures a defined number of pods are always running
  • Job - Ensures a pod properly runs to completion
  • Service - Maps a fixed IP address to a logical group of pods
  • Label - Key/Value pairs used for association and filtering

 

파악해본 EKS 생성 과정

1. eksctl을 사용하여 Cluster를 생성한다. 생성하는 커맨드에서 간략한 Task Definition같은 것을 볼 수 있다.(ec2는 무슨타입이고 node의 min,max 갯수 및 버젼, 이름 등등을 지정)

2. Cluster 생성과정에서 Cloudformation이 생성되고 이 Cloudformation은 EKS Stack을 구성하기 위한 인프라 정의서 개념이다. 여기에 정의된대로 AWS가 인프라를 구축한다.

3. 이렇게 Cluster와 Node가 생기고 Cluster안에 EC2 형태로 Node라는 Worker가 생긴다. 이 Node안에 Docker 컨테이너를 띄우는 작업은 kubectl을 사용한다.

4. Node안에 컨테이너를 띄울 때 아래와 같은 명령어를 사용한다.

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/examples/master/guestbook-go/guestbook-service.json

저 코드안의 json 파일을 따라가는 url을 열어보면 어떤 명세서같고 이 명세서를 통해 어딘가 Docker hub같은 곳에서 Docker image를 찾아 컨테이너를 띄우는 것 같다.

5. Node안에 Docker 컨테이너를 띄울 수 있는데 이 컨테이너를 각각 pod라고 부르고 이 pod는 고유한 port를 가진다. 이 port를 부여받으면 외부와 통신할 수 있는 통로가 필요하므로 AWS는 로드밸런서를 생성한다. 그리고 pod에 부여한 port를 위에서 언급한 명세서에 정의된 port에 바인딩하여 외부와 통신할 때 명세서의 port로 사용할 수 있도록 한다. 이러한 방식이 Dynamic port binding이라는 건데 각 pod마다 임의로 배정된 다양한 포트를 로드밸런서의 하나의 포트로 매핑하는 것이다. 이로서 로드밸런서에서는 각 pod에 알맞게 로드밸런싱 할 수 있게된다.

 

그리고 EKS에서 Cluster를 삭제하면 EKS 생성 과정에서 만들어졌던 모든 인프라들이 삭제된다

EKS Cluster의 Node Worker로 사용된 EC2 인스턴스와 로드밸런서, Security Group 그리고 이 모든것을 생성하기 위해 만들어졌던 Cloudformation 까지 모두 삭제된다.

 

만약 AWS EKS를 사용하여 서비스를 배포하게 된다면 CI/CD 전략을 어떻게 가져가야할지 고민해봐야할 것 같다.

 

AWS ECS에서는 ECR이라는 Repository가 있어서

Jenkins를 사용하여 새로운 코드로 빌드한 후 이 빌드파일로 Docker image를 만들어 ECR에 push하고,

ECS Cluster를 update하기만 하면 새로운 Docker image로 배포했었다.

그리고 ECS에는 Task Definition이라는게 있어서 이 안에서 Cluster가 어떻게 컨테이너를 띄울것이고 최소, 최대 컨테이너를 얼마나 띄울것이며, 

각 컨테이너마다 port는 어떻게 가져갈 것이고 cpu core와 메모리를 얼마나 할당해줄 것인지도 명시할 수 있었다.

그래서 Cluster는 이 Task Definition대로 Container를 Ochestration 할 수 있었다.

 

분명 EKS도 이런 비슷한 프로세스를 거쳐서 동작할텐데 세부적인 부분은 어떻게 설정하는지 더 알아봐야겠다.

반응형