Modbus协议背景介绍

Modbus 是一种用于工业自动化控制系统的通信协议,由 Modicon(现为施耐德电气的一部分)在 1979 年开发。它是一种主从架构的协议,广泛应用于连接电子设备以实现数据交换。以下是 Modbus 协议的背景和主要特点:

  • 起源与发展:Modbus 最初由 Modicon 为其可编程逻辑控制器 (PLC) 开发,目的是实现不同设备之间的互操作性。随着时间的推移,Modbus 成为工业领域中最广泛使用的通信协议之一。
  • 开放标准:Modbus 是一个开放的协议,任何人都可以免费使用和实现。这使得它在工业自动化领域中得到了广泛的接受和应用。
  • 多种变体:随着技术的发展,Modbus 也演变出了多个版本和变体,适应不同的通信需求和物理介质。

主要特点

  • 主从架构:Modbus 采用主从(Master/Slave)架构。一个主设备可以与多个从设备通信,从设备之间不直接通信。主设备发出命令,从设备响应。
  • 简单易用:Modbus 协议相对简单,易于实现和理解,适用于资源有限的嵌入式系统。
  • 多种传输方式
    • Modbus RTU:基于串行通信的 Modbus 变体,通常使用 RS-232 或 RS-485 作为物理层。数据以二进制形式传输,具有较高的效率和较低的通信开销。
    • Modbus ASCII:另一种基于串行通信的变体,数据以 ASCII 字符形式传输,便于调试,但效率较低。
    • Modbus TCP/IP:基于以太网的 Modbus 变体,通过 TCP/IP 协议进行传输,适用于现代网络环境。
  • 数据模型:Modbus 定义了一种简单的数据模型,包含四种数据类型:
    • 离散输入:单个位,只读。
    • 线圈:单个位,读/写。
    • 输入寄存器:16 位寄存器,只读。
    • 保持寄存器:16 位寄存器,读/写。

应用领域

  • 工业自动化:如 PLC、SCADA 系统、传感器和执行器之间的通信。
  • 能源管理:如电表和能源管理系统的通信。
  • 楼宇自动化:如暖通空调 (HVAC) 系统、照明和安防系统的控制。

Modbus 因其开放性、简洁性和灵活性,成为工业控制和自动化领域中一种标准的通信协议。随着物联网 (IoT) 的发展,Modbus 也被广泛应用于各类智能设备和系统的互联。

Modbus协议版本

Modbus可用于串行链路或者TCP/IP以太网。

对于Modbus串行链路连接,存在两个变种,它们在协议细节上略有不同,主要区别是传输数据的字节表示上的不同。这两个变种包括RTU模式和ASCII模式。ModbusRTU模式是一种紧凑的,采用二进制表示数据的方式;而ModbusASCII模式是一种人类可读的、冗长的表示方式。这两个变种都使用串行链路通信(Serial Communication)方式,为了确保数据传输的完整性和准确性,RTU模式 下消息格式命令和数据带有循环冗余校验的校验和,而ASCII模式下消息格式采用纵向冗余校验的校验和,而且被配置为RTU模式的节点不能与配置为ASCII模式的节点通信,反之亦然。

对于通过TCP/IP(例如以太网)物理层的连接,存在多个Modbus/TCP变种,这种方式不需要校验和的计算。

Modbus通信流程概述

Modbus是一个请求/应答协议,并且提供统一的功能码用于数据传输服务。Modbus功能码是 Modbus 请求/应答 PDU(即 PROTOCOL DATA UNIT,协议 数据单元)的元素之一,所谓的PDU是Modbus协议定义的一个与基础通信层无关的简单协议数据单元。而在特定总线或网络上,Modbus协议则通过ADU(即APPLICATION DATA UNIT,应用数据单元)引入一些附加域,以实现完整而准确的数据传输。

为了寻求一种简洁的通信格式,Modbus 协议定义了PDU模型,即功能码+数据的格式;而为了适应多种传输模式,在PDU的基础上增加了必要的前缀(如地址域)和后缀(如差错校验),形成了ADU模型。

ADU与PDU之间的关系如下图所示。

1754964579-5426-1-1

