Kubernetes之Pod详解
如何更好的使用好Pod?本文尝试从Pod组成、Namespace共享、控制器实现原理及Pod设计原则4个方面对Pod的使用进行详细阐述,希望对您
一、 Kubernetes Pod介绍
在 Kubernetes 中,Pod 是最小的可部署单元,包含一个或多个容器。Pod 提供容器共享的存储、网络以及如何运行的描述。以下是对 Kubernetes Pod 的详细介绍,包括其组成部分、生命周期、使用场景和最佳实践。
Pod 的组成部分
-
容器 (Containers):
- Pod 内包含一个或多个容器,通常是 Docker 容器。
- 容器共享同一个网络命名空间,能通过
localhost互相通信。
-
存储卷 (Volumes):
- Pod 内的容器可以挂载共享的存储卷。
- 支持多种类型的卷,如
emptyDir、hostPath、configMap、secret、persistentVolumeClaim等。
-
网络 (Networking):
- Pod 内的所有容器共享同一个 IP 地址和网络命名空间。
- 每个 Pod 都有一个唯一的 IP 地址,可以与其他 Pod 通信。
-
元数据 (Metadata):
- 包括名称、命名空间、标签和注释等信息,用于标识和管理 Pod。
-
规格 (Spec):
- 定义 Pod 的期望状态,包括容器镜像、资源请求和限制、环境变量、端口等。
Pod 的生命周期
Pod 的生命周期包含多个阶段,通常可以通过 kubectl describe pod <pod-name> 查看 Pod 的状态。以下是 Pod 生命周期的主要阶段:
-
Pending:
- Pod 已被 API 服务器接受,但其中的一个或多个容器尚未创建。
-
Running:
- Pod 已经被调度到某个节点上,且其中的所有容器都已经创建。
- 可能存在 Init 容器还在运行的情况。
-
Succeeded:
- Pod 中的所有容器都成功终止,并且不会再重启。
-
Failed:
- Pod 中的某个容器终止,并且不会再重启。
-
Unknown:
- 无法获取 Pod 的状态,可能是因为与 Pod 所在节点失去联系。
Pod 的使用场景
-
单容器 Pod:
- 最常见的场景,每个 Pod 只包含一个容器。
- 用于运行单一的应用实例。
-
多容器 Pod:
- 包含多个容器,这些容器紧密耦合并协同工作。
- 例如,一个容器负责主应用,另一个容器负责日志收集或数据处理。
-
Init 容器:
- 在应用容器启动之前运行,用于执行初始化任务。
- 确保应用容器所需的环境已经准备好。
Pod 的最佳实践
-
资源请求和限制:
- 为每个容器配置合理的 CPU 和内存资源请求和限制,确保资源的高效使用和公平调度。
-
健康检查:
- 配置
livenessProbe和readinessProbe,确保容器健康运行,并能在故障时自动重启或移除不健康的容器。
- 配置
-
配置管理:
- 使用 ConfigMap 和 Secret 管理配置信息和敏感数据,避免将配置信息硬编码到镜像中。
-
日志和监控:
- 集中管理 Pod 的日志,通过工具(如 ELK Stack、Loki)进行日志收集和分析。
- 使用 Prometheus、Grafana 等工具监控 Pod 的性能和状态。
-
安全性:
- 使用 Pod 安全策略(PodSecurityPolicy)限制 Pod 的权限和行为,确保集群的安全性。
- 避免在容器中运行特权进程,并使用非 root 用户运行应用。
示例 YAML 配置
以下是一个示例 Pod 的 YAML 配置,包含一个主容器和一个 Init 容器:
apiVersion: v1
kind: Pod
metadata:name: example-pod
spec:initContainers:- name: init-myserviceimage: busyboxcommand: ['sh', '-c', 'echo Initializing...']containers:- name: myapp-containerimage: myapp:1.0ports:- containerPort: 80resources:requests:memory: "64Mi"cpu: "250m"limits:memory: "128Mi"cpu: "500m"livenessProbe:httpGet:path: /healthzport: 80initialDelaySeconds: 15periodSeconds: 20readinessProbe:httpGet:path: /readinessport: 80initialDelaySeconds: 5periodSeconds: 10volumes:- name: myapp-storageemptyDir: {}
总结
Pod 是 Kubernetes 中的核心概念,通过定义 Pod,可以将一组容器打包在一起,共享网络和存储资源。在生产环境中,通过合理的资源配置、健康检查、配置管理和安全策略,运维工程师可以确保 Pod 的高效运行和应用的可靠性。理解和掌握 Pod 的使用,是有效管理 Kubernetes 集群的基础。
二、多容器pod中,namespace的共享
在 Kubernetes 中,多容器 Pod 共享一些命名空间 (namespace),这些共享的命名空间使得 Pod 内的容器可以有效地协作。以下是共享的命名空间及其逻辑示意图:
共享的命名空间
-
网络命名空间 (Network Namespace):
- Pod 内的所有容器共享相同的网络命名空间。这意味着它们共享同一个 IP 地址,并且可以通过
localhost相互通信。 - 容器之间的端口不冲突,可以直接通过端口号访问彼此提供的服务。
- Pod 内的所有容器共享相同的网络命名空间。这意味着它们共享同一个 IP 地址,并且可以通过
-
进程命名空间 (PID Namespace):
- Pod 内的所有容器共享相同的进程命名空间。这意味着一个容器可以查看和操作其他容器中的进程。
- 这对调试和管理容器内进程非常有用。
-
IPC 命名空间 (IPC Namespace):
- Pod 内的所有容器共享相同的 IPC 命名空间。这意味着它们可以使用 SystemV IPC 或 POSIX 消息队列来通信。
-
UTS 命名空间 (UTS Namespace):
- Pod 内的所有容器共享相同的 UTS 命名空间。这意味着它们共享同一个主机名和域名。
逻辑示意图
下面是多容器 Pod 中共享命名空间的逻辑示意图:
+---------------------------------------------------+
| Pod (example-pod) |
| |
| +-------------------------+ +----------------+ |
| | | | | |
| | Container 1 | | Container 2 | |
| | (myapp-container) | | (sidecar) | |
| | | | | |
| | +-----------------+ | | +----------+ | |
| | | | | | | | | |
| | | Network |<------->| Network | | |
| | | Namespace | | | | Namespace| | |
| | | | | | | | | |
| | +-----------------+ | | +----------+ | |
| | | | | |
| | +-----------------+ | | +----------+ | |
| | | | | | | | | |
| | | PID Namespace |<------->| PID | | |
| | | | | | | Namespace| | |
| | | | | | | | | |
| | +-----------------+ | | +----------+ | |
| | | | | |
| | +-----------------+ | | +----------+ | |
| | | | | | | | | |
| | | IPC Namespace |<------->| IPC | | |
| | | | | | | Namespace| | |
| | | | | | | | | |
| | +-----------------+ | | +----------+ | |
| | | | | |
| | +-----------------+ | | +----------+ | |
| | | | | | | | | |
| | | UTS Namespace |<------->| UTS | | |
| | | | | | | Namespace| | |
| | | | | | | | | |
| | +-----------------+ | | +----------+ | |
| | | | | |
| +-------------------------+ +----------------+ |
| |
+---------------------------------------------------+
解释
- Network Namespace: Pod 内的所有容器共享一个网络命名空间,因此可以通过
localhost互相通信,共享同一个 IP 地址。 - PID Namespace: Pod 内的所有容器共享一个进程命名空间,因此可以看到和管理彼此的进程。
- IPC Namespace: Pod 内的所有容器共享一个 IPC 命名空间,因此可以使用 IPC 机制(如信号量、消息队列)进行通信。
- UTS Namespace: Pod 内的所有容器共享一个 UTS 命名空间,因此它们共享同一个主机名和域名。
这种设计使得一个 Pod 内的容器能够紧密协作,共享资源和环境,从而实现复杂的应用需求。例如,一个容器可以作为主应用,而另一个容器可以作为 sidecar,进行日志收集、监控、数据处理等辅助任务。
三、pod控制器的实现
Kubernetes 的 Pod 控制器负责管理和维护 Pod 的副本数目、生命周期以及健康状态。常见的 Pod 控制器包括 Deployment、ReplicaSet、StatefulSet、DaemonSet 和 Job 等。它们的实现原理和工作逻辑类似,但在功能和使用场景上有所不同。
Pod 控制器实现原理
Pod 控制器通过观察集群的当前状态(如现有的 Pod 状态)和期望状态(如在控制器定义中指定的 Pod 数量),确保集群状态达到期望状态。其核心工作原理包括以下几个步骤:
-
声明期望状态:
- 用户通过 YAML 文件或 API 请求声明期望的 Pod 状态(例如,Deployment 期望有 3 个副本)。
-
控制器监视集群状态:
- 控制器通过 API Server 监视资源的变化,包括 Pod、节点、ReplicaSet 等资源。
-
比较当前状态和期望状态:
- 控制器周期性地比较当前集群状态和用户声明的期望状态。
-
调整实际状态:
- 如果当前状态与期望状态不一致,控制器会采取行动调整集群状态。例如,如果期望 3 个副本但实际只有 2 个,控制器会创建一个新的 Pod。
-
更新状态:
- 控制器将更新的状态写回到 etcd 中,通过 API Server 通知其他组件。
逻辑示意图
以下是 Pod 控制器(以 Deployment 控制器为例)的逻辑示意图:
+--------------------------+
| User/Client |
| (kubectl, API, etc.) |
+-----------+--------------+|| 1. Submit Deployment YAMLv
+-----------+--------------+
| API Server |
| |
+-----------+--------------+|| 2. Store in etcdv
+-----------+--------------+
| etcd |
| (Cluster State Storage) |
+-----------+--------------+|| 3. Watch for changesv
+-----------+--------------+
| Deployment Controller|
| |
+-----------+--------------+|| 4. Compare current state and desired statev
+-----------+--------------+
| ReplicaSet Controller|
| |
+-----------+--------------+|| 5. Create/Delete Podsv
+-----------+--------------+
| Kubelet |
| |
+-----------+--------------+|| 6. Manage Pod lifecyclev
+-----------+--------------+
| Pod (example-pod) |
| |
+--------------------------+
详细步骤说明
-
用户提交 Deployment YAML:
- 用户通过
kubectl提交 Deployment 配置文件,该文件包含期望的 Pod 副本数量和配置。
- 用户通过
-
API Server 处理请求:
- API Server 接收用户的请求,并将 Deployment 对象存储在 etcd 中。
-
etcd 存储集群状态:
- etcd 作为 Kubernetes 的持久化存储,保存集群的当前状态和期望状态。
-
控制器监视变化:
- Deployment 控制器通过 API Server 监视 etcd 中 Deployment 对象的变化,比较当前状态和期望状态。
-
调整 Pod 副本数:
- 如果当前状态和期望状态不一致,Deployment 控制器会调整 ReplicaSet 对象,从而创建或删除 Pod。
-
Kubelet 管理 Pod 生命周期:
- Kubelet 运行在每个节点上,负责具体的 Pod 创建、启动和监控工作,确保 Pod 按照期望的状态运行。
总结
Pod 控制器在 Kubernetes 集群中起到关键作用,负责管理 Pod 的生命周期和状态,确保集群的实际状态与用户期望的状态一致。通过控制器机制,Kubernetes 提供了高可用性、自动扩展和滚动更新等高级功能,从而简化了容器化应用的部署和管理。
四、Pod该如何设计
设计高内聚、低耦合的 Pod 是构建健壮、可扩展和易于维护的 Kubernetes 应用的关键。以下是一些具体的设计原则和实践:
高内聚
-
单一职责原则 (Single Responsibility Principle):
- 每个 Pod 应该只承担一个主要职责,例如运行一个微服务或一个应用组件。避免在一个 Pod 中运行多个不相关的服务。
- 例如,一个 Pod 只运行一个 API 服务,而不是同时运行 API 服务和数据库服务。
-
共享状态和数据:
- 在需要共享状态和数据时,可以通过共享卷(如
emptyDir或persistentVolume)在同一个 Pod 内的容器之间共享数据。 - 使用 ConfigMap 和 Secret 来管理配置和敏感信息。
- 在需要共享状态和数据时,可以通过共享卷(如
-
适当使用 Sidecar 容器:
- 使用 Sidecar 容器来处理与主应用密切相关的辅助任务,如日志收集、监控、配置管理等。确保 Sidecar 容器与主应用容器之间有明确的接口和职责划分。
- 例如,一个日志收集容器可以作为主应用的 Sidecar,与主应用容器共享卷以访问日志文件。
低耦合
-
分布式架构:
- 将应用拆分为多个独立的微服务,每个服务部署为独立的 Pod。通过 Kubernetes 的 Service 进行服务发现和负载均衡。
- 每个微服务应该独立开发、部署和扩展,减少彼此间的依赖。
-
接口和 API:
- 使用清晰的接口和 API 进行服务间通信,确保不同服务之间的独立性。尽量使用 RESTful API、gRPC 等标准通信协议,减少耦合。
- 例如,定义明确的 API 合约,让不同的微服务通过 HTTP 或 gRPC 通信。
-
异步通信:
- 在需要服务间通信时,优先考虑使用异步通信(如消息队列、事件流)来解耦服务。使用工具如 Kafka、RabbitMQ 等实现异步消息传递。
- 例如,订单服务和库存服务之间通过消息队列传递订单处理信息,而不是直接调用彼此的 API。
设计示例
设计一个高内聚、低耦合的多容器 Pod 通常涉及将不同职责分离到不同的容器中,并确保这些容器在同一个 Pod 内共享必要的资源。下面是一个示例,展示如何设计这样一个 Pod,包含主应用容器和一个 Sidecar 容器。
示例场景
以下设计一个包含主应用(Web 服务)和日志收集器(Sidecar 容器)的 Pod。主应用处理用户请求,而日志收集器负责收集和转发日志。
YAML 配置示例
apiVersion: v1
kind: Pod
metadata:name: webapp-podlabels:app: webapp
spec:containers:- name: webapp-containerimage: myapp/webapp:1.0ports:- containerPort: 8080env:- name: LOG_PATHvalue: /var/log/webappvolumeMounts:- name: log-volumemountPath: /var/log/webapplivenessProbe:httpGet:path: /healthzport: 8080initialDelaySeconds: 15periodSeconds: 20readinessProbe:httpGet:path: /readinessport: 8080initialDelaySeconds: 5periodSeconds: 10resources:requests:memory: "128Mi"cpu: "500m"limits:memory: "256Mi"cpu: "1"- name: log-collectorimage: myapp/log-collector:1.0volumeMounts:- name: log-volumemountPath: /var/log/webappenv:- name: LOG_PATHvalue: /var/log/webappresources:requests:memory: "64Mi"cpu: "250m"limits:memory: "128Mi"cpu: "500m"volumes:- name: log-volumeemptyDir: {}
详细解释
-
Pod Metadata:
metadata中的name指定了 Pod 的名称,labels用于标记 Pod,方便服务发现和管理。
-
Web 应用容器 (webapp-container):
image指定了容器使用的镜像。ports指定了容器暴露的端口。env设置了环境变量,指定日志路径。volumeMounts将共享卷挂载到容器的/var/log/webapp路径。livenessProbe和readinessProbe用于健康检查。resources设置了容器的资源请求和限制,确保资源分配合理。
-
日志收集容器 (log-collector):
- 同样通过
image指定使用的镜像。 volumeMounts将共享卷挂载到容器的/var/log/webapp路径,以便读取主应用的日志。env设置了环境变量,指定日志路径。resources设置了容器的资源请求和限制,确保资源分配合理。
- 同样通过
-
共享卷 (log-volume):
- 使用
emptyDir作为临时存储卷,Pod 内的所有容器都可以访问该卷,生命周期与 Pod 相同。
- 使用
高内聚和低耦合实现
-
高内聚:
- Web 应用容器专注于处理用户请求和业务逻辑。
- 日志收集容器专注于收集和转发日志。
- 通过共享卷实现数据共享,确保相关任务在一个 Pod 内紧密协作。
-
低耦合:
- 容器通过共享卷和环境变量进行通信,接口清晰,不直接依赖对方的内部实现。
- 日志收集器与主应用容器解耦,可以独立更新和扩展,不影响主应用的运行。
总结
这种设计确保了容器的高内聚性和低耦合性,使得每个容器专注于其特定职责,减少了相互依赖和耦合,同时通过共享卷和环境变量实现必要的协作。这种设计提高了系统的可维护性、可扩展性和稳定性,适合在生产环境中部署和管理复杂的容器化应用。
高内聚、低耦合的实践
-
分离关注点:
- 将日志记录、监控、配置管理等职责从主应用容器中分离出来,使用 Sidecar 容器处理这些职责。
- 例如,使用一个 Sidecar 容器来处理日志收集,并将日志发送到集中日志系统。
-
合理使用 Kubernetes 资源:
- 使用 ConfigMap 和 Secret 来管理配置文件和敏感信息,避免将这些信息硬编码到容器镜像中。
- 为每个容器配置合理的资源请求和限制,确保资源的高效使用和公平调度。
-
自动化部署和滚动更新:
- 使用 Deployment 控制器进行应用的自动化部署和滚动更新,确保应用高可用性和最小化停机时间。
- 例如,通过设置
strategy和maxUnavailable参数来控制滚动更新策略。
-
健康检查和监控:
- 配置
livenessProbe和readinessProbe,确保容器健康运行,并能在故障时自动重启或移除不健康的容器。 - 使用 Prometheus 和 Grafana 等工具进行监控和告警,确保应用运行状态可见。
- 配置
-
服务发现和负载均衡:
- 通过 Kubernetes 的 Service 资源实现服务发现和负载均衡,确保服务之间的通信可靠。
- 例如,为每个微服务创建一个 ClusterIP 类型的 Service,让其他服务通过服务名访问。
总结
通过遵循这些设计原则和最佳实践,可以创建高内聚、低耦合的 Pod。这将使你的 Kubernetes 应用更易于维护、扩展和调试,同时提高系统的可靠性和稳定性。
完。
希望对您有用!关注锅总,可及时获得更多运维实用操作!
相关文章:
Kubernetes之Pod详解
如何更好的使用好Pod?本文尝试从Pod组成、Namespace共享、控制器实现原理及Pod设计原则4个方面对Pod的使用进行详细阐述,希望对您 一、 Kubernetes Pod介绍 在 Kubernetes 中,Pod 是最小的可部署单元,包含一个或多个容器。Pod 提…...
长亭谛听教程部署和详细教程
PPT 图片先挂着 挺概念的 谛听的能力 hw的时候可能会问你用过的安全产品能力能加分挺重要 溯源反制 反制很重要感觉很厉害 取证分析 诱捕牵制 其实就是蜜罐 有模板直接爬取某些网页模板进行伪装 部署要求 挺低的 对linux内核版本有要求 需要root 还有系统配置也要修改 …...
修复漏洞Windows 2012 Server R2(CVE-2016-2183)、(CVE-2015-2808)、(CVE-2013-2566)
修复漏洞 漏洞风险等级评定标准主机风险等级评定标准漏洞概括利用注册表修复漏洞查看修复后的漏洞漏洞风险等级评定标准 危险程度危险值区域危险程度说明高7 <=漏洞风险值<= 10攻击者可以远程执行任意命令或者代码,或对系统进行远程拒绝服务攻击。中4 <=漏洞风险值&l…...
Linux的基本指令第二篇
1.cat - 查看文件 语法:cat [选项] [文件] 功能: 查看目标文件的内容 -b 对非空输出行编号 -n对输出的所有行编号 -s不输出多行空行 现有一个文件test.c cat -n test.c cat -b test.c cat -s test.c 创建一个新文件 加入源文件的内容 || …...
php百度云账户余额查询API示例
1、官方文档地址:账户余额查询 请求结构 POST /v{version}/finance/cash/balance HTTP/1.1 Host: billing.baidubce.com ContentType: application/json; charsetutf-8 Content-Length: <Content_Length> Authorization: authorization string 响应参数 …...
自动化开发任务:在PHP框架中实现自定义命令
在现代Web开发中,自动化是提高开发效率和减少重复工作的关键。PHP框架,如Laravel、Symfony等,提供了强大的自定义命令功能,允许开发者创建自己的artisan命令来执行各种自动化任务。本文将详细介绍如何在PHP框架中实现自定义命令&a…...
如何在Java中实现数据加密与解密?
如何在Java中实现数据加密与解密? 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将探讨如何在Java中实现数据加密与解密,这是保…...
Nginx日志管理之日志分析
Nginx 通常被置于服务器访问的入口,其访问日志可以全局记录用户访问的来源、响应时间,以及用户行为热点等数据,通过对访问日志的分析,可以清晰地了解用户来源、用户行为习惯及自身服务器性能等情况。借助 ELK 的高性能处理能力&am…...
利用 Microsoft ChatGPT 和 OPC UA 改变工业格局
在本文中,我们将探讨开放性在工业物联网中的作用,以及Microsoft为创建基于OPC UA的开放平台所做的努力。我们将讨论 Microsoft 开放战略的四大支柱,以及标准化信息模型以实现互操作性的重要性。此外,我们将深入探讨传统接口和数据…...
力扣-两数之和
文章目录 题目题解方法1-暴力方法2-哈希 题目 原题链接:两数之和 题解 方法1-暴力 我最先想到的方法就是暴力,两层for循环,也能通过。(拿到算法题在没有思路的时候暴力就是思路,哈哈哈) public class T…...
基于CDMA的多用户水下无线光通信(3)——解相关多用户检测
继续上一篇博文,本文将介绍基于解相关的多用户检测算法。解相关检测器的优点是因不需要估计各个用户的接收信号幅值而具有抗远近效应的能力。常规的解相关检测器有运算量大和实时性差的缺点,本文针对异步CDMA的MAI主要来自干扰用户的相邻三个比特周期的特…...
哔哩哔哩视频URL解析原理
哔哩哔哩视频URL解析原理 视频网址解析视频的原理通常涉及以下几个步骤: 1、获取视频页面源代码:通过HTTP请求获取视频所在网页的HTML源代码。这一步通常需要处理反爬虫机制,如验证码或用户登录。 2、解析页面源代码:分析HTML源代…...
个人成长的利器:复盘教你如何避免重蹈覆辙
前言 📫 大家好,我是南木元元,热爱技术和分享,欢迎大家交流,一起学习进步! 🍅 个人主页:南木元元 最近忙着学习和工作,更新比较少,期间一直在思考如何才能快速…...
2025秋招NLP算法面试真题(一)-史上最全Transformer面试题
史上最全Transformer面试题 Transformer为何使用多头注意力机制?(为什么不使用一个头)Transformer为什么Q和K使用不同的权重矩阵生成,为何不能使用同一个值进行自身的点乘? (注意和第一个问题的区别&#…...
基于STM32的智能家居安防系统
目录 引言环境准备智能家居安防系统基础代码实现:实现智能家居安防系统 4.1 数据采集模块4.2 数据处理与分析4.3 控制系统实现4.4 用户界面与数据可视化应用场景:智能家居安防管理与优化问题解决方案与优化收尾与总结 1. 引言 智能家居安防系统通过使…...
React+TS前台项目实战(十二)-- 全局常用组件Toast封装,以及rxjs和useReducer的使用
文章目录 前言Toast组件1. 功能分析2. 代码详细注释(1)建立一个reducer.ts文件,用于管理状态数据(2)自定义一个清除定时器的hook(3)使用rxjs封装全局变量管理hook(4)在to…...
總結光學(完)
參考: 陈曦<<光学讲义>>http://ithatron.phys.tsinghua.edu.cn/downloads/optics.pdf 1 波动光学 最简单的一种波是平面波。........... 一个波的波前是指相位相同的点构成的面。波的传播方向垂直于波面。 我们在此将讨论的光波特指波长远大于原子尺度又远小于…...
线程C++
#include <thread> #include <chrono> #include <cmath> #include <mutex> #include <iostream> using namespace std;mutex mtx; void threadCommunicat() {int ans 0;while (ans<3){mtx.lock();//上锁cout << "ans" <…...
DAMA学习笔记(二)-数据治理
1.引言 数据治理(Data Governance,DG)的定义是在管理数据资产过程中行使权力和管控,包括计划、监控和实施。在所有组织中,无论是否有正式的数据治理职能,都需要对数据进行决策。建立了正式的数据治理规程及…...
07-appium常用操作
一、press_keycode 1)方法说明 press_keycode方法是appium的键盘相关函数,可以实现键盘的相关操作,比如返回、按键、音量调节等等。也可以使用keyevent方法,功能与press_keycode方法类似。 常见按键编码:https://www.…...
使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found", "n…...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...
Qemu arm操作系统开发环境
使用qemu虚拟arm硬件比较合适。 步骤如下: 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载,下载地址:https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...
pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)
目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 (1)输入单引号 (2)万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...
针对药品仓库的效期管理问题,如何利用WMS系统“破局”
案例: 某医药分销企业,主要经营各类药品的批发与零售。由于药品的特殊性,效期管理至关重要,但该企业一直面临效期问题的困扰。在未使用WMS系统之前,其药品入库、存储、出库等环节的效期管理主要依赖人工记录与检查。库…...
【1】跨越技术栈鸿沟:字节跳动开源TRAE AI编程IDE的实战体验
2024年初,人工智能编程工具领域发生了一次静默的变革。当字节跳动宣布退出其TRAE项目(一款融合大型语言模型能力的云端AI编程IDE)时,技术社区曾短暂叹息。然而这一退场并非终点——通过开源社区的接力,TRAE在WayToAGI等…...
