본문 바로가기

Infrastructure/Docker

[Docker] Container Orchestration

Container Orchestration Tool

이번 장에서는 Container Orchestration 환경을 운영하기 위한 Container Orchestration Tool에 대해서 알아본다.

많은 Cloud Hosting 업체가 있지만 가장 많이 사용되는 AWS를 기준으로 알아보도록 한다.


Container Tool 이란?

요즘 많은 애플리케이션이 컨테이너 환경 특히 도커 환경에서 운영되고 있다. 컨테이너와 함께 MSA(Micro Service Architecture)가 떠오르면서 DevOps 엔지니어들은 컨테이너를 관리하기 위한 도구가 필요하게 되었고 Kubernetes(쿠버네티스, 이하 K8S)와 같은 툴들이 등장하기 시작하였다.

이러한 컨테이너 관리 툴들은 아래와 같은 기능을 제공한다.

  • 컨테이너 간 리소스 할당
  • 워크로드에 따라 컨테이너 확장 및 축소
  • 트래픽 라우팅 및 부하 분산
  • 특정 컨테이너에 서비스 및 애플리케이션 할당
  • 배포 및 프로비저닝

Container Orchestration Tool 종류

위에서 살펴본 이미지와 같이 수없이 많은 Container Orchestration Tool이 존재한다.

모든 Container Orchestration Tool을 검토하기에는 무리가 있으므로 AWS 환경에서 서비스를 운영한다고 가정하고 가장 많이 사용되는 EKS, ECS, Kops의 장단점과 특징에 대해서 알아보도록 한다.


ECS 란?

ECS는 Elastic Container Service의 약자로 AWS에서 독점하여 개발한 Container Tool이다. 독점 개발이라는 의미는 Kubernetes와 같은 다른 Container Tool에 의존하지 않는다는 의미가 된다. ECS를 사용하는 경우 우리가 실행시키는 컨테이너를 띄우는 환경을 EC2 또는 Fargate 중에 선택할 수 있다.

장점

  • AWS의 관리를 받기 때문에 고가용성을 보장받을 수 있다.
  • Spot Instance를 사용하여 많은 비용을 절감할 수 있다.
  • AWS의 관리를 받는 서비스지만 추가 비용이 발생하지 않는다.
  • 다른 서비스에 비해 러닝커브가 낮은 편이다.
  • AWS의 IAM 서비스를 통하여 컨테이너에 접근할 수 있는 사용자를 손쉽게 제한할 수 있다.

단점

  • AWS에 종속적이기 때문에 다른 플랫폼을 사용하려는 경우 마이그레이션 비용이 많이 발생한다.
  • K8S 기반의 서비스와 다르게 관련 문서가 적으며 K8S의 풍부한 플러그인과 기능을 사용할 수 없다.

EKS 란?

EKS는 Elastic Kubernetes Service의 약자로 엔지니어가 온프레미스 또는 AWS 클라우드 환경에서 K8S 애플리케이션을 관리할 수 있게 해주는 AWS의 완전 관리형 서비스다.

장점

  • 엔지니어가 직접 K8S Control plane을 설치 및 운영할 필요가 없다.
  • K8S에서 제공하는 모든 플러그인과 기능을 쉽게 적용시킬 수 있기 때문에 확장성이 높다.
  • 다른 AWS 서비스와 쉽게 통합되어 확장성이 높다.
  • EC2 스팟 인스턴스를 사용하여 사용 비용을 절감할 수 있다.
  • K8S 기반의 서비스이기 때문에 풍부한 문서와 커뮤니티를 보유하고 있다.

단점

  • AWS에 종속적이기 때문에 다른 플랫폼을 사용하려는 경우 마이그레이션 비용이 발생한다.
  • 운영을 위해서 K8S에 대한 지식이 필요하기 때문에 ECS에 비해서 러닝커브가 높다.
  • 완전 관리형 서비스이기 때문에 클러스터당 매달 $74정도의 추가 비용이 발생한다.

