[Docker 기본6] Docker의 컨테이너 관리

Docker의 컨테이너 관리: Swarm

지금까지 Docker 단일 머신에서 컨테이너 실행 알림 서비스를 제공했습니다. 그렇다면, 현재 상태로 실제 서비스를 운영할 수 있는지 확인하는가? 안 돼요! 장애 없이 효율적인 서비스를 제공하기 위해서는, 내결함성, 고가용성 등등 많은 우려 사항을 고려하셔야 합니다. 결국은 단일 시스템을 사용할 수 있는 기본 클러스터 형식으로 구성되어야 하며, 그 이상의 서비스는 여러 개의 인스턴스로 분배되어야만 하며, 장애가 발생하여 스스로 복구 작업을 수행할 수 있는 구조로 실행되어야 합니다. 마지막으로 조치를 취해야 합니다. 수십개에서 수백개로 의심진 서비스를 제공하는 사람이 직접 관리할 수 있는 위험입니다.

컨테이너 오케스트레이션: Docker Swarm 모드

이 때 필요한 것은 Container Ochestration 이고, Docker에서 제공하고 있는 도구가 바로 Swarm이라 할 수 있습니다. Docker Swarm은 Docker Engine에 Ochestration Layer를 구현하여, Cluster 관리 및 Cluster에 배포되는 컨테이너들에 대한 Resource, Network, Security, Fault Torelance 등 Ochestartion 기능을 사용할 수 있도록(영어 뜻 그대로, Container들을 방해하는 것을시키거나 조율자로 기억하면 쉽게 이해될 것 같습니다).

Container Ochestration Tool은 Swarm만 있는 것입니다. Google에서 Kubernetes, Aphache Mesos등이 오류, 더 확장해서 Ochestation 도구를 관리하는 Rancher라는 것도 있습니다. 현재 Kubernetes가 가장 많은 작업을 수행하고 있으며, 가장 큰 성능을 자랑스러워할 수 있습니다. 반면 Docker Swarm은 제외되는 것을 제외하고 Kubernetes보다 훨씬, 사용하기 쉽지만, Kubernetes의 기능과 기능에 비해 서비스 운영에는 제한이 없다고 생각합니다. 현재는 Kubernetes를 사용하고 있지만, Container Ochestration에 대한 이해와 로컬 환경에서 조작할 수 있는 것(Kubernetes보다는 쉽게 클러스터를 직접 구성하여 Container Ochestration을 시도할 수 있다)은 Swarm이 할 수 있기 때문에 가능합니다. 보고자 합니다.

건축학

먼저, Swarm은 다음과 같은 구조로 설계되어 있습니다.

출처: Docker Swarm 아키텍처

Docker Swarm은 Swarm 모드에서 실행되는 Manager 노드 및 작업자 노드로 동작하는 여러 Docker 호스트로 구성됩니다. 여기, Docker 호스트는 관리자, 작업자 또는 두 가지 역할을 수행할 수 있습니다.

노드

Node는 Swarm에 참여하는 Docker Engine의 인스턴스입니다. 하나의 쉼인 Server 또는 Cloud Server에서 하나 밖에 Node를 사냥할 수 있지만, 일반적으로 생산 환경에서는 Swarm은 여러 주일인 Server와 Cloud System에 보려고 하는 Docker Node들이 배포되는 형태로 사용됩니다.

매니저 노드

Application을 Swarm에 배포하기 위해서는 먼저 Manager Node에 Service라는 이름의 정의를 전달해야 합니다. 그 후, Manager Node는 Worker Nodes에 Task라고 불리는 그룹 단위를 전달하여, Service를 생성합니다. 기본적으로 Manager Node는 Service를 Worker Node로 실행하지만, Manager만 Task를 실행하도록 구성할 수도 있습니다. 또한, Manager Node는 단기 Swarm 상태를 유지하기 위해 필요한 Ochestration 및 클러스터 관리 기능을 수행합니다. 많은 Manager Nodes 활동을 활동할 수 있는 단독 활동을 할 수 있습니다.

  • 클러스터 상태 유지
  • 스케줄링 서비스
  • Swarm Mode의 HTTP API 엔드포인트 제공

워커 노드

