在 Swarm 集群中, 創建服務時可以通過設置 --replicas
參數來指定此服務在工作節點上運行的任務數。
示例
這里我們來創建一個 nginx 服務作為示例:
version: '3'
services:
nginx:
image: nginx:latest
deploy:
replicas: 3
ports:
- "80:80"
networks:
- net
visualizer:
image: dockersamples/visualizer:stable
ports:
- "8080:8080"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
deploy:
placement:
constraints: [node.role == manager]
networks:
- net
networks:
net:
在文件所在目錄執行 docker stack deploy -c docker-compose.yml nginx
來創建服務,由於我這里只准備了一台 Docker 主機, 所以在這個 Swarm 集群中情況如圖所示:
可以看到我們的 nginx 服務創建了 3個 nginx_nginx 任務, 1個visualizer 服務。
docker ps
查看所有容器
docker exec -it <container id> /bin/bash
依次進入到3個 nginx_nginx 任務所對應的容器中
cd /usr/share/nginx/html
找到 index.html 文件
將3個容器中 index.html 的內容分別改為 nginx.1, nginx.2, nginx.3
echo nginx.1 > index.html
...
然后我們訪問 http://127.0.0.1 , 即可看到相對應的修改頁面。 這里我們多嘗試幾次,會發現,有時候出現的是 nginx.1, 也會出現 nginx.2, nginx.3 。 這就是 Docker Swarm 集群模式中自帶的負載均衡帶來的效果。
下面,我們來收縮或者拓展在一台工作節點上執行的任務量:
收縮:
docker service scale nginx_nginx=2
拓展
docker service scale nginx_nginx=5
可通過 docker service ls
來查看服務概況。
總結
服務的部署模式有兩種:
- global : 每個工作節點上都會運行一個服務
- replicated: 每個工作節點會運行 replicas 個服務
Docker Swarm 集群內置的負載均衡,在同一個工作節點上, 多個相同的任務(容器)會由 Swarm 集群的負載均衡來命中。