Docker

[Docker] 클라우드 환경 도커 오케스트레이션

ozofweird 2020. 12. 5. 21:26

1. 분산 환경에서의 컨테이너 운영

도커 컨테이너는 개발환경과 같이 한 대의 머신에서 가동시킬 때는 간편히 도입할 수 있다. 하지만 멀티호스트로 구성된 실제 환경을 클러스터 구성으로 가동시키려면 컨테이너의 시작 및 정지와 같은 조작만이 나닌 호스트 간의 네트워크 연결이나 스토리지 관리, 컨테이너를 어떤 호스트에서 가동시킬지와 같은 스케줄링 기능이 필요하다. 또한 컨테이너가 정상적으로 동작하고 있는지 모니터링 장치도 필요하다.

 

 

 

2. 클라우드 환경 도커 오케스트레이션

1) Kubernetes

Kubernetes는 미국 구글의 엔지니어를 중심으로 하는 커뮤니티에서 개발이 진행되고 있는 오픈소스 컨테이너 오케스트레이션 툴이다. 구글만이 나닌 Microsoft, Red Hat, IBM 등이 개발에 참여하고 있다 제공하는 기능도 풍부하고 개발 속도도 빠르며 대규모 시스템에서의 도입 실적도 풍부하여 컨테이너 오케스트레이션 툴의 실질적 스탠다드라고 불린다.

2) Docker Engine (Swarm 모드)

도커에는 클러스터링 기능을 제공하는 Swarm 모드가 있다. Swarm 모드를 이용하여 여러 개의 컨테이너를 멀티 호스트 환경에서 작동시키고, 그 컨테이너를 모아 하나의 명령으로 조작할 수 있다.

3) Apache Mesos, Marathon

Apache Mesos는 오픈소스 클러스터 오케스트레이션 툴로 대규모 클러스터도 지원할 수 있도록 설계되어있다. 여러 호스트의 CPU, 메모리, 디스크를 추상화하여 하나의 리소스 풀로 다룰 수 있다. 단 Mesos를 사용하여 컨테이너 오케스트레이션을 가동시킬 경우 별도의 컨테이너 관리용 프레임워크가 필요하다. 대표적으로 Marathon 프레임워크는 장기간에 걸쳐 계속 작동하는 애플리케이션의 실행이나 모니터링을 할 수 있다.

 

 

 

3. 퍼블릭 클라우드 제공 서비스

1) 컨테이너 오케스트레이션

컨테이너 오케스트레이션 툴을 온프레미스 환경에 도입하려면 하드웨어, 네트워크에 대한 지식이 필요하다. 클라우드의 가상 머신 인스턴스로 구축할 때는 하드웨어 관리에서 해방되지만, 인프라 환경 구축과 덥루어 컨테이너 오케스트레이션 툴, 감시 툴의 사용법이나 시스템 운용 및 장애 대응 등 여러 분야에 걸친 인프라 기술에 관한 지식이 필요하다.

 

일반적으로 클러스터 환경 구축 및 운용은 기술적인 난이도가 높고 풍부한 실무 경험이 필요하다. 만약 엔지니어가 없을 경우 도커 컨테이너를 제품 환경에서 운용할 때는 퍼블릭 클라우드가 제공하는 서비스를 이요하는 것이 좋다.

2) Amazon EC2 Container Service (ECS)

ECS는 가상 머신을 제공하는 EC2를 사용한 컨테이너 관리 서비스이다. ECS에서는 테스크 정의라는 JSON 템플릿을 이용하여 환경을 정의한다. 테스크 정의에는 도커의 리포지토리, 이미지, 메모리, CPU 등과 같은 하드웨어 요구사항, 데이터 볼륨의 스토리지, 컨테이너 간 연결을 정의한다. CPU와 메모리 같은 리소스와 가용성 요구사항을 바탕으로 클러스터 전체에 컨테이너를 배치하는 스케줄러를 가지고있다.

 

ECS는 컨테이너에 장애가 발생할 경우에도 자동으로 복구된다. 따라서 애플리케이션을 실행하는데 필요한 수만큼의 컨테이너를 항상 확보할 수 있다. 또한 ELB를 이용하여 트래픽을 컨테이너 전체로 분산시킬 수 있다. 애플리케이션의 전개는 테스크 정의를 새로운 버전으로 갱신하여 업로드하면 갱신된 이미지를 사용하여 새로운 컨테이너가 자동으로 시작된다. 또한 가장 오래된 버전을 실행하고 있는 컨테이너는 자동으로 정지된다.

 

Amazon CloudWatch와도 연계하여 CPU나 메모리 사용의 평균값과 합계량을 감시할 수 있다. 그리고 컨테이너나 클러스터의 스케일을 확장 또는 축소할 때 CloudWatch 알림을 설정하여 경고할 수 있다. 그 외에도 AWS에서는 Kubernetes의 관리 서비스인 Amazon Elastic Container Service for Kubernetes (EKS)도 있다.

3) Azure Container Service (AKS)

Azure Container Service는 Microsoft가 제공하는 Azure의 컨테이너 관리 서비스로 컨테이너 오케스트레이션 툴로 Kubernetes를 지원하고 있다. Azure의 가상 머신을 이용하여 클러스터를 구성하며 도커 이미지를 프라이빗으로 관리할 수 있는 Azure Container Registry도 제공하고 있다.

 

 

 

4. Google Cloud Platform

1) Google Container Builder

Google Container Builder는 Dockerfile을 바탕으로 도커 이미지를 GCP 상에서 작성하기 위한 커맨드 툴이다. Dockerfile을 젖아하는 소스 리포지토리에 저장된 Dockerfile로부터 이미지를 빌드하고 Container Registry에 자동으로 업로드한다. 소스 리포지토리로는 Google Cloud Source Repositories, GitHub, Bitbucket을 이용할 수 있다. Container Builder로 작성한 도커 이미지의 저장 위치는 GCP의 오브젝트 스토리지 서비스인 Google Cloud Storage(유럽, 아시아, 미국 리전)를 지정할 수 있다. 스토리지에 액세스할 수 있는 사용자를 지정할 수 있기 때문에 프라이빗한 환경에서 이미지를 안전하게 관리할 수 있다.

2) Google Kubernetes Engine (GKE)

GKE는 도커 컨테이너를 관리하는 서비스이다. 사용자가 정의한 CPU나 메모리와 같은 인프라 요구사항을 바탕으로 컨테이너를 ㅡㄹ러스터에 스케줄링하여 자동으로 관리한다. GKE는 오픈소스 컨테이너 오케스트레이션 툴인 Kubernetes를 이용하고 있고 클러스터 환경으로 자비로 마련하지 않아도 컨테이너 오케스트레이션을 할 수 있다. 애플리케이션의 요구 변화에 따라 컨테이너에 할당되는 클러스터 리소스나 컨테이너 클러스터의 크기를 조정할 수 있다.

3) Google Container Registry

Google Container Registry는 도커 이미지를 GCP의 제품 안에서 관리할 수 있는 프라이빗 레지스트리 서비스이다. Docker Registry V2 API를 이용하여 프라이빗한 레지스트리에 대해 도커 이미지를 업로드 및 다운로드가 가능하다. 도커 이미지의 저장 위치는 GCP가 제공하는 오브젝트 스토리지 서비스인 Cloud Storage이다. 즉, 지리적으로 가까운 곳을 지정하여 다운로드에 걸리는 시간을 단축할 수 있다. 또한 이미지의 아카이브를 Cloud Storage Nearline 버킷에 저장할 수 있다.


[참고] 완벽한 IT 인프라 구축을 위한 Docker (2판)

728x90