在上一篇文章中,我們部署了Shipyard來管理docker集群,總體比較簡單,而且Shipyard界面風格很簡約,還是比較喜歡的,但是正如提出的node節點無法顯示bug,以及該項目早已停止維護,讓我不得不在另尋可靠的工具。搜索發現,Portainer是一個輕量級的管理工具,很符合的要求。
首先,我們還是要安裝docker,這一步不再贅述。然后按以下步驟安裝Portainer,非常簡單。
主節點
安裝swarm
docker pull swarm
# 創建集群
docker swarm init --advertise-addr <MANAGER-IP>
這一步完成時顯示如下:
它顯示了加入工作節點的辦法。到這里,主節點就配置完成,它會默認加入本地節點。
部署Portainer
sudo docker service create \
--name portainer \
--publish 9000:9000 \
--constraint 'node.role == manager' \
--mount type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \
portainer/portainer \
-H unix:///var/run/docker.sock
工作節點
工作節點就按照上一步中給出的辦法,加入新節點:
sudo docker swarm join --token SWMTKN-1-4zzd3zwswlix4hmxf68byzf3bds5sed2qtqgm1uao9g48tge61-9hu7w2cle8ic55ntnmqlzwuoi 192.168.56.103:2377
PS:注意,加入新的manager節點和worker節點都是相同的命令,但是token不一樣。可以通過命令查詢token:
docker swarm join-token worker/manager
如果想舊令牌無效並生成新令牌:
docker swarm join-token --rotate
這時在主節點上就可以看到各個節點的信息:
WEB訪問
默認對外曝露9000端口,因此你只需訪問http://<MANAGER-IP>:9000
就能夠訪問web端頁面。第一次訪問需要你創建用戶和密碼。
總體看,配置非常簡單,而且占用的資源非常少。
其實按照創建服務的方法來部署Portainer會存在一個問題就是,它每次重啟都會重新掛載一個臨時目錄,導致需要重復配置賬號。為了解決這個問題,也為了能夠同時監控多個集群,我們換一種方式。
首先需要曝露docker的2375端口:
# 備份
sudo cp /lib/systemd/system/docker.service /lib/systemd/system/docker.service.bak
然后編輯/lib/systemd/system/docker.service
:
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --containerd=/run/containerd/containerd.sock
然后重啟docker:
systemctl daemon-reload
systemctl restart docker
然后創建一個非臨時的volum給Portainer使用:
sudo docker volume create portainer_data
然后采用普通容器的方式部署Portainer:
sudo docker run -d -p 9000:9000 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
這樣就ok了。
登錄后,選擇remote,里面Endpoint URL
設為你想要監控的swarm所在主機的ip:2375
即可連接,並且在左側菜單的Endpoints
中可以繼續添加,從而達到一個控制台管理多個集群的目的。