主机设备(或客户端)创建Modbus应用数据单元形成查询报文,其中功能码标识了向从机设备(或服务器端)指示将执行哪种操作。功能码占用一个字节,有效的码字范围是十进制1~255(其中128~255为异常响应保留)。查询报文创建完毕,主机设备(或客户端)向从机设备(或服务器端)发送报文,从机设备(或服务器端)接收报文后,根据功能码做出相应的动作,并将响应报文返回给主机设备(或客户端),如下图所示。

1754964579-2803-1-2

如果在一个正确接收的Modbus ADU中,不出现与请求 Modbus功能有关的 差错,那么从机设备(或服务器端)将返回正常的响应报文。如果出现与请求Modbus功能有关的差错,那么响应报文的功能码域将包括一个异常码,主机设备(或客户端)能够根据异常码确定下一个执行的操作。

如下图所示,对于异常响应,从机设备(或服务器端)将返回一个与原始功能码等同的码值,但设置该原始功能码的最高有效位为逻辑1,用于通知主机设备(或客户端)。

1754964579-9135-1-3

 

Modbus协议初次了解

Modbus是一种广泛应用于工业自动化和控制系统中的通信协议,由Modicon(现属于施耐德电气)于1979年开发。它主要用于PLC(可编程逻辑控制器)之间,以及PLC与其他设备(如传感器、执行器、HMI、SCADA系统)之间的通信。Modbus由于其简单性和可靠性,成为工业领域最常用的协议之一。

Modbus的工作原理

Modbus遵循主从架构(Master-Slave Architecture),在通信网络中,通常有一个主设备(Master)和一个或多个从设备(Slave)。主设备负责发出请求,从设备接收并响应请求。

Modbus协议有多个版本,主要包括:

  1. Modbus RTU(Remote Terminal Unit):基于串行通信(如RS-232、RS-485)的协议。数据以二进制格式发送,传输效率高,通常用于串行链路。
  2. Modbus ASCII:与Modbus RTU类似,但数据以ASCII码格式发送,传输速率较低,但易于调试。
  3. Modbus TCP/IP:基于以太网的版本,采用TCP/IP协议栈来传输Modbus数据包,适用于局域网或广域网环境。它允许更灵活的网络拓扑,并支持更多设备接入。

通信帧结构

Modbus通信的基本单位是“帧”,一帧包括以下几个部分:

  • 地址域:用于标识目标设备的地址。
  • 功能码(Function Code):定义要执行的操作,如读取寄存器、写入数据等。
  • 数据域:根据功能码携带相应的数据(如寄存器地址、寄存器值等)。
  • 校验码:用于确保数据传输的完整性(在Modbus RTU和ASCII中使用)。

常用功能码

  • 01:读取线圈状态
  • 02:读取离散输入
  • 03:读取保持寄存器
  • 04:读取输入寄存器
  • 05:写单个线圈
  • 06:写单个寄存器
  • 15:写多个线圈
  • 16:写多个寄存器

Modbus的应用场景

Modbus协议广泛应用于工业控制系统中,尤其是在以下场景中:

  • 设备间数据采集和监控(如PLC与传感器、HMI的连接)。
  • 过程自动化中的数据传输。
  • 远程监控和控制系统(如SCADA系统)。

Modbus的开放性和简单性,使其成为工业物联网(IIoT)中广泛使用的协议之一。

Modbus测试工具ModbusPoll与Modbus Slave使用方法

一、介绍

Modbus Poll :Modbus主机仿真器,用于测试和调试Modbus从设备。该软件支持ModbusRTU、ASCII、TCP/IP。用来帮助开发人员测试Modbus从设备,或者其它Modbus协议的测试和仿真。它支持多文档接口,即,可以同时监视多个从设备/数据域。每个窗口简单地设定从设备ID,功能,地址,大小和轮询间隔。你可以从任意一个窗口读写寄存器和线圈。如果你想改变一个单独的寄存器,简单地双击这个值即可。或者你可以改变多个寄存器/线圈值。提供数据的多种格式方式,比如浮点、双精度、长整型(可以字节序列交换)。

Modbus Slave: Modbus从设备仿真器,可以仿真32个从设备/地址域。每个接口都提供了对EXCEL报表的OLE自动化支持。主要用来模拟Modbus从站设备,接收主站的命令包,回送数据包。帮助Modbus通讯设备开发人员进行Modbus通讯协议的模拟和测试,用于模拟、测试、调试Modbus通讯设备。可以32个窗口中模拟多达32个Modbus子设备。与Modbus Poll的用户界面相同,支持功能01, 02, 03, 04, 05, 06, 15, 16, 22和23,监视串口数据。

