一、背景与环境
在一个四节点规模的docker swarm集群上,应用Portainer的Agent模式进行集群治理。
- docker被收买后,官网曾经放弃docker swarm。。。但这里因为是小规模集群,应用K8S得失相当,而K3S/MicroK8S等轻量级工具呈现工夫不长,尚无成熟落地案例。因而这里仍然应用docker swarm作为docker集群管理工具。
- 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
- 为何要先创立一个overlay网络?是为了放弃后续创立的全局服务
portainer_agent
与Portainer容器位于一个网络内,便于互相通信。- 为何要手动创立网络?为了手动指定网段,避免主动创立时与理论网段抵触。
增加防火墙规定,容许拜访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
参数,防止当前产生负载平衡生效的问题。
发表回复