컨테이너 오케스트레이션과 ECS

okkkkkky·2023년 8월 14일
0
post-thumbnail

컨테이너 오케스트레이션에 대해서 알아봅시다. 이 글에서는 쿠버네티스가 아닌 AWS의 ECS를 중점적으로 설명합니다.

컨테이너 오케스트레이션이란 ?

기업에서 사용하는 컨테이너가 만약 수백, 수천개라면 이를 일괄적으로 관리하기에 번거로울 수 있죠 ! 수많은 컨테이너들을 배포, 관리, 스케일링, 그리고 네크워킹하는 작업을 자동화할 수 있다면 편리하지 않을까요 ? 컨테이너 오케스트레이션(container orchestration) 기술은 이를 가능하게 합니다.

현업에서 사용되는 컨테이너 오케스트레이션

컨테이너 오케스트레이션 툴 및 서비스에는 아래와 같은 종류가 있습니다.

  • Docker swarm: Docker Inc.에서 개발한 Docker 컨테이너 오케스트레이션 도구입니다. 쿠버네티스가 탄생하기 전 가장 많이 사용되었습니다.

  • Kubernetes: 구글에서는 다양한 서비스(Gmail, Youtube 등)를 제공하고 이에 따른 대용량 트래픽을 제공해야하는 이슈가 발생했습니다. 이로 인해 쿠버네티스 프로젝트를 시작하게 되었고, 실제 서비스에 적용하기 시작했죠 ! 현재 가장 많이 사용되고 있는 오케스트레이션 툴이며, 구글에 의해 설계되었으나 지금은 리눅스 재단에서 관리하고 있습니다.

  • GCP(Google Cloud Platform)의

    • GKE (Google Kubernetes Engine): 서비스 이름에서도 알 수 있듯이, 쿠버네티스를 기반으로 하고 있고 쿠버네티스의 모든 기능들을 제공해주고 있습니다.
  • AWS(Amazon Web Service)의

    • EKS (Elastic Kubernetes Service): AWS에서 쿠버네티스를 기반으로 제공하는 오케스트레이션 툴입니다. 쿠버네티스 CLI를 통해 EKS 클러스터를 제어할 수 있습니다.
    • ECS (Elastic Container Service): 오늘 메인으로 살펴볼 ECS는 Docker 컨테이너를 실행하기 위한 기능을 제공해줍니다. ECS를 통해 컨테이너를 쉽게 배포하고 관리하고 스케일링할 수 있습니다.

컨테이너 오케스트레이션 툴/서비스의 기능

위에서 언급한 컨테이너 오케스트레이션을 통해 어떤 기능들을 이용할 수 있을까요 ? (주요 용어는 ECS를 기준으로 설명합니다)

컨테이너 클러스터링

여러 대의 컨테이너를 하나로 묶어(컨테이너 클러스터) 단일 서버로 사용할 수 있게끔 지원해줍니다. 나중에 알아볼 ECS에서는 EC2 인스턴스들을 목적에 따라 하나의 클러스터로 묶기도 합니다. 이를 통해 자원분배도 효율적으로 일어날 수 있게 합니다.

서비스 디스커버리

컨테이너를 자동으로 발견하고, 서비스 이름과 IP 주소 등을 관리하여, 애플리케이션 간의 연결을 관리하는 기능을 제공합니다. 컨테이너가 새로 생기거나 변동이 생기는 등 일련의 변화가 생기는 경우 컨테이너의 IP나 포트 정보를 업데이트 해줍니다.

오토 스케일링

어플리케이션의 트래픽 양에 따라 자동으로 컨테이너 수를 조절하여, 자원 사용을 최적화하고, 가용성을 보장하는 기능입니다. 오토 스케일링의 목적은 자원의 효율적인 사용을 보장해주는 것입니다.

로드 밸런싱

컨테이너들을 조절하여, 트래픽을 균등하게 분배함으로써 어플리케이션의 성능을 최적화하는 작업을 로드 밸런싱이라고 합니다. 로드 밸런싱의 목적은 오토 스케일링과 비슷하지만, 작업량을 균등하게 배분하여 효율성을 높여주는 것입니다. 사실상 로드 밸런싱과 오토 스케일링 기능은 동시에 사용되어야 운영에 있어 더욱 효율성을 증대시킬 수 있습니다.

롤아웃 & 롤백

어플리케이션을 새 버전으로 롤아웃하거나 이전 버전으로 롤백하는 기능을 제공합니다.

오토매틱 리커버리

컨테이너나 노드의 장애 시, 자동으로 복구시키는 기능을 합니다.

모니터링 & 로깅

컨테이너나 노드를 모니터링하고 로그를 수집하며 health check를 계속해서 진행합니다.

보안과 네트워크 관리

컨테이너나 노드의 보안을 관리하고, 네트워크 설정을 제공합니다.

AWS ECS에 대해 알아봅시다

