다양한 컨테이너 오케스트레이션 도구들을 시장에서 찾아볼 수 있습니다. 오늘은 그 중에서도 인기 있는 몇 가지 도구들에 대해 자세히 알아보겠습니다.
컨테이너 오케스트레이션이란 무엇일까요?
최근에는 마이크로서비스 아키텍처를 기반으로 애플리케이션을 패키징하는 데 Docker와 같은 컨테이너 플랫폼이 매우 많이 사용되고 있습니다. 컨테이너는 필요에 따라 확장하기 용이하며, 온디맨드 방식으로 즉시 생성할 수 있다는 장점이 있습니다. 소규모 환경에서는 몇 개의 컨테이너로 충분하지만, 만약 수백 개의 컨테이너를 관리해야 한다면 어떨까요?
컨테이너의 수가 필요에 따라 동적으로 늘어나는 상황에서는 컨테이너의 수명 주기와 관리가 매우 복잡해집니다.
컨테이너 오케스트레이션은 컨테이너의 스케줄링, 배포, 확장, 로드 밸런싱, 가용성, 그리고 네트워킹과 관련된 문제들을 자동화하여 해결합니다. 즉, 컨테이너와 서비스의 생명 주기를 자동화하고 관리하는 과정을 의미합니다.
이것은 여러 컨테이너와 마이크로서비스 아키텍처를 대규모로 관리하고 구성하는 데 필요한 핵심 프로세스입니다.
다행히도, 시장에는 컨테이너 오케스트레이션을 위한 다양한 도구가 존재합니다.
이제 이 도구들을 하나씩 살펴보겠습니다!
쿠버네티스
예상하셨겠지만, 가장 먼저 소개할 도구는 바로 쿠버네티스입니다.
쿠버네티스는 원래 Google에서 개발되었으며, 현재는 Cloud Native Computing Foundation에서 관리하는 오픈 소스 플랫폼입니다. 쿠버네티스는 선언적 구성과 자동화를 모두 지원하며, 컨테이너화된 워크로드 및 서비스의 배포, 확장, 관리를 자동화하는 데 매우 유용합니다.
Kubernetes.io에서 제공하는 이미지
쿠버네티스 API는 사용자, 클러스터 구성 요소, 그리고 외부 타사 구성 요소 간의 통신을 원활하게 합니다. 쿠버네티스 제어 평면과 노드들은 함께 클러스터를 형성하며, 애플리케이션 워크로드는 작업자 노드에서 실행되는 하나 이상의 포드로 구성됩니다. 제어 평면은 이 포드들과 작업자 노드를 관리하는 역할을 합니다.
Babylon, Booking.com, AppDirect 등 다양한 기업에서 쿠버네티스를 널리 사용하고 있습니다.
주요 기능:
- 서비스 검색 및 로드 밸런싱
- 스토리지 오케스트레이션
- 자동화된 롤아웃 및 롤백
- 수평적 스케일링
- 비밀 및 구성 관리
- 자가 치유 기능
- 일괄 실행
- IPv4/IPv6 듀얼 스택 지원
- 자동 빈 패킹
쿠버네티스 학습에 관심이 있으신가요? 다음 자료들을 참고해보세요.
오픈시프트
Red Hat에서는 오픈시프트라는 PaaS(Platform as a Service) 형태의 컨테이너 플랫폼을 제공합니다. 오픈시프트는 하이브리드 클라우드 환경에서 안전하고 확장 가능한 리소스를 통해 애플리케이션을 자동화하는 데 도움을 줍니다. 컨테이너화된 애플리케이션을 구축, 배포, 관리할 수 있는 엔터프라이즈급 플랫폼을 제공합니다.
이미지 출처: Openshift
오픈시프트는 Red Hat Enterprise Linux와 Kubernetes 엔진을 기반으로 구축되었습니다. UI와 CLI를 통해 클러스터를 관리하는 다양한 기능을 제공합니다. Red Hat은 두 가지 이상의 형태로 오픈시프트를 제공합니다.
- Openshift Online – SaaS(Software as a Service) 형태로 제공
- OpenShift Dedicated – 관리형 서비스 형태로 제공
Openshift Origin(Origin Community Distribution)은 OpenShift Container Platform, Openshift Online, 그리고 OpenShift Dedicated에서 사용되는 오픈 소스 업스트림 커뮤니티 프로젝트입니다.
노마드
노마드는 간결하고 유연하며 사용하기 쉬운 워크로드 오케스트레이터입니다. 온프레미스 및 클라우드 환경 전반에서 컨테이너와 컨테이너화되지 않은 애플리케이션을 대규모로 배포하고 관리할 수 있습니다. 노마드는 35MB의 작은 리소스 공간을 차지하며, macOS, Windows, Linux 환경을 지원합니다.
개발자는 애플리케이션 배포를 위해 선언적 IaC(Infrastructure as Code)를 사용하여 배포 방식을 정의합니다. 노마드는 장애 발생 시 자동으로 애플리케이션을 복구합니다.
노마드 이미지
노마드는 컨테이너뿐만 아니라 다양한 유형의 애플리케이션을 오케스트레이션할 수 있습니다. Docker, Windows, Java, VM 등 다양한 환경을 최고 수준으로 지원합니다.
주요 기능:
- 간결하고 신뢰성 높음
- 기존 애플리케이션을 재작성 없이 현대화
- 손쉬운 확장
- 입증된 확장성
- 간편한 멀티 클라우드 환경 구축
- Terraform, Consul, Vault와 기본 통합
도커 스웜
도커 스웜은 선언적 모델을 기반으로 작동합니다. 사용자는 원하는 서비스 상태를 정의하면, Docker는 해당 상태를 유지합니다. Docker Enterprise Edition은 Kubernetes와 Swarm을 통합하여 오케스트레이션 엔진 선택에 유연성을 제공합니다. Docker 엔진 CLI를 사용하여 애플리케이션 서비스를 배포할 수 있는 Docker 엔진 스웜을 만들 수 있습니다.
Docker 이미지
Docker 명령어를 사용하여 클러스터와 상호 작용할 수 있습니다. 클러스터에 참여하는 시스템을 노드라고 하며, Swarm 관리자는 클러스터의 활동을 처리합니다.
Docker Swarm은 두 가지 주요 구성 요소로 구성됩니다:
- 관리자 노드: 스웜의 작업자 노드에 작업을 할당합니다. 리더는 Raft 합의 알고리즘에 따라 선출되며, 스웜 관리를 담당하고 스웜에 대한 작업 오케스트레이션 결정을 처리합니다.
- 작업자 노드: 관리자 노드로부터 작업을 받아 실행합니다.
주요 기능:
- Docker 엔진과 통합된 클러스터 관리
- 분산 설계
- 선언적 서비스 모델
- 확장성
- 원하는 상태 조정
- 멀티 호스트 네트워킹
- 서비스 검색
- 로드 밸런싱
- 기본적인 보안 기능
- 롤링 업데이트
도커 컴포즈
도커 컴포즈는 함께 작동하는 여러 컨테이너 애플리케이션을 정의하고 실행하기 위해 설계되었습니다. 소프트웨어 종속성을 공유하고 함께 오케스트레이션 및 확장되는 상호 연결된 서비스 그룹을 설명합니다.
YAML 파일(dockerfile)을 사용하여 애플리케이션 서비스를 구성할 수 있습니다. 그런 다음 `docker-compose up` 명령을 사용하여 구성에서 모든 서비스를 만들고 시작할 수 있습니다.
다음은 `docker-compose.yml` 파일 예시입니다:
version: '3' volumes: app_data: services: elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:6.8.0 ports: - 9200:9200 - 9300:9300 volumes: - ./elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml - ./elastic-certificates.p12:/usr/share/elasticsearch/config/elastic-certificates.p12 - ./docker-data-volumes/elasticsearch:/usr/share/elasticsearch/data kibana: depends_on: - elasticsearch image: docker.elastic.co/kibana/kibana:6.8.0 ports: - 5601:5601 volumes: - ./kibana.yml:/usr/share/kibana/config/kibana.yml app: depends_on: - elasticsearch image: asadali08527/app:latest ports: - 8080:8080 volumes: - app_data:/var/lib/app/
Docker Compose를 사용하여 앱 코드를 내부 네트워크를 통해 통신하는 독립적으로 실행되는 여러 서비스로 나눌 수 있습니다. 이 도구는 애플리케이션의 전체 수명 주기를 관리하기 위한 CLI를 제공합니다. Docker Compose는 주로 개발 및 테스트 워크플로에 사용되었지만, 최근에는 더 생산적인 기능에 집중하고 있습니다.
Docker Engine은 Docker Machine 또는 전체 Docker Swarm 클러스터와 함께 프로비저닝된 독립 실행형 인스턴스일 수 있습니다.
주요 기능:
- 단일 호스트에서 여러 격리된 환경 관리
- 컨테이너 생성 시 볼륨 데이터 보존
- 변경된 컨테이너만 재생성
- 변수 및 환경 간 컴포지션 이동
미니큐브
미니큐브는 사용자가 로컬에서 Kubernetes를 실행할 수 있도록 지원합니다. 개인 컴퓨터의 단일 노드 Kubernetes 클러스터 내에서 애플리케이션을 로컬로 테스트할 수 있습니다. 미니큐브는 Kubernetes 대시보드에 대한 통합 지원을 제공합니다.
미니큐브는 최신 안정적인 Kubernetes 릴리스를 실행하며 다음과 같은 기능을 지원합니다:
- 로드 밸런싱
- 멀티 클러스터
- 영구 볼륨
- 노드 포트
- ConfigMap 및 비밀 관리
- 컨테이너 런타임: Docker, CRI-O, containerd 지원
- CNI(Container Network Interface) 활성화
마라톤
마라톤은 Apache Mesos용으로 개발되었으며, 앱과 프레임워크를 오케스트레이션할 수 있는 기능을 제공합니다.
Apache Mesos는 오픈 소스 클러스터 관리자입니다. Mesos는 컨테이너화된 워크로드와 컨테이너화되지 않은 워크로드를 모두 실행할 수 있는 Apache의 프로젝트입니다. Mesos 클러스터의 주요 구성 요소는 Mesos 에이전트 노드, Mesos 마스터, ZooKeeper, 프레임워크입니다. 프레임워크는 마스터와 협력하여 에이전트 노드에 작업을 예약합니다. 사용자는 Marathon 프레임워크와 상호 작용하여 작업을 예약합니다.
마라톤 스케줄러는 ZooKeeper를 사용하여 작업을 제출할 현재 마스터를 찾습니다. 마라톤 스케줄러와 Mesos 마스터는 고가용성을 보장하기 위해 보조 마스터를 실행합니다. 클라이언트는 REST API를 사용하여 마라톤과 상호 작용합니다.
주요 기능:
- 고가용성
- 상태 저장 앱 지원
- 강력하고 편리한 UI
- 제약 조건 설정
- 서비스 검색 및 로드 밸런싱
- 상태 확인 기능
- 이벤트 구독
- 지표 제공
- REST API
클라우디파이
클라우디파이는 컨테이너 및 마이크로서비스의 배포 자동화와 수명 주기 관리를 위한 오픈 소스 클라우드 오케스트레이션 도구입니다. 인프라 수준에서 온디맨드 클러스터, 자동 복구, 확장 등의 기능을 제공합니다. 클라우디파이는 컨테이너 인프라를 관리하고 컨테이너 플랫폼에서 실행되는 서비스를 오케스트레이션할 수 있습니다.
Docker 및 Docker 기반 컨테이너 관리자들과의 간편한 통합을 지원합니다:
- Docker
- Docker Swarm
- Docker Compose
- Kubernetes
- Apache Mesos
클라우디파이는 컨테이너 클러스터를 생성, 복구, 확장, 해체하는 데 도움을 줄 수 있습니다. 컨테이너 오케스트레이션은 컨테이너 관리자가 실행할 수 있는 확장 가능하고 고가용성 인프라를 제공하는 데 중요합니다. 클라우디파이는 다양한 플랫폼에서 이기종 서비스를 오케스트레이션하는 기능을 제공합니다. CLI 및 Cloudify Manager를 사용하여 애플리케이션을 배포할 수 있습니다.
랜처
랜처는 컨테이너 오케스트레이션을 위한 오픈 소스 플랫폼으로, Kubernetes, Swarm, Mesos와 같은 오케스트레이션 서비스를 활용할 수 있습니다. 랜처는 컨테이너를 관리하는 데 필요한 소프트웨어를 제공하므로, 조직이 오픈 소스 기술을 사용하여 컨테이너 서비스 플랫폼을 처음부터 구축할 필요가 없습니다.
Rancher 2.x를 사용하면 고객이 지정한 공급자에서 실행되는 Kubernetes 클러스터를 관리할 수 있습니다.
랜처를 시작하는 과정은 두 단계로 이루어집니다:
Linux 호스트 준비
64비트 Ubuntu 16.04 또는 18.04(또는 지원되는 다른 Linux 배포 버전) 및 최소 4GB 메모리를 가진 Linux 호스트를 준비합니다. 해당 호스트에 지원되는 Docker 버전을 설치합니다.
서버 시작
랜처를 설치하고 실행하려면 호스트에서 다음 Docker 명령을 실행하십시오.
$ sudo docker run -d --restart=unless-stopped -p 80:80 -p 443:443 rancher/rancher
랜처 사용자 인터페이스를 통해 수천 개의 Kubernetes 클러스터 및 노드를 관리할 수 있습니다.
컨테이너쉽
컨테이너쉽은 멀티 클라우드 Kubernetes 인프라의 배포 및 관리를 지원하기 위해 설계되었습니다. 단일 도구를 사용하여 퍼블릭, 프라이빗 클라우드 및 온프레미스 환경에서 유연하게 운영할 수 있습니다. 모든 주요 클라우드 제공업체에서 Kubernetes 클러스터를 프로비저닝, 관리, 모니터링할 수 있습니다.
컨테이너쉽은 프로비저닝을 위한 Terraform, 모니터링을 위한 Prometheus, 네트워킹 및 정책 관리를 위한 Calico와 같은 클라우드 네이티브 도구를 사용하여 구축되었습니다. 바닐라 쿠버네티스를 기반으로 합니다. 컨테이너쉽 플랫폼은 직관적인 대시보드와 복잡한 자동화를 위한 강력한 REST API를 제공합니다.
주요 기능:
- 멀티 클라우드 대시보드
- 감사 로그
- GPU 인스턴스 지원
- 무중단 업그레이드
- 스케줄링 가능한 마스터
- 통합 지표
- 실시간 로깅
- 다운타임 없는 배포
- 영구 스토리지 지원
- 개인 레지스트리 지원
- 워크로드 자동 확장
- SSH 키 관리
AZK
AZK는 매니페스트 파일(Azkfile.js)을 통해 개발 환경을 위한 오픈 소스 오케스트레이션 도구입니다. 개발자가 다양한 오픈 소스 기술로 웹 애플리케이션을 개발하기 위해 일반적으로 사용되는 도구를 설치, 구성, 실행할 수 있도록 지원합니다.
AZK는 가상 머신 대신 컨테이너를 사용합니다. 컨테이너는 더 나은 성능과 더 적은 물리적 리소스 소비를 제공합니다. 가상 머신과 유사하게 작동합니다.
Azkfile.js 파일을 재사용하여 새 구성 요소를 추가하거나 처음부터 새 구성 요소를 만들 수 있습니다. 공유가 가능하므로 다른 프로그래머의 컴퓨터에 있는 개발 환경 간에 완전한 패리티가 보장되고 배포 중 버그가 발생할 가능성이 줄어듭니다.
GKE
GKE는 Google Cloud Platform에서 컨테이너 애플리케이션 조정을 위한 완전 관리형 솔루션을 제공합니다. GKE 클러스터는 Kubernetes를 기반으로 합니다. Kubernetes CLI를 사용하여 클러스터와 상호 작용할 수 있습니다. Kubernetes 명령어를 사용하여 애플리케이션을 배포 및 관리하고, 관리 작업을 수행하고, 정책을 설정하고, 배포된 워크로드의 상태를 모니터링할 수 있습니다.
GCP 제공 이미지
Google Cloud의 고급 관리 기능은 Google Cloud의 부하 분산, 노드 풀, 노드 자동 크기 조정, 자동 업그레이드, 노드 자동 복구, 로깅 및 Google Cloud 운영 제품군을 통한 모니터링과 같은 GKE 클러스터에서도 사용할 수 있습니다.
GCP는 애플리케이션 컨테이너를 빌드하고 제공하는 데 도움이 되는 CI/CD 도구를 제공합니다. Cloud Build를 사용하여 다양한 소스 코드 저장소에서 컨테이너 이미지(예: Docker)를 빌드하고 Container Registry를 사용하여 컨테이너 이미지를 저장할 수 있습니다.
GKE는 사전 빌드된 배포 템플릿이 포함된 엔터프라이즈급 솔루션입니다.
GKE 학습에 관심이 있으신가요? 다음 초보자 코스를 확인해 보세요.
AKS
AKS는 서버리스 Kubernetes, 보안 및 거버넌스를 제공하는 Azure에서 제공하는 완전 관리형 Kubernetes 서비스입니다. AKS는 Kubernetes 클러스터를 관리하고 컨테이너화된 애플리케이션을 쉽게 배포할 수 있도록 지원합니다. AKS는 모든 Kubernetes 마스터 및 노드를 자동으로 구성합니다. 사용자는 에이전트 노드만 관리하고 유지하면 됩니다.
Azure 이미지
AKS는 무료로 제공됩니다. 마스터가 아닌 클러스터 내의 에이전트 노드에 대해서만 비용을 지불합니다. Azure Portal에서 또는 프로그래밍 방식으로 AKS 클러스터를 만들 수 있습니다. Azure는 고급 네트워킹, Azure Active Directory 통합, 그리고 Azure Monitor를 사용한 모니터링과 같은 추가 기능도 지원합니다.
AKS는 Windows Server 컨테이너도 지원합니다. 클러스터 및 배포된 애플리케이션 성능은 Azure Monitor에서 모니터링할 수 있습니다. 로그는 Azure Log Analytics 작업 영역에 저장됩니다.
AKS는 Kubernetes 준수 인증을 획득했습니다.
AWS EKS
AWS EKS는 완전 관리형 Kubernetes 서비스입니다. AWS에서는 컨테이너용 서버리스 컴퓨팅인 AWS Fargate를 사용하여 EKS 클러스터를 실행할 수 있습니다. Fargate를 사용하면 서버를 프로비저닝하고 관리할 필요 없이 애플리케이션 단위로 리소스를 할당하고 사용한 만큼만 비용을 지불할 수 있습니다.
AWS는 Amazon CloudWatch, Amazon Virtual Private Cloud(VPC), AWS Identity, Auto Scaling Groups, Access Management(IAM) 등의 기능을 EKS와 함께 사용할 수 있도록 지원하며, 모니터링, 확장, 로드 밸런싱 애플리케이션을 위한 추가 기능을 제공합니다. EKS는 AWS App Mesh와 통합되어 Kubernetes 기반 환경을 제공합니다. EKS는 최신 Kubernetes 버전을 실행하며 Kubernetes 인증을 받았습니다.
결론
이 글에서 소개된 다양한 컨테이너 오케스트레이션 도구들에 대한 이해가 여러분의 사용 사례에 맞는 최적의 도구를 선택하는 데 도움이 되기를 바랍니다.
다음으로는 Kubernetes 관리 소프트웨어에 대한 글을 찾아보세요.