portainer连接swarm集群

安装portainer,比较建议的是,将portainer安装到非应用服务器,这样与应用分隔开来,而且portainer也可以同时管理多个docker节点

安装portainer的过程很简答,可以直接使用docker进行安装。

方式1:命令行运行

docker run -d -p 9000:9000 \
--restart=always -v /var/run/docker.sock:/var/run/docker.sock \
--name prtainer-test portainer/portainer

方式2:通过compose-file来启动。

docker-compose.yml

version: '3'
services:
  portainer:
    image: portainer/portainer
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    ports:
      - 9000:9000
   
#使用命令启动portainer
docker-compose up -d

访问portainer是通过 ip + 端口来访问的 。如 10.99.23.10:9000.

进入portainer先设置用户名密码,接着就可以开始连接docker主机了。

04swarm18

管理docker主机分为三种:

  • 管理本地docker主机
  • 管理远程docker主机
  • 管理swarm集群

1.管理本地主机
以node-1为例
访问http://node-1IP:9000 设置账号密码登录

04swarm19

直接点击Connect 按钮,就可以直接管理本地的Docker容器了

2.管理远程主机
在node-1上管理node-2,首先需要开启node-2的2375端口

# 被管理节点
vi /usr/lib/systemd/system/docker.service
#修改为
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
#重启docker
systemctl daemon-reload
systemctl restart docker

node-1portainer管理界面添加endpoint
04swarm20

3.管理swarm集群
要添加swarm集群管理需要在每个节点安装agent,编写yml文件

portainer-agent.yml

version: '3.2'
services:
  agent:
    image: portainer-agent
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /var/lib/docker/volumes:/var/lib/docker/volumes
    ports:
      - target: 9001
        published: 9001
        protocol: tcp
        mode: host
    networks:
      - portainer_agent
    deploy:
      mode: global
      placement:
        constraints: [node.platform.os == linux]

networks:
  portainer_agent:
    driver: overlay

compose-file中 定义的 deploy.mode = global表示集群中的每个节点都会部署一个服务,placement表示部署的约束条件。

这里需要注意的是确保每个节点都有portainer-agent镜像,或者每个节点都可以连接Harbor(dockerhub)。同时确保每个节点都存在相同的映射,即按照上面的脚本来讲,确保每个节点都有一个 /var/lib/docker/volumes 路径。我刚才启动agent的服务时,发现只在我执行的节点上启动了agent服务,其他节点发现没有启动agent服务,后面发现,其他节点不存在映射的路径,而且并没有portainer-agent镜像,当把这些解决之后,所有的节点都可以使用了。

实在找不到原因时,可以通过命令查找启动失败的原因。

# 查找服务列表
docker service ls
# 查看服务详细信息
docker service ps pa_agent

同时在portainer-agent.yml文件中有两个参数需要注意:

  • port下的mode值为host表示在每一个节点发布端口9001,但是该端口无负载均衡的功能,默认的ingress才有负载均衡功能,可以通过部署一个类似的nginx测试服务来测试,这里附上swarm文档中相关说明port的host模式与ingress模式
  • deploy下的mode值为global表示在每一个节点必须有一个任务启动,新增加的swam节点会自动发现并启动服务,而replicated是只保证总的任务数量,并不会强制要求每一个节点的任务数,所以global模式特别适合部署需要在每一个节点运行的应用,比如监控的agent

确保这些之后,就可以启动portainer-agent了。

# docker swarm Leader节点执行
docker stack deploy -c portainer-agent.yml portainer-agent

启动之后可以看每个节点是否都启动了portainer-agent的服务。

接着在portainer的管理页面配置agent的地址。

04swarm21

这里面的端口号是固定的,ip地址只需填写swarm集群的leader节点的IP地址 (如果填写了非leader节点,即使添加上,也无法获取信息,还会报错)

点击连接,就可以在portainer中管理swarm集群了。

同时点击左侧Swarm菜单会看到当前集群状态和节点列表。

需要注意的是一个 swarm集群只能被一个 portainer 管理,不能被多个portainer管理,如果要更换管理的portainer,则需要先停止portainer-agent 然后再重启,再在新的portainer中配置portainer-agent。

如:原来的 10.0.12.13:9000 管理 A swarm集群。现在想使用10.0.12.14:9000 管理 A swarm集群.

那么首先停止A swarm集群的portainer-agent服务。

# 在集群的Leader节点执行
docker stack rm pa
# 然后重新启动
docker stack deploy -c portainer-agen.yml pa

接着在 10.0.12.14:9000 中配置A swarm集群的地址即可。

04swarm21

此时发现10.0.12.13:9000中已经无法管理A swram集群了

Dashboard中显示集群状态为Down。

portainer中配置了多个swarm集群,如何切换集群呢?

首先点击左侧的Home菜单,然后出现管理的集群列表,选择要管理的集群,接着Home菜单下方就显示了当前管理的集群,同理,当想要切换集群时,也是先要点击Home菜单,选择集群即可。

如果10.0.12.13:9000又需要管理swarm集群了,那么先在10.0.12.14:9000中的Endpoints菜单中删除A swarm集群配置,然后重启A swarm的portainer-agent服务,然后在10.0.12.13:9000中的Endpoints菜单去更新A swarm集群(实际上什么都不需要改,只是点击一个更新按钮),然后点击10.0.12.13:9000的Home菜单(此时集群可能还是显示的时DOWN状态),再点击集群发现已经可以管理了。

最近在初始化集群时(9台节点),发现在部署portainer-agent时,总有3个节点部署处于pending状态,

提示:

 host-mode port already in use on 1 node

但是实际上去节点上看并没有占用9001端口,然后去查找资料,只在github上找到了相关说明,但但是没有解决问题,本来想着portanier-agent没有部署也可以,然后就去直接部署应用了,发现只要时在那3个节点的应用,就无法启动,到那三台节点上去看,发现应用容器一直处于 CREATED 状态,没有办法,将3个节点从集群中摘除,然后重启了3个节点的docker服务,接着再次加入集群,发现一切正常了,protainer-agent也正常了(由于上面protainer-agent.yml使用的是global,因此当新节点加入时,会自动部署)。

最近在部署docker-swarm集群时,由于服务器使用的是麒麟系统,且不能关闭防火墙,遇到了几个问题:

1.docker-swarm service 无法连接外部服务器地址

2.docker-swarm service之间无法互相通信(表现形式:unknownHost , connection timeout)

以上问题都通过开放服务器端口,和重启docker服务解决,

需要注意使用Dokcer Swarm 需要开放服务器的2376、 2377 、 2375 、7946 、 4789 端口

猜你喜欢

转载自blog.csdn.net/kanyun123/article/details/117038098