简单介绍
swarm 集群由
管理节点
(Manager)和工作节点
(Worker)构成。管理节点:主要负责整个集群的管理工作包括集群配置、服务管理等所有跟集群有关的工作。诸如监控集群状态、分发任务至工作节点等操作。
工作节点:主要负责执行运行服务的任务。
官方文档:docker swarm | Docker Documentation
Docker Swarm 是一个容器编排工具,用于管理Docker集群,具有以下特点:
1. 横向扩展和高可用性
Docker Swarm允许在多个节点之间对任务进行分配,从而实现横向扩展以满足更高的容量需求。Swarm还可以自动将容器重新调度到其他节点以确保是高可用性的。
2. 简单易用的命令行工具
Docker Swarm是通过一个命令行工具来操作,可以轻松轻松地创建、管理和部署容器化应用程序。有很少的学习曲线,即使你没有过多的专业技能,也很容易使用。
3. 内置安全性
Swarm内置了安全机制来保护容器和数据。Swarm将自动生成TLS证书,以确保Docker的所有通信都受到保护,从而保护容器不受未经授权的访问。
4. 健康检查
Swarm还可以进行健康检查,以确保您的应用程序在整个生命周期中一直运行并可用。如果有问题,Swarm将自动停止并重新启动无法正常运行的容器。
5. 服务
Docker Swarm可以将容器组织成一个服务,使它们能够以统一的方式管理和部署。通过创建服务,您可以轻松地扩展和更新应用程序。
这些特征使Docker Swarm更容易扩展、更加高效、更容易管理和更加安全,是一个适合在生产环境中部署容器化应用程序的有效工具。
环境规划
IP地址 | 主机名称 | 节点角色 | 备注说明 |
---|---|---|---|
192.168.200.172 | swarm-manager | manager | 管理节点 |
192.168.200.173 | swarm-worker-1 | worker-1 | 运行节点 |
192.168.200.174 | swarm-worker-2 | worker-2 | 运行节点 |
docker-ce版本:24.0.2
# 二进制安装方式
wget https://download.docker.com/linux/static/stable/x86_64/docker-24.0.2.tgz
tar -zxf docker-24.0.2.tgz
cp docker/* /usr/bin/
# 编辑service文件
cat > /usr/lib/systemd/system/docker.service << EOF
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
asksMax=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
EOF
# 启动服务
systemctl daemon-reload
systemctl enable docker --now
管理节点初始化
#advertise-addr 来指定其他节点连接m0时的地址
#来指定其他节点连接m0时的地址 来指定其他节点连接m0时的地址
#来指定其他节点连接m0时的地址
1.初始化
docker swarm init --advertise-addr 192.168.200.172:2377 --listen-addr 192.168.200.172:2377
Swarm initialized: current node (wizx5rvc3k3lhgj2gfv64w820) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-5as8zdan6v48td09riq0ja0o2j0m3fxvt4evteih544u8ifqxo-f3qulms23277siuioj80k8hbg 192.168.200.172:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
2.查看节点信息
docker node ls
3.查看网络信息 docker-swarm 初始化时会创建一个类型为overlay的网络
docker network ls
4.查看docker信息
docker info
节点管理
节点的添加、删除、权限提升和降低
1. 添加节点
docker swarm join --token SWMTKN-1-5as8zdan6v48td09riq0ja0o2j0m3fxvt4evteih544u8ifqxo-f3qulms23277siuioj80k8hbg 192.168.200.172:2377
添加manager 节点 --token 会失效 时效为24小时 以后添加节点时 执行 docker swarm join-token 获取最新的token 标记文本
# 添加成为管理节点
docker swarm join-token manager
# 添加成为worker节点
docker swarm join-token worker
2. 节点删除
# 脱离集群
#想要那个节点脱离集群就在那个节点下执行以下命令
docker swarm leave
# 删除已经脱离集群的work-02节点
# p s:如果是多个manager节点中的其中一个节点需要先将节点降为worker节点才能删除
docker node rm work-02
# manager节点只能强制退出 manager退出后意味着整个swarm不复存在。
docker swarm leave --force
3.节点权限提升和降低
# 提升:将worker节点提升为manager节点,在manager节点执行如下命令:
docker node promote work-01
docker node ls
# 降低:将manager节点降低为worker节点,在manager节点执行如下命令:
docker node demote work-02
docker node ls
---------------------------------------------------------
# worker 变为manager
docker node update --role manager docker-n2
# manager 变为worker
docker node update --role worker docker-m3
图形界面
创建容器
# 1.启动方式1
docker run -itd --name visualizer -p 8099:8080 -e HOST=192.168.200.172 -e PORT=8080 -v /var/run/docker.sock:/var/run/docker.sock dockersamples/visualizer:latest
# 2.启动方式2
#或者使用以下命令 可以通过集群中所有ip+port进行访问
docker service create \
--name=viz \
--publish=8080:8080/tcp \
--constraint=node.role==manager \
--mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \
dockersamples/visualizer
# 3. portainer-ce
docker run -d -p 9000:9000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer-ce
以上使用了两种不同的图形界面工具来查看
高可用集群说明
为了利用 swarm 模式的容错功能,可以根据组织的高可用性要求实现
奇数个节点
。 当有多个管理中心时,可以从一个管理中心节点的故障中恢复,而无需停机。
- 三个管理器群可以容忍最多损失一个管理器。
- 五个管理器群最多可以同时丢失两个管理器节点。
- 七个管理器群最多可以同时丢失三个管理器节点。
- 九个管理器群最多可以同时丢失四个管理器节点。
- Docker 建议一个集群最多有七个管理器节点。 (添加更多管理器并不意味着可伸缩性或性能的提高。一般来说,情况恰恰相反。)
部署应用
以nginx为例
1. 部署nginx服务
docker run 容器启动,不具有扩缩容器。
docker service 服务启动,具有扩缩容,滚动更新
# 部署应用
docker service create -p 8888:80 --name nginx nginx
# 查看服务
docker service ls
# 查看容器
docker service ps nginx
# 查看详细信息
docker service inspect nginx
2. 动态扩容nginx副本
docker service update --replicas 2 nginx
3. 自定义网络方式部署nginx
任意一个节点都可以访问
#在manager节点中创建overlay网络:
docker network create -d overlay wfnet
#删除docker网络
docker network rm NETWORK_ID
#查看docker 某网路
docker network inspect NETWORK_ID/name
#创建3个nginx:alpines容器的集群:
docker service create --name wf-register --network wfnet -p 90:80 --replicas 3 wf-register # (镜像名)
#在manager节点使用docker service ls 命令查看服务情况,worker节点无法查看:
docker service ls
#在manager或者worker节点都可以执行docker ps命令查看本虚拟机容器情况:
docker ps
#manager节点只用于管理集群,不希望部署服务。
docker node update --availability drain manager-01
#使用docker service scale wf-register=3命令将服务缩减/扩容为2个容器:
docker service scale wf-register=2
# 更新暴露的端口
docker service update --publish-add 8090:80 nginx
# 删除服务
docker service rm wf-register
# 一键部署nacos 示例
# 指定集群环境
docker service create \
--name wf-register \
--network wfnet \
-p 8848:8848 \
-p 9848:9848 \
-p 9555:9555 \
-p 9849:9849 \
--host=wf-mysql:192.168.200.173 \
-e MODE=cluster \
-e NACOS_SERVERS="192.168.200.172:8848 192.168.200.173:8848 192.168.200.174:8848" \
-e JVM_XMX=2g \
-e JVM_XMN=2g \
-e JVM_MS=128m \
-e JVM_MMS=320m \
--replicas 3 192.168.200.173:5000/wf-register
stack命令
1. docker-compose.yml
#stack 最低支持版本为 3
version: "3"
services:
nginx-web: # 服务名称
image: nginx:1.19.3-alpine # 镜像名称
container_name: nginx # 容器名称
networks:
- nginx-net #指定网络
restart: always #重启策略
ports:
- 81:80 #挂载端口
deploy:
replicas: 5 #生成实例数量
networks:
nginx-net: #需要创建的网络名称
driver: overlay #指定网络类型
2.启动nginx
#在manager节点中创建docker-compose.yml文件。执行如下命令:
docker stack deploy nginx-stack --compose-file=docker-compose.yml
或者是
docker stack deploy nginx-stack -c docker-compose.yml
#查看stack服务运行情况。执行如下命令:
docker stack services nginx-stack
#查看5个容器运行在哪个节点中。执行如下命令:
docker service ls #查看到NAME中的服务名为:nginx-stack_nginx-web
docker service ps nginx-stack_nginx-web
常用命令
docker swarm init 初始化一个 swarm 群集
docker swarm join 加入群集作为节点或管理器
docker swarm join-token 管理用于加入群集的令牌
docker swarm leave 离开 swarm 群集
docker swarm unlock 解锁 swarm 群集
docker swarm unlock-key 管理解锁钥匙
docker swarm update 更新 swarm 群集
docker node demote 从 swarm 群集管理器中降级一个或多个节点
docker node inspect 显示一个或多个节点的详细信息
docker node ls 列出 swarm 群集中的节点
docker node promote 将一个或多个节点推入到群集管理器中
docker node ps 列出在一个或多个节点上运行的任务,默认为当前节点
docker node rm 从 swarm 群集删除一个或多个节点
docker node update 更新一个节点
docker service create 创建服务
docker service inspect 显示一个或多个服务的详细信息
docker service logs 获取服务的日志
docker service ls 列出服务
docker service rm 删除一个或多个服务
docker service scale 设置服务的实例数量
docker service update 更新服务
docker service rollback 恢复服务至update之前的配置
docker stack deploy 部署新的堆栈或更新现有堆栈 docker stack ls 列出现有堆栈 docker stack ps 列出堆栈中的任务 docker stack rm 删除一个或多个堆栈 docker stack services 列出堆栈中的服务