Docker Swarm简介

注意事项

Swarm 模式是用于管理 Docker 守护进程集群的一项高级特性。如果你打算将 Swarm 用作生产运行时环境,那就使用 Swarm 模式。如果你不打算使用 Swarm 进行部署,可改用 Docker Compose。如果正在为 Kubernetes 部署进行开发,可以考虑使用 Docker Desktop 中集成的 Kubernetes 功能。

Docker 包含 Swarm(集群) 模式,可用于对称为 “swarm” 的 Docker 引擎集群进行原生管理。使用 Docker 命令行界面(CLI)来创建一个 swarm 集群、向 swarm 集群部署应用服务以及管理 swarm 的行为。Docker Swarm 模式内置于 Docker 引擎中。不要将 Docker Swarm 模式与已不再积极开发的 Docker Classic Swarm 相混淆。

Docker Swarm特性亮点

与 Docker 引擎集成的集群管理

使用 Docker 引擎命令行界面(CLI)创建由 Docker 引擎组成的 swarm 集群,在此集群中可以部署应用服务。无需额外的编排软件来创建或管理 swarm 集群。

去中心化设计

Docker 引擎在运行时处理节点角色的专业化问题,而不是在部署时处理节点角色的区分。使用 Docker 引擎部署两种类型的节点,即管理节点和工作节点。这意味着可以从单个磁盘镜像构建整个 swarm 集群。

去中心化设计是Docker Swarm集群中的一个核心概念。在去中心化的设计中,每个节点都参与管理集群状态,没有单独的“中心”节点。这样做的好处是,如果一个管理节点失效,其它的节点可以接管工作,维护整个集群的服务。

在Docker Swarm集群中,节点被分为管理节点(Manager)和工作节点(Worker)。管理节点负责集群的管理和调度,而工作节点仅执行任务。

声明式服务模型

Docker 引擎采用声明式方法,让能够定义应用栈中各个服务的期望状态。例如,描述一个由带有消息队列服务的 Web 前端服务和数据库后端组成的应用程序。

扩展

对于每个服务,你可以声明要运行的任务数量。当进行扩展或收缩时,swarm 管理器会通过自动添加或删除任务来维持期望状态。

期望状态协调

swarm 管理器节点会持续监控集群状态,并协调实际状态与你所设定的期望状态之间的任何差异。例如,如果设置一个服务运行某个容器的 10 个副本,而承载其中两个副本的工作机器崩溃了,管理器会创建两个新的副本以替换崩溃的副本,并将新副本分配给正在运行且可用的工作节点。

多主机网络

可以为服务指定一个覆盖网络。swarm 管理器在初始化或更新应用程序时会自动为覆盖网络上的容器分配地址。

服务发现

swarm 管理器节点会为 swarm 中的每个服务分配一个唯一的 DNS 名称,并对正在运行的容器进行负载均衡。通过嵌入在 swarm 中的 DNS 服务器查询 swarm 中运行的每个容器。

负载均衡

将服务的端口暴露给外部负载均衡器。在内部,swarm 允许你指定如何在节点之间分配服务容器。

默认安全

swarm 中的每个节点都会强制实施 TLS 双向认证和加密,以确保自身与所有其他节点之间的通信安全。可以选择使用自签名根证书或来自自定义根 CA 的证书。

滚动更新

在推出更新时,对节点逐步应用服务更新。swarm 管理器允许控制向不同节点组部署服务之间的延迟。如果出现问题,可以回滚到服务的先前版本。

Docker Swarm基本概念

什么是集群(swarm)?

Docker Engine 中嵌入的集群管理与编排功能是基于 Swarmkit 构建的。Swarmkit 是一个独立的项目,它实现了 Docker 的编排层,并直接在 Docker 内部使用。

一个集群由多个以集群模式运行的 Docker 主机组成,这些主机充当管理器(用于管理成员关系和任务委派)和工作节点(用于运行集群服务)。给定的 Docker 主机可以是管理器、工作节点,或者同时扮演这两种角色。当你创建一项服务时,要定义它的理想状态 —— 副本数量、可供其使用的网络和存储资源、服务对外暴露的端口等等。Docker 会努力维持这种期望状态。例如,如果一个工作节点不可用,Docker 会将该节点的任务调度到其他节点上。任务是指作为集群服务一部分且正在运行的容器,它由集群管理器管理,这与独立容器不同。

集群服务相对于独立容器的一个主要优势在于,可以修改服务的配置,包括它所连接的网络和卷,而无需手动重启服务。Docker 会更新配置,停止那些配置过时的服务任务,并创建符合期望配置的新任务。

当 Docker 以集群模式运行时,仍然可以在参与集群的任何 Docker 主机上运行独立容器以及集群服务。独立容器和集群服务之间的一个关键区别在于,只有集群管理器才能管理集群,而独立容器可以在任何守护进程上启动。Docker 守护进程可以作为管理器、工作节点或两者兼具的角色参与到集群中。

