20240407

귤금·2024년 4월 7일

Node.js 4기 TIL

목록 보기
72/86

최종 프로젝트

Docker ECS

컨테이너를 사용하는 이유

컨테이너의 특징

  1. 하드웨어의 가상화를 하지 않고 커널만을 공유한다.
  2. 하드웨어 에뮬레이션이 없기 때문에 빠른 속도로 빠르게 실행된다.
  3. 이미지의 용량이 가상 머신에 비해 훨씬 작다.
  4. 컨테이너 간에 영향을 주지 않으며 도커와 같이 이미지 기반으로 컨테이너를 실행하는 경우 특정 실행 환경을 쉽게 재사용 할 수 있다.
  5. 실행/패치/업데이트 등 유지 관리와 관련하여 오버헤드가 감소한다.
  6. 서비스가 세분화 되어 있는 마이크로 서비스 아키텍쳐(MSA)의 특성에 컨테이너의 서비스 별 격리나 확장성 등을 잘 활용할 수 있다.
    • 단, 처음 이미지를 정의한 OS에서만 사용 할 수 있다. (리눅스라면 리눅스에서만 윈도우라면 윈도우에서만 가능)

즉, "애플리케이션의 배포/관리를 간단하게 해주고 오버헤드도 적다"라는 특징

도커의 작동 방식

도커에서는 애플리케이션을 실행하기 위한 파일들의 모음을 이미지 라는 개념으로 관리한다. 이미지에는 애플리케이션의 종속성 및 실행에 필요한 정보가 포함되어 있다.
이러한 이미지는 로컬 혹은 도커 허브 등과 같은 원격 저장소에 태그를 붙여 커밋하고, 이 태그로 이미지의 버전을 구분한다.
그리고 커밋한 이미지를 사용하여 컨테이너를 생성함. 생성한 컨테이너에는 포트 포워딩으로 접근할 수 있다.

  • 이 중 이미지를 구성하기 위해서 다양한 패키지의 다운로드나 환경 설정 등이 필요
  • 하지만 하나하나 직접 작업하는 것은 너무 비효율적이다...
    • 이를 해결하기 위해 커밋하는 이미지의 내용(환경 구축의 내용)을 dockerfile이라는 파일에 작성할 수 있다.

서버 간의 컨테이너의 관리는 어떻게 해야할까?

다양한 서버들의 컨테이너를 관리하는 컨테이너 오케스트레이션이라는 개념이 필요하게 되었고 이러한 기능을 하는 것을 컨테이너 오케스트레이션 툴이라고 함
ECS도 이러한 컨테이너 오케스트레이션 서비스의 일종이다.

오케스트레이션 툴의 기능

  1. 서버의 특성이나 자원, 배포 상태를 파악하여 컨테이너를 할당하는 스케쥴링
  2. 서버에서 도커를 통해 지정된 컨테이너를 안전하게 실행
  3. 업그레이드, 롤백 등 서비스의 배포에 관한 대응
  4. 오류 등의 대응
  5. 새로운 서버나 컨테이너가 추가되었을 때 발견하는 서비스 디스커버리(service discovery), 서버 간 네트워킹 등의 클러스터 리소스 생성

ECS 관련 서비스

  • AWS ECR(Elastic Container Registry)
    • 컨테이너 이미지 저장소
  • AWS Fargate
    • 종량제 서버리스 컴퓨팅 엔진. ECS와 EKS 둘 다 호환 가능함.
  • AWS ELB(Elastic Load Balancer)
    • 로드밸런서
    • ALB와 함께 사용하여 동적 포트를 지정할 수 있다.
  • AWS VPC
    • ECS의 사용에 필요한 네트워크 리소스를 제공하는 서비스.
  • AWS IAM
    • 클러스터나 서비스 등 다양한 작업의 권한을 설정하는 서비스.
  • AWS CloudWatch
    • 컨테이너의 각 지표와 로그 등을 확인할 수 있다. 컨테이너형 애플리케이션 및 마이크로 서비스에 대한 모니터링, 트러블 슈팅 및 알람을 위한 서비스인 Container Insight도 제공하고 있음.

ECS의 작동 방식

ECS의 구성 요소는 크게 5가지다.

  1. Task Definition(작업 정의)
  2. Task(작업)
  3. Continer Instacne(컨테이너 인스턴스)
  4. Service(서비스)
  5. Cluster(클러스터)

  • Task ECS의 최소 단위는 task. 그리고 1개 이상의 컨테이너가 task에 구성됩니다.
  • Task Definition task의 구성 요소는 task definition에 json 형식으로 작성되어 있다. 작성된 내용을 참고로 task가 구성된다.
    • task definition에서 작업 및 컨테이너가 참고할 이미지, 사용할 리소스 양, 시작 유형, 로깅 구성 등 다양한 매개변수를 정의할 수 있다.
  • Service task definition을 참고하여 task를 실행한다. 또한 원하는 수의 task를 유지 관리하는 스케쥴러 역할을 한다.
    • 선택적으로 로드 밸런서 뒤에서 실행하여 로드 밸런싱과 오토 스케일링 기능을 할 수 있다.
  • Container Instance ECS 컨테이너 에이전트를 실행하고 cluster에 등록된 EC2 인스턴스.
    • 리눅스, 윈도우 OS를 지원하며 온프레미스 VM 등의 다른 OS도 지원한다.
    • Fargate 시작 유형을 사용하는 task는 서버리스로 배포되므로 container instance는 적용되지 않습니다.
  • Cluster container instance(Fargate라면 task)의 논리적 그룹.

따라서 작업 순서는...

  1. 컨테이너의 이미지를 저장소(ECR)에 커밋
  2. task definition에서 사용할 이미지 및 시작 유형, 리소스 정의
  3. cluster 생성
  4. service가 task definition을 참고하여 task 생성
  5. elb에 들어온 요청에 따라 오토 스케일링 및 로드 밸런싱

0개의 댓글