AWS/[AEWS] EKS

[ AEWS 1주차 ] #1 EKS란?

BigCo 2024. 3. 8. 20:47

 

Amazon EKS란 ?

AWS EKS는 "Elastic Kubernetes Service"의 약자로, Amazon Web Services에서 제공하는 Kubernetes를 관리형으로 실행할 수 있는 서비스입니다.

 

  • Amazon Elastic Kubernetes Service는 자체 Kubernetes 컨트롤 플레인 또는 노드를 설치, 운영 및 유지 관리할 필요 없이 Kubernetes 실행에 사용할 수 있는 관리형 서비스
  • 여러 AWS 가용 영역에 걸쳐 Kubernetes 컨트롤 플레인을 실행하고 크기를 조정하여 높은 가용성을 보장
  • 컨트롤 플레인은 제어 영역 인스턴스의 크기를 자동으로 조정하고, 비정상 제어 영역 인스턴스를 감지하고 교체하며, 자동화된 버전 업데이트 및 패치를 제공
  • 여러 AWS 서비스와 통합 : 컨테이너 이미지 저장소 Amazon ECR, 로드 분산을 위한 ELB, 인증 IAM, 격리를 위한 Amazon VPC
  • 오픈 소스 Kubernetes 소프트웨어의 최신 버전을 실행하므로 Kubernetes 커뮤니티에서 모든 기존 플러그 인과 도구를 사용할 수 있습니다. 필요한 코드를 수정하지 않고 표준 Kubernetes 애플리케이션을 Amazon EKS로 쉽게 마이그레이션할 수 있습니다

 

 

EKS Architecture 구성 및 동작과정

쿠버네티스의 아키텍처로는 Control Plane(Master Node), Data Plane(Worker Node)으로 나눌 수 있습니다.

동작과정
kubectl로 nginx를 설치하는 명령어를 입력하면 API가 요청을 받아들여 etcd 저장소에 저장된 워커노드들의 상태를 확인합니다. 노드들의 상태 정보를 가지고 Schduler에 전달해주면 Schduler는 워커노드들 중 가장 적합한 노드를 찾아 응답을 해줍니다. 이후 API는 지정된 워커노의 kubelet에 nginx 실행을 요청하게 됩니다. 

컨트롤 플레인 : 컨트롤 플레인은 전체 클러스터를 제어하고 관리하는 역할을 합니다.

API
kubectl의 명령어, 권한, 문법등을 확인하여 요청을 API가 접수하고 클러스터 관리 작업을 처리합니다.

etcd 저장소
클러스터의 모든 구성 요소의 상태를 저장하는 분산 데이터베이스입니다.  워커노드들의 대한 데이터(상태)가 Key-Value 값으로 저장된다. (상태정보, 동작중이거나 배포중인 컨테이너 상태 등)

컨트롤러 매니저
 클러스터의 여러 컨트롤러를 실행하여 시스템 상태를 관리하고 조정합니다. 예를 들어, 노드의 상태를 모니터링하고 장애 발생 시 자동으로 대응합니다. ex)오토스케일링

스케줄러
새로운 Pod를 적절한 노드에 할당하여 실행할 위치를 결정합니다.

 

데이터 플레인 : 데이터 플레인은 Kubernetes 클러스터에서 실행되는 실제 작업을 처리하는 데 사용됩니다.
우리가 kubectl로 입력하는 명령어들이 적용되는 환경입니다. 

kubelet
각 노드에서 실행되며, 노드의 상태정보(하드정보, 컨테이너 정보 등)를 수집하여 컨트롤플레인에 알려준다. (해당 정보는 etcd 저장소에 저장됨)

kube-proxy
네트워크 프록시 서비스로, 클러스터 내부 및 외부에서의 네트워크 트래픽을 관리하고 서비스 검색 및 로드 밸런싱을 수행합니다.




 

 

그리고 마지막으로 EKS를 사용하여 클러스터를 만들고 노드그룹을 생성하여 노드들을 생성하게되 컨트롤 플레인에 해당하는 컴포넌트는 AWS에서 관리해주기 때문에 작업자의 콘솔에는 보이지 않습니다. 우리의 작업공간에는 kubectl명령어로 동작키는 워커노드들이 생성되게 됩니다.

 

이를 확인할 수 있는게 네트워크 인터페이스에서 컨트롤플레인의 소유자와 요청자를 확인해 보면 다르다는 것을 확인할 수 있습니다. 소유자는 저의 ID가 맞는게 요청자는 aws소유의 ID 입니다. 

해당 네트워크 인터페이스가 AWS의 소유인 이유는 통신과정에 있습니다.
1. 컨트롤플레인은 AWS에서 관리하므로 콘솔에는 보이지 않습니다.
2. 만약 우리가 kubectl 명령어를 입력하면 aws가 관리하는 컨트롤플레인의 API가 요청을 받아여 워커 노드에게 명령을 전달해야 합니다. 
3. 하지만 aws 소유의 컨트롤플레인에서 제가 소유한 노드로 명령을 어떻게 전달할까요???
4. 바로 사진에서처럼 EKS owned ENI를 나의 서브넷에 Attach시킨는 겁니다.

EKS owned ENI는 내부적으로 EKS 클러스터의 노드 또는 다른 AWS 서비스와 통신하는 데 사용됩니다.
그리고 사용자가 직접 이 ENI를 관리하거나 수정할 수는 없고 EKS처럼 네트워크 리소스 관리가 필요한 경우 자동으로 생성하고 구성됩니다. 

 

감사합니다.