WiseN

[Reinvent2019] ECS에 이어 EKS 환경에서도 Fargate를 활용 - Fargate for EKS 출시

Dec 16, 2019   |   AWS

작성자_박태순

페이스북 공유하기 트위터 공유하기
Blog thumbnail

들어가며



안녕하십니까 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의 경우에는, E​CS의 인스턴스가 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 상태로 바뀌고 성공적으로 
컨테이너가 배포 되었습니다!

 

제약 사항


다른 AWS 서비스와 마찬가지로 제약사항이 존재합니다. 다음과 같습니다.

  • GPU 컴퓨팅 자원 사용 불가능: Fargate는 GPU 컴퓨팅 자원이 없기 때문에 GPU 사용을 고려하신다면 EKS최적화 AMI를 이용하여 EC2 Worker node를 구성해야 합니다
  • CLB / NLB 사용 불가: EC2기반에선 CLB / NLB 모두 활용 가능하나 Fargate에선 ALB만 활용이 가능합니다
  • Kubernates의 Host 기준 옵션 사용 불가: 데몬셋(daemonset)은 클러스터 전체에 worker노드의 호스트당 pod를 띄울때 사용하는 컨트롤러 입니다하지만 Fargate에는 host가 없으므로 demonset은 지원하지 않습니다. 이와 마찬가지로 worker node 호스트 네트워크에 직접 연결하는 Hostport, Hostnetwork와 같은 기능을 사용할 수 없습니다
  • 영구적인 ​볼륨 또는 파일 시스템이 필요한 볼륨을 제공하지 않음: Pod실행 시 컨테이너 이미지 계층 스토리지 10GB, 마운트를 위한 볼륨 4GB이 제공되며 이 스토리지는 휘발성이라 Pod 중지시 스토리지가 삭제됩니다

마치며



`19년 12월 기준으로 지원하는 리전은 아래와 같습니다.

  • 미국 동부(오하이오) - us-east-2
  • 미국 동부(버지니아북부) - us-east-1
  • 아시아 태평양(도쿄) - ap-northeast-1
  • EU(아일랜드) - eu-west-1

기존과 동일하게 Fargate 환경의 과금은 vCPU와 GB(메모리) 기준으로 발생하며, 리전별로 단가가 다르니 참고하세요.

그럼 오늘 포스팅을 마치겠습니다. 끝!