1주차 - Amzaon EKS 설치 및 기본 사용

728x90

EKS란

  • Elastic Kubernetes Service는 AWS 자체 Kubernetes 서비스로 컨트롤 플레인(Master Node)를 설치, 운영 및 유지 관리할 필요 없이 Kubernetes를 사용할 수 있는 관리형 서비스
  • 여러 AWS 가용 영역에 걸쳐 Kubernetes 컨트롤 플레인을 실행하고 크기를 조정하여 높은 가용성을 보장
  • 오픈 소스 Kubernetes 소프트웨어의 최신 버전을 실행하므로 Kubernetes 커뮤니티에서 모든 기존 플러그 인과 도구를 사용할 수 있음
  • 지원 버전 : 보통 5~6개의 마이너 버전 지원(현재 1.29~1.32)
    • 평균 3개월마다 새 버전 제공, 처음 14개월 지원, 추가 12개월 연장 지원(비용 추가)

 

EKS 아키텍처 (컨트롤 플레인 / 데이터 플레인)

  • EKS 컨트롤 플레인 : AWS Managed VPC - 3개 AZ, API NLB, ETCD ELB
    • 여러 가용 영역에 컨트롤 플레인 컴포넌트 구성 →  사실 EKS는 AWS에서 제공하는 Kubernetes 서비스 상품으로편리하게 Kubernetes 사용 및 관리 할 수 있다고만 생각을 했는데, 여러 가용영역에 구성이 되어 Auto Scaling 및 장애 발생에 대하여 분산 구성되어 있다는 부분을 새롭게 알게 되었다.

  • EKS 데이터 플레인 : Customer VPC - EKS owned ENI, 관리형 노드 그룹(Managed node groups)
    • 컨트롤 플레인과 마찬가디로 여러 가용 영역에 데이터 플레인이 구성되어 있으며, 컨트롤 플레인과의 통신은 자체 ENI(EKS owend ENI)를 통하여 통신 → ENI 확인 시 소유주와 인스턴스 소유자가 다름



 

EKS 배포(실습)

  • 웹 관리 콘솔, eksctl, IaC(CDK, CloudFormation, Terraform 등)
    • 해당 스터디에서는 eksctl을 통하여 EKS 배포

 

기본 인프라 배포

    • AWS CloudFormation을 통해 작업용 ec2 및 VPC, PublicSubnet1, 2, Private Subnet1, 2 생성
    • IAM User 자격증명 설정 → aws cli를 사용하여 생성된 VPC 정보 및 노드그룹이 위치할 Subnet 정보 확인

 

EKS 배포 

  • EKS 배포는 AWS Console, Terraform, eksctl등 다양하게 배포할 수 있음
    • eksctl은 EKS 클러스터 구축 및 관리를 하기 위한 오픈소스 명령줄 도구 → eksctl를 통해 eks 클러스터 배포 시 내부적으로는 CloudFormation을 사용하여 배포

eksctl create cluster --name $CLUSTER_NAME --region=$AWS_DEFAULT_REGION --nodegroup-name=$CLUSTER_NAME-nodegroup --node-type=t3.medium \
--node-volume-size=30 --vpc-public-subnets "$PubSubnet1,$PubSubnet2" --version 1.31 --ssh-access --external-dns-access --verbose 4

EC2 인스턴스 목록에서 EKS 노드 그룹이 생성된 것을 확인

 

■ kubectl 명령어를 통해 Node 정보 확인

(yjsong@myeks:N/A) [root@myeks-host ~]# kubectl get nodes -o wide -v=6
I0208 18:27:43.248694    6094 loader.go:395] Config loaded from file:  /root/.kube/config
I0208 18:27:44.174863    6094 round_trippers.go:553] GET https://76249C2A286D69A27FA950FB06ADFB24.yl4.ap-northeast-2.eks.amazonaws.com/api?timeout=32s 200 OK in 925 milliseconds
I0208 18:27:44.178647    6094 round_trippers.go:553] GET https://76249C2A286D69A27FA950FB06ADFB24.yl4.ap-northeast-2.eks.amazonaws.com/apis?timeout=32s 200 OK in 2 milliseconds
I0208 18:27:44.194714    6094 round_trippers.go:553] GET https://76249C2A286D69A27FA950FB06ADFB24.yl4.ap-northeast-2.eks.amazonaws.com/api/v1/nodes?limit=500 200 OK in 8 milliseconds
NAME                                               STATUS   ROLES    AGE   VERSION               INTERNAL-IP     EXTERNAL-IP      OS-IMAGE         KERNEL-VERSION                  CONTAINER-RUNTIME
ip-192-168-1-192.ap-northeast-2.compute.internal   Ready    <none>   12m   v1.31.4-eks-aeac579   192.168.1.192   54.180.231.184   Amazon Linux 2   5.10.233-223.887.amzn2.x86_64   containerd://1.7.25
ip-192-168-2-16.ap-northeast-2.compute.internal    Ready    <none>   12m   v1.31.4-eks-aeac579   192.168.2.16    13.125.242.255   Amazon Linux 2   5.10.233-223.887.amzn2.x86_64   containerd://1.7.25

 

dig 명령어를 통하여 API주소 확인 시 Public IP를 확인 할 수 있음

(yjsong@myeks:N/A) [root@myeks-host ~]# dig +short $APIDNS
3.35.248.97
43.201.117.223

 

728x90