二、Modbus Poll使用

1)、安装注册:

安装完毕,在桌面能够看到ModbusPoll的快捷方式,双击该快捷方式,打开软件,打开后界面如下图所示。

001

单击Connection->Connect,弹出注册窗口;打开压缩包解压后的readme文件,复制ModbusPoll的序列号,粘贴到注册窗口的注册栏,如下图所示,点击OK,破解完毕。

002

2)、程序主窗口:

按照上面破解流程,按“OK”按钮即可完成注册。然后直接进入主窗口,如下图所示:

003

modbus poll 4.3.4程序主窗口

其中:Tx = 4表示向主站发送数据帧次数,图中为4次; Error = 0表示通讯错误次数,图中为0次; ID = 1表示模拟的Modbus子设备的设备地址,图中地址为1;F = 03表示所使用的Modbus功能码,图中为03功能码; SR = 1000ms表示扫描周期。红字部分,表示当前的错误状态,“No Connection”表示未连接状态。

3)、参数设置:

单击菜单【Setup】中【Read/Write Definition.. F8】进行参数设置,会弹出参数设置对话框。

004
005

其中:A. Slave为要访问的Modbus从站(从机)的地址,对应主窗口(主画面)中的ID值,默认为1。 B. Function 为寄存器功能码的选择,共四种,分别对应关系如下:

代码

中文名称

寄存器PLC地址

位操作/字操作

操作数量

01

读线圈状态

00001-09999

位操作

单个或多个

02

读离散输入状态

10001-19999

位操作

单个或多个

03

读保持寄存器

40001-49999

字操作

单个或多个

04

读输入寄存器

30001-39999

字操作

单个或多个

05

写单个线圈

00001-09999

位操作

单个

06

写单个保持寄存器

40001-49999

字操作

单个

15

写多个线圈

00001-09999

位操作

多个

16

写多个保持寄存器

40001-49999

字操作

多个

C. Address 为寄存器起始地址,默认从0开始。

D. Length为寄存器连续个数,默认为10个,对应组态软件的通道数量。

E. Scan Rate为读取数据周期,单位毫秒,默认为1000ms。

设置完成单击OK按钮,模拟窗口将显示定义的寄存器列表。

4)、显示设置:

数据显示方式设置:

默认情况下,寄存器数据的显示方式为Signed方式(16进制无符号二进制),数据范围为-32768~32767。如果用户要以其他数值方式显示,可以通过菜单【Display】进行选择设置,如下图所示:

006

地址格式设置: Modbus Slave默认使用PLC地址,【Display】菜单中【PLC Addresses(Base 1)】为默认选中状态,默认寄存器的起始地址为1开始,此点与组态软件的Modbus串口和TCP数据转发驱动是相同的。如果测试时需要设置起始地址为0开始,可选择【Protocol Addresses(Base 0)】。一般情况下使用默认PLC地址即可。

使用工具栏的”Communication Traffic”按钮,可以显示出当前发送命令和接受的数据。

5)、串口连接:

单击菜单【Connection】中【Connect.. F3】进行串口连接,如下图 :

007

其中:Port3,表示使用的串口(COM3),根据实际情况选择不同的串口或者TCP/IP进行连接。Mode,表示Modbus协议模式,使用串口时有效;使用TCP/IP时自动为TCP模式。Response Timeout,表示读取超时时间,从站在超时时间内没有返回数据,则认为通讯失败。Delay Between Polls,每次扫描的最小间隔时间,默认为10ms。Remote Server,表示TCP/IP模式时的终端从站设备的网络设置。IP Address,表示TCP/IP模式时从站IP地址。 Port,表示TCP模式时从站网络端口。用户可根据需要对参数进行设置,默认为:串口1、波特率9600、数据位8位、无校验位、1位停止位。确认设置后点击OK按钮即可。如果连接并读取正确,此时主窗口将显示读取寄存器的相关信息。

6)、寄存器值改变:

在主窗口寄存器地址上双击鼠标,弹出修改对话框,如下图:

008

在Value输入框中输入值确认即可。范围为-32768——32767。

其中:Slave为要访问的Modbus从站的地址,对应主画面中的ID值,默认为1。 Address 为当前操作的寄存器的地址。图中为对寄存器40001操作。 Use Function为所使用的功能码,可以选择06或16功能码进行写入。

