Docker Swarm 集群搭建

Docker Swarm Mode
Docker Swarm 集群搭建
Docker Swarm 节点维护
Docker Service 创建

1.准备主机

 搭建一个 docker swarm 集群,包含 5 个 swarm 节点。这 5 个 swarm 节点的 IP 与暂
时的角色分配如下(注意,搭建完成后会切换角色):

hostiprole
docker192.168.137.100manager
docker2192.168.137.101manager
docker3192.168.137.102manager
docker4192.168.137.103worker
docker5192.168.137.104worker

Hyper-v 设置静态IP 搭建集群

2.搭建swarm集群

2.1 查看 swarm 激活状态

在任意 docker 主机上通过 docker info 命令可以查看到当前 docker 引擎 Server 端对于swarm 的激活状态。由于尚未初始化 swarm 集群,所以这些 docker 主机间没有任何关系,且 swarm 均未被激活。

docker info

在这里插入图片描述

2.2 swarm 初始化

在主机名为“docker”的主机上运行 docker swarm init 命令,创建并初始化一个 swarm。

# 如果多网卡,需要指定ip。--advertise-addr参数表示其它swarm中的worker节点使用此ip地址与manager联系。
docker swarm init --advertise-addr 192.168.137.100:2377 --listen-addr 192.168.137.100:2377

在这里插入图片描述

2.3 添加 worker 节点

复制 docker swarm init 命令的响应结果中添加 wroker 节点的命令在 docker4 与 docker5节点上运行,将这两个节点添加为 worker 节点。

# ip表示manager主机ip:port
# --advertise-addr参数表示worker节点使用此ip地址与manager联系
docker swarm join --token SWMTKN-1-14pekii6qepms5f3tfg8wt7rixqyybjb12ga8vahme52fm490i-43kozm8fpi1s9ist2kk4ysv36 192.168.137.100:2377 --advertise-addr 192.168.137.103:2377docker swarm join --token SWMTKN-1-14pekii6qepms5f3tfg8wt7rixqyybjb12ga8vahme52fm490i-43kozm8fpi1s9ist2kk4ysv36 192.168.137.100:2377 --advertise-addr 192.168.137.104:2377

2.4 添加 manager 节点

(1)获取添加命令

若要为 swarm 集群添加 manager 节点,需要首先在 namager 节点获取添加命令

docker swarm join-token manager

(2)添加节点

复制 docker swarm join-token 命令生成的 manager 添加命令,然后在 docker2 与 docker3节点上运行,将这两个节点添加为 manager 节点。

docker swarm join --token SWMTKN-1-14pekii6qepms5f3tfg8wt7rixqyybjb12ga8vahme52fm490i-6cqtvvvohw38xgcdn06bgecyp 192.168.137.100:2377 --advertise-addr 192.168.137.101:2377docker swarm join --token SWMTKN-1-14pekii6qepms5f3tfg8wt7rixqyybjb12ga8vahme52fm490i-6cqtvvvohw38xgcdn06bgecyp 192.168.137.100:2377 --advertise-addr 192.168.137.102:2377

2.5 查看 swarm 节点

在 manager 任意一个节点 docker、docker2、docker3 上通过 docker node ls 命令可以查看到当前swarm 集群所包含的节点状态数据。

在这里插入图片描述

3. swarm 集群维护

当一个节点想从 swarm 集群中退出时,可以通过 docker swarm leave 命令。不过 worker节点与 manager 节点的退群方式是不同的。

3.1 worker 退群

对于 worker 节点退群,直接运行 docker swarm leave 命令即可。

在这里插入图片描述

此时在 manager 节点中查看节点情况,可以看到 docker4 已经 Down 了。

3.2 worker 重新加入

在 manager 节点上运行 docker swarm join-token worker 命令,查看加入 worker 节点的命令。

复制生成的命令,在 docker4 节点上运行,将此节点添加到 swarm 集群。

docker swarm join --token SWMTKN-1-14pekii6qepms5f3tfg8wt7rixqyybjb12ga8vahme52fm490i-43kozm8fpi1s9ist2kk4ysv36 192.168.137.100:2377 --advertise-addr 192.168.137.103:2377

3.3 查看节点情况

此时在 manager 节点中查看节点情况,可以看到原来的 docker4 依然是 Down,但又新增了一个新的 docker4 节点,其状态为 Ready。

在这里插入图片描述

此时在 manager 节点通过 docker info 命令可以查看到节点数量变为了 6 个。

在这里插入图片描述

3.4 删除 Down 状态节点

对于Down状态的节点是完全可以将其删除的。通过在manager节点运行docker node rm命令完成。

docker node rm <nodeId>

在这里插入图片描述

3.5 manager 退群

 对于 manager 节点,原则上是不推荐直接退群的,这样会导致 swarm 集群的一致性受到损坏。如果 manager 执意要退群,可在 docker swarm leave 命令后添加-f`` 或–force`` 选项进行强制退群。

4. swarm 自动锁定

