pod介绍之 容器分类与重启策略

目录

一   pod 基础概念介绍

1,pod 是什么

2,Pod使用方式

3,如何解决一个pod 多容器通信

4,pod 组成

5, k8s 中的 pod

二   pause容器

1,pause容器 是什么

2,pause容器作用

3, pause容器功能

4, pause容器 的意义

三   Pod 分类

1,自主式Pod

2,控制器管理的Pod

四   pod 如何通信

1,同一个主机中的Pod通信

2,不同主机间的Pod通信

3,同一个Pod内部容器间通信

五   Pod中  容器的分类

1,基础容器(infrastructure container)

2,初始化容器(initcontainers)

2.1 初始化容器是什么

2.2 初始化容器特点

2.3 Init 的容器作用

3,  应用容器(Maincontainer)

六     Init容器实例

1,官网示例

2,演示Init容器

2.1 写一个 yaml 文件

2.2 执行yaml  查看结果 

2.3  准备 service

2.4 准备mydb

3,  特别说明

六   镜像拉取策略(image PullPolicy)

1,镜像拉取策略有哪些

2, yaml 语法

七    重启策略(restartPolicy)

1,重启策略 有哪些

2,yaml 语法


一   pod 基础概念介绍

1,pod 是什么

Pod是kubernetes中最小的资源管理组件Pod也是最小化运行容器化应用的资源对象。一个Pod代表着集群中运行的一个进程。kubernetes中其他大多数组件都是围绕着Pod来进行支撑和扩展Pod功能的,例如,用于管理Pod运行的StatefulSet和Deployment等控制器对象,用于暴露Pod应用的Service和Ingress对象,为Pod提供存储的PersistentVolume存储资源对象等。
 

2,Pod使用方式

一个Pod中运行一个容器。“每个Pod中一个容器”的模式是最常见的用法;在这种使用方式中,你可以把Pod想象成是单个容器的封装,kuberentes管理的是Pod而不是直接管理容器。