7)、查看通讯数据帧:

单击【Display】菜单中的【Communication…】或者单击工具栏上【101】按钮,可以调出串口收发数据帧监视信息对话框“CommunicationTraffic”,用来查看分析收发的数据帧。如下图所示:

009+

其中:前6位为数据帧的序号。 Rx表示接收的数据帧。 Tx表示发送的数据帧。

8)、断开连接:

点击【Disconnect F4】即可断开连接结束测试,此时主窗口中出现红色的“No Connection”表示未连接状态。

三、Modbus Slave使用

1)、安装注册: 安装软件,安装完成之后,双击执行ModbusSlave快捷方式即可。

注册方法:单击Connection->Connect,弹出注册窗口;打开压缩包解压后的readme文件,复制ModbusPoll的序列号,粘贴到注册窗口的注册栏,点击OK,破解完毕。ModbusSlave的安装破解与ModbusPoll类似,在此不再赘述。

2)、主窗口: 软件主窗口如下图所示:

010

此时处于“Noconnection”未连接状态,如果只测试“04输出保持寄存器”,则可直接点击跳到第3.步,直接进行连接即可。

3)、参数设置: 点击菜单“Setup”中“Slave Definition.. F2”进行参数设置,会弹出如下图对话框。

011

其中:A.Slave为Modbus从站地址,对应主画面中的ID值,默认为1。 B. Function 为寄存器功能码的选择,共四种,分别对应关系如下:

代码

中文名称

寄存器PLC地址

位操作/字操作

操作数量

01

读线圈状态

00001-09999

位操作

单个或多个

02

读离散输入状态

10001-19999

位操作

单个或多个

03

读保持寄存器

40001-49999

字操作

单个或多个

04

读输入寄存器

30001-39999

字操作

单个或多个

05

写单个线圈

00001-09999

位操作

单个

06

写单个保持寄存器

40001-49999

字操作

单个

15

写多个线圈

00001-09999

位操作

多个

16

写多个保持寄存器

40001-49999

字操作

多个

C. Address 为寄存器起始地址。默认从1开始。 D. Length为寄存器连续个数。默认为10个。

设置OK按钮,模拟窗口将显示定义的寄存器列表:

012

其中:ID,表示模拟的Modbus子设备的设备地址;F,表示功能码 点击对应的寄存器,即可修改对应寄存器的值或者状态。比如2寄存器值修改成9,9寄存器值修改成100。

4)、显示设置: 数据显示方式设置: 默认情况下,寄存器数据的显示方式为Signed方式(16进制无符号二进制),数据范围为范围为-32768——32767。如果用户要以其他数值方式显示,可以通过菜单“Display”进行选择设置,如下图所示:

013

地址格式设置: Modbus Slave默认使用PLC地址,“Display”菜单中“PLC Addresses(Base 1)”为默认选中状态,默认寄存器的起始地址为1开始,此点与组态软件的Modbus串口和TCP数据转发驱动是相同的。如果测试时需要设置起始地址为0开始,可选择“Protocol Addresses(Base 0)”。一般情况下使用默认PLC地址即可。

5)、连接: 点击菜单“Connection”中“Connect.. F3”进行连接。弹出连接对话框:

014

其中:Port2,表示使用的串口(COM2),根据实际情况选择不同的串口或者TCP/IP进行连接 Mode,表示Modbus协议模式,使用串口时有效;使用TCP/IP时自动为TCP模式 Flow Control,表示流控制,串口模式时有效; Ignore Unit ID,表示TCP模式时忽略无效的组编号 用户可根据需要对串口参数进行设置,默认为:串口1,波特率9600,数据位8位,无校验位,1位停止位。确认设置后点击“OK”按钮即可。此时主窗口中红色的“No connection”表示未连接状态的信息消失,表明从站处于正常连接状态。

6)、寄存器值改变: 在主窗口寄存器地址上双击鼠标,弹出修改对话框,如下图:

015

在输入框中输入值确认即可。范围为-32768——32767。 其中:Auto increment选项钩选上后,对应寄存器的值可以每1秒种增加1。

7)、查看通讯数据帧: 点击“Display”菜单中的“Communication…”,可以调出串口收发数据帧监视信息对话框,用来查看分析收发的数据帧。如下图所示:

