首頁 Docker教程Docker三劍客之Docker Swarm

Docker三劍客之Docker Swarm

運維派隸屬馬哥教育旗下專業運維社區,是國內成立最早的IT運維技術社區,歡迎關注公眾號:yunweipai
領取學習更多免費Linux云計算、Python、Docker、K8s教程關注公眾號:馬哥linux運維

一、環境

docker安裝:

sudo apt install docker.io

主機分配:

操作系統主機名主機IPdocker版本
debian 12 (bookworm)fs3(管理節點)192.168.1.95v20.10.24
debian 12 (bookworm)fs1(工作節點)192.168.1.91v20.10.24
debian 12 (bookworm)fs0(工作節點)192.168.1.92v20.10.24

開放端口:

2377/tcp:集群管理通信

7946/tcp、7946/udp:集群中各節點之間的通信

4789/udp:overlay網絡使用

二、創建集群

2.1 創建管理節點

在管理節點fs3上創建集群,使用命令如下:

sudo docker swarm init --advertise-addr 192.168.1.95
其中--advertise-addr用于配置一個IP地址,集群中其它節點使用此IP地址與管理節點通信,執行命令后輸出如下:
# 輸出Swarm initialized: current node (vjs13uolge09ts9xpzm3tx09p) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-0jn2zp2301z0gbw4ihtlf476rib4nn5nogfiqoe8kp2r7au8wo-7dow28c4qtrpjjdzg67p6aerj 192.168.1.95:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

 2.2 將工作節點加入集群

分別在fs1和fs0工作節點上執行下列指令:

sudo docker swarm join --token SWMTKN-1-0jn2zp2301z0gbw4ihtlf476rib4nn5nogfiqoe8kp2r7au8wo-7dow28c4qtrpjjdzg67p6aerj 192.168.1.95:2377

如果要加入管理節點,則使用下列指令:

sudo docker swarm join-token manager --token SWMTKN-1-0jn2zp2301z0gbw4ihtlf476rib4nn5nogfiqoe8kp2r7au8wo-7dow28c4qtrpjjdzg67p6aerj 192.168.1.95:2377

 注意:該token有效期為24小時。如果token已過期,則可以使用一下命令重新獲?。?/p>

docker swarm join-token worker

 可使用docker info 查看當前集群的詳細信息

Docker三劍客之Docker Swarm插圖

使用docker node ls 查看當前集群中各節點信息:

Docker三劍客之Docker Swarm插圖1

其中*表示當前位于此節點。

 2.3 集群網絡

當在管理節點使用docker swarm init初始化一個docker集群時,docker默認會創建兩個網絡:

  • overlay驅動的網絡:名稱為ingress,該網絡用于處理集群中各個服務之間的控制與數據傳輸(當創建網絡服務service時,如果沒有指定自定義的overlay網絡,則默認使用ingress網絡)。
  • bridge驅動的網絡:名稱為docker_gwbridge,該網絡用于維護集群中各個節點之間的連接。

可以使用docker network ls查看集群網絡

Docker三劍客之Docker Swarm插圖2

三、集群管理可視化

 集群搭建好之后,我們使用portainer實現docker可視化管理界面。

portainer分兩種部署模式:單機部署和集群部署

3.1 單機部署

我們可以將portainer部署在docker集群的管理節點中。此時,portainer可以通過管理節點的docker進程實現對docker集群的可視化。具體步驟為:

#在管理節點拉去portainer鏡像docker pull portainer/portainer-ce:latest
#啟動portainer容器
docker run \ -p 8000:8000 \ -p 9443:9443 \ -v /var/run/docker.sock:/var/run/docker.sock \ -v portainer_data:/data \ --name my-portainer \ -d \ --privileged=true \ --restart=always \ portainer/portainer-ce:latest
# --privileged=true用于賦予該容器root權限

當然也可以嘗試使用docker-compose編排一個容器。這里不再贅述。

在瀏覽器中輸入https://192.168.1.2:9443,進入portainer環境創建頁面。

3.2 集群部署

  • 在管理節點下載部署文件
curl -L https://downloads.portainer.io/ce2-19/portainer-agent-stack.yml -o portainer-agent-stack.yml
文件內容如下:
version: '3.2'
services: agent: image: portainer/agent:2.19.4 volumes: - /var/run/docker.sock:/var/run/docker.sock - /var/lib/docker/volumes:/var/lib/docker/volumes networks: - agent_network deploy: mode: global placement: constraints: [node.platform.os == linux]
portainer: image: portainer/portainer-ce:2.19.4 command: -H tcp://tasks.agent:9001 --tlsskipverify ports: - "9443:9443" - "9000:9000" - "8000:8000" volumes: - portainer_data:/data networks: - agent_network deploy: mode: replicated replicas: 1 placement: constraints: [node.role == manager]
networks: agent_network: driver: overlay attachable: true
volumes: portainer_data:




此時需要對agent部分增加一個端口掛載配置,否則后面創建環境時會因為連接失敗導致無法創建環境:

version: '3.2'
services: agent: image: portainer/agent:2.19.4 volumes: - /var/run/docker.sock:/var/run/docker.sock - /var/lib/docker/volumes:/var/lib/docker/volumes ports: - "9001:9001" networks: - agent_network deploy: mode: global placement: constraints: [node.platform.os == linux]
portainer: image: portainer/portainer-ce:2.19.4 command: -H tcp://tasks.agent:9001 --tlsskipverify ports: - "9443:9443" - "9000:9000" - "8000:8000" volumes: - portainer_data:/data networks: - agent_network deploy: mode: replicated replicas: 1 placement: constraints: [node.role == manager]
networks: agent_network: driver: overlay attachable: true
volumes: portainer_data:
  •  在管理節點部署portainer集群
