Docker:Docker集群配置与应用(Docker Swarm)

Docker集群配置与应用

  • 前言
    • 学习目标
  • 1. 建立Docker Swarm集群
    • 1.1 为什么要使用容器集群
    • 1.2 什么是Swarm集群
    • 1.3 Docker Swarm特性
    • 1.4 Swarm节点
    • 1.5 Swarm 集群管理命令
      • Swarm 集群节点管理命令
  • 1.6 Docker Swarm 集群搭建

前言

可以认为Docker Swarm(Go语言开发)将一个Docker主机池变成了一个单独的虚拟机。

学习目标

  • 了解 Docker Swarm,掌握 Swarm 集群建立及节点管理
  • 了解 Swarm 服务,学会在集群中部署和管理服务
  • 了解 Swarm 网络,掌握 overlay 网络的创建和使用
  • 了解 Swarm 高可用性和负载平衡,学会配置外部负载平衡器
  • 熟悉 Docker 栈,会使用它在集群中部署分布式应用程序

之前的学习都是基于单个 Docker 主机的,所有容器都是运行在同一个主机上的。实际生产环境往往会有多个 Docker 主机,涉及跨主机多子网的容器配置管理,复杂性大大提高。Docker Compose 支持多个服务的编排,但不支持跨主机部署,而集群(Cluster)将多个主机作为一个协同工作的有机整体,使其能够像单个系统那样工作,同时支持高可用、负载平衡和并行处理。在集群中部署应用程序时,用户不必关心应用程序具体部署在哪台主机上,只需关心所需的资源,应用程序由集群管理程序进行调度。Docker 从1.12版本开始通过内置 Swarm 模式实现集群管理,实现应用程序自动化部署、可伸缩、高可用和负载平衡。Docker栈能够以Swarn 网络为基础,使多个服务相互关联,并在多台主机上运行它们,便于将不同主机上的容器以服务的形式在集群中一步部署到位,为大规模分布式应用程序的部署和管理提供解决方案。
===>重点是 Swarm 集群的建立和管理,以及应用程序在集群中的部署和管理。

1. 建立Docker Swarm集群

Swarm是 Docker 官方提供的一款集群管理工具,其主要作用是把若干台 Docker 主机抽象为一个整体,并通过一个入口统一管理这些 Docker主机上的各种 Docker 资源。要通过 Docker Swarm 来部署和管理应用程序,首先要建立集群,对集群节点进行配置管理。

我们需要:

  1. 了解 Docker Swarm 的背景知识。
  2. 了解 Swarm 集群及其节点。
  3. 掌握 Swarm 集群的创建方法。
  4. 熟悉 Swarm 节点的管理操作。

1.1 为什么要使用容器集群

单主机的 Docker 引擎和单一的容器镜像只能解决单一服务的打包和测试问题,而要在生产环境中部署企业级应用,就需要容器集群。容器集群的设计目标是在主机集群之间提供一个能够自动化部署、扩容,以及运维的应用容器平台。

在 1.12 版本之前,Docker 在集群管理上依赖第三方解决方案,其中最著名的就是 Kubernetes。Kubernetes 简称 K8s,是 Google 提供的开源的容器编排引擎,用于管理云平台多主机上的容器化应用,支持容器化应用程序的自动化部署、伸缩和管理。Kubernetes 通常结合 Docker 工作,并且整合多个运行 Docker 容器的主机集群,它不仅支持 Docker,而且支持另一种容器技术 Rocket。Kubernetes 采用不同于 Docker 的配置和编排方法,比较复杂,适合大中型集群运行复杂应用程序的环境。

Docker 从 1.12 版本开始引入 Swarm 模式来实现集群管理。Swarm 本意是蜂群,表示动物的群体,Docker 使用这个概念表示由多个 Docker 引擎组成的一个整体,也就是集群。Docker Swarm 是Docker 原生的集群工具,因而无需使用额外的编排软件创建或管理集群。Docker 工具和 Docker API都可以无缝地在 Docker Swarm 上使用,只是使用环境从单机转变为更高级别的集群。Docker Swarm部署更简单,适合规模不大的应用程序环境,尤其适用于简单和快速开发。