016

其中:前6位为数据帧的序号。 Rx:表示接收数据帧。 Tx: 表示发送数据帧。

8)、断开连接: 点击“Disconnect F4”即可断开连接结束测试,此时主窗口中出现红色的“No connection”表示未连接状态。

四、Modbus主机/从机模拟程序

1)、安装vspd虚拟串口工具。通过工具添加COM2和COM3两个端口。

017

2)、接下来打开已经安装的modbuspoll和modbus slave软件,分别按“F8”配置主从端的相关配置,如图:

018

以上配置的是10个计数器从机设备ID为1但只读取前6个计数器的数据,可根据自己的情况设置。

2、接下来按分别按“F3”进行连接,注意修改连接界面的端口,主从机分别选择我们虚拟出来的com2和com3端口,因为我只用到了RTU模式,所以其他选项如波特率9600,比特位8,校验位1,无等价位等可以保持不变,然后点击确定进行连接,未连接成功窗口第二行会给出提示信息。

通讯开始,主机端显示:TX=232,Err=0,ID=1,F=03,SR=1000ms。意思是,发送232次命令,错误次数,从机ID,功能号,轮询间隔。

使用工具栏的”Communication Traffic”按钮,可以显示出当前发送命令和接受的数据。

Modbus Slave调试工具下载:http://www.cr173.com/soft/21410.html

Modbus调试精灵 7.04绿色版下载:http://www.cr173.com/soft/5480.html

Spring Boot 启动参数指定其它目录配置文件

在现代微服务架构中,Spring Boot 作为热门的开发框架,以其简化配置和强大的约定优于配置的特性,受到了开发者的广泛青睐。然而,在实际开发中,常常需要根据不同的环境(如开发环境、测试环境、生产环境等)使用不同的配置文件。这时,Spring Boot 允许我们通过启动参数来指定其它目录的配置文件,从而灵活地管理这些配置。

Spring Boot 配置文件概述

Spring Boot 默认情况下,会从 src/main/resources 目录读取配置文件(如 application.properties 或 application.yml)。但是当项目部署在不同环境中时,往往需要根据需求使用其它目录下的配置文件。Spring Boot 提供了两种常用的方式来实现这一点。

方法一:通过 --spring.config.location 参数

我们可以在启动 Spring Boot 应用程序时,通过 --spring.config.location 参数来指定配置文件的位置。例如:

java -jar myapp.jar --spring.config.location=/path/to/config/

在上面的命令中,/path/to/config/ 是包含配置文件的目录。此时,Spring Boot 会在指定目录下查找 application.properties 或 application.yml 文件。

方法二:通过 SPRING_CONFIG_LOCATION 环境变量

除了启动参数外,Spring Boot 还允许通过环境变量来设置配置文件位置。我们可以在启动应用之前设置一个环境变量:

export SPRING_CONFIG_LOCATION=/path/to/config/
java -jar myapp.jar

同样,Spring Boot 会在指定的路径下查找配置文件。

代码示例

以下是一个简单的 Spring Boot 应用程序例子,其中演示了如何通过启动参数指定不同的配置文件目录。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MyApp {
    public static void main(String[] args) {
        SpringApplication.run(MyApp.class, args);
    }
}

在 resources 目录下,我们有一个 application.properties 配置文件。假设我们的目标是使用一个位于 /etc/myapp-config/ 目录下的配置文件,我们可以这样启动我们的应用:

java -jar myapp.jar --spring.config.location=file:/etc/myapp-config/

如果配置文件存在于该目录下,Spring Boot 将会使用它加载配置。

流程图

下面的流程图展示了 Spring Boot 通过启动参数加载配置文件的过程:

001

有 `spring.config.location`没有 `spring.config.location`启动 Spring Boot 应用检查启动参数加载指定目录的配置文件加载默认配置文件成功启动应用

关系图

在项目使用中,应用程序配置文件和配置项之间的关系可以表示如下:

002

总结

通过以上两种方式,我们可以灵活地指定不同目录下的配置文件。无论是在开发、测试还是生产环境中,都能确保程序正常运行,并使用合适的配置。合理地运用 Spring Boot 的这些功能,可以大大增强应用的可维护性和适应性。

Kubernetes

Kubernetes 是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,方便进行声明式配置和自动化。Kubernetes 拥有一个庞大且快速增长的生态系统,其服务、支持和工具的使用范围广泛。

