개요
도커 컨테이너 기반의 서비스의 고가용성이나 장애 내구성, 스케일 아웃 등을 효과적으로 프로비저닝하기 위해서는 오케스트레이션 도구가 필요하게 됩니다. AWS의 ECS를 사용하여 컨테이너에 대한 프로비저닝과 더불어 Fargate와 Load Balancer를 연결하여 서비스 호스팅과 부하분산까지 진행하게 됩니다. 먼저 AWS 프로비저닝을 하기위한 구성 요소들의 개념과 관계에 대해 알아보겠습니다.
ECR(Elastic Container Registry)
ECR은 도커 허브와 같이 컨테이너 이미지를 저장하고 관리하는 레지스트리입니다. 프라이빗과 퍼블릭 레지스트리 모두 구축이 가능하며 취약점 스캐닝, IAM을 통한 권한 설정 등 부가적인 기능들을 제공하고 있습니다.
Cluster
AWS ECS의 클러스터란 논리적인 공간입니다. 어떤 컴퓨팅 자원을 가지는 개념이 아니기 때문에 컨테이너가 전혀 없는 빈 클러스터도 생성할 수 있습니다. 추후에 도커 컨테이너를 실행하게 되면 도커가 설치되어 있는 컨테이너 인스턴스에서 실행이 되고 이 컨테이너 인스턴스를 목적에 따라 묶은 개념이 클러스터입니다.
Task / Task Definition
ECS에서 컨테이너를 실행하는 최소 단위가 바로 작업입니다. 작업은 하나 이상의 컨테이너로 이루어집니다. 최소 1개의 필수 컨테이너와 N개의 추가 컨테이너를 구성할 수 있고 하나의 작업에서 실행되는 컨테이너들은 같은 인스턴스 내에서 실행됩니다.
작업을 생성하기 위해 선행되어야 하는 것이 작업 정의입니다. 컨테이너의 운영체제, 네트워크, CPU와 메모리 그리고 어떤 이미지로 실행할 것인지 등 작업을 실행하기 위한 인프라 환경을 정의하게 됩니다. 수많은 작업들이 여러 조건에 따라 실행되기도 또 종료되기도 할텐데 작업 정의를 통해 자동으로 처리할 수 있도록 하게됩니다.
Service
ECS에서 서비스란 클러스터 내에서 작업들을 스케줄링하는 역할을 합니다. 작업이 EC2와 Fargate 중 어떤 유형에서 실행할 것인지, 오토 스케일과 로드 밸런싱을 어떻게 할 것인지, 배포 방식은 무엇인지, 최소 ~ 최대로 실행될 작업 개수는 몇 개인지 등을 설정하게 됩니다.
Fargate
Fargate는 EC2 인스턴스의 서버나 클러스터를 관리할 필요 없이 컨테이너를 실행하기 위해 ECS에 사용할 수 있는 기술입니다. Fargate를 사용하면 더 이상 컨테이너를 실행하기 위해 가상 머신의 클러스터를 프로비저닝, 구성 또는 조정할 필요가 없습니다. 따라서 서버 유형을 선택하거나, 클러스터를 조정할 시점을 결정하거나, 클러스터 패킹을 최적화할 필요가 없습니다.
Fargate 시작 유형을 사용하여 태스크와 서비스를 실행할 때는 애플리케이션을 컨테이너에 패키징하고, CPU 및 메모리 요구 사항을 지정한 다음, 네트워킹 및 IAM 정책을 정의하고, 애플리케이션을 시작합니다. 각 Fargate 태스크에는 자체 격리 경계가 있으며 다른 태스크와 기본 커널, CPU 리소스, 메모리 리소스 또는 탄력적 네트워크 인터페이스를 공유하지 않습니다.
정리
1. ECR(Elastic Container Registry)
- 도커 이미지를 저장 및 관리하는 리포지토리 서비스입니다.
2. ECS(Elastic Container Service)
- 컨테이너를 오케스트레이션하는 서비스입니다.
- 여러 컨테이너를 하나의 애플리케이션처럼 실행하고 관리하도록 지원합니다.
3. Cluster
- ECS에서 컨테이너를 실행하는 EC2 인스턴스 그룹입니다.
- 여러 EC2 인스턴스를 하나로 묶어 컨테이너 실행 환경을 제공합니다.
4. Task
- 컨테이너 및 실행 설정을 정의한 단위입니다.
- 어떤 이미지를 사용할지, 몇 개의 컨테이너를 실행할지, 메모리 및 CPU 할당량 등을 설정합니다.
- 하나의 작업에는 여러 컨테이너가 포함될 수 있습니다.
5. Task Definition
- 작업을 구성하는 방법을 정의한 템플릿입니다.
- 작업 이름, 컨테이너 정의, 실행 모드, 네트워킹 설정, 권한 설정 등을 포함합니다.
- 여러 작업을 만들 때 동일한 작업 정의를 재사용할 수 있습니다.
6. Service
- 원하는 수의 작업을 지속적으로 실행하도록 관리하는 단위입니다.
- 클러스터에서 실행할 작업 정의와 작업 수를 지정합니다.
- 로드 밸런서와 함께 사용하여 트래픽을 서비스의 작업 인스턴스로 분산합니다.
7. Fargate
- ECS에서 컨테이너를 실행하는 서버리스 방법입니다.
- EC2 인스턴스를 프로비저닝하거나 관리할 필요 없이 컨테이너를 실행할 수 있습니다.