专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

使用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集群的所有active节点上尝试启动对应的docker容器;constraint约束条件指定为 node.platform.os == linux,即,只在linux节点上启动。

通过manager节点上执行docker service ls,以及各个节点上执行docker ps查看服务及容器启动成功后,登入Portainer管理UI,添加Agent作为Swarm集群的统一EndPoint:

30_1.png

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参数,避免以后发生负载均衡失效的问题。

文章永久链接:https://tech.souyunku.com/19564

未经允许不得转载:搜云库技术团队 » 使用Portainer的Agent模式管理DockerSwarm集群

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们