三、Docker 集群管理与应用
(一)项目案例
1、准备主机
(1)关闭防火墙,或者开放TCP端口2377(用于集群管理通信)、TCP/UPD端口7946(用于节点之间的通信)、UDP端口4789(用于overlay网络流量监控)
(2)安装docker
(3)设置静态ip
(4)修改主机名
2、创建Swarm集群
(1)主节点创建新的Swarm集群
[root@manager01 ~]# docker swarm init --advertise-addr 192.168.75.129
Swarm initialized: current node (y8rm15jh2qs5e3qsh6n13cxfh) is now a manager.To add a worker to this swarm, run the following command:docker swarm join --token SWMTKN-1-48xia8024q8de6jxhca3whxenfeayo7hx8tdvg7lb1c28i4zfo-e8m7203crmlpwsmdfn3afyyss 192.168.75.129:2377To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
(2)第一个工作节点加入集群
[root@worker01 ~]# docker swarm join --token SWMTKN-1-48xia8024q8de6jxhca3whxenfeayo7hx8tdvg7lb1c28i4zfo-e8m7203crmlpwsmdfn3afyyss 192.168.75.129:2377
(3)第二个工作节点加入集群
[root@worker02 ~]# docker swarm join --token SWMTKN-1-48xia8024q8de6jxhca3whxenfeayo7hx8tdvg7lb1c28i4zfo-e8m7203crmlpwsmdfn3afyyss 192.168.75.129:2377
This node joined a swarm as a worker.
(4)查看集群节点信息
[root@manager01 ~]# docker info
3、查看节点信息
[root@manager01 ~]# docker node inspect worker01 --pretty
注:
(1)STATUS列表示节点当前状态,Ready表示正常,Down表示已宕机
(2)AVAILABILITY列表示该节点的可用性状态,有3种状态
- 活动(Active):调度器能够安排任务到该节点。
- 暂停(Pause):调度器不能安排任务到该节点。但是已经存在的任务会继续运行
- 候选者(Drain):调度器不能安排任务到该节点,且会停止已存在的任务,并将这些任务分配到其他处于活动状态的节点中。
(3)MANAGER STATUS列表示管理器状态,共有以下4中状态
- 领导者(Leader):为Swarm集群做出所有管理和编排的主要管理器节点
- 候选者(Reachable):如果领导节点变为不可用,则候选者节点有资格成为新的领导者节点。
- 不可用(Unavailable):该节点不能和其他管理节点产生任何联系,这种情况下,应该添加一个新的管理器节点到集群中,或者将一个工作节点升级为管理器节点。
- 空白:表明该节点是工作者节点
4、让节点脱离集群
(1)在工作节点执行,使worker02脱离集群,要在worker02主机上执行
[root@worker02 ~]# docker swarm leave
(2)在主节点查看worker02的信息,并删除该节点
[root@manager01 ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
y8rm15jh2qs5e3qsh6n13cxfh * manager01 Ready Active Leader 23.0.2
f0aw8dor6hlkth9kzy4m3k0vt worker01 Ready Active 23.0.2
xjpsue874nrm0hm3tw39mvwhl worker02 Down Active 23.0.2
[root@manager01 ~]# docker node rm worker02
worker02
[root@manager01 ~]#
5、让节点以管理器角色加入集群
(1)获取加入管理角色的命令
[root@manager01 ~]# docker swarm join-token manager
To add a manager to this swarm, run the following command:docker swarm join --token SWMTKN-1-48xia8024q8de6jxhca3whxenfeayo7hx8tdvg7lb1c28i4zfo-3davlb9zjkr6gvvkrtu8mz3w2 192.168.75.129:2377[root@manager01 ~]#
(2)worker02加入集群的管理节点
[root@worker02 ~]# docker swarm join --token SWMTKN-1-48xia8024q8de6jxhca3whxenfeayo7hx8tdvg7lb1c28i4zfo-3davlb9zjkr6gvvkrtu8mz3w2 192.168.75.129:2377
(3)查看集群节点信息
[root@manager01 ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
y8rm15jh2qs5e3qsh6n13cxfh * manager01 Ready Active Leader 23.0.2
f0aw8dor6hlkth9kzy4m3k0vt worker01 Ready Active 23.0.2
pgm7vq62akim0ms9kz8duguru worker02 Ready Active Reachable 23.0.2
[root@manager01 ~]#
6、降级和升级节点
(1)在管理节点降级为工作节点,在管理节点执行
[root@worker02 ~]# docker node demote worker02
(2)在工作节点升级为管理节点,在工作节点执行
[root@worker02 ~]# docker node promote worker02
(二)Docker Swarm 集群部署和管理服务
1、将服务部署到Swarm集群中
(1)创建服务
# docker service create --name swarm-web01 nginx
(2)使用docker service ls 命令查看正在运行的服务列表
# docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
r5wx100nb2t6 swarm-web01 replicated 1/1 nginx:latest
REPLICAS列为m/n:n代表副本数,m代表正在运行的副本
(3)使用 docker service ps 命令查看显示任务列表信息,查看每个副本运行节点的状态信息
[root@master01 ~]# docker service ps swarm-web01
(4)使用docker service inspect 显示有关服务的详细信息,–pretty选项表示易于阅读的格式
[root@master01 ~]# docker service inspect --pretty swarm-web01ID: r5wx100nb2t6vrtdsobnc1deg #服务ID
Name: swarm-web01 #服务名称
Service Mode: Replicated #服务模式,这里为复制模式Replicas: 1 #副本数
Placement: #服务配置
UpdateConfig:Parallelism: 1On failure: pauseMonitoring Period: 5sMax failure ratio: 0Update order: stop-first
RollbackConfig: #回滚配置Parallelism: 1On failure: pauseMonitoring Period: 5sMax failure ratio: 0Rollback order: stop-first
ContainerSpec: #容器定义Image: nginx:latest@sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31Init: false
Resources:
Endpoint Mode: vip #端点模式
2、伸缩服务
(1)增加服务副本数
# docker service scale swarm-web01=5
查看任务列表(管理节点)
# docker service ps swarm-web01
(2)减少文件副本数
# docker service scale swarm-web01=3
3、删除swarm服务
# docker service rm swarm-web01
4、对服务的任务进行滚动更新
(1)部署nginx到集群中,并配置8秒的更新延迟策略
# docker service create --replicas 3 --name my-web01 --update-delay 8s nginx
–update-delay 选项用于配置更新一个或多个任务之间的延迟时间,时间可以使用的单位有秒(s)、分钟(min)或小时(h)、还可以组合使用更多单位的时间,如5min30s,表示延迟5分钟30秒
默认情况下,调度器一次更新一个任务,可以通过 --update-parallelism 选项来配置调度器同事(并发)更新的最大服务任务数。
默认情况下,当对单个任务的更新完成并返回运行状态时,调度器会调度另一个任务来更新,直到所有任务被更新。如果在任务更新期间的任何时间都返回失败(FAILED)状态,则调度器会暂停更新。可以使用 --update-failure-action 选项来控制 docker service create 或 docker service update 命令的行为。
(2)查看my-web01服务的详细信息
[root@master01 ~]# docker service inspect my-web01 --prettyID: c5k770ixaswchg3p96lsh9g3p
Name: my-web01
Service Mode: ReplicatedReplicas: 3
Placement:
UpdateConfig: #更新配置Parallelism: 1 #同时更新的最大任务数Delay: 8s #更新之间的延迟操作时间On failure: pause #更新失败后的操作Monitoring Period: 5s #每个任务更新后的延迟时间Max failure ratio: 0 #更新期间容许的失败率Update order: stop-first #更新顺序
RollbackConfig:Parallelism: 1On failure: pauseMonitoring Period: 5sMax failure ratio: 0Rollback order: stop-first
ContainerSpec: #容器定义Image: nginx:latest@sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31Init: false
Resources:
Endpoint Mode: vip
(3)使用 docker service update 命令更新容器镜像
# docker service update --image nginx:latest my-web01
(4)手动回滚到前一个版本
# docker service update --rollback my-web01
(三)配置和管理Docker Swarm网络
1、创建自定义overlay网络
# docker network create -d overlay nginx-net01
查看创建的overlay网络
# docker network ls
2、将swarm服务连接到自定义overlay网络
部署服务时,如果不使用 --network 选项显示声明,则服务将连接到默认的ingress网络,在生产环境下,建议使用自定义 overlay 网络。
(1)创建服务并连接到 nginx-net01 网络
# docker service create --name my-nginx01 --publish published=8000,target=80 --replicas=3 --network nginx-net01 nginx
(2)查看该服务的详细信息
[root@master01 ~]# docker service inspect my-nginx01 --prettyID: qxmmj8przpjlrdulxm57sz1l6
Name: my-nginx01
Service Mode: ReplicatedReplicas: 3
Placement:
UpdateConfig:Parallelism: 1On failure: pauseMonitoring Period: 5sMax failure ratio: 0Update order: stop-first
RollbackConfig:Parallelism: 1On failure: pauseMonitoring Period: 5sMax failure ratio: 0Rollback order: stop-first
ContainerSpec:Image: nginx:latest@sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31Init: false
Resources:
Networks: nginx-net01
Endpoint Mode: vip
Ports:PublishedPort = 8000 #发布端口Protocol = tcp #发布协议TargetPort = 80 #目标端口PublishMode = ingress #发布模式
注:自定义 overlay 网络的服务发布模式仍然为ingress,即通过路由网发布。
(2)为 swarm 服务更换overlay 网络连接。
创建新的网络
# docker network create -d overlay nginx-net100
为服务添加overlay网络
# docker service update --network-add nginx-net100 my-nginx01
(3)overlay 网络在工作节点上会随着服务的删除而自动删除,但在管理器节点上并不会自动删除,在管理器节点上一次执行以下命令删除上述服务和网络
# docker service rm my-nginx01
# docker network rm nginx-net01 nginx-net100
3、验证swarm服务发布模式
- ipgress:路由网模式,不管该节点有没有部署该服务,都能通过该节点访问该服务
- host:主机模式,如果该节点没有部署该服务,这 curl http://未部署节点ip:80 无法访问
(1)创建2个副本的服务,并以路由网模式对外发布端口
# docker service create --name my-nginx01 --publish published=8088,target=80 --replicas 2 nginx
(2)访问worker02 节点上的服务(目前在worker02 节点未运行该服务),发现可以访问
[root@master01 ~]# curl http://192.168.65.141:8088
(3)创建2个副本的服务,并以主机模式对外发布端口
# docker service create --name my-nginx02 --publish published=8080,target=80,mode=host --replicas 2 nginx
(4)查看服务的发布模式
[root@master01 ~]# docker service inspect my-nginx02 --pretty
...
...
Ports:PublishedPort = 8080Protocol = tcpTargetPort = 80PublishMode = host #发布模式
(5)访问worker02 节点上的服务(目前在worker02 节点未运行该服务),发现访问被拒绝
[root@master01 ~]# curl http://192.168.65.141:8080
curl: (7) Failed connect to 192.168.65.141:8080; 拒绝连接
相关文章:
三、Docker 集群管理与应用
(一)项目案例 1、准备主机 (1)关闭防火墙,或者开放TCP端口2377(用于集群管理通信)、TCP/UPD端口7946(用于节点之间的通信)、UDP端口4789(用于overlay网络流…...
无标签数据增强+高效注意力GAN:基于CARLA的夜间车辆检测精度跃升
目录 一、摘要 二、引言 三、框架 四、方法 生成合成夜间数据 昼夜图像风格转换 针对夜间图像的无标签数据增强技术 五、Coovally AI模型训练与应用平台 六、实验 数据 图像风格转换 夜间车辆检测和分类 结论 论文题目:ENHANCING NIGHTTIME VEHICLE D…...
SqlSugar 进阶之原生Sql操作与存储过程写法 【ORM框架】
系列文章目录 🎀🎀🎀 .NET开源 ORM 框架 SqlSugar 系列 🎀🎀🎀 文章目录 系列文章目录一、前言 🍃二、用法介绍三、方法列表四、使用案例五、调用存储过程六、in参数用法七、SqlServer带Go的脚…...
NO.33十六届蓝桥杯备战|函数|返回值|声明|调用|引用|函数重载(C++)
返回值 我们在设计的函数的时候,函数在经过计算后,有时候需要带回⼀些计算好的数据,这时候往往使⽤return 来返回,这⾥我们就讨论⼀下使⽤ return 返回。 return 后边可以是⼀个数值,也可以是⼀个表达式,…...
5G工业路由器赋能无人码头,港口物流智能化管理
全球贸易发展促使港口需提升运营效率,传统港口面临诸多难题,无人码头成为转型关键方向。5G 工业路由器为其提供有力通信支持,引领港口物流变革。 随着无人码头建设在全球兴起,如荷兰鹿特丹港、中国上海洋山港等。码头作业设备需实…...
机试准备第14天
首先进行树的学习。树的存储分为链式存储与顺序存储。完全二叉树是可以顺序存储的,将各个节点从上往下,从左往右存储。 第一题是找位置,好兄弟给的一道题,一遍过了。 #include <stdio.h> #include <map> #include &…...
【Academy】OAuth 2.0 身份验证漏洞 ------ OAuth 2.0 authentication vulnerabilities
OAuth 2.0 身份验证漏洞 ------ OAuth 2.0 authentication vulnerabilities 1. 什么是 OAuth?2. OAuth 2.0 是如何工作的?3. OAuth 授权类型3.1 OAuth 范围3.2 授权代码授权类型3.3 隐式授权类型 4. OAuth 身份验证4.1 识别 OAuth 身份验证4.2 侦察OAuth…...
有关Java中的多线程
学习目标 ● 掌握线程相关概念 ● 掌握线程的基本使用 ● 掌握线程池的使用 ● 了解解决线程安全方式 1.为什么要学习线程? ● 从1946年2月14日世界上第一台计算机在美国宾夕法尼亚大学诞生到今天,计算和处理的模式早已从单用户单任务的串行模式发展到了多用户多…...
【eNSP实战】配置交换机端口安全
拓扑图 目的:让交换机端口与主机mac绑定,防止私接主机。 主机PC配置不展示,按照图中配置即可。 开始配置之前,使用PC1 ping 一遍PC2、PC3、PC4、PC5,让交换机mac地址表刷新一下记录。 LSW1查看mac地址表 LSW1配置端…...
MAC-禁止百度网盘自动升级更新
通过终端禁用更新服务(推荐) 此方法直接移除百度网盘的自动更新组件,无需修改系统文件。 步骤: 1.关闭百度网盘后台进程 按下 Command + Space → 输入「活动监视器」→ 搜索 BaiduNetdisk 或 UpdateAgent → 结束相关进程。 2.删除自动更新配置文件 打开终端…...
LLMs基础学习(一)概念、模型分类、主流开源框架介绍以及模型的预训练任务
文章目录 LLM基础学习(一)一、大语言模型(LLMs)的简单介绍定义与基本信息核心特点局限性参考的模型 二、大语言模型(LLMs)名称后 “175B”“60B”“540B” 等数字的含义数字代表模型参数数量具体示例参数数…...
【leetcode hot 100 24】两两交换链表中的节点
解法一:先判断链表是否为空,若为空则直接返回;否则用left和right指向第一个和第二个节点,当这两个节点非空时一直执行交换。其中先判断right.nextnull,说明链表为偶数且已经交换完break;再判断right.next.n…...
软件IIC和硬件IIC的主要区别,用标准库举例!
学习交流792125321,欢迎一起加入讨论! 在学习iic的时候,我们经常会遇到软件 IC和硬件 IC,它两到底有什么区别呢? 软件 IC(模拟 IC)和硬件 IC(外设 IC)是两种实现 IC 总线通信的方式…...
Codeforces Round 1006 Div3 A-E
A 题目描述 夏目章人(Natsume Akito)刚刚在一个新世界苏醒,便立即收到了他的第一个任务!系统为他提供了一个包含 n 个零的数组 a,以及两个整数 k 和 p。在每次操作中,章人需要选择两个整数 i 和 x&#x…...
4个 Vue 路由实现的过程
大家好,我是大澈!一个喜欢结交朋友、喜欢编程技术和科技前沿的老程序员👨🏻💻,关注我,科技未来或许我能帮到你! Vue 路由相信朋友们用的都很熟了,但是你知道 Vue 路由…...
git文件过大导致gitea仓库镜像推送失败问题解决(push failed: context deadline exceeded)
问题描述: 今天发现gitea仓库推送到某个镜像仓库的操作几个月前已经报错终止推送了,报错如下: 首先翻译报错提示可知是因为git仓库大小超过1G限制。检查本地.git文件,发现.git文件大小已达到1.13G。确定是.git文件过大导致&…...
简要分析NETLINK_ROUTE参数
NETLINK_ROUTE时Linux内核中Netlink协议族的一个子类型,专用于用户空间与内核网络子系统之间的通信,它是实现动态网络配置(如路由表、网络接口、地址管理)的核心机制,为现代网络管理工具(如iproute2&#x…...
Java中default关键字
1. 在 switch 语句中作为默认分支 在 switch 语句里,default 用于定义当所有 case 标签的值都无法匹配 switch 表达式的值时要执行的代码块。它并非强制要求,但使用它可以增强代码的健壮性,处理未预见的情况。 public class SwitchDefaultE…...
怎么利用DeepSeek进行PCB设计?
最近在琢磨利用Deepseek改善PCB的细节设计,毕竟立创EDA里面没有集成DS,因此,如何让DS能识别图片成了重中之重。所幸最近腾讯元宝里面集成了R1的满血版,这个版本可以上传图片,于是让DS识别图片就可能了。 在原理图设计…...
详细介绍 Jupyter nbconvert 工具及其用法:如何将 Notebook 转换为 Python 脚本
nbconvert 是 Jupyter 提供的一个非常强大的工具,允许用户将 Jupyter Notebook 文件(.ipynb)转换成多种格式,包括 Python 脚本(.py)、HTML、PDF、LaTeX 等。你可以通过命令行来运行 nbconvert,也…...
windows上传uniapp打包的ipa文件到app store构建版本
uniapp是一个跨平台的框架,使用windows电脑也可以开发ios软件,因为uniapp的打包是在云端实现的,本地电脑无需使用mac电脑即可完成打包。 但是打包后的ipa文件需要上架到app store的构建版本上,没有mac电脑,又如何上架…...
PySide(PyQT),QGraphicsItem的pos()和scenePos()区别
在QGraphicsItem中,pos()和scenePos()是两个重要的方法,用于描述图形项的位置,但它们的含义和用途有所不同。理解它们的区别对于正确操作和管理QGraphicsItem的位置至关重要。 1. pos()方法 • 定义:pos()返回的是QGraphicsItem在…...
idea 快捷键 Reformat code
Reformat code...
Spring Boot 项目中使用责任链模式实现复杂接口解耦和动态编排(带示例)
目录 责任链模式概述 解耦 动态编排 运用场景 代码示例 1. 定义请求和响应对象 2. 定义处理者接口和抽象处理者类 3. 实现具体的处理者类 4. 配置责任链 5. 控制器类调用责任链 代码解释 责任链模式概述 责任链模式是一种行为设计模式,它允许你将请求沿着处理者链…...
消防设施操作员考试备考:以技巧为翼,翱翔知识天空
消防设施操作员考试的备考过程中,掌握实用技巧能让学习事半功倍。以下为您介绍一系列备考技巧,助您在知识的天空中自由翱翔。 记忆技巧:化繁为简 消防知识众多,记忆难度较大。可以采用多种记忆方法,如口诀记忆法…...
qt之No executable specified
在Qt中遇到文件复制操作时出现“No executable specified”错误,通常与程序编译或运行环境配置问题相关,而非文件操作本身的问题。以下是可能的原因及解决方案: 项目配置文件损坏 现象: 在执行文件操作前,程序无法启动…...
物联网商业模式
物联网商业模式是一种战略规划,它融合了物联网技术来创造价值并获取收入。它与传统商业模式的不同之处在于,它利用互联设备来改善运营、提升客户体验以及优化服务项目。在当今由科技驱动的世界中,这种商业模式通过利用实时数据来提供创新服务…...
解决ElementPlus对话框el-dialog中关闭事件重复触发问题
问题背景 在使用ElementPlus的el-dialog组件时,发现点击取消按钮会触发两次关闭事件: 1. 第一次参数为PointerEvent(事件对象) 2. 第二次参数为undefined 需要确保点击取消按钮时仅触发一次有效关闭事件,并传递正确…...
【RabbitMQ】事务
事务的简单配置及使用 配置事务管理器声明队列生产者代码测试 RabbitMQ是基于AMQP协议实现的,该协议实现了事务机制,因此RabbitMQ也支持事务机制. SpringAMQP也提供了对事务相关的操作.RabbitMQ事务允许开发者确保消息的发送和接收是原子性的,…...
算法刷题--贪心算法
要点 其实也没啥要点,就是求局部最优解,完事了将局部最优解汇总、筛选、max\min之类的,获得全局最优解,每一次都选择最优的,这个就是贪心算法。 例题 分发饼干-中等 大概就是一堆小孩g,每个人都有一个胃口g[i]&…...