就像可以使用 Docker Compose 来定义和运行容器一样,也可以定义和运行集群服务栈。

节点

节点是参与集群的 Docker 引擎的一个实例。可以将其视为一个 Docker 节点。可以在一台物理计算机或云服务器上运行一个或多个节点,但生产环境中的集群部署通常包括分布在多台物理机和云服务器上的 Docker 节点。

要将应用程序部署到集群中,需要向一个管理器节点提交服务定义。管理器节点会将称为任务的工作单元分派到工作节点上。

管理器节点还执行维持集群期望状态所需的编排和集群管理功能。管理器节点会选出一位单一的领导者来执行编排任务。

工作节点接收并执行从管理器节点分派过来的任务。默认情况下,管理器节点也会像工作节点一样运行服务,但你可以将它们配置为专门运行管理器任务,使其成为仅作管理的节点。每个工作节点上都运行着一个代理,它会报告分配给它的任务情况。工作节点会将其分配任务的当前状态通知给管理器节点,以便管理器能够维持每个工作节点的期望状态。

以下图片形象的展示了集群中管理节点与工作节点的关系。

docker swarm structrue

服务和任务

任务(Task)是 Swarm 中的最小的调度单位,目前来说就是一个单一的容器;服务(Services)是指一组任务的集合,服务定义了任务的属性。

服务是关于在管理器或工作节点上要执行的任务的定义。它是集群系统的核心结构,也是用户与集群进行交互的主要根源。

任务承载着一个 Docker 容器以及要在容器内运行的命令。它是集群的原子调度单元。管理器节点会根据服务规模中设置的副本数量将任务分配给工作节点。一旦任务被分配到一个节点上,它就不能转移到另一个节点。它只能在分配的节点上运行,或者失败。

以下图片形象的展示了容器、任务、服务的关系。

docker swarm task service

负载均衡

集群管理器使用入口负载均衡来将希望在集群外部可用的服务暴露出去。集群管理器可以自动为服务分配一个已发布端口,或者可以为服务配置一个已发布端口。可以指定任何未使用的端口。如果不指定端口,集群管理器会为服务分配一个在 30000 - 32767 范围内的端口。

外部组件,如云计算负载均衡器,可以通过集群中任何节点的已发布端口访问服务,无论该节点当前是否正在运行该服务的任务。集群中的所有节点都会将入口连接路由到一个正在运行的任务实例。

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

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

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

相关文章

接口测试及常用接口测试工具(postman/jmeter)详解

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 首先,什么是接口呢? 接口一般来说有两种,一种是程序内部的接口,一种是系统对外的接口。 系统对外的接口&#…

CVE-2024-51567 CyberPanel upgrademysqlstatus 远程命令执行

该漏洞源于upgrademysqlstatus接口未做身份验证和参数过滤,未授权的攻击者可以通过此接口执行任意命令获取服务器权限,从而造成数据泄露、服务器被接管等严重的后果。 影响版本 CyberPanel v2.3.5CyberPanel v2.3.6 目前官方已有可更新版本&#xff0…

Kaggle “Reducing Commercial Aviation Fatalities” 比赛 生理数据分析

1、背景 Kaggle在2018 年 12 月 20 日举办“Reducing Commercial Aviation Fatalities” 比赛,通过收集飞行员的生理数据,判断飞行员何时会遇到麻烦吗?该比赛主要分析飞行员的问题,因为航班多、时间不固定,飞行员会出…

无套路领取《AI应用开发专栏》

最近有些时间没有更新技术文章了,都在忙着写《AI应用开发入门》专栏,专栏已整理放到了github上,有兴趣的小伙伴可以移步github阅读,地址见文末。 1、为什么写这个文档 之前陆续写了一些零散的AI相关的技术文章,也有不…

Webserver(1.8)操作函数

目录 文件属性操作函数access函数chmod函数chown函数truncate函数 目录操作函数mkdir函数rmdir函数rename函数chdir函数*getcwd函数 目录遍历函数*opendir函数*readdir函数closedir函数 dup、dup2函数dupdup2 fcntl函数 文件属性操作函数 access函数 判断某个文件是否有某个权…

基础IO -- 标准错误输出stderr

目录 1)为什么要有 fd 为 2 的 stderr 2)使2和1重定向到一个文件中 这里我们谈一下以前只是了解过的stderr 通过两段代码,显然,我们可以知道两个FILE*都是指向显示器的 对于重定向,只有stdout才会将打印的数据重定向…

基于Multisim的四位抢答器设计与仿真

四位选手进行抢答比赛,用基本门电路及集成逻辑器件构成四人抢答器。选手编号分别为1,2,3,4号,用S1,S2,S3,S4四个按钮作为抢答按钮,S0按钮为总清零按钮。当四人中任何一个…

Python毕业设计选题:基于Django+Vue的物资配送管理系统的设计与实现

