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:2377

docker 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:2377

docker 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 已经加入。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

无线测温产品在菲律宾某工厂配电项目的应用

摘要&#xff1a;配电系统是由多种配电设备和配电设施所组成的变换电压和直接向终端用户分配电能的一个电力网络系统。由于配电系统作为电力系统的一个环节直接面向终端用户&#xff0c;它的完善与否直接关系着广大用户的用电可靠性和用电质量&#xff0c;因而在电力系统中具有…

3.SpringSecurity基于数据库的认证与授权

文章目录 SpringSecurity基于数据库的认证与授权一、自定义用户信息UserDetails1.1 新建用户信息类UserDetails1.2 UserDetailsService 二、基于数据库的认证2.1 连接数据库2.2 获取用户信息2.2.1 获取用户实体类2.2.2 Mapper2.2.3 Service 2.3 认证2.3.1 实现UserDetails接口2…

asp.net乡村旅游管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net乡村旅游管理系统是一套完善的web设计管理系统系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为sqlserver2008&#xff0c;使用c# 语言开发 asp.net乡村旅游管理系统 二、…

2022年12月 Python(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 关于Python语言的注释,以下选项中描述错误的是?( ) A: Python语言有两种注释方式:单行注释和多行注释 B: Python语言的单行注释以#开头 C: Python多行注释使用###来做为标记 D: …

gitlab查看、修改用户和邮箱,gitlab生成密钥

查看用户、邮箱 git config user.name git config user.email 修改用户、邮箱 git config --global user.name “xxx” git config --global user.email “xxxxxx.com” 生成ssh密钥 ssh-keygen -t rsa -C “xxxxxx.com” 查看SSH秘钥 cat ~/.ssh/id_rsa.pub 将秘钥复制&…

Jenkins环境部署与任务构建

一、CI/CD 1、CI/CD 概念&#xff1a; CI/CD 是一种软件开发和交付方法&#xff0c;旨在加速应用程序的开发、测试和部署过程&#xff0c;以提高软件交付的质量和效率。 (1) 持续集成 (CI Continuous Integration): 持续集成是开发团队频繁集成其代码更改的过程。开发者将其…

DBOW概要理解与记录

前言 DBOW作为一种视觉回环技术被广泛应用在各类VSLAM框架中&#xff0c;之前的经验主要集中在使用和抽象理解层面&#xff0c;近期花了一些时间仔细阅读了相关论文和源码&#xff0c;这里做一些记录。 两个关键概念 Vocabulary 通过预先训练得到的词汇库&#xff0c;以树状…

VR全景餐厅,为餐饮老板开启了新纪元

在近两年的“元宇宙”概念的催生下&#xff0c;VR全景技术逐渐渗透到我们生活的方方面面&#xff0c;从舌尖到指尖、从田间到车间、从衣食住行到娱乐消费等&#xff0c;越来越多的行业、领域开始引入VR全景了&#xff0c;并在各自的垂直领域开拓了VR全景新时代。 而一直以来&am…

强化学习问题(7)--- Python和Pytorch,Tensorflow的版本对应

1.问题 之前下载的python3.8&#xff0c;在对应Pytorch和Tensorflow时没太在意版本&#xff0c;在运行一些代码时&#xff0c;提示Pytorch和Tensorflow版本过高&#xff0c;直接降下来&#xff0c;有时候又和Python3.8不兼容&#xff0c;所以又在虚拟环境搞一个Pyhon3.7&#x…

超简洁ubuntu linux 安装 cp2k

文章目录 打开下载网址解压接下来的步骤讲解 将解压的包移到对应路径下最后运行 打开下载网址 需要从github下载&#xff1a;下载网址 两个都可以从windows下先下载&#xff0c;再复制到linux中&#xff0c; 如果不能复制&#xff0c;右键这两个&#xff0c;复制链接&#xf…

项目总结-新增商品-Pagehelper插件分页查询

&#xff08;1&#xff09;新增商品 工具类&#xff1a; /** * Title: FileUtils.java * Package com.qfedu.common.utils * Description: TODO(用一句话描述该文件做什么) * author Feri * date 2018年5月29日 * version V1.0 */ package com.gdsdxy.common.u…

Android Studio中配置aliyun maven库

当下载第三方库失败的时候&#xff0c;通过Android Studio中配置aliyun maven库&#xff0c;达到正常下载库效果 在项目的根build.gradle里面&#xff08;不是module&#xff09;buildscriptde对应位置添加配置&#xff1a; maven { url https://maven.aliyun.com/repository/…

优优嗨聚集团:抖音外卖,美食与文化的完美结合

在今天的数字化时代&#xff0c;外卖行业正在迅速发展&#xff0c;而抖音外卖的出现&#xff0c;更是引领了外卖行业的新潮流。抖音外卖不仅满足了人们对美食的追求&#xff0c;还让人们在享受美食的同时&#xff0c;感受到了浓厚的文化氛围。 抖音外卖是抖音平台推出的一项全新…

Google Authenticator认证密钥从手机App中同步到Chrome浏览器插件中

前言 现在很多重要的项目都用了Google Authenticator来做安全认证&#xff0c;比如Github&#xff0c;Jumpserver等等&#xff0c;但每次认证登录时候&#xff0c;都得掏出来手机看token码就比较麻烦。 还好 Google Authenticator 有 Chrome 浏览器插件&#xff0c;可以直接同…

YOLOv8改进实战 | 更换损失函数之MPDIOU(2023最新IOU)篇

前言 YOLOv8官方默认损失函数采用的是CIoU。本章节主要介绍如何将MPDIoU损失函数应用于目标检测YOLOv8模型。 目录 一、MPDIoU二、代码实现添加损失函数更换损失函数一、MPDIoU 论文链接:MPDIoU: A Loss for Efficient and Accurate Bounding Box Regression MPDIoU是一种基于…

打破总分行数据协作壁垒,DataOps在头部股份制银行的实践|案例研究

从银行开始建设数据仓库至今已近20年&#xff0c;当前各银行机构在数据能力建设中面临诸多困扰&#xff1a;如何保证数据使用时的准确性&#xff1f;如何让数据敏捷响应业务变化&#xff1f;如何让更多的业务人员使用数据&#xff1f; 这些问题极大影响了经营指标的达成与业务…

分布式事务——CAP理论 解决分布式事务的思路 Seata组件初识 和 部署

前言 事务(TRANSACTION)是一个不可分割的逻辑单元&#xff0c;包含了一组数据库操作命令&#xff0c;并且把所有的命令作为一个整体向系统提交&#xff0c;要么都执行、要么都不执行。 事务作为系统中必须考虑的问题&#xff0c;无论是在单体项目还是在分布式项目中都需要进行…

Python机器学习17——Xgboost和Lightgbm结合分位数回归(机器学习与传统统计学结合)

最近XGboost支持分位数回归了&#xff0c;我看了一下&#xff0c;就做了个小的代码案例。毕竟学术市场上做这种新颖的机器学习和传统统计学结合的方法还是不多&#xff0c;算的上创新&#xff0c;找个好数据集可以发论文。 代码实现 导入包 import numpy as np import pandas…

uni-app医院智能导诊系统源码

随着科技的迅速发展&#xff0c;人工智能已经逐渐渗透到我们生活的各个领域。在医疗行业中&#xff0c;智能导诊系统成为了一个备受关注的应用。本文将详细介绍智能导诊系统的概念、技术原理以及在医疗领域中的应用&#xff0c;分析其优势和未来发展趋势。 智能导诊系统通过人工…

如何训练Embedding Model

BGE的技术亮点&#xff1a; 高效预训练和大规模文本微调&#xff1b;在两个大规模语料集上采用了RetroMAE预训练算法&#xff0c;进一步增强了模型的语义表征能力&#xff1b;通过负采样和难负样例挖掘&#xff0c;增强了语义向量的判别力&#xff1b;借鉴Instruction Tuning的…