此页面是 Kubernetes 的概述。

Kubernetes 这个名字源于希腊语,意为“舵手”或“飞行员”。K8s 这个缩写是因为 K 和 s 之间有 8 个字符的关系。 Google 在 2014 年开源了 Kubernetes 项目。 Kubernetes 建立在 Google 大规模运行生产工作负载十几年经验的基础上, 结合了社区中最优秀的想法和实践。

为什么需要 Kubernetes,它能做什么?

容器是打包和运行应用程序的好方式。在生产环境中, 你需要管理运行着应用程序的容器,并确保服务不会下线。 例如,如果一个容器发生故障,则你需要启动另一个容器。 如果此行为交由给系统处理,是不是会更容易一些?

这就是 Kubernetes 要来做的事情! Kubernetes 为你提供了一个可弹性运行分布式系统的框架。 Kubernetes 会满足你的扩展要求、故障转移你的应用、提供部署模式等。 例如,Kubernetes 可以轻松管理系统的 Canary (金丝雀) 部署。

Kubernetes 为你提供:

  • 服务发现和负载均衡

    Kubernetes 可以使用 DNS 名称或自己的 IP 地址来暴露容器。 如果进入容器的流量很大, Kubernetes 可以负载均衡并分配网络流量,从而使部署稳定。

  • 存储编排

    Kubernetes 允许你自动挂载你选择的存储系统,例如本地存储、公共云提供商等。

  • 自动部署和回滚

    你可以使用 Kubernetes 描述已部署容器的所需状态, 它可以以受控的速率将实际状态更改为期望状态。 例如,你可以自动化 Kubernetes 来为你的部署创建新容器, 删除现有容器并将它们的所有资源用于新容器。

  • 自动完成装箱计算

    你为 Kubernetes 提供许多节点组成的集群,在这个集群上运行容器化的任务。 你告诉 Kubernetes 每个容器需要多少 CPU 和内存 (RAM)。 Kubernetes 可以将这些容器按实际情况调度到你的节点上,以最佳方式利用你的资源。

  • 自我修复

    Kubernetes 将重新启动失败的容器、替换容器、杀死不响应用户定义的运行状况检查的容器, 并且在准备好服务之前不将其通告给客户端。

  • 密钥与配置管理

    Kubernetes 允许你存储和管理敏感信息,例如密码、OAuth 令牌和 SSH 密钥。 你可以在不重建容器镜像的情况下部署和更新密钥和应用程序配置,也无需在堆栈配置中暴露密钥。

  • 批处理执行 除了服务外,Kubernetes 还可以管理你的批处理和 CI(持续集成)工作负载,如有需要,可以替换失败的容器。
  • 水平扩缩 使用简单的命令、用户界面或根据 CPU 使用率自动对你的应用进行扩缩。
  • IPv4/IPv6 双栈 为 Pod(容器组)和 Service(服务)分配 IPv4 和 IPv6 地址。
  • 为可扩展性设计 在不改变上游源代码的情况下为你的 Kubernetes 集群添加功能。

Kubernetes 不是什么

Kubernetes 不是传统的、包罗万象的 PaaS(平台即服务)系统。 由于 Kubernetes 是在容器级别运行,而非在硬件级别,它提供了 PaaS 产品共有的一些普遍适用的功能, 例如部署、扩展、负载均衡,允许用户集成他们的日志记录、监控和警报方案。 但是,Kubernetes 不是单体式(monolithic)系统,那些默认解决方案都是可选、可插拔的。 Kubernetes 为构建开发人员平台提供了基础,但是在重要的地方保留了用户选择权,能有更高的灵活性。