开发语言:Python框架:djangoPython版本:python3.7.7数据库:mysql 5.7数据库工具:Navicat11开发软件:PyCharm 系统展示 管理员登录界面 管理员功能界面 申领者管理 后勤处管理 物资信息管理 入库信息管理 …

网安秋招面试

《Java代码审计》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484219&idx1&sn73564e316a4c9794019f15dd6b3ba9f6&chksmc0e47a67f793f371e9f6a4fbc06e7929cb1480b7320fae34c32563307df3a28aca49d1a4addd&scene21#wechat_redirect 《Web安全》h…

springboot092安康旅游网站的设计与实现(论文+源码)_kaic

毕业设计(论文) 基于JSP的安康旅游网站的设计与实现 姓  名 学  号 院  系 专  业 指导老师 2021 年 月 教务处制 目 录 目 录 摘 要 Abstract 第一章 绪论 1.1 研究现状 1.2 设…

字符串逆序(c语言)

错误代码 #include<stdio.h>//字符串逆序 void reverse(char arr[], int n) {int j 0;//采用中间值法//访问数组中第一个元素和最后一个元素//交换他们的值&#xff0c;从而完成了字符串逆序//所以这个需要临时变量for (j 0; j < n / 2; j){char temp arr[j];arr[…

Fakelocation 步道乐跑(Root真机篇)

前言:需要 Fakelocation&#xff0c;真机Root,步道乐跑&#xff0c;Dia&#xff0c;MT管理器系统需求 Fakelocation | MT管理器 | Dia | 环境模块 任务一 真机Root&#xff08;德尔塔&#xff0c;过momo&#xff0c;刷环境模块&#xff09; 任务二 前往Dia查看包名&#xff08…

【实战篇】requests库 - 有道云翻译爬虫 【附:代理IP的使用】

目录 〇、引言一、目标二、请求参数分析三、响应分析四、编写爬虫脚本【隧道代理的使用】 〇、引言 无论是学习工作、旅游出行、跨境电商、日常交流以及一些专业领域都离不开翻译工具的支持。本文就带大家通过爬虫的方式开发一款属于自己的翻译工具~ 一、目标 如下的翻译接口…

MyBatis 源码分析 - SQL执行过程(三)之 ResultSetHandler

MyBatis的SQL执行过程 在前面一系列的文档中&#xff0c;我已经分析了 MyBatis 的基础支持层以及整个的初始化过程&#xff0c;此时 MyBatis 已经处于就绪状态了&#xff0c;等待使用者发号施令了 那么接下来我们来看看它执行SQL的整个过程&#xff0c;该过程比较复杂&#xff…

达梦数据迁移工具DTS使用实践

1、环境描述 2、DTS概述 1.支持视图、存储过程/函数、包、类、同义词、触发器等对象迁移&#xff1b; 2.支持数据类型的自动映射&#xff0c;编码转换&#xff1b; 3.支持根据条件自定义迁移部分数据&#xff1b; 4.向导式迁移步骤&#xff0c;上手简单&#xff1b; 5.支持 we…

【Web.路由】——路由约束

我们需要明确的一点就是&#xff0c;一个URL地址就是一个路由值。 而路由约束&#xff0c;就是制定出的一套规则&#xff0c;只有路由值与路由约束中的规则匹配&#xff0c;才可以进行下一步操作。 路由约束不仅可用于路由请求&#xff0c;还可以用于链接的生成。 参数值约束 …

c++编解码封装

多态版编解码 对服务器和客户端的结构体进行序列化然后对数据进行反序列化 案例分析 代码demo Codec.h #pragma once #include <iostream>class Codec { public:Codec();virtual std::string encodeMsg();//string是标准库的string类virtual void* decodeMsg();virtu…

Android 圆形进度条CircleProgressView 基础版

一个最基础的自定义View 圆形进度条&#xff0c;可设置背景色、进度条颜色&#xff08;渐变色&#xff09;下载进度控制&#xff1b;可二次定制度高&#xff1b; 核心代码&#xff1a; Overrideprotected void onDraw(NonNull Canvas canvas) {super.onDraw(canvas);int mW g…

SSH登录介绍

说明&#xff1a;一般登录服务器&#xff0c;我们可以用远程连接工具&#xff0c;如XShell、Windterm等&#xff0c;或者通过公司搭建的JumpServer&#xff08;跳板机、堡垒机&#xff09;来连接。前者是点对点登录&#xff0c;输入主机、端口&#xff0c;通过SSH协议登录&…

ValueError: Object arrays cannot be loaded when allow_pickle=False

文章目录 问题解决方法1&#xff1a;allow_pickleTrue解决方法2&#xff1a;降低numpy版本错误原因&#xff1a;python和numpy版本不兼容 问题 Traceback (most recent call last): File “D:\project\test_st\retrieval\read_npy.py”, line 4, in data np.load(‘mosi0__le…