일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- C++
- 유니티
- c# 윈폼
- 도커
- Houdini
- 다트 언어
- jupyter lab
- docker
- 구조체
- HTML
- C언어 포인터
- git
- dart 언어
- 플러터
- Data Structure
- c언어
- jupyter
- Python
- vim
- gitlab
- c#
- github
- C# delegate
- Algorithm
- Flutter
- c# 추상 클래스
- 포인터
- 깃
- Unity
- c# winform
- Today
- Total
nomad-programmer
[DevOps/Docker] 분산 환경에서의 컨테이너 운용 관리 본문
docker 컨테이너는 개발 환경과 같이 한 대의 머신에서 가동시킬 때는 간편히 도입할 수 있다.
하지만 멀티-호스트로 구성된 실제 환경을 클러스터 구성으로 가동시키려면 컨테이너의 시작 및 정지와 같은 조작뿐만 아니라 호스트 간의 네트워크 연결이나 소토리지 관리, 컨테이너를 어떤 호스트에서 가동시킬지와 같은 스케줄링 기능이 필요하다. 더욱이 컨테이너가 정상적으로 작동하고 있는지의 대한 여부를 감시할 장치도 필요하다.
이러한 기능을 갖추고 컨테이너를 통합 관리할 수 있는 툴을 컨테이너 오케스트레이션 툴이라고 한다. 대표적인 컨테이너 오케스트레이션 툴이 무엇이 있는지 알아보자.
Kubernetes
kubernetes는 Google의 엔지니어를 중심으로 하는 커뮤니티에서 개발이 진행되고 있는 오픈소스 컨테이너 오케스트레이션 툴이다. Google뿐만 아니라 Microsoft, Red Hat, IBM 등이 개발에 참여하고 있다. 제공하는 기능도 풍부하고 개발 속도도 빠르며, 대규모 시스템에서의 도입 실적도 풍부하여 컨테이너 오케스트레이션 툴의 실질적 스탠다드라고 해도 과언이 아니다.
Docker Engine (Swarm 모드)
docker에는 클러스터링 기능을 제공하는 swarm 모드가 있다. swarm 모드를 사용하여 여러 개의 컨테이너를 멀티호스트 환경에서 작동시키고, 그 컨테이너들을 모아서 하나의 명령으로 조작할 수 있다. docker 1.12 이전 버전에서는 docker swarm 이라는 다른 컴포넌트가 마련되어 있었지만, 현재는 docker 본체에 클러스터링 기능이 내장되어 있다.
Aphache Mesos, Marathon
apache mesos는 오픈소스 클러스터 오케스트레이션 툴이다. 몇 백부터 몇 천대의 호스트를 갖고 있는 대규모 클러스터도 지원할 수 있도록 설계되어 있다. 여러 호스트의 CPU나 메모리, 디스크를 추상화하여 하나의 리소스 풀로서 다룰 수 있는 것이 특징이다. 단, Mesos를 사용하여 컨테이너 오케스트레이션을 가동시키려면 별도의 컨테이너 관리용 프레임워크가 필요하다. 대표적인 프레임워크로는 Marathon이 있는데, 이름 그대로 장기간에 걸쳐 계속 작동하는 애플리케이션의 실행이나 모니터링을 할 수 있다.
퍼블릭 클라우드가 제공하는 매니지드 서비스
컨테이너 오케스트레이션 툴을 온프레미스 환경에 도입하려면 하드웨어나 네트워크에 대한 지식이 필요하다. 클라우드의 가상 머신 인스턴스로 구축할 때는 하드웨어 관리에서 해당되지만, 인프라 환경 구축과 더불어 컨테이너 오케스트레이션 툴, 감시 툴의 사용법이나 시스템 운용 및 장애 대응 등 여러 분야에 걸쳐 인프라 기술에 관한 지식이 필요하다.
일반적으로 클러스터 환경의 구축 및 운용은 기술적인 난이도가 높고, 이를 운용하려면 어느 정도의 실무 경험이 필요하다. 더욱이 운용에 걸리는 부하는 시스템이 대규모일수록 커진다.
그래서 충분한 스킬과 경험을 가진 엔지니어가 없는 경우 docker 컨테이너를 제품 환경에서 운용할 때는 퍼블릭 클라우드가 제공하는 매니지드 서비스를 이용하는 것이 좋다.
매니지드 서비스를 잘 이용함으로써 인프라에 관한 깊은 지식이나 경험이 없어도 높은 가용성을 가진 클러스터 환경에서 컨테이너를 쉽게 운용할 수 있으며, 프로그래머는 본업인 애플리케이션 개발, docker 이미지 작성 및 실행, 테스트 등과 같은 개발 업무에 주력할 수 있다.
대표적인 퍼블릭 클라우드가 제공하는 컨테이너 매니지드 서비스들을 알아보자.
Amazon EC2 Container Service
Amazon EC2 Container Service (Amazon ECS)란 Amazon Web Services의 가상 머신 기능을 제공하는 Amazon EC2를 사용한 docker 컨테이너 관리 서비스이다. Amazon ECS에서는 'Task 정의' 라고 하는 json 템플릿을 사용하여 환경을 정의한다. 이 task 정의에는 docker의 리포지토리와 이미지, 메모리나, cpu 등과 같은 하드웨어 요구사항, 데이터 볼륨의 스토리지, 컨테이너 간 연결 등을 정의한다. 또한 cpu나 메모리와 같은 리소스와 가용성 요구사항을 바탕으로 클러스터 전체에 컨테이너를 배치하는 스케줄러를 갖추고 있다. 예를 들어 실행 시간이 긴 애플리케이션이나 서비스, 배치 잡도 스케줄링할 수 있다.
Amazon ECS는 컨테이너에 장애가 발생했을 때도 자동으로 복구된다. 그래서 애플리케이션을 실행하는 데 필요한 수만큼의 컨테이너를 항상 확보할 수 있다.
Amazon ECS는 Amazon EC2의 부하분산 기능인 Elastic Load Balancing(ELB)을 사용하여 트래픽을 컨테이너 전체로 분산시킬 수 있다.
애플리케이션의 전개는 task 정의를 새로운 버전으로 갱신하여 업로드하면 갱신된 이미지를 사용하여 새로운 컨테이너가 자동으로 시작된다. 그리고 오래된 버전을 실행하고 있는 컨테이너는 자동으로 정지된다. 또한 AWS의 감시 서비스인 Amazon CloudWatch와 연계하여 cpu나 메모리 사용의 평균값과 합계량을 감시할 수 있다. 그리고 컨테이너나 클러스터의 스케일을 확장 또는 축소할 때 CloudWatch 알람을 설정하여 경고를 할 수도 있다.
또한 AWS에서는 Kubernetes의 매니지드 서비스인 'Amazon Elastic Container Service for Kubernetes (Amazon EKS)' 도 릴리즈될 예정이다.
Azure Container Service (AKS)
Azure Container Service는 Microsoft가 제공하는 Microsoft Azure의 컨테이너 매니지드 서비스로, 컨테이너 오케스트레이션 툴로 Kubernetes를 지원하고 있는 것이 특징이다. Azure의 가상 머신을 사용하여 클러스터를 구성한다. 또한 docker 이미지를 private으로 관리할 수 있는 레지스트리 서비스인 Azure Container Registry도 제공하고 있다.
Microsoft는 Cloud Native Computing Foundation (CNCF)에 참여하고 있으므로 앞으로 빠른 속도로 다양한 기능이 확장될 것이다. 또한 Azure Batch Shipyard라는 과학기술계산 등의 용도로 이용되는 대규모 분산 배치 처리 기반의 일부로도 docker가 이용되고 있다.
Google Kubernetes Engine (GKE)
Google Kubernetes Engine은 Google이 제공하는 Google Cloud Platform의 컨테이너 매니지드 서비스이다.
사용자가 정의한 cpu나 메모리와 같은 인프라 요구사항을 바탕으로 컨테이너를 클러스터에 스케줄링하여 자동으로 관리한다. GKE은 오픈소스 컨테이너 오케스트레이션 툴인 Kubernetes를 이용하고 있으며, Kubernetes의 클러스터 환경으로 자비로 마련하지 않아도 컨테이너 오케스트레이션을 할 수 있는 서비스이다. 애플리케이션의 요구 변화에 맞춰 컨테이너에 할당되는 클러스터 리소스나 컨테이너 클러스터의 크기를 조정할 수 있다.
GKE는 Kubernetes의 kubectl 명령 또는 Cloud Console에서 조작할 수 있다.
'DevOps > Docker' 카테고리의 다른 글
[DevOps/Docker] Portainer (도커와 쿠버네티스 관리를 쉽게) (0) | 2023.08.27 |
---|---|
[DevOps/Docker] 명령어 및 옵션 목록 (0) | 2020.12.14 |
[DevOps/Docker] docker-machine 명령을 사용한 실행 환경 구축 (0) | 2020.12.10 |
[DevOps/Docker] docker-compose로 의존성이 있는 서버 구성에서의 유용한 TIP (0) | 2020.12.08 |
[DevOps/Docker] Docker를 이용한 로컬 환경에서 GitLab-CE 서버 구축 (with docker-compose) (0) | 2020.12.08 |