Docker Swarm

先設定並建立好三台以上主機
假設命名為
Node-01 IP為192.168.2.1
Node-02 IP為192.168.2.2
Node-03 IP為192.168.2.3
並且我們準備使用Node-01這台機器作為 manager控制主機
Node-02 及 Node-03為Worker工作機

SSH進入Node-01內下達指令

docker swarm init --advertise-addr=192.168.2.1

執行指令

docker swarm join-token worker

即可顯示Docker Swarm節點主機所要加入Docker Swarm叢集時擔任Worker角色使用的指令以及Token

而執行指令

docker swarm join-token manager

則是顯示擔任Manager角色所使用的指令和Token

於Node-01使用指令docker swarm join-token worker產生的整串指令複製貼上到Node-02及Node-03來加入cluster
在前述說明Docker Swarm容器叢集運作架構時,已經說明叢集中有2種角色,分別是「Manager」和「Worker」。當Docker Swarm節點主機加入Docker Swarm叢集後,倘若管理人員需要調整Docker Swarm節點主機角色,可以在擔任「Manager」角色的Docker Swarm節點主機上執行Docker指令「docker node promote/demote」,即可轉換Docker Swarm節點主機的角色。

docker node promote $NODE-HOSTNAME
docker node demote $NODE-HOSTNAME

至此,已經順利建置好Docker Swarm叢集運作環境,接下來便可以進行部署「服務」(Services)的動作。值得注意的是,在「單機」的Docker容器運作環境中,管理人員可以透過「docker run」指令來建立容器,然而在Docker Swarm叢集環境中則必須執行「docker service create」指令,建立的容器才會順利部署至Docker Swarm叢集高可用性環境中

列出目前叢集狀態

docker node ls

範例

docker-stack.yml檔案內容

version: "3.9"
services:
  registry:
    image: registry:2
    ports:
      - 5000:5000
    deploy:
      restart_policy:
        condition: none
      mode: replicated
      replicas: 1

deploy: 下的restart_policy為指定容器重啟動規範
若設定為服務型態則避免設定為always,否則服務將在容器停止後另行開啟一個新的容器
而原本舊有容器在重啟動後因為已有相同容器運作而會轉為shutdown模式,並卡在列表上無法刪除
因此建議設定為condition: none (完全禁止容器於停止後自動重新啟動)
交由docker service服務來管理容器

constraints:
可規範此容器部屬至某個範圍
例如

deploy:
  placement:
    constraints:
      - node.role == manager


為只部屬至設定權限具有manager的node上

deploy:
  placement:
    constraints:
      - node.hostname==node-01


為只部屬至node-01這台機器上


輸入指令部屬服務

docker stack deploy -c docker-stack.yml registry

輸入指令查看服務

docker stack ls

刪除服務

docker stack rm registry

範例2

docker-stack.yml內容

version: "3"
services:
  Portainer:
    image: "cr.portainer.io/portainer/portainer-ce"
    volumes:
      - /var/run/docker/sock:/var/run/docker.sock
    ports:
      - "8000:8000"
      - "9443:9443"
    deploy:
      placement:
        constraints:
          - node.role == manager

輸入指令部屬服務

docker stack deploy -c docker-stack.yml Portainer

docker swarm 刪除節點 (解散叢集)

清空叢集內的集群容器 。
docker node update –availability drain g36lvv23ypjd8v7ovlst2n3yt

主動離開叢集,讓節點處於down狀態,才能删除

docker swarm leave

刪除指定節點 (管理節點上操作指令)

docker node rm HOSTNAME

管理節點,解散叢集

docker swarm leave --force

發佈留言