서론
원티드 프리온보딩 4월 백엔드 챌린지에서
도커를 활용하여 클라우드 배포까지 해보는 특강을 진행했다.
최근에 개인적으로 도커를 많이 사용하면서
도커를 활용할 수 있는 다양한 정보를 접하고 싶었는데
때마침 특강을 진행해서 감사히 듣게 되었다.
이미 알고 있던 기본적인 도커 개념과 활용 방법을 확실히 정리할 수 있어서 좋았고,
가장 집중해서 본 부분은 클라우드 환경에서 ECS 또는 EKS를 사용하여
도커를 활용하는 부분이었다.
ECS와 EKS에 대한 내용을 정리하고, 나중에 잘 활용해보고자
블로그에 포스팅하게 되었다.
EKS (Elastic Kubernetes Service)
- 관리형 쿠버네티스 서비스
- 사용자는 쿠버네티스 API를 사용하여 EKS 클러스터를 관리할 수 있다.
- 다양한 AWS 서비스와의 통합을 제공한다.
- 쿠버네티스 기반의 컨테이너 오케스트레이션을 가능하게 하며,
이미 쿠버네티스에 익숙한 사용자 또는
복잡한 애플리케이션 아키텍처를 가진 사용자에게 적합한 옵션이다. - 복잡한 애플리케이션 아키텍처와 고도로 확장 가능한 환경을 구축할 수 있다.
ECS (Elastic Container Service)
- 관리형 컨테이너 오케스트레이션 서비스
- 도커 컨테이너를 실행하기 위한 기능 제공
- 사용자는 컨테이너 이미지를 정의하고 클러스터에 배포, 관리, 스케일링 할 수 있다.
- 컨테이너화된 애플리케이션을 운영하기에 적합한 환경을 제공한다.
쿠버네티스를 활용해야 하는 상황은 아니어서 주로 ECS 위주의 학습
기술 문서도 한글로 잘 되어 있다!
ECS 서비스 종류
- 호스트 유형
EC2
,Fargate
,External
EC2
- 용량공급자를 통해 EC2 Auto-Scaling Group을 연결
- ECS에서 제공하는 관리형 지표(Capacity Provider Reservation)에 따라 EC2 용량 추가 및 제거 가능
- 컨테이너 수의 증가 및 축소에 따라 EC2도 함께 증가 및 축소됨
- EC2 요금만큼 과금
- EC2 인스턴스는 계속 실행되어 있기 때문에 그만큼의 과금이 필요함
Fargate
- 서버리스 컨테이너 오케스트레이션
- EC2 처럼 배포하거나 관리할 필요 없음 (서비스만 운영)
- 컨테이너 실행에 필요한 인프라 및 리소스 관리를 AWS가 대신 처리함
- 시간당 vCPU, Storage 용량 비용 부과
- 컨테이너를 쉽게 배포하고 스케일링할 수 있으며, 고가용성과 확장성을 제공함
External
- 보안상의 이유로 AWS 인프라가 아닌 호스트에서 서비스가 동작하게 하고 싶을때 사용
- 호스트 및 컨테이너 등의 실제 서비스는 물리적으로 AWS 밖에서 동작
- AWS 콘솔에서 관리
ECS 구성
- ECS Task Definition을 작성하고 그 Task 대로 컨테이너가 운영됨
- JSon 양식
- 컨테이너 이미지, 컨테이너 자원 할당, 포트 구성, 환경변수, 로그 구성 등 설정
- (1) AWS ECR 컨테이너 레지스트리에 컨테이너 이미지 push
- 도커 이미지를 private으로 쉽게 관리 가능
- AWS 서비스와 연동이 더 간편함
- (2) ECR에서 이미지를 관리하며 ECS Task Definition에 이미지 주입
- (3) ECS 클러스터에 Task Definition 대로 적용
- 특정 이미지를 가지고 어떤 작업을 할 지, 어느 정도의 리소스를 사용할 지 등
EKS와 비교
- EKS는 트래픽이 없더라도 비용이 발생
- ECS는 트래픽이 많아진다면 비용이 더 많이 발생할 수 있지만,
토이 프로젝트 용도로는 좋다.- 트래픽이 없으면 비용이 발생하지 않음
- Github Actions에 ecs 무중단 배포 템플릿이 제공됨
- EKS는 공식 템플릿 없음
ECS 실습
ECS 배포 과정
ECS 클러스터 생성
- 템플릿 : 네트워킹 전용
- VPC 설정 확인
AWS ECR 레포지토리 생성
→ 사용할 이미지 push (AWS CLI 사용)- “푸시 명령 보기” 설명 참고
- AWS CLI 환경 설정
- IAM 계정 생성
- IAM 권한 설정
- AmazonECS_FullAccess
- AmazonEC2ContainerRegistryFullAccess
- access key 및 secret access key 생성
- 이미지 push
ELB (Elastic Load Balancing)
- EC2 → 로드밸런서 → 로드밸런서 생성 → Application Load Balancer
- VPC 지정
- Target Group 임시 생성
- Load Balancer 생성 완료
- Listener 삭제
- Target Group 삭제
Task Definition 정의
- Fargate
- 컨테이너 추가
- ECS → Repository → 이미지 URI 확인
- 메모리 제한
- 포트 매핑
- Task Definition 생성
Service 생성
- Task Definition → Service 생성
- 원하는 Task 선택 후 서비스 생성
- VPC 및 서브넷 설정
- 보안 그룹
- Task Definition에서 설정한 컨테이너 포트와 동일하게 설정
- 로드 밸런서 추가
- Auto Scaling 설정
Task와 Service
Task
- 하나의 작업
Service
- 여러 개의 Task 관리
- 다양한 설정 가능 (ELB, Auto Scaling 등)
Github Actions 자동 배포
Deploy to Amazon ECS
workflow 제공- 세부 설정 수정
- Settings → Actions secrets 세팅 (AWS access key 관련)
- 도커 이미지 정보 및 Task 정보 세팅