Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

Contents

이 문서는 Is EC2 Container Service the Right Choice on AWS의 번역문서다.

컨테이너 클러스터 관리 시스템

Kubernets, OpenShift Origin, DC/OS, Docker Swarm, Rancher 등의 훌륭한 컨테이너 클러스터 관리 플랫폼들이 있다. 이들 플랫폼은 대부분 AWS에서 사용 할 수 있다. 반면 AWS는 EC2 Container Services(ECS)라는 자체 컨테이너 클러스터 관리 플랫폼을 가지고 있다.

개발자는 ECS를 쓸지 아니면, 다른 솔류션들을 AWS 위에 올릴지 고민에 빠질 수 있다. 반드시 그래야만 할 이유가 있는게 아니라면 난 ECS를 선택할 것이다. 하지만 다른 솔류션에 익숙해져 있거나 기능과 성능이 맞지 않다거나 등등의 이유로 다른 툴을 선택하는 개발자도 있을 것이다. ECS가 AWS 컨테이너 관리 플랫폼을 위한 최선의 선택일지 고민해보려 한다.

EC2 Container Service 아키텍처

 ECS 아키텍처

Container Scheduling

ECS는 컨테이너 클러스터 위에서 작동하는 컨테이너를 tasks단위로 관리한다. Task definiton는 컨테이너 이미지, 포트 맵핑(호스트와 컨테이너 포트, 프로토콜), 네트워크 모드(Bridge, host, awsvpc) 메모리와 CPU 정보를 담고 있다. 서비스 스케쥴러는 Task definition에 기술된 정보를 이용해서 Task를 실행한다. 필요할 경우 직접 스케쥴러를 구현 할 수도 있다. 결과적으로 컨테이너 이미지 레지스트리에서 컨테이너 이미지를 가져온 다음 Task definition에 따라서, 컨테이너 클러스터를 구성하고 있는 EC2를 선택해서 컨테이너를 실행한다.

Auto healing

컨테이너가 만들어지면 ELB에 정의된 헬스체크 기능을 이용해서, 문제가 생긴 컨테이너를 자동으로 복구한다. ELB의 헬스체크 기능 뿐만 아니라, ECS의 헬스체크 기능을 이용해서 애플리케이션 레벨에서 세밀한 실패복구 설정을 할 수 있다.

오토스케일링

CloudWatch 알람을 이용해서 오토스케일링 설정을 할 수 있다. AWS 리소스의 여러 자원을 모니터링한 정보를 이용해서 scaling up/down 결정을 할 수 있다. 또한 ECS 클러스터의 클러스터 크기도 스케일링 할 수 있다.

로드밸런싱

ECS는 Bridge, Host, awsvpc 네트워크를 제공한다. Bridge와 Host 네트워크는 ENI(Elastic Network Interfaces)를 사용한다. ENI는 오버레이네트워크를 사용 할 수 없기 때문에, 결국 EC2 호스트의 포트를 사용하게 된다. Bridge 네트워크의 경우 49153 ~ 65535 사이의 포트를 동적으로 할당해서 사용한다. Host 네트워크는 EC2 호스트의 포트를 컨테이너에 직접 연결해서 사용한다. 어떤 네트워크 모드를 사용하던지, ELB를 이용해서 로드밸런싱을 할 수 있다.

Bridge 네트워크는 포트가 동적으로 변하기 때문에 다른 호스트의 컨테이너와 직접 통신할 수 없다는 것에 유의해야 한다.

awsvpc는 비교적 최근에 추가된 네트워크 모드로 CNI(container networking interface)를 이용해서 네트워크를 구성한다. awsvpc를 이용하면 컨테이너에 네트워크 인터페이스를 붙일 수 있기 때문에 일반적인 EC2 인스턴스를 다루는 느낌으로 유연하게 네트워크를 구성할 수 있다.

컨테이너 이미지 관리

AWS는 ECS를 위한 컨테이너 레지스트리 서비스인 ECR(Amazon Elastic Container Registry)를 제공한다. ECR 대신 개인 레지스트리나 퍼블릭 레지스트리를 이용 할 수도 있긴하다.

ECS 서비스에 필요한 EC2 리소스들

ECS는 EC2를 기반으로 한 서비스이므로, EC2 리소스를 대부분 그대로 사용한다.
  • VPC
  • ECS 클러스터를 구성하는 EC2
  • EC2의 시큐리티 그룹
  • ELB(application load balancer를 포함한 모든 타입의 ELB)
  • ELB의 타겟 그룹
  • ELB의 시큐리티 그룹

컨테이너 클러스터 관리자의 선택

ECS는 EC2위에 Kubernets, OpenShift Origin, DC/OS, DockerSwarm, Rancher로 직접 구현하는 것에 비교하면 Service Discovery와 오버레이 네트워킹, 관리 기능 등이 부족 할 수 있다.

하지만 ECS는 대부분의 프러덕션 환경에 컨테이너를 배고하기 위한 핵심적인 기능을 지원한다. 그리고 추가적인 학습이나 노력 없이 즉각 배포 할 수 있다는 것도 큰 장점이다.

EKS

Amazon Elastic Container Service for Kubernetes(EKS)를 이용하면 AWS위에 Kubernetes를 전개 할 수 있다. 이걸 쓰면 좋겠는데 (2018년 4월 5일)현재 평가판이라는게 아쉽다.