컨테이너 오케스트레이션 중에서 특히, AWS에서 제공하는 ECS(Elastic Container Service)를 위주로 알아보려고 합니다. ECS는 어떻게 구성되어있는지 주요 구성요소들에 대해서 간단히 살펴보도록 하겠습니다.

ECS cluster

위의 이미지를 살펴봅시다. 위에서 컨테이너 오케스트레이션이 제공하는 기능 중, 컨테이너 클러스터링이라는 것에 대해 언급하였는데요, ECS 내부에서 ECS 클러스터에 의해 클러스터링 기능이 제공됩니다. ECS 클러스터는 컨테이너 인스턴스들의 논리적으로 묶인 집합입니다. AWS 관리 콘솔, API에 의해 생성될 수 있으며, 하나 이상의 인스턴스와 함께 실행되는 서비스 및 Task로 구성됩니다.

ECS Task definition

어플리케이션을 구성하는 컨테이너에 대한 설명이 있는 JSON형식의 텍스트 파일입니다. 태스크 definition을 기반으로 Task가 생성되며, 아래의 정보를 담고 있습니다. 참고로 한번씩 확인해봐도 좋을 것 같네요 !

  • Task의 각 컨테이너에 사용할 Docker 이미지
  • 각 Task 또는 Task 내 각 컨테이너에서 사용할 CPU 및 메모리의 양
  • Task의 컨테이너에 사용할 Docker 네트워킹 모드
  • 컨테이너가 종료 또는 실패하더라도 Task를 계속 실행할지 여부
  • 컨테이너 시작 시 컨테이너가 실행할 명령
  • Task의 컨테이너에서 사용할 데이터 볼륨

ECS Task

Task definition을 기반으로 Task를 생성하게 되는데요, 이 작업 내용은 컨테이너 인스턴스 혹은 나중에 나올 Fargate에 전달(배포)됩니다. Task는 컨테이너를 구성하는 최소 단위입니다. 위의 이미지에서도 알 수 있듯, 한 Task 내에 여러 개의 컨테이너들이 있을 수 있습니다. 또한, 한 개의 Task definition에서 여러개의 Task가 나올 수 있고 각각의 Task는 각각의 상태 및 라이프사이클을 가지고 있습니다.

ECS service

클러스터에서 특정 개수의 Task를 동시에 실행하고 관리할 수 있게 해줍니다. 만약 일부 Task들이 멈추거나 실패한다면, 그것을 대체할 Task definition의 또 다른 Task 인스턴스를 실행하여 개수를 계속해서 유지하게 해줍니다.
Task를 실행하는 방법은 Task definition을 직접 실행하거나, sevice를 통해 실행시키는데요, Task definition을 통해 실행시키는 경우에는 Task를 관리하기 어렵고, AWS의 다른 부가 기능들을 사용하기 어렵기 때문에 보통 Service를 기반으로 Task definition을 사용하여 Task가 생성됩니다.
또한 로드 밸런싱, 스케일링, 서비스 디스커버리 등의 작업을 수행합니다.

특히, Task를 실행할 수 있는 유형을 설정하는 단계가 있는데, 그 유형들로는 바로 EC2와 Fargate 방식이 있습니다.

ECS 호스트 유형

EC2 (Elastic Compute Cloud)

EC2는 AWS에서 제공하는 컴퓨팅 서비스입니다. AWS에서 가상의 컴퓨터 1대를 빌리는 것과 동일한 기능을 합니다. 용량공급자(Capacity Providers)를 기준으로 EC2의 용량을 추가하거나 제거할 수 있고, 컨테이너가 증가하거나 감소함에 따라 EC2도 함께 증가하거나 감소합니다. 다만, EC2에 다양한 설정값이 있는 것처럼 그에 비례하여 수동으로 관리해주어야 하는 부분들도 많습니다.

Fargate

Fargate는 서버리스로 운영됩니다. 용량이 어떤지, 컨테이너에 대한 관리를 어떻게 할지에 대한 걱정(?)을 덜어줍니다. 트래픽 혹은 어플리케이션의 로드에 따라 수동으로 스케일인 & 아웃을 하지 않고 자동으로 설정되기 때문에 오히려 개발자들은 컨테이너 운영에 대한 걱정을 조금 덜 할 수 있게 되는 것이죠.

자, 이렇게 컨테이너 오케스트레이션과 그 중 ECS에 대해서 간단한 개념들을 살펴보았습니다. 조금 더 부족한 설명이 있다면, 언제든 말씀해주세요 !

참고
https://www.redhat.com/en/topics/containers/what-is-container-orchestration
https://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/what-is-amazon-vpc.html
https://docs.aws.amazon.com/ko_kr/AmazonECS/latest/developerguide/clusters.html
https://boostbrothers.github.io/technology/2020/01/29/AWS-ECS-%EC%82%B4%ED%8E%B4%EB%B3%B4%EA%B8%B0/
https://tech.cloud.nongshim.co.kr/2021/08/30/%EC%86%8C%EA%B0%9C-amazon-ecs%EB%9E%80/
원티드 백엔드 챌린지 2023년 8월 강의 내용

0개의 댓글