Docker Swarm管理

Docker Swarm管理

本章资源请访问:
https://download.csdn.net/download/weixin_54373617/18740064

技能目标:

  • 了解 Docker Swarm 基本特性

  • 理解 Docker Swarm 基本架构

  • 掌握 Docker Swarm 集群部署

  • 掌握 Docker Swarm 节点管理

  • 掌握 Docker Swarm 服务管理

容器编排部署工具除 Google 推出的 Kubernetes 之外,还有 Docker 发布的 Swarm 与Mesos 推出的 Marathon。本章将从基本概念、工作原理与安装部署及管理等方面介绍Docker 官方推出的 Docker Swarm。


案例一 Docker Swarm 群集部署

Docker 自诞生以来,其容器特性以及镜像特性给 Dev(b编程)Ops(运维) 爱好者带来诸多方便。然而在很长一段时间内,Docker 只能在单机上运行,其跨主机部署、运行与管理能力颇受外界诟病。跨主机能力薄弱,导致 Docker 容器与主机的形成高度耦合,降低了 Docker 容器的灵活性,难以实现容器的迁移、分组等功能。

案例概述

在这里插入图片描述


案例前置知识点

Docker Swarm 概述

Docker Swarm 是 Docker 社区提供的基于 Docker 的集群管理调度工具,能够将多台主机构建成一个 Docker 集群,用户通过 API 来管理多个主机上的 Docker,并结合 Overlay 网络实现容器的调度与相互访问。
在这里插入图片描述
Docker Swarm 默认对外提供两种 API。

  • 标准的 Docker API:包括 Docker Client、Dokku、Compose、DockerUI、Jenkins 等, 它们可以通过 Swarm 工具与 Docker 集群进行通信;
  • 集群管理 API:用于集群的管理。

在这里插入图片描述


基本特性

Docker 集群管理和编排的特性是通过 SwarmKit 进行构建的, 其中 Swarm 模式是Docker 内置支持的一种默认实现。Docker 1.12 以及更新的版本,都支持 Swarm 模式。用户可以基于 Docker 构建 Swarm 集群,然后就可以将应用服务(Application Service)部署到 Swarm 集群中。

在这里插入图片描述

  • 集群管理集成进 Docker Engin(引擎):使用内置的集群管理功能,可以直接通过 Docker CLI(命令行) 命令来创建 Swarm 集群,并部署应用服务,而不需要其它外部软件来创建和管理Swarm 集群。
  • 去中心化设计: Swarm 集群中包含管理节点(Manager)和工作节点(Worker)两类, 可以直接基于 Docker Engine 来部署任何类型的节点。在 Swarm 集群运行期间,可以对其作出任何改变,实现对集群的扩容和缩容等,如添加与删除节点。而做这些操作时不需要暂停或重启当前的 Swarm 集群服务。
  • 声明式服务模型:在实现的应用栈中,Docker Engine 使用了一种声明的方式,可以定义各种所期望的服务状态。
  • 缩放:对于每个服务,可以声明要运行的任务数。向上或向下扩展时,Swarm 集群会通过添加或删除任务来自动调整以维持所需的状态。
  • 协调预期状态与实际状态的一致性:管理节点会不断地监控并协调集群的状态,使得Swarm 集群的预期状态和实际状态保持一致。例如启动一个应用服务,指定服务副本为 10,则会启动 10 个 Docker 容器去运行。如果某个工作节点上面运行的 2 个 Docker 容器挂掉了,管理节点会在 Swarm 集群中其它可用的工作节点上创建 2 个服务副本, 使得实际运行的 Docker 容器数保持与预期的 10 个一致。
  • 多主机网络:Swarm 集群支持多主机网络,可以为服务指定覆盖网络。管理节点在初始化或更新应用程序时自动为覆盖网络上的容器分配地址。
  • 服务发现:管理节点会给 Swarm 集群中每一个服务分配一个唯一的 DNS 名称,对运行中的 Docker 容器进行负载均衡。可以通过 Swarm 内置的 DNS 服务器,查询 Swarm 集群中运行的 Docker 容器状态。
  • 负载均衡:在 Swarm 集群中,可以指定如何在各个 Node 之间分发服务容器(Service Container),实现负载均衡。如果想要使用 Swarm 集群外部的负载均衡器,可以将服务容器的端口暴露到外部。
  • 默认安全:Swarm 集群中的每个节点都强制执行 TLS 相互身份验证和加密,以保护自身与所有其他节点之间的通信。用户可以选择使用自签名根证书或自定义根 CA 的证书。
  • 滚动更新:对于服务需要更新的场景,可以在多个节点上进行增量部署更新,在 Swarm 管理节点使用 Docker CLI 设置一个 delay(延迟)时间间隔,实现多个服务在多个节点上依次进行部署,这样可以非常灵活地控制。如果有一个服务更新失败,则暂停后面 的更新操作,重新回滚到更新之前的版本。