작업자 노드는 관리자 노드에서 작업을 수신하여 컨테이너를 실행합니다. 즉 일정에 대한 결정을 내리거나 Swarm Mode의 HTTP API를 제공하지 않고, 컨테이너를 실행하는 것이 유일한 목적인 Docker 인스턴스입니다. Worker Node에서는 각각의 에이전트가 존재하며, Worker Node에서 실행되고 있는 작업의 상태에 대해 Manager Node에 알립니다. 이를 통해, Manager Node가 Worker Node들이 순간 상태를 확인할 수 있도록 도와드립니다.

Manager와 Worker Node 구성

즉, Docker Cluster, Swarm Mode를 사용하는 가장 큰 이유 중 하나는 바로 Fault-Tolerance 이점을 활용하기 위해서라고 할 수 있는 것입니다. 이에 따라 Docker의 고가용성을 요구하는 사항에 따라 홀수개의 Node로 구성하는 것을 권장하고 있습니다. Swarm을 Multi Manager로 구성하는 경우 Manager Node의 중단 시간 없이 Manager Node에서 오류를 복구할 수 있습니다. 다음을 참고하여 Swarm의 Manager Node를 구성할 수 있습니다.

  • 3-Manager Swarm은 최대 1개의 Manager 노드가 더 적은 크기로 가능합니다.
  • 5-Manager Swarm은 최대 2개 Manager Node의 동신 가치에 비해 덜 가능합니다.
  • n Manager 클러스터는 최대화된 (n-1)/2Manager 노드의 더 적은 정도만을 허용할 수 있습니다.
  • Docker는 최대 7개의 Manager Node를 구성할 것을 권장합니다.

Manager Node만 통합하면 Swarm을 구성할 수 있지만, 설치 Manager Node 없이 Worker Node만 구성할 수는 없습니다. 기본적으로 모든 관리자 노드는 작업자의 역할도 동일하게 수행됩니다. 단일 관리자 노드로 구성 클러스터에서, docker service create와 동일한 복합을 실행하면, 켈러는 모든 작업을 로컬 엔진에 배치하는 것입니다.

노드간 변경됨

docker node promete사용하시면 Worker Node를 Manager Node로 보호할 수 있습니다. 예를 들어, Manager Node를 오프라인 상태로 유지해야 할 필요가 있을 때, 임시로 Worker Node를 Manager Node로 변경하여 사용할 수 있을 것입니다. 를 docker node demote사용하여 Manager Node를 Worker Node로 강등할 수도 있습니다.

Docker Swarm 구성

이제부터는 Container Ochestration을 Docker Swarm 환경을 구성해 드리겠습니다. 구성하고자 하는 Docker는 Manager Node 1대, Worker Node 2대입니다.

도커 서버 구성

Swarm을 구성하기 위해, docker-machine으로 Docker Server를 3대 구성합니다.

default 외 default-2, default-3을 추가 설정합니다.

생성된 Docker Machine의 목록을 확인합니다.

매니저 노드 선택

플러그인 docker-machine 중 하나에 ssh로 접속하여, docker swarm init [OPTIONS]부트를 지원하는 Manager Node 로 설정합니다.

작업 노드 구성

Manager Node 로 선택한 docker-machine을 시작 docker swarm join [OPTIONS] HOST:PORT하세요 . 실행 후, Manager Node에 접속할 수 있는 Token과 Host, Port정보가 확장서 자동으로 생성됩니다.docker swarm joindocker swarm init

  • 도커-기본-2
  • 도커-기본-3

Docker Swarm 구성 확인

Manager Node에 접속하여 docker node ls [OPTIONS]Docker의 Node 구성 목록을 확인합니다. Manager Node는 부분적으로 표시되어 있는 것을 교환할 수 있습니다.

지금까지 진행하면, Docker Swarm을 관리하는 Manager Node 1개, 사실상 컨테이너가 배포되어 실행되는 Worker Node 2에서 클러스터 환경을 구성하는 것입니다. 이러한 Swarm 환경에서 처음에 언급했습니다. 컨테이너를 직접 실행하는 것이 아니라 서비스라는 단위로 배포를 합니다. 다음에는 서비스를 배포하여 컨테이너가 Docker 클러스터 환경에서 어떻게 작동하는지 확인합니다.