搭建Docker Swarm集群服务,通过Portainer进行集中式管理

2020-04-21 更新:

更一下群晖Swarm的配置,unraid怎么搞的有木有大佬指教下,实在搜不到了。

参考链接:

portainer安装:

docker run \
-d \
--restart always \
--name portainer \
-p 9010:9000 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /volume1/docker/portainer:/data \
portainer/portainer

注意映射文件夹位置和端口,群晖docker的json配置位置:

/var/packages/Docker/etc/dockerd.json

修改原有配置,10.16.100.150为我的dsm的IP:

{
   "data-root" : "/var/packages/Docker/target/docker",
   "log-driver" : "db",
   "hosts" : [ "tcp://10.16.100.150:2375","unix:///var/run/docker.sock"],
   "registry-mirrors" : [ "https://xxxxxxx.mirror.aliyuncs.com" ]
}


保存退出,

synoservicecfg --list  #查看群晖服务

可以看到群晖的docker服务包名是pkgctl-Docker,,重启群晖的docker服务:

synoservice --restart pkgctl-Docker

加入我自己的管理节点:

docker swarm join --token SWMTKN-1-2jli1ua5wodh7d97io9q1jr53o3inrmyljvr1ina3tdofnsca5-tgwcbb4i4krggxo0d37b17nebzi3ohe 10.16.100.157:2377

在管理节点增加群晖的IP和hosts。

群晖Done


以下为原文:

需求

家里小设备多,Docker玩法多样,所以’‘机’'手一个,每个设备上都安装了Portainer来监测管理容器,非常的不方便,狠下心来爬爬大佬们的帖子玩下多主机Docker容器的集群式管理

以下是流水账笔记,请自动忽略所有不准确用词。


参考

主要参考第一篇文章内容,大佬写的非常详细。

材料

安装了Docker服务和Portainer管理面板的(debian、unbuntu、armbian、centos等)linux系统服务器。

操作步骤

用2台安装armbian(Debian系)的N1走一遍参考教程的流程。


基本信息

  • manager node,即管理节点,部署Swarm服务,同时也作为工作节点接入,基本信息:
IP: 10.16.100.157 
hostname: phicomm-n1-armbian
  • worker node为工作节点:
IP: 10.16.100.215

hostname: PhicommN1

N1一般都会直接使用root账户,所以以下命令均是在root用户下操作,如果是非root、提示你无权限的话别忘了在命令加sudo 提权(毕竟是系统级层面上的修改)。

编辑器我用的nano。

Swarm搭建

hosts设置

我没有修改原教程中说到的主机hostname。

  • 修改用于安装管理节点的157机器hosts
nano /etc/hosts

打开编辑界面,在原文件最后增加下面的代码

10.16.100.157    phicomm-n1-armbian
10.16.100.215    PhicommN1

更改后的内容:

127.0.0.1   localhost phicomm-n1-armbian
::1         localhost phicomm-n1-armbian ip6-localhost ip6-loopback
fe00::0     ip6-localnet
ff00::0     ip6-mcastprefix
ff02::1     ip6-allnodes
ff02::2     ip6-allrouters
10.16.100.157    phicomm-n1-armbian
10.16.100.215    PhicommN1

然后CTRL+X,Y,保存退出。

  • 修改工作节点的215机器hosts

操作及内容同上。

配置管理节点2375端口

同样SSH进入157:

nano /lib/systemd/system/docker.service

将ExecStart这行

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

加#注释掉,加上:

ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375

保存退出。

重载系统配置及重启docker服务:

systemctl daemon-reload
systemctl restart docker  #或者使用service docker restart 后者更好一点,毕竟docker通用命令
配置工作节点2375端口

操作同上,注意IP地址

初始化Swarm

运行命令

docker swarm init --advertise-addr 10.16.100.157

输出内容:

root@phicomm-n1-armbian:~# docker swarm init --advertise-addr 10.16.100.157
Swarm initialized: current node (lb55fej7rwxg4p73808vwpa3z) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-2jli1ua5wodh7d97io9q1jr53o3inrmyljvr1ina3tdofnsca5-tgwcbb4i4krggxo0d37b17nebzi3ohe 10.16.100.157:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

