乐趣区

使用Portainer的Agent模式管理DockerSwarm集群

一、背景与环境

在一个四节点规模的 docker swarm 集群上,应用 Portainer 的 Agent 模式进行集群治理。

  1. docker 被收买后,官网曾经放弃 docker swarm。。。但这里因为是小规模集群,应用 K8S 得失相当,而 K3S/MicroK8S 等轻量级工具呈现工夫不长,尚无成熟落地案例。因而这里仍然应用 docker swarm 作为 docker 集群管理工具。
  2. Portainer 是一个 docker 集群治理 UI 工具,有 CE 版和商业版。其中 CE 版本曾经足够应用,这里应用的是 CE 版。

4 个节点的操作系统均为 CentOS7,CentOS7 应用的防火墙是 firewalld,如果是生产环境不能敞开防火墙,则应该布局好各个节点哪些服务和端口容许拜访。例如,每个节点都执行以下配置(默认应用 public 区域):

# 查看容许拜访的服务与端口
firewall-cmd --zone=public --list-services
firewall-cmd --zone=public --list-ports

# 容许 http 与 https 拜访
firewall-cmd --permanent --zone=public --add-service=http 
firewall-cmd --permanent --zone=public --add-service=https 
firewall-cmd --reload 
firewall-cmd --zone=public --list-services

# 容许拜访的端口 
firewall-cmd --zone=public --add-port=2375/tcp --permanent 
firewall-cmd --zone=public --add-port=2377/tcp --permanent 
firewall-cmd --zone=public --add-port=9001/tcp --permanent 
firewall-cmd --reload 
firewall-cmd --zone=public --list-ports

http/https 用于一些 web 服务的拜访,2375 是各个节点 docker API 的近程拜访端口,2377 是 swarm 实现负载平衡须要各个节点裸露和监听的端口,9001 是各个节点的 Portainer-Agent 的拜访端口。

二、装置 Portainer

本文并不具体讲述如何搭建 docker swarm 集群,只是在后续章节介绍一下局部注意事项。

在曾经搭建好 docker swarm 集群之后(例如这里在四个节点上搭建了 docker swarm 集群,两个 manager 节点,两个 worker 节点),执行以下操作。

2.1 装置 Portainer:

抉择一个 manager 节点,例如 manager01,装置 portainer:

docker network create \
 --driver overlay \
 --attachable \
 --subnet 10.12.0.0/24 \
 portainer_agent_network

docker run -d -p 9000:9000 --name portainer \
 --network portainer_agent_network \
 --restart always \
 -v /var/run/docker.sock:/var/run/docker.sock \
 -v /docker/data/portainer:/data portainer/portainer
  1. 为何要先创立一个 overlay 网络?是为了放弃后续创立的全局服务 portainer_agent 与 Portainer 容器位于一个网络内,便于互相通信。
  2. 为何要手动创立网络?为了手动指定网段,避免主动创立时与理论网段抵触。

增加防火墙规定,容许拜访 9000 端口

firewall-cmd --zone=public --add-port=9000/tcp --permanent
firewall-cmd --reload
firewall-cmd --zone=public --query-port=9000/tcp

因为 Portainer 只在一个 manager 节点上运行,因而只须要在该节点增加该防火墙配置即可。
另外,Portainer 没有必要高可用,它只是集群运维治理应用,且数据曾经挂到宿主机的 /docker/data/portainer 目录,且指定了重启策略。

从客户端浏览器拜访:

http://<manager01 的 Host 或 IP>:9000/

首次拜访时创立管理员用户,而后停在这里,期待接下来的 portainer_agent 服务启动后再持续操作。

2.2 应用 Agent 模式治理 DockerSwarm 集群

在 swarm 集群上创立 portainer_agent 服务:

docker service create \
    --name portainer_agent \
    --network portainer_agent_network \
    --mode global \
    --constraint 'node.platform.os == linux' \
    --mount type=bind,src=//var/run/docker.sock,dst=/var/run/docker.sock \
    --mount type=bind,src=//var/lib/docker/volumes,dst=/var/lib/docker/volumes \
    portainer/agent

mode 指定为global,即,在 swarm 集群的所有 avtive 节点上尝试启动对应的 docker 容器;constraint 约束条件指定为node.platform.os == linux,即,只在 linux 节点上启动。

通过 manager 节点上执行 docker service ls,以及各个节点上执行docker ps 查看服务及容器启动胜利后,登入 Portainer 治理 UI,增加 Agent 作为 Swarm 集群的对立 EndPoint:

Name 依据须要命名,Agent URL 填写 tasks.portainer_agent:9001 即可。该值由之前创立的服务 portainer_agent 决定。9001是 portainer_agent 的默认拜访端口。

三、docker swarm 集群搭建

对于如何搭建 docker swarm 集群,这里不做具体介绍,只提几个留神点。

  • 依据须要布局节点角色,比方这里 4 个节点,配置雷同,布局了两个 manager 和两个 worker;
  • 各节点 docker 装置实现后,倡议批改一下仓库镜像,默认网段,以及容许通过 2375 端口拜访 docker API。
  • 在初始化 swarm 之前,倡议手动在各个节点创立虚构网络docker_gwbridge,并指定一个不与理论网段抵触的网段:
docker network create --subnet 10.11.0.0/24 \
 --opt com.docker.network.bridge.name=docker_gwbridge \
 --opt com.docker.network.bridge.enable_icc=false \
 --opt com.docker.network.bridge.enable_ip_masquerade=true \
 docker_gwbridge

能够应用 route 命令查看本地路由表,确认理论网段有哪些。

  • 初始化 swarm 以及其余节点退出 swarm 集群时,务必指定各自的 --advertise-addr--listen-addr参数,防止当前产生负载平衡生效的问题。
退出移动版