Study/Cloud

[AWS]EKS 개념 및 구축

seomj 2023. 10. 22. 01:47

현재 프로젝트를 진행하며 EKS 위에서 Node에 배포를 진행하고 있다. 그 과정에서 학습했던 EKS에 대해 정리하고자 한다. 


Amazon EKS

컨트롤 플레인을 직접 구성하지 않고서 k8s를 손쉽게 사용할 수 있도록 편리함을 제공

EKS Control Plane = k8s master

control plane을 aws가 직접 관리 → 사용자가 세부 파라미터 설정 불가능

VPC, ELB, IAM 등 특정 기능들을 같이 활용하고자 할 때 유용

클러스터 생성 시 하나의 단위 엔드 포인트 즉, 마스터 엔드 포인트가 생성된다.

마스터 엔드 포인트는 3개의 가용 영역이 펼쳐지고, 이 가용 영역에 워커 노드들이 분산되어 배포된다. 사용자는 kubectl을 통해 컨테이너들을 운영 및 관리할 수 있다.

 

EKS는 쿠버네티스와 달리 AWS 환경에서 실행되며, control-plane은 AWS가 직접 관리하게 된다.

그렇기에 쿠버네티스는 AWS 리소스가 활용된다. 

Worker Node는 EC2 인스턴스 또는 Fargate를 사용하며, 네트워크는 VPC 영향을 받게 된다.

Load Balancer type service를 생성하면 AWS ELB를 사용하며, Ingress는 AWS Route53을 사용한다.

 

 

EKS 구축

나는 아무리 설명을 들어도 직접 구축해보는 것이 이해가 더 빨랐기에 구축을 해보며 설명을 보태도록 하겠다.

 

https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/getting-started.html

공식 문서를 보면 알다시피 eksctl 혹은 aws cli 등을 이용하지만,
나는 빠르게 EKS를 구축하고 배포하는 것이 목표였기에 AWS 웹 콘솔에서 진행했다.

 

사전 준비 - CloudFormation 사용

EKS를 구축하려면 VPC, 서브넷 등의 리소스들이 구축되어 있어야 한다.

AWS 웹 콘솔에서도 직접 네트워크를 구축하여 VPC부터 서브넷, IGW, Route Table 등 설정해주어 진행할 수 있지만, 진행하다 실패했기에 CloudFormation을 사용했다.

 

CloudFormation에서 스택 생성을 한다.

이때 나는 eks 템플릿을 사용하였다.

( https://amazon-eks.s3.us-west-2.amazonaws.com/cloudformation/2020-06-10/amazon-eks-vpc-private-subnets.yaml )

이는 EKS를 구축할 때 필요한 리소스를 정의해 둔 yaml 파일로, 이를 기반으로 필요한 리소스들이 구축된다. 

직접 json 혹은 yaml로 작성하여 사용할 수도 있다.

 

템플릿을 통해 제공된 내용들을 Designer에서 보면 다음과 같다.

 

다음으로 넘어가 name을 지정하고 아래에 vpc와 subnet은 템플릿 기반으로 내용이 정의되어 있다.

 

이후 3단계 스택 옵션 구성은 따로 만지지 않았다.

모두 완성하고 나면 아래와 같이 생성되고 있다.

 

EKS 생성

클러스터 서비스 역할은 AmazonEKSClusterPolicy 정책이 연결되어 있어 있는 역할로 하나 생성하여 지정했다.

 

네트워크는 CloudFormation에서 생성한 VPC를 지정하면 서브넷이 배정된다.
보안그룹 또한 생성한 그대로 선택하면 된다.

*Public EKS와 Private EKS

public eks는 kubernetes api가 외부에서 호출할 수 있다. 주소만 알면 외부에서 호출할 수 있는 장점이 있다. 하지만 누구나 접근이 가능하기에 보안에 취약하다.

private eks는 kuberneetes api가 외부에서 접근할 수 없다. worker node는 aws 내부망을 이용하여 내부통신을 한다.

 

 

그리고 다시 돌아와

로깅 구성, 추가 기능 선택은 따로 하지 않았다.

 

쭉 넘어가 eks를 생성해보자.

 

 

노드 그룹 생성

cluster가 생성되고 나면 노드 그룹을 생성할 수 있다.

 

노드 그룹 추가를 해보자.

노드 IAM 역할은 AmazonEC2ContainerRegistryReadOnly, AmazonEKS_CNI_Policy, AmazonEKSWorkerNodePolicy의 정책들을 연결했다. 

 

노드 그룹에 대해 설정을 할 수 있다. 나는 딱히 설정하지 않았다.

 

네트워킹 또한 설정해주면 된다.

현재 AsgInstanceLaunchFailures: You've reached your quota for maximum Fleet Requests for this account. Launching EC2 instance failed. 라는 error가 뜨면서 노드 그룹이 생성되지 않는다.

하지만 이와 같은 방법으로 내가 전에 생성을 했기에 문제가 없을 것이라 생각한다.

이 전에 성공했던 사진을 첨부하며 마무리하겠다.

 

 

다음 포스팅에서는 생성된 EKS에 Service, Deployment를 배포해보자.

 

 

 

참고

https://aws.amazon.com/ko/eks/

https://nearhome.tistory.com/128

https://malwareanalysis.tistory.com/591

https://devocean.sk.com/blog/techBoardDetail.do?ID=163578