三、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; 拒绝连接

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

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

相关文章

网络DNS怎么更改?

访问速度慢或某些网站无法打开?改变网络DNS设置可能会帮助解决这些问题。本文将详细介绍如何更改网络DNS,包括更改的原因、具体步骤。 一、为什么要更改DNS? 更改DNS的原因有很多,以下是一些主要的考虑因素:某些公共DNS服务器的响应速度比…

江科大51单片机笔记【12】DS18B20温度传感器(上)

写在前言 此为博主自学江科大51单片机(B站)的笔记,方便后续重温知识 在后面的章节中,为了防止篇幅过长和易于查找,我把一个小节分成两部分来发,上章节主要是关于本节课的硬件介绍、电路图、原理图等理论…

基于springboot+vue的佳途旅行分享预约平台

一、系统架构 前端:vue2 | element-ui | html 后端:springboot | mybatis-plus 环境:jdk1.8 | mysql | maven | node 二、代码及数据库 三、功能介绍 01. web端-注册 02. web端-登录 03. web端-系统主页1 04. web端-系统主页2 05. we…

【数据结构】2算法及分析

0 章节 1.4到1.5小节。 掌握算法概念、特性、描述、算法性能时间复杂度和空间复杂度; 理解递归含义? 掌握实现递归的条件和时机; 应用简单递归问题的算法设计; 重点 算法…

【一起学Rust | Tauri2.0框架】基于 Rust 与 Tauri 2.0 框架实现软件开机自启

文章目录 前言 一、准备工作1.1 环境搭建1.2 创建 Tauri 项目1.3 添加依赖 二、实现开机自启的基本原理2.1 开机自启的基本概念2.2 Tauri 应用的生命周期 三、Windows 平台实现3.1 Windows 注册表机制3.2 实现步骤3.3 注意事项 四、Linux 平台实现4.1 Linux systemd 服务4.2 实…

一周热点-OpenAI 推出了 GPT-4.5,这可能是其最后一个非推理模型

在人工智能领域,大型语言模型一直是研究的热点。OpenAI 的 GPT 系列模型在自然语言处理方面取得了显著成就。GPT-4.5 是 OpenAI 在这一领域的又一力作,它在多个方面进行了升级和优化。 1 新模型的出现 GPT-4.5 目前作为研究预览版发布。与 OpenAI 最近的 o1 和 o3 模型不同,…

css中的浮动

在 CSS 中,浮动(float)是一种定位元素的方式,它允许元素脱离正常的文档流,并向左或向右移动,直到其边缘碰到包含块或者另一个浮动元素的边缘。下面从多个方面详细介绍 CSS 浮动: 一&#xff0c…

element-plus中form表单组件的使用

1.如何让每个表单项对齐? 问题描述:如下图,每个表单项的输入框/下拉框/日期选择器是没有对齐的,我们希望它们纵向是对齐的。 解决方案:给el-form标签,加上label-width"100px"即可。意思就是给每个…

线性搜索算法

何时使用线性搜索算法? 当处理一个小数据集时。当搜索存储在连续内存中的数据集时。 线性搜索算法在什么情况下优于其他搜索算法? 当列表或数组未排序时,或者当输入的大小相对较小时,首选线性搜索算法。它易于实现,并…

踩坑记录:yolov5环境版本要求比较严苛?

在安装yolov5环境时,numpy安装失败报错metadata-generation-failed 报错如下: Collecting numpy1.18.5 (from -r /*****/yolov5-5.0/requirements.txt (line 5))Using cached https://pypi.tuna.tsinghua.edu.cn/packages/01/1b/d3ddcabd5817be02df0e6…

Java设计模式系列:单例模式的7种实现与适用场景

一、单例模式核心价值与实现原则 1. 使用场景 全局配置类(如数据库连接池)日志记录器Spring默认Bean作用域硬件设备访问(如打印机)2. 设计三原则 私有构造器:禁止外部实例化静态实例持有:全局唯一访问点延迟加载(可选):避免资源浪费二、七种单例实现方式深度解析 1.…

OpenManus-通过源码方式本地运行OpenManus,含踩坑及处理方案,chrome.exe位置修改

前言:最近 Manus 火得一塌糊涂啊,OpenManus 也一夜之间爆火,那么作为程序员应该来尝尝鲜 1、前期准备 FastGithub:如果有科学上网且能正常访问 github 则不需要下载此软件,此软件是提供国内直接访问 githubGit&#…

【最新】DeepSeek 实用集成工具有那些?

deepseek 系列github仓库地址 【主页】deepseek-aiDeepSeek-R1DeepSeek-V3DeepSeek-VL2【本文重点介绍】awesome-deepseek-integration 注意:以下内容来自awesome-deepseek-integration DeepSeek 实用集成(awesome-deepseek-integration) 将…

开源!速度100Kb/s的有线和无线双模ESP32S3芯片的DAP-Link调试器

开源!速度100Kb/s的有线和无线双模ESP32S3芯片的DAP-Link调试器 目录 开源!速度100Kb/s的有线和无线双模ESP32S3芯片的DAP-Link调试器本项目未经授权,禁止商用!本项目未经授权,禁止商用!本项目未经授权&…

Flink测试环境Standalone模式部署实践

1.JDK环境 参考官方文档: https://nightlies.apache.org/flink/flink-docs-release-1.20/release-notes/flink-1.18/ 2.下载Flink:https://flink.apache.org/downloads/ 本次验证用的是:https://www.apache.org/dyn/closer.lua/flink/flink…

在16卡服务器上使用最新版的CUDA和驱动训练`llama - 2 - 7b`和`llama - 2 - 70b`模型,并生成训练指标数据

要在16卡服务器上使用最新版的CUDA和驱动训练llama - 2 - 7b和llama - 2 - 70b模型,并生成训练指标数据,你可以按照以下步骤进行: 1. 环境准备 确保你的服务器已经安装了最新版的CUDA和驱动,并且安装了必要的Python库&#xff0…

macOS 终端优化

macOS 安装、优化、还原、升级 Oh My Zsh 完全指南 🚀 Oh My Zsh 是 macOS 终端增强的利器,它能提供强大的自动补全、主题定制和插件支持,让你的终端更高效、更炫酷。本文将全面介绍 如何安装、优化、还原、重新安装和升级 Oh My Zsh&#x…

计算机网络--访问一个网页的全过程

文章目录 访问一个网页的全过程应用层在浏览器输入URL网址http://www.aspxfans.com:8080/news/index.aspboardID5&ID24618&page1#r_70732423通过DNS获取IP地址生成HTTP请求报文应用层最后 传输层传输层处理应用层报文建立TCP连接传输层最后 网络层网络层对TCP报文进行处…

CAAC无人机考证备考清单

一、培训机构内部的考试大纲/备考指南 《机长笔试大纲》 《机长口试大纲》 《教员笔试大纲》 《教员口试大纲》(不同机构的文件、命名可能不同) 二、培训机构内部题库 题库内容包含(仿照多旋翼题库制作): 分类 子分…

【BUG】类文件具有错误的版本 61.0, 应为 52.0,请删除该文件或确保该文件位于正确的类路径子目录中。

报错: [ERROR] 类文件具有错误的版本 61.0, 应为 52.0 [ERROR] 请删除该文件或确保该文件位于正确的类路径子目录中。 报错截图: 原因:Java 版本和 Spring 不兼容,显示 Spring 版本过高 解决方法 1. 使用更高版本的 J…