在一个Pod中同时运行多个容器。一个Pod中也可以同时封装几个需要紧密耦合互相协作的容器,它们之间共享资源。这些在同一个Pod中的容器可以互相协作成为一个service单位,比如一个容器共享文件,另一个“sidecar”容器来更新这些文件。Pod将这些容器的存储资源作为一个实体来管理。(只适用于收集日志,监控

3,如何解决一个pod 多容器通信

pause容器

一个Pod下的容器必须运行于同一节点上。现代容器技术建议一个容器只运行一个进程,该进程在容器中PID命令空间中的进程号为1,可直接接收并处理信号,进程终止时容器生命周期也就结束了。若想在容器内运行多个进程,需要有一个类似Linux操作系统init进程的管控类进程,以树状结构完成多进程的生命周期管理。运行于各自容器内的进程无法直接完成网络通信,这是由于容器间的隔离机制导致,k8s中的Pod资源抽象正是解决此类问题,Pod对象是一组容器的集合,这些容器共享Network、UTS及IPC命令空间,因此具有相同的域名、主机名和网络接口,并可通过IPC直接通信。
 

4,pod 组成

pause容器(理解为 pod 里的 管理员) 也可以叫基础容器 父容器

每个Pod都有一个特殊的被称为“基础容器”的Pause容器。Pause容器对应的镜像属于Kubernetes平台的一部分,除了Pause容器,每个Pod还包含一个或者多个紧密相关的用户应用容器。
 

5, k8s 中的 pod

  1. containerPort:

    • 定义: 这是指定在 Pod 规格(spec)中容器级别的端口,代表容器内部应用程序监听的端口。它告诉 Kubernetes 容器正在监听哪个端口以便接收网络请求。

    • 用途: 当 Kubernetes 管理容器时,会用到此信息来了解容器期望接收网络连接的端口,尽管它并不直接用于 Service 路由,但它对于理解容器的网络需求是必要的。

  2. targetPort:

    • 定义: 这是 Service 定义的一部分,指定 Service 应该如何将接收到的流量路由到后端 Pods 的具体端口上。它可以是一个数字或一个字符串(对应于 PodSpec 中的端口名称)。

    • 用途: 即便 targetPort 可以与 containerPort 相同,但它提供了灵活性,允许你将 Service 流量定向到容器的不同端口,或者在复杂的配置中使用端口名称进行路由。

  3. port (或称为 servicePort):

    • 定义: 这是在 Service 定义中指定的逻辑端口,用于集群内部的通信。它是 Service 的一部分,集群内的其他组件可以通过这个端口访问 Service,而无需知道后端 Pod 的具体细节。

    • 用途: 作为 Service 的内部访问点,它简化了服务发现过程,使得服务调用方只需要知道 Service 的名字和这个端口,而不需要关心后端 Pod 的 IP 地址或端口。

  4. nodePort:

    • 定义: 当 Service 类型设置为 NodePort 时,Kubernetes 会在每个节点上开放一个特定范围内的静态端口(默认通常是 30000-32767),并将其绑定到 Service 的 port 上。

    • 用途: nodePort 允许外部流量通过任意节点的 IP 地址加上这个端口直接访问到 Service。这为集群外部的客户端提供了一种访问 Service 的方式,而无需设置更复杂的负载均衡器或入口控制器。

总结起来,这四个概念描述了 Kubernetes 中网络流量从外部到容器内部的路由路径,以及集群内部的服务发现机制。containerPort 关注容器自身,targetPortport 服务于 Service 的定义和内部路由,而 nodePort 则扩展了服务的可访问性至集群外部。

二   pause容器

1,pause容器 是什么

Pod资源中针对各容器提供网络命令空间等共享机制的是底层基础容器pause,基础容器(也可称为父容器)pause就是为了管理Pod容器间的共享操作,这个父容器需要能够准确地知道如何去创建共享运行环境的容器,还能管理这些容器的生命周期。为了实现这个父容器的构想,kubernetes中,用pause容器来作为一个Pod中所有容器的父容器。这个pause容器有两个核心的功能,一是它提供整个Pod的Linux命名空间的基础。二来启用PID命名空间,它在每个Pod中都作为PID为1进程(init进程),并回收僵尸进程。
 

2,pause容器作用

pause容器使得Pod中的所有容器可以共享两种资源:网络和存储。

网络
每个Pod都会被分配一个唯一的IP地址。Pod中的所有容器共享网络空间,包括IP地址和端口。Pod内部的容器可以使用localhost互相通信。Pod中的容器与外界通信时,必须分配共享网络资源(例如使用宿主机的端口映射)。

存储
Pod可以指定多个共享的Volume。Pod中的所有容器都可以访问共享的Volume。Volume也可以用来持久化Pod中的存储资源,以防容器重启后文件丢失。

3, pause容器功能

  • 在pod中担任Linux命名空间(如网络命令空间)共享的基础;
  • 启用PID命名空间,开启init进程。
  • 协调他的容器生命周期
  • 提供健康检查和生存探针

4, pause容器 的意义

●原因一:在一组容器作为一个单元的情况下,难以对整体的容器简单地进行判断及有效地进行行动。比如,一个容器死亡了 那么引入与业务无关的Pause容器作为Pod的基础容器,以它的状态代表着整个容器组的状态,这样就可以解决该问题。

●原因二:Pod里的多个应用容器共享Pause容器的IP,共享Pause容器挂载的Volume,这样简化了应用容器之间的通信问题,也解决了容器之间的文件共享问题。

三   Pod 分类

1,自主式Pod

这种Pod本身是不能自我修复的,当Pod被创建后(不论是由你直接创建还是被其他Controller),都会被Kuberentes调度到集群的Node上。直到Pod的进程终止、被删掉、因为缺少资源而被驱逐、或者Node故障之前这个Pod都会一直保持在那个Node上。Pod不会自愈。如果Pod运行的Node故障,或者是调度器本身故障,这个Pod就会被删除。同样的,如果Pod所在Node缺少资源或者Pod处于维护状态,Pod也会被驱逐。(没有存到etcd
 

2,控制器管理的Pod

Kubernetes使用更高级的称为Controller的抽象层,来管理Pod实例。Controller可以创建和管理多个Pod,提供副本管理、滚动升级和集群级别的自愈能力。例如,如果一个Node故障,Controller就能自动将该节点上的Pod调度到其他健康的Node上。虽然可以直接使用Pod,但是在Kubernetes中通常是使用Controller来管理Pod的。
 

四   pod 如何通信

1,同一个主机中的Pod通信

  1. 共享网络环境:所有Pod都处在同一个物理主机上,因此它们共享主机的网络栈,但各自拥有独立的IP地址。

  2. 虚拟网络设备:每个Pod有自己的网络空间(网络命名空间),并通过虚拟以太网接口(veth pair)与主机的网络环境相连。这就像每个Pod有一根“虚拟网线”连接到一起。

  3. 直接IP通信:当一个Pod需要与同主机上的另一个Pod通信时,它直接使用对方Pod的IP地址发送数据包。因为它们都在同一台机器上,所以数据不需要离开主机就能到达目标Pod。

  4. 系统自动路由:操作系统会根据目标IP地址识别出这是同主机内的通信,然后通过内部的虚拟网络路径直接将数据传递给目标Pod,这个过程对于用户和应用来说是透明的。

简单来说,就像是住在同一栋楼里的两户人家,他们虽然门牌号不同(各自有独立IP),但因为同在一栋楼(同一主机),可以直接按门牌号(IP地址)互寄信件(发送数据),无需走出大楼。

可以通过localhost(即127.0.0.1)或者直接使用Pod的IP地址进行通信,因为它们共享网络命名空间。但推荐使用Kubernetes提供的Pod的IP地址进行通信

2,不同主机间的Pod通信

对于跨节点的Pod通信,通常需要通过Kubernetes Service来实现:

  1. Cluster IP Service:Kubernetes会为每个定义的Service自动分配一个虚拟IP地址(Cluster IP),并通过iptables或其他网络插件(如Calico、Flannel等)将流量路由到后端Pod上。不同节点上的Pod可以通过这个Cluster IP访问到服务,而无需关心后端Pod的实际位置或IP地址。

  2. NodePort Service:如果需要从集群外部访问Pod,可以使用NodePort类型的服务,它会在每个节点上开放一个特定的端口,通过这个端口可以路由到Service对应的Pod上。

  3. LoadBalancer Service(云环境)或ExternalIP(本地或自建集群):在需要更高水平的负载均衡时,可以使用LoadBalancer Service(适用于云提供商),它会在公有云上创建一个负载均衡器,并将流量分发到多个节点。对于非云环境,可以手动配置ExternalIP来达到类似效果。

3,同一个Pod内部容器间通信

pause 容器

在同一个Pod中的多个容器之间通信非常直接,因为它们共享同一个网络命名空间。这意味着它们本质上是在同一个“网络环境下”,可以像在同一台机器上的进程一样互相通信。下面是几个关键点:

  1. 共享网络栈:Pod中的所有容器共享同一个网络栈,包括IP地址、端口空间、以及网络设备。因此,容器间可以使用localhost或者Pod的IP地址进行通信。

  2. 端口访问:容器可以绑定到不同的端口,但因为它们共享网络命名空间,可以从任一容器通过localhost加上对应的端口号访问其他容器的服务。

  3. 通信示例:如果容器A运行了一个web服务在端口8080上,容器B可以直接通过http://localhost:8080来访问容器A的服务,无需任何特殊的网络配置。

  4. 共享卷通信:虽然不是直接的网络通信方式,但通过共享卷(Volumes),容器之间也可以交换文件或状态信息,实现数据层面的通信。

  5. 无需额外配置:由于网络命名空间的共享,容器间通信无需配置额外的网络路由或服务发现机制,这也是将紧密相关的服务放在同一Pod中的优势之一。

总结来说,在同一个Pod内的容器通信十分简便,几乎就如同它们是运行在同一台机器上的不同进程,可以直接通过本地环回地址(localhost)或者Pod的IP来互相通信。

五   Pod中  容器的分类

1,基础容器(infrastructure container)

每次创建 Pod 时候就会创建,运行的每一个Pod都有一个 pause-amd64 的基础容器自动会运行,对于用户是透明的   用于维护整个 Pod 网络和存储空间

2,初始化容器(initcontainers)

2.1 初始化容器是什么

Init容器必须在应用程序容器启动之前运行完成,而应用程序容器是并行运行的,所以Init容器能够提供了一种简单的阻塞或延迟应用容器的启动的方法。
 

2.2 初始化容器特点

Init 容器与普通的容器非常像,除了以下两点:

●Init 容器总是运行到成功完成为止 (循环)

●每个 Init 容器都必须在下一个 Init 容器启动之前成功完成启动和退出
如果 Pod 的 Init 容器失败,k8s 会不断地重启该 Pod,直到 Init 容器成功为止。然而,如果 Pod 对应的重启策略(restartPolicy)为 Never,它不会重新启动。
 

2.3 Init 的容器作用

因为init容器具有与应用容器分离的单独镜像,其启动相关代码具有如下优势:

●Init 容器可以包含一些安装过程中应用容器中不存在的实用工具或个性化代码。例如,没有必要仅为了在安装过程中使用类似 sed、 awk、 python 或 dig 这样的工具而去FROM 一个镜像来生成一个新的镜像。

●Init 容器可以安全地运行这些工具,避免这些工具导致应用镜像的安全性降低。

●应用镜像的创建者和部署者可以各自独立工作,而没有必要联合构建一个单独的应用镜像。

●Init 容器能以不同于Pod内应用容器的文件系统视图运行。因此,Init容器可具有访问 Secrets 的权限,而应用容器不能够访问

●由于 Init 容器必须在应用容器启动之前运行完成,因此 Init 容器提供了一种机制来阻塞或延迟应用容器的启动, (打个比方,tomcat 必须基于jdk)
直到满足了一组先决条件。一旦前置条件满足,Pod内的所有的应用容器会并行启动。
 

3,  应用容器(Maincontainer)

并行启动
 

六     Init容器实例

1,官网示例

https://kubernetes.io/zh-cn/docs/concepts/workloads/pods/init-containers/
 

2,演示Init容器

2.1 写一个 yaml 文件

不管顺序 都是先看初始化容器

初始化容器 从上往下

apiVersion: v1
kind: Pod
metadata:name: myapp-podlabels:app: myapp
spec:containers:- name: myapp-containerimage: busybox:1.28command: ['sh', '-c', 'echo The app is running! && sleep 3600']initContainers:- name: init-myserviceimage: busybox:1.28command: ['sh', '-c', 'until nslookup myservice; do echo waiting for myservice; sleep 2; done;']- name: init-mydbimage: busybox:1.28command: ['sh', '-c', 'until nslookup mydb; do echo waiting for mydb; sleep 2; done;']

这段YAML配置文件定义了一个Kubernetes Pod资源对象,详细解释如下:

  • apiVersion: v1:指定了该资源对象使用的API版本是v1,这是Kubernetes核心API的一个稳定版本,用于定义基础资源如Pods。

  • kind: Pod:声明了资源的对象类型是Pod,Pod是Kubernetes中最小的可部署的单元,可以包含一个或多个共享网络和存储空间的容器。

  • metadata: 部分提供了关于此Pod的元数据:

    • name: myapp-pod:为Pod指定了一个名称,即myapp-pod
    • labels: 定义了一组标签(key-value对),这里只有一个标签app: myapp,用于标识Pod属于哪个应用,便于通过标签选择器(label selectors)进行操作或配置Service等资源。
  • spec: 部分描述了Pod期望的状态配置:

    • containers: 列表定义了Pod中运行的主容器集合。

      • 第一个容器:
        • name: myapp-container:容器的名称。
        • image: busybox:1.28:指定容器使用的镜像是busybox:1.28,这是一个轻量级的Linux发行版,常用于测试和基础命令行操作
        • command: ['sh', '-c', 'echo The app is running! && sleep 3600']:容器启动时执行的命令,这里先打印一条消息,然后让容器睡眠3600秒(1小时),模拟一个持续运行的服务。
    • initContainers: 列表定义了初始化容器集合,这些容器会在应用容器启动之前运行,并且必须全部成功退出后,应用容器才会启动

      • init-myservice:等待名为myservice的服务解析成功,通过nslookup命令检查,如果服务未就绪则每隔2秒重试。
      • init-mydb:与上述类似,但等待的是名为mydb的服务。

通过这样的配置,Pod定义了一个主要的容器myapp-container来运行应用,并且在启动应用容器之前,会先执行两个初始化容器来确保依赖的服务(myservicemydb)已经准备就绪。这种方式确保了服务间的依赖关系得到妥善处理,提高了应用部署的健壮性。

2.2 执行yaml  查看结果 

执行

查看pod 信息 kubectl describe pod myapp-pod

或者 直接看日志   可以看到一直在等待 init 容器

也可以查看pod 状态   看到

2.3  准备 service
apiVersion: v1
kind: Service
metadata:name: myservice
spec:ports:- protocol: TCPport: 80targetPort: 9376

查看pod   显示init 容器已经准备好一个

2.4 准备mydb
apiVersion: v1
kind: Service
metadata:name: mydb
spec:ports:- protocol: TCPport: 80targetPort: 9377

查看pod 应用容器running

3,  特别说明

●在Pod启动过程中,Init容器会按顺序在网络和数据卷初始化之后启动。每个容器必须在下一个容器启动之前成功退出。
●如果由于运行时或失败退出,将导致容器启动失败,它会根据Pod的restartPolicy指定的策略进行重试。然而,如果Pod的restartPolicy设置为Always,Init容器失败时会使用RestartPolicy策略。
●在所有的Init容器没有成功之前,Pod将不会变成Ready状态。Init容器的端口将不会在Service中进行聚集。正在初始化中的Pod处于Pending状态,但应该会将Initializing状态设置为true。
●如果Pod重启,所有Init容器必须重新执行。
●对Init容器spec的修改被限制在容器image字段,修改其他字段都不会生效。更改Init容器的image字段,等价于重启该Pod。
●Init容器具有应用容器的所有字段。除了readinessProbe,因为Init容器无法定义不同于完成(completion)的就绪(readiness)之外的其他状态。这会在验证过程中强制执行。
●在Pod中的每个app和Init容器的名称必须唯一;与任何其它容器共享同一个名称,会在验证时抛出错误。
 

六   镜像拉取策略(image PullPolicy)

Pod 的核心是运行容器,必须指定容器引擎,比如 Docker,启动容器时,需要拉取镜像,k8s 的镜像拉取策略可以由用户指定

1,镜像拉取策略有哪些

IfNotPresent:在镜像已经存在的情况下,kubelet 将不再去拉取镜像,仅当本地缺失时才从仓库中拉取,默认的镜像拉取策略

Always:每次创建 Pod 都会重新拉取一次镜像

Never:Pod 不会主动拉取这个镜像,仅使用本地镜像

注意:对于标签为“:latest”的镜像文件,其默认的镜像获取策略即为“Always”;而对于其他标签的镜像,其默认策略则为“IfNotPresent”。
 

2, yaml 语法

imagePullPolicy: Always

apiVersion: v1
kind: Pod
metadata:name: private-image-test-1
spec:containers:- name: uses-private-imageimage: $PRIVATE_IMAGE_NAMEimagePullPolicy: Alwayscommand: [ "echo", "SUCCESS" ]

七    重启策略(restartPolicy)

当 Pod 中的容器退出时通过节点上的 kubelet 重启容器。适用于 Pod 中的所有容器。

1,重启策略 有哪些

Always:当容器终止退出后,总是重启容器,默认策略

OnFailure:当容器异常退出(退出状态码非0)时,重启容器;正常退出则不重启容器

(比如 exit 3 非正常代码 echo$? 非0 是非正常退出 )

Never:当容器终止退出,从不重启容器

#注意:K8S 中不支持重启 Pod 资源,只有删除重建
 

2,yaml 语法

 restartPolicy: Never
#注意:跟container同一个级别

apiVersion: v1
kind: Pod
metadata:name: foo
spec:containers:- name: busyboximage: busyboxargs:- /bin/sh- -c- sleep 30; exit 3restartPolicy: Never

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

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

相关文章

Vue开发实例(十三)用户登录功能

使用Vue实现登录具有以下几个好处: 响应式界面:Vue框架的响应式特性可以帮助开发者轻松地实现用户登录界面的交互效果,包括表单验证、实时错误提示等,从而提升用户体验。组件化开发:Vue框架支持组件化开发,…

最新版npm详解

如:npm中搜索 jQuery image.png image.png 接地气的描述:npm 类似于如下各大手机应用市场 image.png image.png 查看本地 node 和 npm 是否安装成功 image.png image.png 或 npm install -g npm image.png image.png image.png image.png image.…

【数据库】MySQL

文章目录 概述DDL数据库操作查询使用创建删除 表操作创建约束MySqL数据类型数值类型字符串类型日期类型 查询修改删除 DMLinsertupdatedelete DQL基本查询条件查询分组查询分组查询排序查询分页查询 多表设计一对多一对一多对多设计步骤 多表查询概述内连接外连接 子查询标量子…

这所211专硕22408复试线310分,学硕收调剂!辽宁大学计算机考研考情分析!

辽宁大学信息学院下设计算机科学与技术、电子信息科学与技术、通信工程、信息管理与信息系统、软件工程5个本科专业,有计算机软件与理论、计算机应用技术2个硕士学位授权点,软件工程和计算机技术两个专业硕士学位点,1个计算机应用研究所、1个…

案例题(第一版)

案例题目 软件架构设计考点(历年必考) 软件架构设计通常在每年的第一题,该题必考 必备概念 必备概念即考试必须要默写出来的概念 概念描述软件架构风格是指描述特定软件系统组织方式和惯用模式。组织方式描述了系统的组成构件和这些构件的组…

在Spring Boot项目中通过自定义注解实现多数据源以及主备数据库切换

在现代的企业应用开发中,使用多数据源是一个常见的需求。尤其在关键应用中,设置主备数据库可以提高系统的可靠性和可用性。在这篇博客中,我将展示如何在Spring Boot项目中通过自定义注解实现多数据源以及主备数据库切换。 在此说明&#xff…

【HTML】制作一个跟随鼠标的流畅线条引导页界面(可直接复制源码)

目录 前言 HTML部分 CSS部分 JS部分 效果图 总结 前言 无需多言,本文将详细介绍一段HTML代码,图中线条可跟随鼠标移动,具体内容如下: 开始 首先新建一个HTML的文本,文本名改为[index.html],创建好后右…

第十一节 SpringBoot Starter 面试题

一、面试题 很多同学的简历都写着熟悉 SpringBoot, 而 Starter 的实现原理被当作的考题的的情况越来越多。 来源牛客网关于 starter 的一些面试题 情景一、路虎一面 情景二、蔚来 情景三、同花顺 Starter 频频出现,因此在面试准备时,这道题…

mdm 推送证书制作教程

第一步点击获取,点击以后会下载一个zip压缩包 解压以后:会得到四个文件,请务必保存好,待会需要使用 登录apple开发者官网 https://developer.apple.com/account/resources/certificates/list 点击添加证书 找到mdm csr 然后点击…

用Python代码批量提取PDF文件中的表格

PDF文档中常常包含大量数据,尤其是官方报告、学术论文、财务报表等文档,往往包含了结构化的表格数据。表格作为承载关键信息的载体,其内容的准确提取对于数据分析、研究论证乃至业务决策具有重大意义。然而,PDF格式虽保证了文档的…

Vue从入门到实战Day12

一、Pinia快速入门 1. 什么是Pinia Pinia是Vue的最新状态管理工具,是Vuex的替代品 1. 提供更加简单的API(去掉了mutation) 2. 提供符合组合式风格的API(和Vue3新语法统一) 3. 去掉了modules的概念,每一…

人工智能应用-实验7-胶囊网络分类minst手写数据集

文章目录 🧡🧡实验内容🧡🧡🧡🧡代码🧡🧡🧡🧡分析结果🧡🧡🧡🧡实验总结🧡🧡 &#x1f9…

Python TCP编程简单实例

客户端:创建TCP链接时,主动发起连接的叫做客户端 服务端:接收客户端的连接 连接其他服务器 可以通过tcp连接其他服务器。 示例: import socket# 1.创建一个socket # 参数1:指定协议 AF_INET(ipv4&#…

LeetCode1466重新规划路线

题目描述 n 座城市,从 0 到 n-1 编号,其间共有 n-1 条路线。因此,要想在两座不同城市之间旅行只有唯一一条路线可供选择(路线网形成一颗树)。去年,交通运输部决定重新规划路线,以改变交通拥堵的…

vite项目怎么build打包成不同环境的代码?从而适配不同环境api接口

在开发 Web 应用的过程中,我们需要在不同的环境中运行和测试我们的应用程序(如开发环境、测试环境和生产环境)。每个环境都有其特定的 API 接口和配置。Vite,一个基于 ESBuild 的前端构建工具,可以帮助我们实现这个需求…

ganglia的安装使用

1.集群内分别安装epel-release依赖,更新yum源 sudo yum -y install epel-release 2.各节点上分别安装gmond sudo yum -y install ganglia-gmond 3.监控节点上安装gmetad和web(这里安装在node1上) sudo yum -y install ganglia-gmetad sudo yum -y insta…

现代密码学——消息认证和哈希函数

1.概述 1.加密-->被动攻击(获取消息内容、业务流分析) 消息认证和数字签名-->主动攻击(假冒、重放、篡改、业务拒绝) 2.消息认证作用: 验证消息源的真实性, 消息的完整性(未被篡改…

第七步 实现打印函数

文章目录 前言一、如何设计我们的打印函数?二、实践检验! 查看系列文章点这里: 操作系统真象还原 前言 现在接力棒意见交到内核手中啦,只不过我们的内核现在可谓是一穷二白啥都没有,为了让我们设计的内核能被看见被使用…

数据防泄露解决方案分享

在当今高度数字化和互联的商业环境中,数据防泄密已成为企业保护财产、维护客户隐私和遵守合规要求的重要一环。数据防泄密不仅关乎企业的经济利益,更涉及用户个人信息安全、商业机密保护以及国家安全等核心问题。能做好数据防泄露,对于提升企…

启动docker报错:Failed to listen on Docker Socket for the API.

说明: 1、安装部署docker完成后,启动docker报错:Failed to listen on Docker Socket for the API,如下图所示: 2、将SocketGroupdocker更改成:SocketGrouproot即可 一、解决方法: 1、执行命令…