Kubernetes:

  • 不限制支持的应用程序类型。 Kubernetes 旨在支持极其多种多样的工作负载,包括无状态、有状态和数据处理工作负载。 如果应用程序可以在容器中运行,那么它应该可以在 Kubernetes 上很好地运行。
  • 不部署源代码,也不构建你的应用程序。 持续集成(CI)、交付和部署(CI/CD)工作流取决于组织的文化和偏好以及技术要求。
  • 不提供应用程序级别的服务作为内置服务,例如中间件(例如消息中间件)、 数据处理框架(例如 Spark)、数据库(例如 MySQL)、缓存、集群存储系统 (例如 Ceph)。这样的组件可以在 Kubernetes 上运行,并且/或者可以由运行在 Kubernetes 上的应用程序通过可移植机制(例如开放服务代理)来访问。
  • 不是日志记录、监视或警报的解决方案。 它集成了一些功能作为概念证明,并提供了收集和导出指标的机制。
  • 不提供也不要求配置用的语言、系统(例如 jsonnet),它提供了声明性 API, 该声明性 API 可以由任意形式的声明性规范所构成。
  • 不提供也不采用任何全面的机器配置、维护、管理或自我修复系统。
  • 此外,Kubernetes 不仅仅是一个编排系统,实际上它消除了编排的需要。 编排的技术定义是执行已定义的工作流程:首先执行 A,然后执行 B,再执行 C。 而 Kubernetes 包含了一组独立可组合的控制过程,可以持续地将当前状态驱动到所提供的预期状态。 你不需要在乎如何从 A 移动到 C,也不需要集中控制,这使得系统更易于使用且功能更强大、 系统更健壮,更为弹性和可扩展。

Kubernetes 的历史背景

让我们回顾一下为何 Kubernetes 能够裨益四方。

微信截图_20250718152644

传统部署时代:

早期,各个组织是在物理服务器上运行应用程序。 由于无法限制在物理服务器中运行的应用程序资源使用,因此会导致资源分配问题。 例如,如果在同一台物理服务器上运行多个应用程序, 则可能会出现一个应用程序占用大部分资源的情况,而导致其他应用程序的性能下降。 一种解决方案是将每个应用程序都运行在不同的物理服务器上, 但是当某个应用程序资源利用率不高时,剩余资源无法被分配给其他应用程序, 而且维护许多物理服务器的成本很高。

虚拟化部署时代:

因此,虚拟化技术被引入了。虚拟化技术允许你在单个物理服务器的 CPU 上运行多台虚拟机(VM)。 虚拟化能使应用程序在不同 VM 之间被彼此隔离,且能提供一定程度的安全性, 因为一个应用程序的信息不能被另一应用程序随意访问。

虚拟化技术能够更好地利用物理服务器的资源,并且因为可轻松地添加或更新应用程序, 而因此可以具有更高的可扩缩性,以及降低硬件成本等等的好处。 通过虚拟化,你可以将一组物理资源呈现为可丢弃的虚拟机集群。

每个 VM 是一台完整的计算机,在虚拟化硬件之上运行所有组件,包括其自己的操作系统。

容器部署时代:

容器类似于 VM,但是更宽松的隔离特性,使容器之间可以共享操作系统(OS)。 因此,容器比起 VM 被认为是更轻量级的。且与 VM 类似,每个容器都具有自己的文件系统、CPU、内存、进程空间等。 由于它们与基础架构分离,因此可以跨云和 OS 发行版本进行移植。

容器因具有许多优势而变得流行起来,例如:

  • 敏捷应用程序的创建和部署:与使用 VM 镜像相比,提高了容器镜像创建的简便性和效率。
  • 持续开发、集成和部署:通过快速简单的回滚(由于镜像不可变性), 提供可靠且频繁的容器镜像构建和部署。
  • 关注开发与运维的分离:在构建、发布时创建应用程序容器镜像,而不是在部署时, 从而将应用程序与基础架构分离。
  • 可观察性:不仅可以显示 OS 级别的信息和指标,还可以显示应用程序的运行状况和其他指标信号。
  • 跨开发、测试和生产的环境一致性:在笔记本计算机上也可以和在云中运行一样的应用程序。
  • 跨云和操作系统发行版本的可移植性:可在 Ubuntu、RHEL、CoreOS、本地、 Google Kubernetes Engine 和其他任何地方运行。
  • 以应用程序为中心的管理:提高抽象级别,从在虚拟硬件上运行 OS 到使用逻辑资源在 OS 上运行应用程序。
  • 松散耦合、分布式、弹性、解放的微服务:应用程序被分解成较小的独立部分, 并且可以动态部署和管理 – 而不是在一台大型单机上整体运行。
  • 资源隔离:可预测的应用程序性能。
  • 资源利用:高效率和高密度。

更多请参考:https://kubernetes.io/zh-cn/docs/concepts/overview/

 
Copyright © 2008-2021 lanxinbase.com Rights Reserved. | 粤ICP备14086738号-3 |