4.1 swarm 集群自动锁定原理

 在 manager 集群中,swarm 通过 Raft 日志方式维护了 manager 集群中数据的一致性。即在 manager 集群中每个节点通过 manager 间通信方式维护着自己的 Raft 日志。

 但在通信过程中存在有一种风险:Raft 日志攻击者会通过 Raft 日志数据的传递来访问、篡改 manager 节点中的配置或数据。为了防止被攻击,swarm 开启了一种集群自动锁定功能,为 manager 间的通信启用了 TLS 加密。用于加密和解密的公钥与私钥,全部都维护在各个节点的 Docker 内存中。一旦节点的 Docker 重启,则密钥丢失

 swarm 中通过 autolock 标志来设置集群的自动锁定功能:为 true 则开启自动锁定,为
false 则关闭自动锁定。

4.2 设置自动锁定

 在 manager 节点通过 docker swarm update –-autolock=true 命令可以开启当前 swarm 集群的自动锁定功能。

在这里插入图片描述

此时查看 manager 的 docker info 可以看到,autolock 已经为 true 了。

在这里插入图片描述

4.3 查看解锁密钥

如果没有保存 docker swarm update --autolock=true 命令中生成的密钥,也可通过在manager 中运行 docker swarm unlock-key 命令查看。

4.4 关闭一个 manager, 模拟宕机重新加入

直接关闭 docker3 的 docker 引擎,模拟一个 manager 宕机的情况。再启动 docker3 的 docker 引擎。

systemctl stop docker
systemctl start docker

此时再查看该节点的 docker info,可以看到 Swarm 值为 locked,即当前节点看到的 Swarm集群的状态为锁定状态,其若要加入,必须先解锁。

在这里插入图片描述

即使 docker3 已经正常启动,也没有被加入到集群中

在这里插入图片描述

在 docker3 中运行 docker swarm unlock 命令 输入密钥,解锁 swarm。

此时再查看节点信息,该 manager 已经加入。

在这里插入图片描述

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

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

相关文章

23年上半年上午题复习

敏捷方法 耦合 软件维护 消息 面向对象测试 面向对象设计原则 包图 原型模式 数据库三级模型 数据库函数依赖 哈夫曼树 左0右1 折半查找 画一个折半查找树&#xff0c;这个树只会往一个方向查找&#xff0c;一个节点不会同时出现左右子树&#xff0c;较小的作为左子树&#…

通义大模型使用指南之通义千问

一、注册 我们可以打开以下网站&#xff0c;用手机号注册一个账号即可。 通义大模型 (aliyun.com) 二、使用介绍 如图&#xff0c;我们可以看到有三个大项功能&#xff0c;通义千问、通义万相、通义听悟。下来我们体验一下通义千问的功能。 1、通义千问 通义千问主要有两个功能…

如何使用VSCode将iPad Pro转化为功能强大的开发工具?

文章目录 前言1. 本地环境配置2. 内网穿透2.1 安装cpolar内网穿透(支持一键自动安装脚本)2.2 创建HTTP隧道 3. 测试远程访问4. 配置固定二级子域名4.1 保留二级子域名4.2 配置二级子域名 5. 测试使用固定二级子域名远程访问6. iPad通过软件远程vscode6.1 创建TCP隧道 7. ipad远…

# 开发趋势 Java Lambda 表达式 第三篇

开发趋势 Java Lambda 表达式 第三篇 一&#xff0c;Lambda 整合集合常规操作 List Java Lambda 表达式可以与List集合和常规操作进行整合&#xff0c;以提供一种更简洁、更可读的代码编写方式。以下是几个示例&#xff1a; 集合遍历操作&#xff1a; List<String> n…

使用IO流完成项目实战水果库存系统

以下内容本人都是在 Maven 工程下总结的 需求介绍显示主菜单让程序无线运行下去加载数据显示库存列表根据名称查找特定库存记录添加库存记录查看_下架_退出功能实现持久化数据 package com.csdn.fruit.pojo; import lombok.AllArgsConstructor; import lombok.Data; import lom…

Http长连接同一个socket多个请求和响应如何保证一一对应?

HTTP/2引入二进制数据帧和流的概念&#xff0c;其中帧对数据进行顺序标识&#xff0c;如下图所示&#xff0c;这样浏览器收到数据之后&#xff0c;就可以按照序列对数据进行合并&#xff0c;而不会出现合并后数据错乱的情况。同样是因为有了序列&#xff0c;服务器就可以并行的…

使用Packstack安装器安装一体化OpenStack云平台

【实训目的】 初步掌握OpenStack快捷安装的方法。掌握OpenStack图形界面的基本操作。 【实训准备】 &#xff08;1&#xff09;准备一台能够安装OpenStack的实验用计算机&#xff0c;建议使用VMware虚拟机。 &#xff08;2&#xff09;该计算机应安装CentOS 7&#xff0c;建…

【微服务】Feign 整合 Sentinel,深入探索 Sentinel 的隔离和熔断降级规则,以及授权规则和自定义异常返回结果

文章目录 前言一、Feign 整合 Sentinel1.1 实现步骤1.2 FallbackFactory 示例 二、Sentinel 实现隔离2.1 隔离的实现方法2.2 Sentinel 实现线程隔离示例 三、熔断降级规则3.1 熔断降级原理及其流程3.2 熔断策略 —— 慢调用3.3 熔断策略 —— 异常比例和异常数 四、授权规则4.1…

