컨테이너 오케스트레이션이란
일반적으로 애플리케이션은 의도에 따라 어플리케이션이 실행되게 하기 위해 네트워킹 수준에서 정리가 필요한 개별적으로 컨테이너화된 구성요소(마이크로 서비스라 칭함)로 구성된다. 이러한 방식으로 다수의 컨테이너를 정리하는 프로세스를 컨테이너 오케스트레이션 이라고 한다.
컨테이너 오케스트레이션의 툴
GCP(Google Cloud Platform)
- GKE(Google Kubernetes Engine)
AWS
- EKS(Elastic Kubernetes Service)
- ECS(Elastic Container Service)
컨테이너 오케스트레이션의 기능
컨테이너 클러스터링
- 여러 대의 노드들을 하나의 클러스터로 묶어, 애플리케이션을 분산하여 실행하고, 자원을 효율적으로 활용하는 기능
- 여러 대의 물리적인 또는 가상의 서버를 하나의 시스템처럼 동작하게 하는 기술
- 컨테이너를 실행하는 호스트의 자원을 효율적으로 분배, 컨테이너가 안정적으로 실행
- 여러 대의 컨테이너를 묶어 하나의 서버처럼 사용할 수 있도록 지원
서비스 디스커버리
- 컨테이너를 자동으로 발견하고, 서비스 이름과 IP주소 등을 관리하여, 애플리케이션 간의 연결을 관리하는 기능
- 클라우드 환경에서의 컨테이너 생성, 배치, 이동에 따른 IP, Port 정보 업데이트 및 관리
자동 스케일링
- 애플리케이션의 트래픽이 증가했때, 자동으로 컨테이너를 늘려 감당할 수 있게 제어 하는 역할
- 자원 사용량을 최적화, 가용성 보장
로드 밸런싱
- 트래픽을 균등하게 분배하여 애플리케이션의 성능을 최적화하는 기능
롯아웃, 롤백
- 새로운 버전의 애플리케이션을 롤아웃하고, 이전 버전으로 롤백하는 기능
자동 복구
- 컨테이너나 노드의 장애 시 자동으로 복구하는 기능
모니터링과 로깅
- 컨테이너나 노드의 상태를 모니터링, 로그를 수집하여 애플리케이션의 성능과 문제접을 분석
보안과 네트워크 관리
- 컨테이너와 노드의 보안을 관리하고, 네트워크 설정을 관리하는 기능
대표적인 컨테이너 오케스트레이션 툴/서비스
도커 스웜
- 쿠버네티스 등장 전까지 가장 대중적으로 사용했음
- Docker Inc. 이 개발
- 간단하게 동작하고, 설정이 쉬움
쿠버네티스
- 구글에서 다양한 웹서비스를 위해 자체적으로 툴을 개발하고 오픈소스화 함
- 리눅스 재단에서 관리
- 스케일링 기능 강화 (컨테이너 수를 동적으로 조절)
- 서비스 디스커버리 기능 강화 (DNS 기반)
- 대규모에 적합하다
- 가장 기능이 풍부하고, 널리 사용된다
- 베어메탈, VM환경, 퍼블릿 클라우드 등의 다양한 환경에서 작동하도록 설계되어 있음
쿠버네티스 공식문서
GKE(Google Kubernetes Engine)
- GCP(Google Cloud Platform)에서 제공하는 쿠버네티스기반의 관리형 컨테이너 오케스트레이션 서비스이다
- 쿠버네티스 기반으로하여, 쿠버네티스의 기능을 모두 제공한다
EKS(Amazon Elastic Kubernetes Service)
- AWS에서 제공하는 관리형 쿠버네티스 서비스
- EKS는 쿠버네티스 기반으로 구축되어잇음
- 사용자는 쿠버네티스API를 사용하여 EKS클러스터를 관리할 수 있음
ECS(Amazon Elastic Container Service)
- AWS에서 제공하는 관리형 컨테이너 오케스트레이션 서비스
- 도커 컨테이너를 실행하기 위한 기능 제공
- 사용자는 ECS를 사용하여 컨테이너를 배포, 관리, 스케일링
ECS공식문서
ECS 서비스 종류(호스트 유형)
EC2, Fargate, External 이렇게 총 3가지 종류가 있다.
EC2
- 컨테이너가 운영되는 자원이 AWS EC2
- 용량공급자가 컴퓨팅 자원을 EC2인스턴트를 통해 용량을 공급해줌.
- ECS에서 제공하는 관리형 지표 "CapacityProviderReservation"에 따라 EC2를 용량을 추가/제거 할 수 있으며, 컨테이너의 숫자의 증가/축소에 따라 EC2도 함께 증가/축소하게 됨
- EC2 유형의 비용: 호스트로 사용하는 EC2요금만 과금
Fargate
- 서버리스 유형으로,EC2를 배포하거나 관리할 필요 없이 그냥 서비스만 운영
- 컨테이너가 어디서 운영되는지 관리할 필요 없음
- Fargate 유형의 비용: 시간당 vCPU, Storage 용량 비용이 부과
External
- AWS인프라가 아닌 호스트에서 ECS에서 정의한 서비스
- 호스트&컨테이너 등 실제 서비스는 물리적으로 AWS 밖에서 동작
- AWS콘솔에서 관리
ECS구성요소
Task Definition
- ECS에서 컨테이너를 실행하기 위한 "블루 프린트" 또는 "레시피"
- 어플리케이션이 어떻게 실행될지에 대한 세부사항을 포함한다
<세부사항>
- 컨테이너 이미지
- 컨테이너 vCPU / 메모리 자원할당
- 포트구성
- 컨테이너 환경변수 입력
- 컨테이너 로그 구성
Task
- Task Definition에 기반하여 실행되는 컨테이너의 인스턴스
- Task Definition이 레시피나 설계도라면, Task는 설계도로 만들어진 제품(붕어빵 틀이랑 붕어빵 느낌)
- 하나의 Task Definition에서 여러 개의 Task 동시에 실행 가능
- 각 테스크는 독립적으로 실행되며, 각자의 상태 및 라이프 사이클을 가짐
Service
- 특정 작업 정의에 기반한 작업 집합을 실행하고 유지 관리하는 역할
- 특정 작업의 인스턴스를 위한 여러 기능 제공
<여러 기능>
Desired Count
- 사용자가 지정한 수의 작업 인스턴스를 지속적으로 실행하도록 보장
- 만약 작업 인스턴스가 실패하거나 중지되면 ECS는 자동으로 새 작업을 시작하여 원하는 수의 작업을 유지
Load Balancing
- Application Load Balancer, Network LoadBalancer 또는 Classic Load Balancer와 통합 될 수 있음
- 트래픽이 ECS 작업에 균일하게 분산될 수 있도록 함
Service Discovery
- 동적 IP주소를 사용하여 서비스를 검색하고 연결
Rolling Updates
- 어플리케이션 업데이트
- 작업 정의를 업데이트하면서 서비스를 지속적으로 실행할 수 있도록 함
Scaling
- 요구 사항 / 정책에 따라 자동으로 확장 및 축소 시킴
ECS cluster
- 컨테이너화된 애플리케이션을 실행하기 위한 논리적인 그룹핑 또는 환경
- 하나 이상의 인스턴스와 함께 실행되는 서비스 및, Task로 구성된다