AWS Elastic Container Service(ECS) 기본 정리
기본개념
여러 종류의 컨테이너를 여러 인스턴스에서 실행
컨테이너 오토스케일링 + 인스턴스 오토스케일링
클러스터
EC2 인스턴스 같이 사용할 그룹
작업 정의
같이 사용되는 도커 이미지 1개 이상의 묶음 (docker-compose 비슷)
클러스터에 종속되지 않으며 실제 실행은 되지 않고 설정 저장용
cpu, memory, network 등등 설정
서비스
클러스터에 종속되며 한 클러스터에 여러개 서비스 설정할 수 있음
작업정의를 이용해서 클러스터가 갖고있는 인스턴스(컨테이너 인스턴스)에 작업 실행시킴
클러스터
용량공급자
인스턴스 부족하거나 남을 때 사용할 EC2 오토스케일링 그룹
목표용량 %는 (작업에 필요한 인스턴스 수 / 갖고있는 인스턴스)100
100%인 경우 작업에 딱맞게 실행되지만 작업 추가할 경우 인스턴스부터 빌려야되서 오래걸림
50%인 경우 작업에 필요한 인스턴스 2
작업정의
네트워크
- awsvpc
각 작업이 인스턴스처럼 네트워크를 가진다
이걸로 하면 서비스 로드밸런서가 네트워크 로드밸런서로 실행되고 172.~~ 형식으로 내부아이피 가리킴
aws에서 이걸로 하라고 추천함 - host
도커의 기본 네트워크와 동일하게 호스트와 네트워크 포트 공유함
인스턴스에서 여러 타스크 실행할 경우 포트가 겹치는 문제 동적포트로 해결 가능 (ex] 컨테이너 80 : 호스트 0)
동적포트 사용할 경우 호스트 포트가 랜덤으로 지정되며 로드밸런서가 인스턴스의 랜덤으로 지정된 포트를 가리킴 - 다른건 도커 기본 네트워크와 별다른거 없음
서비스
용량공급자
서비스 작업 실행할 인스턴스가 부족하거나 남을 때 인스턴스 오토스케일링 할 ALB 선택
서비스 등록하기 전에 클러스터에서 미리 등록해야 할 수 있음
클라우드워치 경보 기준으로 인스턴스 줄이고 늘리고 함
작업에 비해 인스턴스가 부족할 땐 1분단위 경보로 생성, 남을 땐 15분 후 경보 울려서 제거되도록 설정되어있음
오토스케일링에 클라우드워치 경보 추가로 직접 설정해서 진행할 경우 오류는 나는데 잘 되긴 하는 것 같음
작업배치
작업(Task)를 어떤 인스턴스에 넣을지 선택하는 방법
- binpack
cpu,memory 최소한으로 남겨두도록 배치함, 사용중인 인스턴스 최소화 - random
랜덤하게 넣음 - spread
지정된 값에 따라 균등하게 배치
제약
작업배치할 때 조건
- distinctInstance
인스턴스 하나에 해당 작업이 중복으로 들어가지 않게 - memberOf
표현식 충족하는 인스턴스에 배치
https://docs.aws.amazon.com/ko_kr/AmazonECS/latest/developerguide/task-placement-constraints.html
오토스케일링
EC2 오토스케일링과 다름
클러스터에 있는 인스턴스에 작업배치/제약에 따라서 작업을 추가/제거함
- 자동 크기조정
- 단계 추적 조정 정책 (추천)
CPU, Memory, RequestCount 기준으로 +/- - 단계 조정 정책
cloudwatch 알림 기반으로 하는듯
CLI 참조
배포
작업정의에 도커 이미지 태그 latest로 해두고 latest 이미지 push 후
서비스만 업데이트 시켜줘서 배포
# 서비스 업데이트
aws ecs update-service \
--region ap-northeast-2 \
--cluster {cluster_name} \
--service {service_name} \
--force-new-deployment
엄청 오래걸림
오토스케일링 속도 개선
EC2 Target Group
- health check 시간 5초 간격 2회로 수정
- 속성 - Deregistration delay(등록취소지연) 10초로 변경
Author And Source
이 문제에 관하여(AWS Elastic Container Service(ECS) 기본 정리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@j_6367/AWS-ECS저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)