문의 주신 내용에 맞는 전문 컨설턴트 배정 후 연락드리겠습니다.
들어가며
안녕하십니까 GS네오텍 박태순 입니다.
이번 리인벤트 행사에서 Fargate for EKS 서비스가 출시 되었습니다. 서버리스 기반의 Fargate는 지금까지 ECS(Elastic Container Service)에서만 사용할 수 있었지만 EKS(Elastic Kubernetes Servie)에서도 사용할 수 있게 되었습니다. 관련하여 Fargate for EKS의 주요 내용을 확인해 보도록 하겠습니다.
EKS?
서비스 소개에 앞서 EKS와 Fargate 서비스에 대해 간단히 짚고 넘어갑시다. 먼저 EKS를 간단히 살펴볼까요?
Amazon EKS는 Kubernetes 환경의 Master node에 대한 관리형 서비스를 제공합니다. 해당 영역의 초기 구성/운영을 Managed 형태로 제공하므로, 사용자는 AWS 환경에서 쉽게 관련 환경을 프로비저닝할 수 있습니다. 또한 비정상 Master node의 자동 교체 및 버전 업데이트를 제공하고, 기타 AWS 서비스와의 연동을 통해 손쉽게 쿠버네티스 환경을 활용할 수 있습니다.
Fargate?
다음으로 알아볼 서비스는 Fargate 서비스입니다. AWS Fargate는 컨테이너를 서버리스 형태로 제공합니다. 즉, 네트워킹, 보안 및 확장기능 등이 이미 설정되어 있습니다. 사용자는 각 컨테이너에 할당할 리소스를 지정하기만 하면 됩니다. 기존에 Fargate 서비스를 제공하던 ECS의 경우에는, ECS의 인스턴스가 ECS 컨테이너 에이전트를 실행하고 Task에 대한 컴퓨팅 파워를 제공합니다.
결국 사용자는 인스턴스를 소유하고 관리해야 할 필요성이 있습니다. 반면에 Fargate의 경우에는 Task에 실행만 관리하면 됩니다. 더 이상 관리할 EC2 인스턴스가 사라지게 되는 셈입니다.
EKS + Fargate?
그렇다면 EKS에서의 Fargate는 어떤 의미를 가질까요?
ECS에서 인스턴스 없이 Task를 실행 시켰던 것처럼, 이제 EKS 환경에서도 인스턴스 없이 AWS Fargate에서 Kubernetes Pod를 실행할 수 있습니다. 더이상 Kubernetes 컨테이너를 실행하기 위해 Amazon EC2 인스턴스 클러스터의 패치, 확장 또는 보안에 대해 고민할 필요가 없습니다. Kubernetes Pod는 요청한 컴퓨팅 용량만으로 실행되며 실행한 만큼만 과금 됩니다.
Fargate for EKS 데모
eksctl을 이용하여 Demo라는 이름에 클러스터를 만듭니다.
bash |
$ eksctl create cluster --name demo --region ap--northeast-1 --fargate |
명령어 수행시 클러스터 뿐만 아니라 Fargate Profile도 자동으로 생성됩니다. 수동으로도 한번 만들어 볼까요?
profile을 삭제 후 Fargate 프로파일 추가를 다시 클릭해 봅시다.
eksctl 사용시 필요한 AmazonEKSFargatePodExecutionRole을 IAM에 부여하고 Fargate Pod은 프라이빗 서브넷만 지원하므로 두 개의 퍼블릭 서브넷을 선택 해제합니다.
다음을 클릭하면 Pod selectors 화면으로 넘어가게 됩니다. 여기서 네임 스페이스를 입력하라는 메시지가 표시됩니다. default를 추가합니다. 이는 기본 Kubernetes 네임스페이스에서 생성 된 모든 Pod가 Fargate에서 실행되기를 원한다는 뜻입니다. Next를 눌러 다음으로 넘어갑니다.
json |
"fargateProfileName": "demo-kube-system", "clusterName": "demo", "podExecutionRoleArn": "arn:aws:iam::xxx:role/ AmazonEKSFargatePodExecutionRole", "subnet":[ "subnet-09ec980cc531a6305", "subnet-025e350adb819ed00" ], "selectors":[ { "namespace": "kube-system" } ] } |
다음 demo-kube-system-profile.json 파일을 생성 후 위와 같이 입력합니다.
json의 루트 디렉터리로 이동 후
bash |
$ aws eks create-fargate-profile --cli-input-json file://demo-kube-system-profile.json |
다음 명령어를 입력합니다. 이제 컨테이너를 클러스터에 배포 할 준비가 완료되었습니다.
bash |
$ kubectl create deployment demo-app --image=nginx |
kubectl 명령을 통해 nginx 이미지를 배포합니다.
bash |
$ kubectl get pods |
그런 다음 kubectl get pod 명령을 통해 pod상태를 확인합니다.
잠시 후 get pods 명령을 다시 실행하면 demo-app의 상태가 이제 running 상태로 바뀌고 성공적으로 컨테이너가 배포 되었습니다!