实验环境
docker version : 20.10
操作系统: centos7.9
机器
192.168.0.51 manager
192.168.0.52 worker
192.168.0.53 worker
192.168.0.54 worker
# 一般建议节点数量为奇数,防止出现阻塞情况
故障演示:
3个管理节点的失效配额为(3-1)/2=1,若失效数量若小于或等于配额,则swarm自动执行选举与切换;若超出配额范围,则须手动强制重建群集(docker swarm init-f/--force)。
出现故障时,需要查看群集、节点、服务、任务等信息,结合命令行输出与日志对故障原因进行定位。
Centos 7下的docker日志文件默认为/var/log/message,管理节点的/var/lib/docker/swarm/目录用于保存群集状态与管理日志,可以按备份目录-导入目录-
重建群集的步骤执行故障恢复。docker官方建议备份与导入操作在docker主进程停用后执行。
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
1.Swarm集群的管理和编排是使用嵌入docker引擎的swarmkit,可以在docker初始化时启动swarm模式或者加入已存在的swarm
2.Node一个节点是docker引擎集群的一个实例。
您还可以将其视为Docker节点。
您可以在单个物理计算机或云服务器上运行一个或多个节点,但生产群集部署通常包括分布在多个物理和云计算机上的节点
要将应用程序部署到swarm,请将服务定义提交给管理器节点。管理器节点将称为任务的工作单元分派给工作节点。
Manager节点还执行维护所需群集状态所需的编排和集群管理功能,Manager节点选择单个领导者来执行但您可以将它们配置为仅运行管理器任务并且是仅管理器节点。
编排任务。
工作节点接收并执行从管理器节点分派的任务。默认情况下,管理器节点还将服务作为工作节点运行,代理程序在每个工作程序节点上运行,并报告分配给它的任务。
工作节点向管理器节点通知其分配的任务的当前状态,以便管理器可以维持每个工作者的期望状态。
3.Service一个服务是任务的定义,管理机或工作节点上执行。它是群体系统的中心结构,是用户与群体交互的主要根源。创建服务时,你需要指定要使用的容器镜像。
4.Task任务是在docekr容器中执行的命令,Manager节点根据指定数量的任务副本分配任务给worker节点目
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
创建swarm集群
创建集群的manager
查看集群成员节点
service的管理
创建服务器
访问一下服务
扩充服务
模拟宕机
升降级
离开集群
再返回集群
不分配节点
滚动更新
# 我把主节点换回了51 因为52没有武功
docker service create --replicas 3 --name redis --update-delay 10s redis:3.0.6
# 更新
docker service update --image redis:3.0.7 redis
# 定时更新
docker service create --name my_web --replicas 10 --update-delay 10s --update-parallelism 2 --update-failure-action continue nginx:1.12
# 创建服务是设置回滚
docker service create --name my_web --replicas 10 --rollback-parallelism 2 --rollback-moinitor 20s --rollback-max-failure-ratio .2 nginx:1.12
#手动回滚
docker service update --rollback my_web
就会自动回到旧的版本了 也就是我们上面说的下旧上新
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
重建集群
强制负载均衡
部署swarm的集群监控
访问页面
数据管理
创建volume实例
挂载
读写挂载
nfs
启动服务
stack
docker stack 的介绍
单机模式下,我们可以使用Docker Compose来编排多个服务,而DockerSwarm只能实现对单个服务的简单
部署。本文的主角Docker Stack,通
过Docker Stack我们只需对已有的docker-compose.yml
配置文件稍加改造就可以完成Docker集群环境下的多服务编排。
Docker stack会忽略了"构建”指令,无法使用stack命令构建新镜像,它是需要镜像是预先已经构建好的。
所以docker-compose更适合于开发场景;Docker Compose是一个Python项目,在内部,
它使用Docker API规范来操作容器。一所以需要安装Docker-compose,
以便与Docker一起在您的计算机上使用;Docker Stack功能包含在Docker引擎中。
你不需要安装额外的包来使用它,docker stacks只是swarm mode的一部分。
Docker stack不支持基于第2版写的docker-compose.yml,也就是version版本至少为3。
然而Docker Compose对版本为2和3的 文件仍然可以处理;
docker stack把docker compose的所有工作都做完了,
因此docker stack将占主导地位同时,对于大多数用户来说,
切换到使用docker stack既不困难,也不需要太多的开销。
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
命令
部署服务
vim docker-compose.yaml
-----
version: "3"
services:
redis:
image: redis:alpine
ports:
- "6379"
networks:
- frontend
deploy:
replicas: 2
update_config:
parallelism: 2
delay: 10s
restart_policy:
condition: on-failure
db:
image: postgres:9.4
environment:
POSTGRES_USER: "postgres"
POSTGRES_PASSWORD: "postgres"
POSTGRES_HOST_AUTH_METHOD: "trust"
volumes:
- db-data:/var/lib/postgresql/data
networks:
- backend
deploy:
placement:
constraints: [node.role == manager]
vote:
image: dockersamples/examplevotingapp_vote:before
ports:
- 5000:80
networks:
- frontend
depends_on:
- redis
deploy:
replicas: 2
update_config:
parallelism: 2
restart_policy:
condition: on-failure
result:
image: dockersamples/examplevotingapp_result:before
ports:
- 5001:80
networks:
- backend
depends_on:
- db
deploy:
replicas: 1
update_config:
parallelism: 2
delay: 10s
restart_policy:
condition: on-failure
worker:
image: dockersamples/examplevotingapp_worker
networks:
- frontend
docker stack deploy example --compose-file=docker-compose.yaml
docker stack services example
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.
- 39.
- 40.
- 41.
- 42.
- 43.
- 44.
- 45.
- 46.
- 47.
- 48.
- 49.
- 50.
- 51.
- 52.
- 53.
- 54.
- 55.
- 56.
- 57.
- 58.
- 59.
- 60.
- 61.
- 62.
- 63.
- 64.
- 65.
- 66.
- 67.
- 68.
- 69.
- 70.
- 71.