K8s를 공부하고나서 ECS를 공부하려고 aws korea 웨비나를 봤는데 K8s와 비슷하면서도 달라서 정확하게 구분 하고 공부해야겠다 생각이 들어서 이글을 포스팅한다
ECR(Elastic Container Registry)
Amazon Elastic Container Registry(Amazon ECR)는 안전하고 확장 가능하고 신뢰할 수 있는 AWS 관리형 컨테이너 이미지 레지스트리 서비스이다. Amazon ECR은 AWS IAM을 사용하여 리소스 기반 권한을 가진 프라이빗 리포지토리를 지원한다. 따라서 지정된 사용자 또는 Amazon EC2 인스턴스가 컨테이너 리포지토리 및 이미지에 액세스할 수 있다. 원하는 CLI를 사용하여 도커 이미지, Open Container Initiative(OCI) 이미지 및 OCI 호환 아티팩트를 푸시, 풀 및 관리할 수 있다.
ECS(Elastic Container Service)
Amazon Elastic Container Service(Amazon ECS)는 확장성이 뛰어나고 빠른 컨테이너 관리 서비스이다. 이를 사용하여 클러스터에서 컨테이너를 실행, 중지 및 관리할 수 있다. Amazon ECS에서 컨테이너는 서비스 내 개별 태스크나 여러 태스크를 실행하는 데 사용하는 태스크 정의에 정의되며 이 컨텍스트에서 서비스는 클러스터에서 지정된 수의 태스크를 동시에 실행하고 유지하는 데 사용할 수 있는 구성이다. AWS Fargate에서 관리하는 서버를 사용하지 않는 인프라에서 태스크 및 서비스를 실행할 수 있다. 또는 인프라에 대한 더 세부적인 제어를 위해 관리하는 Amazon EC2 인스턴스의 클러스터에서 태스크와 서비스를 실행할 수 있다. 즉 AWS의 컨테이너 오케스트레이션 서비스이다. ECS의 구성요소와 동작 방식을 알아보겠다
ECS 구성요소
1.Task Definition : 작업 정의는 애플리케이션을 구성하는 컨테이너를 설명하는 텍스트(JSON) 이다.
- 시작 유형 호환성 선택(Fargate | EC2 | External)
- 사용할 컨테이너 이미지 설정
- 애플리케이션을 위해 개방할 포트 설정
- CPU/메모리 리소스 할당 설정
- 작업의 컨테이너에 사용할 데이터 볼륨 설정
2. Task : 작업 정의에서 정의된 설정으로 인스턴스화 하는 것이다. Task는 Cluster에 속한 컨테이너 인스턴스(EC2 인스턴스)나 Fargate에 배포하게 된다.
3. Service : 클러스터에서 지정된 수의 작업을 동시에 실행하고 관리할 수 있게 해주는 구성입니다. 서비스는 Task를 포함하며, Task와 관련된 Auto Scaling과 Load Balancing을 관리합니다.
- 시작 유형 선택(Fargate | EC2 | External)
- 작업 정의 선택
- 클러스터 선택
- 서비스 이름 설정
- 작업 개수 설정
- 배포 유형 설정(롤링 | 블루/그린 배포)
- 네트워크 구성(VPC, 서브넷, 보안그룹)
- Load Balancing 설정
- Auto Scaling 설정
4. Cluster : 작업 또는 서비스의 논리적 그룹이며 클러스터를 실행하여 작업을 실행할 수 있다.
- 클러스터 템플릿 선택(Fargate | EC2 | External)
- 클러스터 이름 설정
5. scheduling : 작업 배치 전략은 작업 배치 인스턴스 또는 종료할 태스크를 선택하는 알고리즘이다.
전략유형
- binpack: 태스크는 사용되지 않는 CPU 또는 메모리를 최소한으로 남겨둘 수 있도록 컨테이너 인스턴스에 배치된다. 이 전략은 사용 중인 컨테이너 인스턴스의 수를 최소화한다. 이 전략을 사용하고 축소 작업을 수행하면 Amazon ECS가 태스크를 종료하게되는데 이는 태스크가 종료된 후 컨테이너 인스턴스에 남아 있는 리소스의 양을 기준으로 한다. 태스크 종료 후 사용 가능한 리소스가 가장 많이 남은 컨테이너 인스턴스가 해당 태스크를 종료한다.
- random: 태스크가 무작위로 배치됩니다.
- spread: 태스크가 지정된 값에 따라 균등하게 배치된다. 허용된 값은 instanceId 또는 host(효과는 동일), 모든 플랫폼 또는 컨테이너 인스턴스에 적용되는 사용자 정의 속성이다. 서비스 태스크는 해당 서비스의 태스크를 기준으로 분산된다. 독립 실행형 태스크는 동일한 작업 그룹의 태스크를 기준으로 분산된다.
Fargate 시작 유형
AWS Fargate Fargate는 Amazon EC2 인스턴스의 서버나 클러스터를 관리할 필요 없이 컨테이너를 실행하기 위해 Amazon ECS에 사용할 수 있는 기술이다. AWS Fargate를 사용하면 더 이상 컨테이너를 실행하기 위해 가상 머신의 클러스터를 프로비저닝, 구성 또는 조정할 필요가 없다. 따라서 서버 유형을 선택하거나, 클러스터를 조정할 시점을 결정하거나, 클러스터 패킹을 최적화할 필요가 없다.
Fargate 시작 유형을 사용하여 태스크와 서비스를 실행할 때는 애플리케이션을 컨테이너에 패키징하고, CPU 및 메모리 요구 사항을 지정한 다음, 네트워킹 및 IAM 정책을 정의하고, 애플리케이션을 시작한다. 각 Fargate 태스크에는 자체 격리 경계가 있으며 다른 태스크와 기본 커널, CPU 리소스, 메모리 리소스 또는 탄력적 네트워크 인터페이스를 공유하지 않는다. 즉 서버리스 방식으로 컨테이너들을 직접 관리 하지않고 자동적으로 동작하게한다 EC2와 다르게 미리 프로비저닝 할필요 없다.
Fargate 시작 유형은 다음 워크로드에 적합하다.
- 낮은 오버헤드를 위해 최적화해야 하는 대규모 워크로드
- 가끔 버스트가 발생하는 소규모 워크로드
- 작은 워크로드
- 배치 워크로드
EC2 시작 유형
그렇다면 어떻게 ECS는 동작할까? 먼저 ECS 내부적으로 AWS ECS 서비스를 이용하려면 먼저 ECS Cluster를 생성해야 한다. ECS Cluster는 Controle Plane과 같으며, 소속되어 있는 모든 컨테이너의 라이프사이클을 관리한다. ECS Cluster는 기본적으로 각각의 컨테이너를 관리하기 모든 서비스가 탑재되어 있다.
컨테이너를 관리하는 Control Plane이 ECS Cluster라는 것을 알았다. 그렇다면 컨테이너는 어디에 있을까? 컨테이너는 ec2에서 동작한다. EC2는 컨테이너를 호스팅 역할을 하며, ECS Cluster와 연결되어 함께 동작한다. EC2에는 Docker Runtime, Container Runtime 가 있어 컨테이너를 시작할 수 있으며, ECS agent가 설치되어 있어 Control Plane인 ECS Cluster가 VM을 관리할 수 있는 것이다.
EC2 시작 유형은 다음 워크로드에 적합하다.
- 지속적으로 높은 CPU 코어 및 메모리 사용량이 필요한 워크로드
- 가격에 최적화되어야 하는 대규모 워크로드
- 애플리케이션이 영구 스토리지에 액세스해야 함
- 인프라를 직접 관리해야 함
https://docs.aws.amazon.com/ko_kr/AmazonECS/latest/developerguide/Welcome.html
Amazon Elastic Container Service란 무엇입니까? - Amazon Elastic Container Service
Amazon Elastic Container Service란 무엇입니까? Amazon Elastic Container Service(Amazon ECS)는 확장성이 뛰어나고 빠른 컨테이너 관리 서비스입니다. 이를 사용하여 클러스터에서 컨테이너를 실행, 중지 및 관리
docs.aws.amazon.com
'DevOps > AWS' 카테고리의 다른 글
[AWS] SAM으로 API Gateway와 lambda, dynamoDB 배포 (0) | 2023.02.03 |
---|---|
[AWS] GitHub Actions로 AWS ECS 배포 자동화 하기 (0) | 2023.01.20 |
[AWS] GitHub Actions으로 private ECR에 이미지 push 자동화하기 (0) | 2023.01.18 |
[AWS] Route53에 외부 도메인(가비아) 연결, SSL 인증서 (0) | 2023.01.09 |
[AWS] VPC구성하기(퍼블릭 서브넷, 프라이빗 서브넷) (0) | 2023.01.05 |