ECS
Amazon에서 제공하는 완전관리형 컨테이너 오케스트레이션 서비스로서
클러스터에서 Docker 컨테이너를 이용하여 인프라 환경을 좀 더 편리하게 운영, 관리 할 수 있게 해주는 서비스이다.
비슷한 툴로서는 Kubernetes나 Docker Swarm이 있다.
클러스터는 태스크(작업) 또는 서비스로 일컬어지는 컨테이너들의 집합이다.
컨테이너는 애플리케이션에 필요한 부분을 패키징하여 애플리케이션 별로 격리하는 방식이다.
ECS의 작동 방식
ECS는 5가지 구성요소로 구성되어 있다.
- Cluster (클러스터)
- Container Instance (컨테이너 인스턴스)
- Task (작업)
- Task Definition (작업 정의)
- Service (서비스)
각각의 구성 요소들에 대해 정리해보았다.
- Cluster (클러스터)
- ECS의 가장 기본 단위이다.
- 클러스터는 Task 또는 서비스의 논리적 그룹이다.
- 기본적으로 컴퓨팅 자원을 포함하지 않는다.(텅 빈 cluster도 생성 가능)
- ECS에서 Container를 실행시키기 위해서는 Container Instance가 Cluster에 포함되어야 한다.
- Cluster에서 Service나 Task를 실행하면 조건을 만족하는 Container Instance를 찾아 해당 인스턴스에 Container를 실행한다.
- Fargate(Serverless)를 사용하면 Container Instance없이 컨테이너를 실행할 수 있다.
- Container Instance (컨테이너 인스턴스)
- Container Instance ECS 컨테이너 에이전트를 실행하고 cluster에 등록된 EC2 인스턴스이다.
- 리눅스, 윈도우 OS를 지원하며 온프레미스 VM 등의 다른 OS도 지원한다.
- Fargate 시작 유형을 사용하는 task는 서버리스로 배포되므로 Container Instance는 적용되지 않는다.
- Task (작업)
- Task ECS의 최소 실행 단위로 하나 이상의 컨테이너 묶음이다.
- 1개 이상의 컨테이너가 Task에 구성된다.
- Cluster에 속한 Container Instance에 배포된다.
- 여러 테스크 정의에 걸쳐 애플리케이션을 확장하는 것이 좋다.
- Task Definition (작업 정의)
- Task Definition Task의 구성 요소는 Task Definition에 Json 형식으로 작성되어 있고 작성된 내용을 참고로 Task가 구성된다.
- Task Definition에서 작업 및 컨테이너가 실행하고자 하는 이미지, 사용할 리소스 양, 시작 유형, 로깅 구성 등 다양한 매개변수를 정의할 수 있다.
- 컨테이너 별로 하나 혹은 둘 이상의 Task Definition을 포함할 수 있다.
- Cluster에 종속적이지 않다.
- Service (서비스)
- Task를 지속적으로 관리하는 단위이다.
- Service Task definition을 참고하여 task를 실행한다.
- 원하는 수의 Task를 유지 관리하는 스케쥴러 역할을 한다.
- 선택적으로 로드 밸런서 뒤에서 실행하여 로드 밸런싱과 Auto Scaling 기능을 할 수 있다.
ECS 작업 순서
- 컨테이너의 이미지를 저장소(ECR)에 커밋
- task definition에서 사용할 이미지 및 시작 유형, 리소스 정의
- cluster 생성
- service가 task definition을 참고하여 task 생성
- elb에 들어온 요청에 따라 오토 스케일링 및 로드 밸런싱
ECS 의 구조적 특징
EC2 Instance
ECS의 Docker host 역할은 EC2 Instance가 담당한다.
container 전용 서버팜을 따로 구성하지 않고 VM 형태의 EC2 instance에서 container를 동작시키는 방법이다.
ELB를 이용한 Network 구조
Docker를 사용하는 사람들이 늘어나면서 컨테이너를 대규모로 운영하려고 하는 사람이 늘어났다.
여러개의 Docker host를 사용하기 위해서 clustering 형태로 통합 관리하려는 필요성이 커지면서
host간의 네트워크를 논리적으로 묶어서 연결해 주는 overlay network는 컨테이너 오케스트레이션을 위한 중요 구성 요소로 고려되고 있는 추세이다.
컨테이너간 통신을 자주 하는 애플리케이션을 사용하는 경우 host 사이를 논리적으로 묶어주는 네트워크 구조가 없다면 각 컨테이너의 host 정보를 추가로 알아 통신이 가능하다. 이러한 문제는 ELB 로 해결할 수 있다.
ELB(Elastic Load Balancing) 는 둘 이상의 가용 영역에서 EC2 인스턴스, 컨테이너, IP 주소 등 여러 대상에 걸쳐 수신되는 트래픽을 자동으로 분산한다. ELB는 수신 트래픽의 변화에 따라 로드 밸런서 용량을 자동으로 조정한다.
Fargate
EC2를 생성하거나 컨테이너를 실행하기 위한 오케스트레이션을 AWS가 맡아 하는 서비스로 관리가 용이
Fargate 구성요소
클러스터
ECS 클러스터는 작업 또는 서비스의 논리적 그룹이다.
태스크 정의
애플리케이션을 구성하는 하나 이상의 컨테이너를 설명하는 텍스트 파일이다.
작업
클러스터 내 태스크 정의를 인스턴스화 하는 것이다.
서비스
ECS 서비스를 사용해 클러스터에서 원하는 수의 태스크를 동시에 실행하고 유지할 수 있다.
태스크가 어떤 이유로든 실패하거나 중지되면 ECS 서비스 스케줄러가 태스크가 정의에 따라 다른 인스턴스를 시작하는 방식으로 작동한다.
https://dev.classmethod.jp/articles/contaier-doceker-and-ecs-for-beginner-kr/
'공부 > AWS' 카테고리의 다른 글
[AWS] ECR에 이미지 업로드 (0) | 2022.07.18 |
---|---|
[AWS] ACM SSL 인증서 발급 받기, 갱신하기 (0) | 2022.07.15 |
[AWS] CodeBuild, CodeDeploy 결과 Slack으로 알림 전송하기 - AWS Chatbot (0) | 2022.06.23 |
[AWS] [3] codepipeline으로 Github+ CodeBuild + CodeDeploy 생성하기, AWS CI/CD 구축하기 (0) | 2022.06.20 |
[AWS] [4] CodeDeploy 에서 Blue/Green으로 배포하기, AWS CI/CD 구축하기 (1) | 2022.06.16 |