用 Docker Swarm 创建集群非常简单,用户不需要额外安装任何软件,也不需要进行任何额外的配置,很适合作为学习和使用容器集群平台的起点,当然也可用于中小规模的 Docker 集群实际部署。

1.2 什么是Swarm集群

一个Swarm 集群包含多个以Swarm 模式运行的 Docker 主机,它们充当管理器(Manager),负责管理成员和代理;或者充当工作者(Worker),负责运行 Swarm 服务。一台 Docker 主机可以是管理器,也可以是工作者,或者同时兼任这两种角色。

Swarm 集群管理的对象主要是服务,而不是独立的容器。服务用于定义要在节点上执行的任务,是整个集群系统的核心结构,也是用户与 Swarm 交互的基本单元,用户在创建服务时可以指定要使用的容器镜像和要在容器中执行的命令。Swarm 服务相对于独立容器的一个关键优势是,无需重启服务就可以修改服务的配置,如要连接的网络和卷。

任务(Task)定义容器和要在容器中运行的命令,它是 Swarm 集群的原子调度单位。管理器节点根据服务规模中设置的副本数量将任务分配给工作者节点。一旦任务被分配给某个节点,就不能转移到另一个节点,只能在所分配的节点上正常运行或运行失败。

当 Docker 以 Swarm 模式运行时,独立容器仍然可以在加入Swarm 集群的 Docker主机上运行。

只有 Swam 管理器能够管理 Swarm 集群,而独立容器可以由任何守护进程启动。Docker 守护进程可以作为管理器或工作者加入Swarm 集群。

与使用 Docker Compose 定义和运行容器编排单主机上的多个服务一样,管理员也可以定义和运行Swarm 服务栈(Service Stack),实现多个节点多个服务的集群部署。

1.3 Docker Swarm特性

Docker目前的版本包括原生的 Swarm 模式,其主要特性列举如下。

  1. 实现与 Docker 引擎集成的集群管理。
  2. 去中心化设计。Swarm 节点的角色分为管理器和工作者,任一节点的故障都不影响应用程序的使用。
  3. 声明式服务模型。Docker 引擎使用声明式方法在应用栈中定义各种服务所需的状态。
  4. 可伸缩服务。
  5. 状态自动调整。管理器节点持续监视集群状态并调整实际状态与期望状态之间的差异。
  6. 多主机连网。
  7. 服务发现(Service Discovery )。管理器节点为 Swarm 集群中的每个服务分配一个唯一的 DNS 名称,并平衡正在运行的容器的负载。
  8. 默认安全机制。Swarm 集群中的每个节点都强制进行 TLS相互认证和加密,以保护其自身与所有其他节点之间的通信。
  9. 滚动更新。—旦有更新推出,就可以以增量方式将服务更新应用于节点。如果出现任何问题,则可以将任务回滚到以前版本。

1.4 Swarm节点

Swarm 集群架构如图所示,整个集群由一个或多个节点组成。这些节点可以是运行 Docker 引擎的物理机或虚拟机,节点按角色分为管理器节点工作者节点两种类型。
在这里插入图片描述

(1)管理器节点
管理器节点负责下列集群管理任务。

  • 维护集群状态。
  • 调度服务。
  • 提供 Swarm 模式的 HTTP API 端点。

管理器使用 Raft 共识算法,可以维持整个 Swarm 集群及其中运行的所有服务的内部状态一致性。
Raft 要求大多数管理器(也称为法定人数)同意对集群的更新建议,如节点添加或者删除。如果仅用于测试,则一个集群使用单个管理器就可以。在单个管理器的集群中,若管理器发生故障,服务会继续运行,但需要创建一个新的集群以进行恢复。

为充分利用 Swarm 模式的容错功能,Docker 建议用户根据自己的高可用性要求部署奇数个节点。
当存在多个管理器时,如果管理器节点发生故障,不用停机就可以恢复。可以按照下列建议确定管理器节点数量。

  • 3个管理器的 Swarm 集群最多允许一个管理器节点的失效。
  • 5个管理器的 Swarm 集群最多允许两个管理器节点的同时失效。
  • N个管理器的 Swarm 集群最多允许(N-1)/2 个管理器节点的同时失效。
    Docker 建议一个集群最多包含 7 个管理器节点,添加更多的管理器节点并不意味着更强的可扩展
    性或更高的性能,情况往往正好相反。