关键概念

下面是 Docker Swarm 中主要的关键概念。

节点
每个参与到 Swarm 集群中的 Docker Engine 都称之为一个节点。在单个物理计算机或云服务器上运行一个或多个节点,但是生产环境下的集群部署通常包括分布在多个物理和 云机器上的 Docker 节点。集群中节点主要分为管理节点与工作节点。

若要将应用程序部署到集群中,则需要将服务定义提交给管理节点。管理节点将被称为 任务的工作单元分派给工作节点。为了维持 Swarm 集群的目标状态,管理节点还将承担编排和集群管理的功能。一旦存在多个管理节点时,会选出一个领导来进行任务编排。

工作节点用于接收并执行来自管理节点分发的任务。默认情况下,管理节点也是工作节 点,也可以把它配置成只充当管理节点的角色。工作节点将所负责任务的当前状态通知给管 理节点,以便管理节点可以维护每个工作节点的期望状态。

服务与任务
服务定义了需要在工作节点上执行的任务。它是 Swarm 系统的中心结构,也是用户和 Swarm 交互的主要根源。

创建服务时,可以指定要使用的容器镜像以及在运行容器中执行的命令。

在复制服务模型中,Swarm 管理器根据所需状态中设置的比例在节点之间分配特定数量的副本任务。

任务是 Swarm 集群中最小的调度单位,每个任务都包含一个容器和需要在容器中执行的指令。管理器根据服务中定义的副本数量将任务分配给工作节点。一旦某个任务被分配 到某个节点,就不能再移动到其他节点。它只能在分配的节点上运行或者失败。

负载均衡
集群管理器使用负载均衡入口来公开对外提供的服务。集群管理器可以自动为
PublishedPort(对外发布的端口)分配服务,也可以为服务配置 PublishedPort。部署服务时可以指定任何未使用的端口为服务端口;如果部署服务时未指定端口,Swarm 管理器会为服务自动分配 30000-32767 范围内的端口。

外部组件(例如云负载均衡器)可以访问集群中任何节点的 PublishedPort 上的服务, 无论该节点当前是否正在运行该服务的任务。集群中的所有节点都将入口连接到正在运行的任务实例。

Swarm 模式有一个内部 DNS 组件,可以自动为 Swarm 中的每个服务分配一个 DNS条目。集群管理器使用内部负载均衡来根据服务的 DNS 名称在集群内的服务之间分发请求。

工作原理

在 Swarm 集群中部署镜像创建一个服务时。在一些大的应用上下文环境中需要各种服务配合工作,这样的服务通常称之为微服务。微服务可能是一个 HTTP 服务器、数据库、或者分布式环境中运行的任何其他可执行的程序。

在创建服务时,可以指定要使用的容器镜像以及容器中要运行的命令。服务还可以定义 下面选项:

  • 集群要对外服务的端口;

  • 在集群中用于服务之间相连的 Overlay 网络;

  • 滚动更新策略;

  • 集群总运行的副本数量。
    在这里插入图片描述

下面从以下几个方面具体介绍服务、任务与容器的具体工作方法。

服务、任务与容器

当服务部署到集群时,Swarm 管理节点会将服务定义作为服务所需状态。然后将服务调度为一个或多个副本任务。这些任务在集群节点上彼此独立运行。

容器是一个独立的进程。在 Swarm 集群中,每个任务都会调用一个容器。一旦容器运行,调度程序认为该任务处于运行状态。如果容器健康监测失败或者终止,那么任务也终止。

任务与调度
任务是集群内调度的原子单位。当创建或者更新服务来声明所需的服务状态时,协调器 通过调度任务来实现所需的状态。

任务是单向的机制,它通过一系列状态单独进行:分配、准备、运行等操作。如果任务失败,协调器将删除任务与容器,然后根据服

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lxiaoyouyouj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值