kOps 란?

kOps는 Kubernetes Operations의 약자로 K8S 클러스터를 설치 및 운영하기 위해 AWS에서 제공하는 서비스다. ECS, EKS와는 다르게 컨테이너를 관리하는 마스터 노드와 작업을 수행하는 워커 노드를 엔지니어가 직접 EC2 인스턴스에 설치해서 운영하는 방식이다.

장점

  • K8S 클러스터를 구축하기 위해 소비되는 시간이 다른 서비스에 비해서 적다.
  • 여러 클라우드 플랫폼을 지원하기 때문에 특정 제품에 종속되면 안되는 경우에 좋은 선택지가된다.
  • 오픈 소스이기 때문에 추가로 발생하는 비용이 없다.
  • K8S를 직접 구축하여 사용하는 것이기 때문에 방대한 기능을 자유도 높게 모두 사용할 수 있다. 대표적으로 마스터 노드를 직접 EC2에 설치하여 관리하기 때문에 엔지니어가 직접 접속하여 설정정보를 변경할 수 있다.

단점

  • 새로운 버전이 출시되었을 때 새로운 VPC에 새로운 클러스터를 생성하는 것이 더 쉬울만큼 업그레이드에 대한 리스크가 존재한다.
  • 마스터 노드와 워커 노드를 직접 EC2에 설치하여 관리하기 때문에 엔지니어 리소스가 지속적으로 사용된다.

정리

특징 및 장단점을 종합하여 어떠한 상황에서 어떤 서비스를 사용해야 하는지 정리해본다.

kOps

  • 특정 플랫폼에 종속되면 안되는 경우.
  • K8S 전문 DevOps 엔지니어 인력이 상주하여 K8S를 상세하게 설정하여 효율을 극대화 할 수 있는 경우.
  • K8S 커뮤니티와 방대한 문서를 활용하고 싶은 경우.

ECS

  • DevOps 엔지니어 인력이 부족하여 K8S 기반의 환경 구축이 부담스러운 경우.
  • AWS에 종속적으로 환경을 구축해도 괜찮은 경우.
  • K8S기반의 컨테이너 관리 환경을 도입하기 전에 간단하게 Container Orchestration 환경을 경험하고 싶은 경우.
  • 서비스를 운영하는데 K8S의 많은 기능이 과하다고 판단되는 경우.

EKS

  • 인스턴스 또는 Fargate에 실행되는 컨테이너의 배치를 세밀하게 제어해야 하는 경우.
  • 플러그인과 같은 K8S의 모든 기능을 사용하고 싶은 경우.
  • K8S와 AWS 서비스들을 쉽게 연동하여 서비스를 구축하고 싶은 경우.
  • K8S 커뮤니티와 방대한 문서를 활용하고 싶은 경우.

문서를 정리하면서 필자는 EKS를 사용하여 새로운 인프라를 구축하게 된다면 EKS를 사용하여 Container Orchestration 환경을 구축하겠다고 생각하게 되었다. ECS의 경우 빠르게 환경을 구축할 수 있지만 결국 요즘 가장 핫한 K8S를 경험해볼 수 없다는 점이 크게 아쉽게 느껴졌다.

K8S를 구축하고 인프라를 관리하는 실력을 키우기 위해서는 kOps를 사용해서 관리하는 것이 좋아보이지만 실무에서 직면할 수 있는 커다란 문제인 버전관리 및 호환성 문제를 자동으로 해결해주는 EKS가 상당히 매력적으로 느껴졌다. kOps만큼의 자유도는 아니지만 K8S의 모든 기능을 사용할 수 있다는 점 또한 서비스 운영과 동시에 엔지니어의 실력을 증진시킬 수 있는 좋은 서비스라는 생각을 하게 되었다.


참고한 자료

'Infrastructure > Docker' 카테고리의 다른 글

[Docker] Docker Desktop 유료화  (0) 2022.09.06