(2)工作者节点
  工作者节点也是 Docker 引擎的实例,其唯一目的是运行容器。工作者节点不加入 Raft 分布式状态存储,不进行调度决策,也不提供 Swarm 模式的 HTTP API 服务。

  可以创建单个管理器节点的集群,但集群中不能只有工作者节点而没有管理器节点。默认情况下,所有管理器节点同时也是工作者节点

(3)改变节点的角色
  可以将工作者节点升级为管理器节点。例如,要对管理器节点进行离线维护时,可能需要升级工作者节点。当然,也可以将管理器节点降级为工作者节点。

1.5 Swarm 集群管理命令

  • docker swarm ca: 显示和轮转根 CA
  • docker swarm init: 初始化集群
  • docker swarm join: 作为节点加入集群
  • docker swarm join-token: 管理加入集群的令牌
  • docker swarm leave: 脱离集群
  • docker swarm unlock: 解锁集群
  • docker swarm unlock-key: 管理解锁密钥
  • docker swarm update: 更新集群

建立集群必须使用初始化集群命令,基本语法如下。

docker swarm init --advertise-addr [参数]

执行此命令时,--advertse-addr 选项用于将管理器节点的ip地址通告给集群中的其他节点,该地址必须是固定ip地址。默认情况下,Docker Swarm 为全局作用域 overlay 网络分配默认的地址池 10.0.0.0/8,每个网络都将从这个地址池中被依次分配一个子网。要配置自定义默认地址池,可以使用 --default-addr-pool 选项定义,其中子网掩码使用 CIDR 记法。--listen-addr 选项指定用于承载 Swarm 流量的ip和端口,通常与--advertise-addr选项的参数值一致,但是当节点上有多个iP 地址的时候,可用于指定某个具体ip地址。还可以使用--force-new-custer选项强制从当前状态创建新的集群,这个操作会删除当前管理器节点以外的所有管理器节点。

执行 docker swarm init命令会生成两个随机的令牌(Token)作为其他节点加入集群的密钥:一个是工作者令牌,另一个是管理器令牌。当一个节点加入集群时,其角色是工作者还是管理器就取决于传递的是哪个令牌。

建立集群之后,其他主机加入集群需要使用 docker swarm join 命令,其基本语法如下。

docker swarm join [选项] 主机:端口

该命令的主机和端口参数分别指集群创建者的|P 地址和集群管理的通信端口(通常是2377)。该命令最重要的选项是–token,用来传递初始化集群所生成的令牌。

docker swarm update 命令使用新的选项值更新现有的集群,此命令在管理器节点上运行。

集群涉及自动锁定,执行 docker swarm initdocker swarm update 命令时可设置–autolock 选项值为 true 来生成一个加密密钥,以自动锁定管理器。所有管理器存储的私钥和数据都将受到该加密密钥的保护,如果不提供该密钥,将无法访问。密钥通过 docker swarm unlock 命令提供以重新激活管理器。也可以执行 docker swarm update --autolock=false 命令取消集群的锁定。默认情况下没有自动锁定集群。

Swarm 集群节点管理命令

这些命令都只能在管理器节点上运行

  • docker node demote:将一个或多个管理器节点降级为工作者节点。
  • docker node inspect:显示一个或多个节点的详细信息。
  • docker node ls:列出 Swarm 集群中的节点。
  • docker node promote:将一个或多个节点升级为管理器节点。
  • docker node ps:列出在一个或多个节点(默认为当前节点)上运行的任务。
  • docker node rm:从 Swarm 集群中删除一个或多个节点。
  • docker node update:更新节点的选项,如可用性、标签或角色。

1.6 Docker Swarm 集群搭建

// TODO

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/311865.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Powermill各版本安装指南

下载链接 https://pan.baidu.com/s/1CsrYEUQNmDa820RxDV2G6Q?pwd0531 1.鼠标右击【PowerMill2024(64bit)】压缩包(win11及以上系统需先点击“显示更多选项”)【解压到 PowerMill2024(64bit)】。 2.打开解压后的文件夹,双击打开【Setup】文…

