Amazon EKS 구축 방법에 대해 알아봅니다.
목차
ToggleAmazon EKS(Elastic Kubernetes Service)
Amazon EKS의 장점
- 쿠버네티스 시스템 컨트롤 플레인의 유지 및 운영의 부담이 증가됩니다.
- EKS는 각각의 구성 요소를 정상적으로 동작시키기 위한 설정이나 유지, 운영 장애가 발생했을 때의 복구 방법 등 제공합니다.
Amazon EKS 특징
- VPC와 통합
- VPC(Virtual Private Cloud) 통합 네트워킹 지원
- IAM(Identify and Access Management)을 통한 인증과 인가
- 쿠버네티스 클러스터는 kubectl 명령줄 도구를 사용하여 제어함.
- 이때 사용자 인증(authentication)과 제어에 대한 인가(authorization)가 필요함.
- ELB(Elastic Load Balancing)와의 연계
- 데이터 플레인 선택
- 관리형 노드 그룹 : EKS 클러스터의 유지 관리나 버전을 업그레이드할 때 필요한 가상 머신 설정 제공.
- 파게이트(Fargate) : 처음부터 가상 머신을 의식하지 않고 파드를 배포할 수 있는 서비스
쿠버네티스 환경 구축과 예제 애플리케이션 배포
웹 어플리케이션 프런트엔드 파일은 S3에 저장
CloudFront를 통해 정적 웹콘텐츠로 배포
EKS 클러스터 워커 노드에 컨테이너로 배포, RDS와 접속
ELB로 부하를 분산
백엔드 애플리케이션의 컨테이너 이미지느는 ECR(Elastic Container Registry)에 저장
AWS 관련 서비스 및 용어
- S3
- CloudFront : Content Delivery Network, CDN
- RDS : Relational DataBase, RDB
- ECR : Elastic Container Registry, AWS가 제공하는 컨테이너 레지스트리 관리형 서비스, 컨테이너 이미지를 저장, 다운로드할 수 있는 구조로 컨테이너 레지스트리를 사용 – ep.41
- EC2 : Elastic Compute Cloud
- ELB : Elastic Load Balancing
- Application Load Balancer : HTTP/HTTPS 특화된 L7(레이어 7)
- IAM : Identify and Access Management
Amazon EKS 구축에 사용하는 도구
- eksctl : EKS 클러스터 구축 및 관리를 하기 위한 오픈소스 명령줄 도구
- VPC와 EKS를 별도로 구축해야 함. eksctl로 EKS 클러스터를 구축시 VPC도 동시에 생성하면 EKS를 삭제(중지도 과금됨)할 때 VPC도 삭제됨
- CloudFormation : AWS 환경 구축 도구
- 관련 리소스를 한번에 구축하고 필요에 따라 변경 및 삭제할 때
- AWS 관리 콘솔
- AWS CLI
EKS 클러스터 구축
- AWS CLI
- eksctl
- kubectl
기본 리소스 구축
- 사용할 도구 설치
- AWS CLI
- eksctl
- kubectl
- CloudFormation을 이용해 VPC 등의 기본 리소스 생성
- 생성된 리소스 확인
- aws → service → vpc → eks-work-vpc 확인
EKS 클러스터 구축
- 기본 리소스 정보 수집
- CloudFormation → eks-work-base → 출력 탭 → WorkerSubnets 값 복사
- eksctl 실행
- EKS 클러스터 구축
eksctl create cluster --vpc-public-subnets zcxx --name eks-work-cluster --region ap-northeast-2 --version 1.19 --nodegroup-name eks-work-nodegroup --node-type t2.small --nodes 2 --nodes-min 2 --nodes-max 5
- kubeconfig 설정
- eksctl은 EKS 클러스터 구축 중에 kubeconfig 파일을 자동으로 업데이트함.
- 쿠버네티스 클라이언트인 kubectl이 이용할 설정 파일
- 접속 대상 쿠버네티스 클러스터의 접속 정보(컨트롤 플레인 URL, 인증 정보, 이용할 쿠버네티스의 네임스페이스 등)을 저장
kubectl config get-contexts
# kubectl에서 EKS 클러스터 접속 가능 여부 확인
kubectl get nodes
EKS 클러스터 동작 확인
kubectl apply -f 02_nginx_k8s.yaml
kubectl get pods
kubectl port-forward nginx-pod 8080:80
# [<http://localhost:8080>](<http://localhost:8080>) 접속 확인
kubectl delete pod nginx-pod