概述
准备三台服务器来搭建 Swarm 集群,其中一台当做 manager 节点,另外两台当做 worker 节点
本文中的软件环境:
- CentOS Linux release 8.5.2111
- Docker Community
Docker Community 版本 详细信息
Client: Docker Engine - Community
Version: 20.10.12
API version: 1.41
Go version: go1.16.12
Git commit: e91ed57
Built: Mon Dec 13 11:45:22 2021
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.14
API version: 1.41 (minimum version 1.12)
Go version: go1.16.15
Git commit: 87a90dc
Built: Thu Mar 24 01:46:10 2022
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.4.12
GitCommit: 7b11cfaabd73bb80907dd23182b9347b4245eb5d
runc:
Version: 1.0.2
GitCommit: v1.0.2-0-g52b36a2
docker-init:
Version: 0.19.0
GitCommit: de40ad0
t
i
p
:
\color{red}{tip:}
tip: 三台服务器必须都安装 docker
修改主机名
为了便于区分节点,用主机名来标记节点。
hostnamectl --static set-hostname manager
hostnamectl --static set-hostname worker[序号]
t
i
p
:
\color{red}{tip:}
tip: [序号]表示 worker 的编号,结合实际情况编号即可,例如:worker01
配置 host 信息
配置 host 信息,需要在每个节点上操作。
修改“/etc/docker/daemon.json”文件,修改后内容如下:
{
"hosts": ["tcp://0.0.0.0:2375","unix:///var/run/docker.sock"]
}
之后重载配置、重启 docker
systemctl daemon-reload
systemctl restart docker
p
r
o
b
l
e
m
:
\color{red}{problem:}
problem:
Job for docker.service failed because the control process exited with error code.
See "systemctl status docker.service" and "journalctl -xe" for details.
s
o
l
v
e
:
\color{green}{solve:}
solve:
创建集群
在 manager 节点上创建 swarm 集群。
docker swarm init
将 worker 节点加到集群。
docker swarm join-token manager
回显内容如下:
t
i
p
:
\color{red}{tip:}
tip: 回显内容中的 token 信息仅为示例,以实际为准。
To add a manager to this swarm, run the following command:
docker swarm join --token SWMTKN-1-141v8gnj6xx99k2yb60yj5la7meha41054u3cepncpr6847gkz-6o4pyjztas1giv2i0p9dec2v6 192.168.50.228:2377
t
i
p
:
\color{red}{tip:}
tip: 开放端口 2377、2375,或者关闭防火墙,相关命令请到 附录 查看
t
i
p
:
\color{red}{tip:}
tip: 分别在 worker 节点执行上面查询到的命令,即可把 worker 节点加入集群中。
运行和验证
在 manager 节点上执行以下命令,查看集群状态。
docker node ls
系统回显内容如下:
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
ooavmvome2oiuhqvchsfqrnsk * manager Ready Active Leader 20.10.14
kvmv6ezozpbo0nwhg4aoo75s5 worker-1 Ready Active 20.10.14
ndulna73a32bt76jtwhymzuty worker-2 Ready Active 20.10.14
在 manager 节点上执行以下命令,部署服务到集群中。
docker service create --replicas 1 --name helloworld alpine ping docker.com
在 manager 节点上执行以下命令,查看集群中的服务。
docker service ls
系统回显内容如下:
ID NAME MODE REPLICAS IMAGE
1t4kfavubdk4 helloworld replicated 1/1 alpine:latest
Docker Swarm + Portainer 集群可视化管理
docker pull portainer/portainer
docker volume create portainer_data
docker network create --driver overlay --attachable portainer_agent_network
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
docker service create --name portainer --network portainer_agent_network --publish 9000:9000 --replicas=1 --constraint 'node.role==manager' --constraint node.hostname==manager --container-label com.docker.stack.namespace=portainer --mount type=bind,src=//var/run/docker.sock,dst=/var/run/docker.sock --mount type=volume,src=portainer_data,dst=/data portainer/portainer -H unix:///var/run/docker.sock
t
i
p
:
\color{red}{tip:}
tip: 服务移除后,再次创建时,需要删除卷,然后创建服务。
访问服务
访问方式:http://IP:9000 ,首次登录需要注册用户,给用户admin设置密码,如下图:
Swarm 常用命令
docker swarm join-token worker
docker swarm join-token manager
docker swarm join-token --rotate worker
docker swarm join-token -q worker
docker service list
docker node ls
docker swarm init
docker volume create volumeName
docker volume inspect volumeName
docker volume ls
docker volume prune
docker volume rm volumeName
附录
firewall-cmd --state
systemctl stop firewalld
firewall-cmd --zone=public --add-port=2375/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-ports
|