CorelDRAW 2024最新版本功能介绍含注册机序列号

始于1989年并不断推陈出新,致力为设计工作者提供更高效的设计工具!CorelDRAW滋养并见证了一代设计师的成长!在最短的时间内交付作品,CorelDRAW的智能高效会让你一见钟情!CorelDRAW 全称“CorelDRAW Graphics Suite“,也…

JUC Lock 锁入门

文章目录 死锁(Deadlock)通过 Visualvm 等工具排查死锁 活锁park & unpark与 wait & notify 的区别park & unpark 实现:点外卖 Lock 对象ReentrantLock 可重入锁可重入lockInterruptibly 方法上锁(可打断)…

语义分割的应用及发展

语义分割(Semantic Segmentation)是一种计算机视觉领域的任务,旨在将一张图像中的每一个像素都分配一个语义标签,即将图像中的每个物体区域进行精确的分类划分。例如,在一张街景图中,语义分割可以将人、车、路、天空等每个像素分别…

十大排序算法归纳

目录 排序算法的分类 插入排序算法模板 选择排序算法模板 冒泡排序算法模板 希尔排序算法模板 快速排序算法模板 归并排序算法模板 堆排序算法模板 基数排序算法模板 计算排序算法模板 桶排序算法模板 排序算法的分类 插入:插入,折半插入&am…

非科班,培训出身,怎么进大厂?

今天分享一下我是怎么进大厂的经历,希望能给大家带来一点点启发! 阿七毕业于上海一所大学的管理学院,在读期间没写过一行 Java 代码。毕业之后二战考研失利。 回过头来看,也很庆幸这次考研失利,因为这个时候对社会一…

linux go环境安装 swag

下载依赖包 go get -u github.com/swaggo/swag编译 移动到下载的go-swagger包目录,一般在$GOPATH/pkg/mod下 查看 GOPATH echo $GOPATHcd /root/GolangProjects/pkg/mod/github.com/swaggo/swagv1.16.2go install ./cmd/swag/不出意外,$GOPATH/bin下 已经有了sw…

基于CMake的大型C++工程组织

此文适合大型C工程,涉及到多个自定义库,多个第三方库,以及还有给第三方用户进行二次开发的需求下,应对这种复杂编译环境下的工程组织方式的一些经验介绍,希望给大型工业软件的开发者一些参考 一个大型工程&#xff0c…

数据结构—树的应用

文章目录 11.树的应用(1).Huffman树#1.加权外部路径长度#2.Huffman算法#3.Huffman编码 (2).二叉搜索树#1.基本定义#2.查找#3.插入结点#4.构建树#5.查找最小值和最大值#6.删除结点#7.一个问题 (3).平衡搜索树#1.满二叉树、完全二叉树和丰满二叉树#2.平衡因子和平衡树#3.左旋与右…

图像中的傅里叶变换及低通与高通滤波

傅里叶变换 高频:在图像中变化剧烈的灰度分量,如边界。 低频:在图像中变化缓慢的灰度分量。 OpenCV中函数为cv2.dft()和cv2.idft(),输入图像要先转换成np.float32格式。得到的结果频率为0的部分会在左上角,为方便处理…

【ROS2】MOMO的鱼香ROS2(二)ROS2入门篇——ROS2初体验

ROS2初体验 引言专业术语认识1 认识ROS21.1 ROS2版本对照表1.2 ROS与ROS2对比1.3 ROS2架构1.3.1 DDS实现层1.3.2 ROS中间件接口(RMW)1.3.3 ROS2客户端库 RCL 2 安装ROS22.1 ROS安装(一键式)2.2 手动安装ROS22.2.1 添加ROS软件源2.…

FPGA-DE2-115-实验二-模块化多功能数字钟

模块化多功能数字钟 1.实验要求2.实现过程多功能数字钟的整体RTL视图2.1 顶层模块clock2.2 按键消抖模块key_filiter2.3 数字钟1s/10ms时钟产生模块clk2.4 时间显示(模式0)与调整模块(模式3)clockdisplay2.5 计时(模式1)模块keeptime2.6 闹钟调整(模式2)模块alarmclock2.7 数码…