在上一篇文章中,我们部署了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
中可以继续添加,从而达到一个控制台管理多个集群的目的。