English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Swarm 클러스터 관리

개요

Docker Swarm은 Docker의 클러스터 관리 도구입니다. 이는 Docker 호스트 풀을 단일 가상 Docker 호스트로 변환합니다. Docker Swarm은 표준 Docker API를 제공하며, Docker 데몬과 통신하는 모든 도구가 Swarm을 통해 다중 호스트로 쉽게 확장할 수 있습니다.

지원하는 도구는 다음과 같으며, 이에 국한되지 않습니다:

  • Dokku

  • Docker Compose

  • Docker Machine

  • Jenkins

원리

아래 그림과 같이, swarm 클러스터는 관리 노드(manager)와 작업 노드(work node)로 구성되어 있습니다.

  • swarm mananger:클러스터의 전반적인 관리 업무를 담당하며, 클러스터 구성, 서비스 관리 등 클러스터와 관련된 모든 업무를 포함합니다.

  • work node:그림에서의 available node로, 주로 작업(task)을 수행하기 위해 필요한 서비스를 실행하는 주요 역할을 합니다.

사용

다음 예제는 Docker Machine와 virtualbox를 사용하여 설명되며, 주主机에 virtualbox가 설치되어 있는지 확인하십시오.

1、swarm 클러스터 관리 노드(manager) 생성

docker 기계를 생성하다:

$ docker-machine create -d virtualbox swarm-manager

swarm 클러스터를 초기화하고, 초기화를 수행한 이 기계는 클러스터의 관리 노드입니다.

$ docker-machine ssh swarm-manager
$ docker swarm init --advertise-addr 192.168.99.107 # 여기의 IP는 기계를 생성할 때 할당된 IP입니다.

위의 출력은 초기화가 성공적으로 완료되었음을 의미합니다. 아래의 행을 복사하여 추가할工作时 사용합니다:

docker swarm join --token SWMTKN-1-4oogo9qziq768dma0uh2j0z0m5twlm10iynvz7ixza96k6jh9p-ajkb6w7qd06y1e33yrgko64sk 192.168.99.107:2377

2、swarm 클러스터 워크 노드(worker) 생성

여기서는 두 가지 기계를 직접 생성하여 swarm을 설정합니다.-worker1 와 swarm-worker2 .

두 가지 기계에 각각 접속하여 이전 단계에서 복사한 내용을 추가하는 것을 지정합니다. 여기서는 이전 단계에서 복사한 내용을 사용합니다.

위의 데이터 출력은 성공적으로 추가되었음을 의미합니다.

위의 그림에서는 이전 단계에서 복사한 내용이 너무 길어서 자동으로 잘리게 됩니다. 실제로 그림에서 실행된 명령어는 다음과 같습니다:

docker@swarm-worker1:~$ docker swarm join --token SWMTKN-1-4oogo9qziq768dma0uh2j0z0m5twlm10iynvz7ixza96k6jh9p-ajkb6w7qd06y1e33yrgko64sk 192.168.99.107:2377

3、클러스터 정보 확인

관리 노드에 접속하여 docker info를 실행하면 현재 클러스터의 정보를 확인할 수 있습니다.

$ docker info

하단의 빨간 원을 통해 현재 실행 중인 클러스터에서 세 노드가 있음을 알 수 있습니다. 중 하나는 관리 노드입니다.

4、서비스를 클러스터에 배포

주의:클러스터 관리와 관련된 모든 작업은 관리 노드에서 수행됩니다.

아래 예제에서는 작업 노드에서 helloworld이라는 이름의 서비스를 생성합니다. 여기서는 작업 노드 중 하나에 무작위로 할당됩니다:

docker@swarm-manager:~$ docker service create --복제 1 --name helloworld alpine ping docker.com

5、서비스 배포 상태 확인

helloworld 서비스가 어느 노드에서 실행되는지 확인하려면, 현재는 swarm에서 실행되고 있는 것을 볼 수 있습니다.-worker1 노드:

docker@swarm-manager:~$ docker service ps helloworld

helloworld 배포의 구체적인 정보를 확인하려면:

docker@swarm-manager:~$ docker service inspect --pretty helloworld

6、클러스터 서비스 확장

위의 helloworld 서비스를 두 노드로 확장할 것입니다.

docker@swarm-manager:~$ docker service scale helloworld=2

한 노드에서 두 노드로 확장되었음을 볼 수 있습니다.

7、서비스 삭제

docker@swarm-manager:~$ docker service rm helloworld

삭제되었는지 확인해 보세요:

8、롤링 업그레이드 서비스

아래 예제에서는 redis 버전이 어떻게 높은 버전으로 업그레이드되는지 소개합니다.

한 개를 만듭니다 3.0.6 버전의 Redis.

docker@swarm-manager:~$ docker service create --복제 1 --이름 redis --업데이트-지연 10s redis:3.0.6

Redis를 롤링 업그레이드합니다.

docker@swarm-manager:~$ docker service update --image redis:3.0.7 redis

그림을 보면 Redis의 버전이 다음과 같이 업그레이드되었습니다: 3.0.6 업그레이드되었습니다 3.0.7서비스가 성공적으로 업그레이드되었습니다.

9혹은 새로운 작업을 받지 않도록 특정 노드를 중지합니다

모든 노드를 확인하려면:

docker@swarm-manager:~$ docker node ls

현재 모든 노드가 Active 상태이며, 새로운 작업 할당을 받을 수 있습니다.

노드 swarm 중지-worker1:

주의:swarm-worker1 상태가 Drain으로 변경됩니다. 클러스터의 서비스에 영향을 미치지 않습니다. Swarm 만 영향을 받습니다.-worker1 노드는 더 이상 새로운 작업을 받지 않으며, 클러스터의 부하 능력이 감소했습니다.

다음 명령어로 노드를 다시 활성화할 수 있습니다:

docker@swarm-manager:~$ docker node update --availability active swarm-worker1