原教程描述:

上面命令执行后,该机器自动加入到swarm集群。这个会创建一个集群token,获取全球唯一的 token,作为集群唯一标识。
后续将其他节点加入集群都会用到这个token值。

添加集群节点

在215机器上运行以下命令:

docker swarm join --token SWMTKN-1-2jli1ua5wodh7d97io9q1jr53o3inrmyljvr1ina3tdofnsca5-tgwcbb4i4krggxo0d37b17nebzi3ohe 10.16.100.157:2377

输出:

root@PhicommN1:~# docker swarm join --token SWMTKN-1-2jli1ua5wodh7d97io9q1jr53o3inrmyljvr1ina3tdofnsca5-tgwcbb4i4krggxo0d37b17nebzi3ohe 10.16.100.157:2377
This node joined a swarm as a worker.
root@PhicommN1:~# 

如后续要加入其他更多的节点,添加操作也是执行这个命令.

查看集群节点

在157(管理主机)机器SSH输入:

docker node ls

输出:

root@phicomm-n1-armbian:~# docker node ls
ID                            HOSTNAME             STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
5xqa5lobjvlwv46ofb5ymujd0     PhicommN1            Ready               Active                                  19.03.7
lb55fej7rwxg4p73808vwpa3z *   phicomm-n1-armbian   Ready               Active              Leader              19.03.8

做Leader的感觉棒不?

查看端口状态

最后查看下两个机器上的2375端口是否都已经开启了

管理主机输入

lsof -i:2375

主机输出状态:

root@phicomm-n1-armbian:~# lsof -i:2375
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
dockerd 11591 root    3u  IPv6 339177      0t0  TCP *:2375 (LISTEN)

工作节点机器输入:

lsof -i:2375

输出:

root@PhicommN1:~# lsof -i:2375
COMMAND   PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
dockerd 29218 root    3u  IPv6 1405356      0t0  TCP *:2375 (LISTEN)

Portainer配置

因为我的机器都已经安装完Portainer并且均是选择的Local模式,所以操作和原帖不太一样,副作用未知。

  • 原帖步骤

主机新创建portainer容器之后选择remote模式,具体看原贴的贴图。

  • 我的步骤:

进入管理节点把需要进行集群管理的工作节点portainer服务添加进来:

登入管理节点主机的Portainer的WEB界面;

点击左侧面板菜单,SETTINGS下面的Endpoints选项卡,然后+Add endpoint,选择Docker选项,输入工作节点的相关信息:

Name:好像可以随意、跟hostname并没啥关系?

Endpoint URL: 工作节点的IP+2375

Public IP: 工作节点的IP(可以不用输入)

其他的采用缺省配置就行,然后点击下方的Add endpoint,操作基本结束且教程无坑。

按步骤添加其他的满足条件的设备,当然别忘了在管理主机添加该设备对应的host,同时替换修改被集群节点主机中hosts信息、然后重载重启相关操作,最终效果图:

Swarm高阶操作不会玩、暂时也不会用到,玩法倒是很多,随便来一个链接:

https://blog.csdn.net/weixin_34384557/article/details/92022451

搞完了才发现这个教程对于群晖和unraid是不适用的,其他方式我也没接触,衰!!!

奇葩的需求都是源于蛋疼的折腾

感谢互联网上无私分享的大佬们。

这是最好的时代,这是最坏的时代,
这是智慧的时代,这是愚蠢的时代;
这是信仰的时期,这是怀疑的时期;
这是光明的季节,这是黑暗的季节;
这是希望之春,这是失望之冬;
人们面前有着各样事物,人们面前一无所有;
人们正在直登天堂;人们正在直下地狱。

—狄更斯 《双城记》

这书我没看过。

土豆哥好会玩,受益匪浅
想玩Grafana,土豆哥会玩不,求带

HA有几个帖子啊,我以前学着搞过一下,就没玩了。 :sweat_smile:

好嘛,我把一下贴子