AWS Elastic Container Service(ECS) 기본 정리

j_6367·2022년 1월 4일
0

aws

목록 보기
4/6
post-thumbnail

기본개념

여러 종류의 컨테이너를 여러 인스턴스에서 실행
컨테이너 오토스케일링 + 인스턴스 오토스케일링

클러스터

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
    지정된 값에 따라 균등하게 배치

제약

작업배치할 때 조건

오토스케일링

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초로 변경

0개의 댓글