docker stack deploy -c portainer-agent-stack.yml portainer
Docker三劍客之Docker Swarm插圖3

可以看到創建了一個網絡和兩個服務器:

  1. portainer_agent_network
  2. portainer_agent
  3. portainer_portainer

?在集群中任意節點查看網絡,可以看到所有節點上都創建了一個overlay驅動的網絡portainer_agent_network。也就是在集群的各個節點創建該網絡portainer_agent_network。

Docker三劍客之Docker Swarm插圖4
  •  在管理節點查看服務

docker service ls

Docker三劍客之Docker Swarm插圖5
  •  在管理節點查看容器
docker ps
Docker三劍客之Docker Swarm插圖6
  • ?在工作節點查看容器
Docker三劍客之Docker Swarm插圖7

?注意:

  與管理節點不同的是,工作簡單值創建了portainer/agent容器,它是由管理節點在集群中創建的副本容器。

  • 在瀏覽器中輸入https://192.168.1.95:9443,進入portainer界面

Docker三劍客之Docker Swarm插圖8

與單機部署模式不同的是,在選擇環境類型時,我們應該選擇集群模式。即,勾選Docker Swarm?選項卡:

Docker三劍客之Docker Swarm插圖9

然后選擇agent方式配置環境連接。當然默認情況,系統默認創建一個portainer集群環境:

Docker三劍客之Docker Swarm插圖10
  • ?進入該環境查看詳細信息

Docker三劍客之Docker Swarm插圖11

  •  進入集群頁面,可以看到我們在管理節點上部署的portainer容器根據服務的副本配置,在工作節點上也建立了相同的portainer容器副本。
Docker三劍客之Docker Swarm插圖12

3.3 portainer密碼重置

查看portainer是否正常遠行:

docker ps

Docker三劍客之Docker Swarm插圖13

停止docker容器:

docker stop 5ca33ade99b4

Docker三劍客之Docker Swarm插圖14

查看portainer容器掛載信息:

docker inspect 5ca33ade99b4

找到容器掛載路徑

Docker三劍客之Docker Swarm插圖15

進入到該路徑下查看內容:

Docker三劍客之Docker Swarm插圖16

 執行下列命令,重置管理員密碼:

docker run --rm -v /var/lib/docker/volumes/portainer_data/_data:/data portainer/helper-reset-password
Docker三劍客之Docker Swarm插圖17

?啟動docker后,使用上圖輸出密碼即可正常登錄portainer管理界面。

Docker三劍客之Docker Swarm插圖18

四、部署容器集群

以創建busybox鏡像容器為例,創建docker容器集群

 4.1 拉去鏡像

在管理節點中使用命令拉拉取鏡像。

docker pull busybox

4.2創建網絡

在管理節點創建一個overlay驅動的網絡。

docker network create -d overlay --attachable busybox_overlay_network

注意:

   在集群環境創建overlay驅動網絡時,一定要帶參數 –attachable,方便集群容器或單機容器與運行在其它節點中的容器建立通信。

4.3 創建服務器

在管理節點中創建服務

docker service create -td --name busybox_service --network busybox_overlay_network --replicas=2 busybox
  • –replicas=2表示需要創建兩個busybox容器的副本。
  • –network busybox_overlay_network表示使用我們在上面創建的網絡。

 4.4 進入portainer查看busybox集群

Docker三劍客之Docker Swarm插圖19

?在容器列表頁面可以看到busybox容器集群??梢钥吹絻蓚€busybox容器分別位于dedian-fs0和debian-fs1節點,IP地址分別為10.0.2.3和10.0.2.4。

Docker三劍客之Docker Swarm插圖20

 4.5 不同節點間容器通信

對應busybox容器集群的情況如下

主機容器IP地址
debian-fs010.0.2.4
debian-fs110.0.2.3

?進入到debian-fs0主機的busybox容器,ping位于debian-fs1主機中的busybox容器,可以ping通,反之相同。

Docker三劍客之Docker Swarm插圖21

 4.6 集群擴展

前面在創建busybox容器集群是,設置其副本數量為2 –replicas=2,現在通過portainer將副本數量修改為3。

Docker三劍客之Docker Swarm插圖22

 五、集群之負載均衡

5.1 無狀態服務負載均衡

以nginx為例,實現無狀態服務負載均衡。

  • 拉取nginx鏡像
docker pull nginx
  • 被nginx服務創建overlay驅動的網絡
docker network create -d overlay --attachable nginx_overlay_network
  • 創建服務
docker service create -td --name nginx_service --network nginx_overlay_network --replicas=3 -p 8080:80 nginx

執行命令后等3分鐘,再進portainer查看,發現nginx服務中三個節點已經處于runing狀態。

Docker三劍客之Docker Swarm插圖23
  • ?查看三臺主機節點的nginx服務默認發布頁面
  •  驗證負載均衡功能
Docker三劍客之Docker Swarm插圖24

分別修改節點中的index.html頁面方便區分來自不同容器的響應。

echo “server 192.168.1.95” > index.html

在物理機上驗證負載均衡功能
Docker三劍客之Docker Swarm插圖25

鏈接:https://www.cnblogs.com/zhongqifeng/p/18108887

(版權歸原作者所有,侵刪)

文末福利:紙質書免費送!

Docker三劍客之Docker Swarm插圖26

本文鏈接:http://www.thecarconnectin.com/45759.html

網友評論comments

發表回復

您的電子郵箱地址不會被公開。

暫無評論

Copyright ? 2012-2022 YUNWEIPAI.COM - 運維派 京ICP備16064699號-6
掃二維碼
掃二維碼
返回頂部
国产曰批视频免费观看完|久久久一本精品99久久精品66直播|色天使色偷偷AV一区二区三区|国产色秀视频在线播放|亚洲欧洲免费三级网站