1. 개요

<Docker 가상 환경 구축 입문>의 <Chapter 9-2. Swarm 클러스터 생성>을 읽고 정리한 내용으로,

Docker Swarm Cluster를 생성하는 방법에 대해 설명합니다.


2. Swarm Cluster 생성

  • Swarm Cluster를 구성할 가상 머신 생성
    $ docker-machine create manager1
    $ docker-machine create worker1
    $ docker-machine create worker2
    $ eval $(docker-machine env manager1)
    $ docker info
    ...
    Plugins:
     Volume: local
     Network: bridge host macvlan null overlay
     Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
    Swarm: inactive
    Runtimes: runc
    ...
    
    • 1대의 매니저와 2대의 워커로 구성된 Swarm cluster를 구성하는 예제.
    • 장애 상황에 대비하여 매니저 노드를 여러개 두는 경우도 있음.
    • 가상 머신을 생성한 후 정보를 조회하면, Swarm 항목이 inactive로 표시됨. 아직 Swarm 모드로 동작되지 않고 있음을 의미.
  • Swarm 모드에서 사용되는 포트 정보
    • 클러스터 관리용 통신 포트: TCP 2377번
    • 노드 간 통신용 포트: TCP/UDP 7946번
    • 오버레이 네트워크 트래픽 용 포트: UDP 4789번
  • 마스터 노드 지정
    $ docker swarm init --advertise-addr [manager IP]
    Swarm initialized: current node (x0bh1ydgpb0ezgs9y214r73v7) is now a manager.
    
    To add a worker to this swarm, run the following command:
    
       docker swarm join --token SWMTKN-1-05v077o0g81nleb2nke8keln344mibndspmhzd9iyxdx2ma7u6-9resx3209i7kresxjezlu2fcg [manager IP]:2377
    
    To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
    
    • --advertise-addr 옵션은 다른 노드와 통신 가능한 IP 주소, 즉 manager IP를 지정함.
    • 위 명령을 수행하면 Swarm이 초기화되고 Swarm 모드가 active 상태로 전환됨.
    • docker swarm init 명령을 실행한 호스트는 자동적으로 매니저 노드가 됨.
  • 워커 노드 추가
    $ docker swarm join-token worker
    $ eval $(docker-machine env worker1)
    $ docker swarm join --token SWMTKN-1-05v077o0g81nleb2nke8keln344mibndspmhzd9iyxdx2ma7u6-9resx3209i7kresxjezlu2fcg [manager IP]:2377
    $ eval $(docker-machine env worker2)
    $ docker swarm join --token SWMTKN-1-05v077o0g81nleb2nke8keln344mibndspmhzd9iyxdx2ma7u6-9resx3209i7kresxjezlu2fcg [manager IP]:2377
    $ eval $(docker-machine env manager1)
    $ docker node ls
    ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
    x0bh1ydgpb0ezgs9y214r73v7 *   manager1            Ready               Active              Leader              18.09.9
    qqv1l08a8rol9d0cp2y8bs6dt     worker1             Ready               Active                                  18.09.9
    jh8kbkd0bdhcm96qmkrek8xbt     worker2             Ready               Active                                  18.09.9
    
    • docker swarm join 명령은 swarm cluster에 노드를 추가할 때 사용함.
    • 매니저 노드가 발행한 token을 사용해야 노드로 추가할 수 있음.
    • docker swarm join-token worker: 워커 노드 추가 / docker swarm join-token manager: 여러대의 매니저 노드를 사용할 경우, 매니저 노드 추가
    • 매니저 노드의 경우 MANAGER STATUS에 Leader로 표시됨.
    • 관리 기능을 하는 명령어는 매니저 노드에서만 수행 가능하므로 환경을 매니저 노드로 변경한 후(eval) 수행해야 함.