본문 바로가기
카테고리 없음

[AWS] Container : ECS, Fargate, ECR, EKS

by hxxyeoniii 2025. 12. 9.

Docker

  • 애플리케이션을 컨테이너라는 표준화된 단위로 패키징하는 기술
  • 앱은 컨테이너에 패키지화되어 어떤 OS에서든 실행할 수 있게 됨

 

도커 이미지가 저장되는 곳?

  • 도커에서 이미지는 애플리케이션과 실행 환경을 포함하는 패키지
  • 이미지는 컨테이너화된 애플리케이션을 구축하고 배포하기 위한 모든 파일, 라이브러리, 종속성 및 설정을 포함
  • 도커 이미지는 도커 리포지토리에 저장됨

 

Docker vs Virtual Machines

도커는 어떤 의미로는 가상화 기술이지만, 정확히는 아님!

리소스는 호스트와 공유됨 -> 한 서버에서 다수의 컨테이너를 공유할 수 있음

 

왼쪽이 가상머신, 오른쪽이 도커

 

가상 머신 아키텍처

  • 인프라, 운영체제, 하이퍼바이저, 앱, 게스트 운영체제가 있음
  • EC2의 원리라고 생각하면 됨 = EC2 머신은 하이퍼바이저에 실행되는 가상 머신과 같음
  • 따라서 Amazon이 EC2 인스턴스를 다양한 소비자에게 제공할 수 있으며 각 EC2는 분리되어 있음
  • 즉, 리소스를 공유하지 않음!
  • ex) 각 집(VM)이 독립적인 구조로 완전히 분리된 아파트 단지

 

도커 컨테이너

  • 인프라, EC2 인스턴스 같은 호스트 OS, 도커 데몬 위에 많은 컨테이너가 있음
  • 도커 데몬에서 가볍게 실행되는 컨테이너라 공존할 수 있음
  • 네트워킹이나 데이터 등 공유 가능
  • 가상 머신보다 덜 안전하지만 하나의 서버에 많은 컨테이너를 실행할 수 있기에 많이 사용함
  • ex) 주방과 거실만을 공유하고 각자 방이 있는 쉐어하우스

Amazon ECS

ECS = Elastic Container Service

AWS에서 도커 컨테이너를 실행하고 관리하는 완전 관리형 오케스트레이션 서비스

 

구성 요소

1. 컨테이너

  • 실제 실행되는 도커 컨테이너
  • 컨테이너는 ECR이나 Docker Hub에서 가져온 이미지로 실행됨

 

2. Task Definition

  • 컨테이너를 어떻게 실행할지 정의한 설계도
  • JSON 형식
  • 버전 관리 가능
  • 여러 컨테이너를 하나의 Task Definition에 정의 가능

 

3. Task

  • Task Definition을 기반으로 실제 실행되는 인스턴스
  • Task는 독립적으로 실행될 수 있음
  • 하나의 Task = 1개 이상의 컨테이너 묶음
  • Task는 Fargate 또는 EC2 인스턴스에서 실행됨
  • 각 Task는 고유한 ENI(네트워크 인터페이스)를 가질 수 있음

 

4. Service

  • 원하는 수의 Task를 지속적으로 유지하고 관리하는 관리자

 

5. 클러스터

  • Task들을 실행할 인프라 관리
  • EC2 인스턴스 또는 Fargate 리소스 풀
  • 하나의 클러스터에 여러 Service 실행 가능
  • Cluster는 리전별 생성

 

 

 

ECS Launch Type

Task를 어디서 실행할지 결정하는 것

 

1. EC2 Launch Type

  • EC2 인스턴스를 직접 관리해야 함 -> AMI 선택, 인스턴스 타입 등
  • EC2 인스턴스에 ECS Agent 설치 필요
  • (+) EC2 인스턴스에 SSH 접속 가능
  • (+) Reserved Instance, Saving Plans 사용 -> 비용 절감
  • (-) 서버 관리 부담
  • (-) 설정 복잡
  • 장기 실행 워크로드(비용 최적화), 특별한 HW 요구사항, 기존 EC2 인프라 활용 시 선택

 

2. Fargate Launch Type

  • AWS의 서버리스 컴퓨팅 엔진인 Fargate 사용
  • 서버 관리가 완전히 사라짐
  • Task Definition만 정의하면 AWS가 알아서 실행
  • 사용한 만큼 과금
  • (+) 관리 부담 제로
  • (+) 빠른 배포
  • (+) 자동 스케일링
  • (+) 보안 격리
  • (-) EC2보다 비쌈
  • (-) 일부 고급 기능 제한
  • 관리 부담을 최소화하고 싶을 때, 빠른 배포가 중요할 때, 마이크로서비스 아키텍처 시 선택

 

 

 

ECS Data Volumes

컨테이너는 기본적으로 휘발성! -> 데이터를 유지하려면 볼륨 필요

 

EFS 권장

  • 여러 Task가 동시에 마운트 가능
  • Multi AZ
  • 완전 관리형, 자동 확장

 

 

 

IAM Role

1. Task Execution Role

  • ECS가 Task를 시작하는 권한
  • ECR pull, 로그 전송 등

2. Task Role

  • 컨테이너 앱이 AWS 리소스 접근
  • S3 업로드, DynamoDB 읽기 등

ECR

ECR = Elastic Container Registry

 

  • AWS에 도커 이미지를 저장하고 관리하는데 사용
  • 즉, 도커 허브의 AWS 버전
  • 개발자가 도커 이미지 생성 -> ECR에 push -> ECS or EKS or Fargate가 ECR에서 이미지 pull -> 컨테이너에서 실행
  • 기본적으로는 모든 이미지가 프라이빗
  • 이미지 스캔 기능 : 이미지의 보안 취약점 자동 검사
  • Amazon ECS와 완전 통합되어 있고 이미지는 백그라운드에서 Amazon S3에 저장됨
  • Lifecycle Policy로 비용 절감 가능

EKS

EKS = Elastic Kubernetes Service

AWS가 쿠버네티스를 관리해주는 서비스

 

  • EKS에는 두 가지 실행 모드가 있음 -> EC2(워커 노드 배포) & Fargate(서버리스 컨테이너 배포)
  • 컨테이너를 실행한다는 목적은 ECS와 비슷하지만 사용하는 API가 다름
  • 회사가 이미 온프레미스나 다른 클라우드에서 Kubernetes를 사용하고 있는 경우
  • 스토리지로는 CSI(Container Storage Interface) Driver 사용 

 

 

 

EKS - Node Types

관리형 노드 그룹

  • 노드(EC2 인스턴스)를 생성하고 관리
  • 노드는 EKS에서 관리하는 ASG(Auto Scaling Group)의 일부
  • 온디맨드 또는 스팟 인스턴스 지원

 

자체 관리형 노드

  • 사용자가 생성하고 EKS 클러스터에 등록한 노드로 ASG에 의해 관리
  • 온디맨드 또는 스팟 인스턴스 지원

 

AWS Fargate

  • 유지 관리가 필요하지 않으며 노드 관리가 없음