数据结构中的七大排序(Java实现)

目录 一、直接插入排序 二、希尔排序 三、直接选择排序 四、堆排序 五、冒泡排序 六、快速排序 七、归并排序 一、直接插入排序 思想&#xff1a; 定义i下标之前的元素全部已经有序&#xff0c;遍历一遍要排序的数组&#xff0c;把i下标前的元素全部进行排序&#xff0…

ArGIS Engine专题(15)之GP模型在地图服务与地图服务之间实现叠置分析

前一篇文章已经介绍过导入要素范围与地图服务的叠加分析,相当于单要素与多要素之间的分析,这篇文章介绍地图服务与地图服务之间的叠加分析,即是多要素有多要素之间的相交分析,功能基本类似。 一、结果预览 二、需求简介 以下是一些常见的业务场景: (1)空间规划和土地…

电脑技巧:27个Office使用小技巧,值得收藏

目录 一、Word 二、EXCEL 三、附文&#xff1a;Word和Excel快捷键 我们中的绝大部分人都使用微软的Office&#xff0c;但是我们是否都了解如何能够最有效地使用它&#xff1f;我们在这里列举了一些关于使用Word和Excel的窍门。 我们使用最多的软件可能就是办公软件了——字…

思辨:移动开发的未来在哪?

前段时间在知乎看到关于移动开发未来的问题&#xff0c;就尝试回答了一下&#xff0c;也触发了我对移动开发未来的思考。 什么是移动开发&#xff1f; 我们口中说的移动开发是什么&#xff0c;从广义和狭义的角度分别来看下&#xff1a; 从广义角度来看&#xff0c;移动开发是…

docker-rabbitmq 安装依赖

出现的问题如下: channel error; protocol method: #method(reply-code404, reply-textNOT_FOUND - no channel error&#xff1b; protocol method: #method&#xff1c;channel.close&#xff1e;(reply-code404, reply-textNOT_FOUND - no 查看rabbitmq 客户端是否存在如…

Kubernetes - 一键安装部署 K8S(附:Kubernetes Dashboard)

问题描述 不知道大伙是如何安装 K8s&#xff0c;特别还是集群的时候&#xff0c;我上一次安装搭建的时候&#xff0c;那个恶心到我了&#xff0c;真的是一步一个脚印走完整个搭建流程&#xff0c;爬了不少坑。 于是&#xff0c;才有了今天的文章&#xff0c;到底有没有可以一…

Kafka快速入门(最新版3.6.0)

文章目录 一、初识MQ1.1 什么是MQ1.2 同步和异步通讯1.1.1 同步通讯1.1.2 异步通讯 1.3 技术对比1.4 MQ的两种模式 二、初识Kafka2.1 Kafka的使用场景2.2 Kafka基本概念2.3 Topic与Partition 三、Kafka基本使用3.1 部署前的准备3.2 启动kafka服务器3.3 Kafka核心概念之Topic3.4…

出差学小白知识No6:LD_PRELOAD变量路径不对找不到库文件

交叉编译的时候出现以下问题&#xff0c;显示LD_PRELOAD变量找不到路劲 首先先查看一下LD_PRELOAD的路径&#xff1a;echo $LD_PRELOAD 如果输出一大串&#xff0c;那么先进行清空&#xff1a;unset LD_PRELOAD 重新给LD_PRELOAD进行赋值他的路径和库文件&#xff1a; expor…

自然语言处理---RNN经典案例之构建人名分类器

1 案例介绍 关于人名分类问题&#xff1a;以一个人名为输入, 使用模型帮助判断它最有可能是来自哪一个国家的人名&#xff0c;这在某些国际化公司的业务中具有重要意义&#xff0c;在用户注册过程中&#xff0c;会根据用户填写的名字直接给他分配可能的国家或地区选项&#xff…

【第三天】C++类和对象进阶指南:从堆区空间操作到友元的深度掌握

一、new和delete 堆区空间操作 1、new和delete操作基本类型的空间 new与C语言中malloc、delete和C语言中free 作用基本相同 区别&#xff1a; new 不用强制类型转换 new在申请空间的时候可以 初始化空间内容 2、 new申请基本类型的数组 3、new和delete操作类的空间 4、new申请…

为什么需要it企业知识库?it企业知识库能带来什么?

在企业运营过程中&#xff0c;会产生大量的经营数据、管理规范、资料和文档等数据&#xff0c;但这些数据的产生时间和空间碎片化&#xff0c;数据来源和结构多种多样&#xff0c;信息关系也较为复杂。 it企业知识库 正是因为这些问题的存在&#xff0c;导致了企业信息管理零散…

【word技巧】word页眉,如何禁止他人修改?

我们设置了页眉内容之后&#xff0c;不想其他人修改自己的页眉内容&#xff0c;我们可以设置加密的&#xff0c;设置方法如下&#xff1a; 先将页眉设置好&#xff0c;退出页眉设置之后&#xff0c;我们选择布局功能&#xff0c;点击分隔符 – 连续 设置完之后页面分为上下两节…