Docker Swarm 管理
案例一概述及前置知识点
概述:
创鑫公司给云计算工程师提出新的要求,可将集群中所有Docker Engine整合进一个虚拟的资源池,通过执行命令与单一的主Swarm进行沟通,而不必分别和DockerEngine沟通。在灵活的调度策略下,IT团队可以更好地管理可用的主机资源,保证应用容器的高效运行
- DockerSwarm是Docker公司2014年出品的基于Docker集群管理调度工具,能够将多台主机构建成一个Docker集群,并结合Overlay网络实现容器调度和互访
- 用户可以通过Swarm API来管理多个主机的Docker
- Swarm集群包含Manager和Worker两类节点,基于Docker Engine可以部署任何类型的工作节点
- 在Swarm集群中部署镜像创建一个服务时,一些大型的应用上下文环境(运行环境)中需要各种服务配合工作,这些服务称之为微服务
- 创建服务时,可以指定要使用的容器镜像以及容器中要运行的命令,同事可以定义以下选项:
- 群集要对外服务的端口
- 在群集中用于服务之间相连的Overlay网络
- 滚动更新策略
- 群集总运行的副本数量、
- Docker Swarm基本特性
- 去中心化设计
- 声明式服务模型
- 协调预期转台与实际状态的一致性
- 多主机网络
- 负载均衡
- 安全策略(使用TLS对数据进行保护)
- 滚动更新
- Docker Swarm架构图
- Docker Swarm提供强大的集群能力,能够使多个Docker Engine组合形成一个group,提供多容器服务
- Swarm使用标准的Docker API
案例一:Docker Swarm群集部署
- 把需要的镜像同步到三个主机
- 初始化一个集群,指定一个节点并生成一个集群
(使用上述docker swarm join 命令那一行语句,在其他的worker节点上执行这个语句,即可将此节点加入到swarm集群当中,并作为一个worker节点)
- 创建完成之后,可以使用docker info 命令来查看当前集群的节点信息
2377:TCP端口,建立集群使用的端口
7946:TCP/UDP,节点之间进行通信的端口
4789:TCP/UDP端口,数据存储使用的端口
也可使用docker node ls 查看节点的信息
Active:能运行容器
pause:当前容器继续执行,新调度过来的容器不接收
drain:(污点)新调度过来的容器不接收,原有的容器调度走,保持自身没有容器运行
- 改变Manager管理节点的状态
- 给节点打标签,将指定的容器运行在指定的节点之上
--label-add:添加标签
group=g2:这是一个完整的标签名,是一个键值对
- 查看指定节点的详细信息
- 在swarm中跑一个服务
- 查看服务创建是否成功
- 给其他worker节点提权
提权过后,他们有一些特点定的权限,但不是实际的Leader
- 给其他集群降权
- 脱离集群。解散集群的命令
若是想节点脱离集群,在worker节点上执行此命令即可
若是想解散该集群,在Manager节点上执行此命令
--force:强制执行
- 创建服务并且指定副本数量
- 查看服务日志
扩容
缩容
删除服务
滚动更新
更新已创建服务的镜像
Docker的四种网络模式:
- bridge
- host
- none
- container
创建网络
创建服务端的时候指定网络
创建数据卷以实现数据共享
一、直接创建数据卷,将创建的数据卷直接在创建服务的时候指定给服务
(这种方式的弊端是,需要到每个节点依次修改数据)
1、先创建数据卷
2、创建的数据卷的位置:/var/lib/docker/volumes/
2、创建服务时直接指定数据卷
3、查看创建的数据卷
二、共享存储(NFS)数据卷
- 先创建一个共享目录(所有的节点都要创建)
- 给每个节点安装NFS,以便实现卷数据的共享
- 在Manager节点,设置配置文件(/etc/exports)
- 修改配置文件里边的内容
- 在Manager节点上开启以下两种服务
- 在worker节点上挂载目录
- 在Manager节点上创建新的服务,并重新指定挂载类型,以及来源共享目录
- 查看创建的结果
- 在Manager节点创建一个测试文件,会发现其他的worker节点会有相同的数据内容
- 在Manager节点创建测试内容
- echo "test" > /var/vhost/www/aa/index.html
- 在worker节点创建测试内容
- echo "test" > /var/share/nginx/html/index.html
- 在Manager节点创建测试内容
经过对比,发现无论在那个节点上创建测试文件,最终都会共享到所有节点上,因为在Manager节点把创建的共享目录已经挂载到其他的worker节点上的目录当中