Kubernetes控制平面组件:Kubelet详解(一):API接口层介绍
云原生学习路线导航页(持续更新中)
- kubernetes学习系列快捷链接
- Kubernetes架构原则和对象设计(一)
- Kubernetes架构原则和对象设计(二)
- Kubernetes架构原则和对象设计(三)
- Kubernetes控制平面组件:etcd(一)
- Kubernetes控制平面组件:etcd(二)
- Kubernetes控制平面组件:API Server详解(一)
- Kubernetes控制平面组件:API Server详解(二)
- Kubernetes控制平面组件:调度器Scheduler(一)
- Kubernetes控制平面组件:调度器Scheduler(二)
- Kubernetes控制平面组件:Controller Manager 之 内置Controller详解
- Kubernetes控制平面组件:Controller Manager 之 NamespaceController 全方位讲解
本文是 kubernetes 的控制面组件 kubelet 系列文章第一篇,主要讲解了 kubelet是什么、核心功能、工作流程、架构设计。并且对kubelet架构的API接口层的主通信接口10250、cadvisor监控采集端口4194、只读API端口10255、健康检查端口10248分别进行了详细介绍
- 希望大家多多 点赞 关注 评论 收藏,作者会更有动力继续编写技术文章
1.kubelet 简介
1.1.kubelet 是什么
- 前面kubernetes架构讲解时,对 kubelet 的初步认识:
- 每个节点上都会跑一个Kubelet,负责上报 节点状态,pod状态、pod资源使用情况等信息到ApiServer,由ApiServer写入etcd。
- 同时,Kubelet也会和apiserver交互,当发现 有pod被 Schedule 调度到自己所在node时,就会调用一系列标准接口,拉起pod的进程,并为之挂载网络和存储。
- kubelet通过对 容器运行时(CRI)、容器网络标准(CNI)、容器存储标准(CSI) 的调用,完成pod 容器、网络、存储 的管理
- Kubelet 是 Kubernetes 集群 工作节点 的核心代理组件
- 我们前面学习的 etcd、apiserver、scheduler、controller-manager等,都属于上级管理部门,负责 存储数据、进行决策、下发命令,不会直接参与干活
- Kubelet 是真正的worker,是Node的核心代理组件,它直接与节点上的容器运行时(如 Docker、containerd)交互,确保 Pod 及其容器按照集群控制平面下发的指令正确运行,是 Kubernetes 实现“节点自治”能力的关键模块
1.2.kubelet 的核心功能
功能模块 | 核心能力 | 相关组件 |
---|---|---|
Pod 生命周期管理 | 根据 PodSpec 创建/销毁容器,处理重启策略(Always/OnFailure/Never) | PodManager、ContainerRuntime |
容器健康监控 | 执行 Liveness/Readiness/Startup 探针,自动触发容器重启(失败时) | ProbeManager、StatusManager |
资源管理 | 监控 CPU/内存/磁盘使用,执行驱逐策略(当节点资源不足时) | EvictionManager、CAdvisor |
存储卷管理 | 挂载 PersistentVolume,处理 Secret/ConfigMap 注入 | VolumeManager |
网络配置 | 通过 CNI 插件为 Pod 分配 IP,维护网络命名空间 | NetworkPlugin |
节点状态报告 | 每 10 秒向 API Server 上报节点资源使用率及健康状态 | API Server |
镜像管理 | 自动拉取镜像,执行垃圾回收(超过磁盘阈值时按 LRU 策略清理) | ImageGC |
1.3.kubelet核心工作流程
1.4.kubelet 的 pod事件来源
参考:https://kubernetes.feisky.xyz/concepts/components/kubelet#pod-guan-li
- Kubelet 以 PodSpec 的方式工作。PodSpec 是描述一个 Pod 的 YAML 或 JSON 对象。 kubelet 采用一组通过各种机制提供的 PodSpecs(主要通过 apiserver),并确保这些 PodSpecs 中描述的 Pod 正常健康运行。
- 向 Kubelet 提供节点上需要运行的 Pod 清单的方法:
- 文件:启动参数 --config 指定的配置目录下的文件 (默认 / etc/kubernetes/manifests/)。该文件每 20 秒重新检查一次(可配置)。
- HTTP endpoint (URL):启动参数 --manifest-url 设置。每 20 秒检查一次这个端点(可配置)。
- API Server:通过 API Server 监听 etcd 目录,同步 Pod 清单。
- HTTP server:kubelet 侦听 HTTP 请求,并响应简单的 API 以提交新的 Pod 清单。
2.Kubelet 架构设计
- API 接口层
- kubelet API
- cAdvisor API
- 只读API
- 健康检查 API
- 核心功能层,可分为3个模块:
- 核心管理模块:PLEG、cAdvisor、GPUManager、OOMWatcher、ProbeManager、DiskSpaceManager、EvictionManager
- 运行时协调模块:syncLoop、PodWorker
- 容器生命周期管理模块:StatusManager、VolumeManager、ImageGC、ContainerGC、ImageManager、CertificateManager
- CRI 接口层
- 容器执行引擎接口,作为grpc client 与真正的容器运行时(Dockershim/rkt/containerd)交互
3.kubelet API 接口层
3.1.kubelet API 主通信端口:10250
3.1.1.端口 10250 的核心作用
- Kubelet 的 10250 端口 是其默认的 HTTPS 主通信端口,承担以下核心功能:
- Pod 生命周期管理:接收来自 API Server 的指令,创建、更新或删除 Pod。
- 资源监控数据暴露:提供容器和节点的性能指标(通过集成 cAdvisor)。
- 调试与运维接口:支持访问容器日志、执行命令(如
kubectl exec
)、端口转发等。 - 节点状态上报:向 API Server 汇报节点健康状态和资源容量。
3.1.2.协议与认证机制
- 协议:使用 HTTPS(TLS 加密),确保通信安全性。
- 认证方式:
- X.509 客户端证书:Kubelet 自动生成证书,由集群 CA 签发。
- Bearer Token:基于 ServiceAccount 的 JWT Token(需 RBAC 授权)。
- 匿名访问(默认关闭):需显式启用
--anonymous-auth=true
(不推荐)。
3.1.3.关键 API 端点
- 通过
https://<Node-IP>:10250
可访问以下核心接口
3.1.3.1.监控与指标
/metrics
:Prometheus 格式的 Kubelet 自身指标(如 goroutine 数量、请求延迟)。/metrics/cadvisor
:容器资源使用指标(CPU、内存、网络等),由 cAdvisor 提供。/metrics/resource
:Kubernetes 资源模型指标(如kubelet_container_cpu_usage_seconds_total
)。
3.1.3.2.Pod 与容器操作**
/pods
:获取节点上所有 Pod 的详细信息(JSON 格式)。/containerLogs/<namespace>/<pod>/<container>
:查看容器日志(对应kubectl logs
)。/exec/<namespace>/<pod>/<container>
:在容器内执行命令(对应kubectl exec
)。/portForward/<namespace>/<pod>
:端口转发到容器(对应kubectl port-forward
)。
3.1.3.3.调试与健康检查**
/healthz
:检查 Kubelet 是否健康(返回200 OK
或错误码)。/configz
:获取 Kubelet 的当前配置(需启用--enable-debugging-handlers=true
)。
3.1.4.安全配置
3.1.4.1.证书与 TLS
- Kubelet 证书:
- 由集群 CA 自动签发(若启用
--rotate-certificates
支持证书轮换)。 - 存储在节点上的
/var/lib/kubelet/pki
目录。
- 由集群 CA 自动签发(若启用
- 客户端访问:
- 使用集群 CA 证书验证 Kubelet 服务端身份。
- 客户端需提供有效证书或 Token 进行身份认证。
3.1.4.2.RBAC 授权
- 为监控工具或管理员配置最小权限的 RBAC 规则:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:name: kubelet-reader
rules:
- apiGroups: [""]resources: ["nodes/metrics", "nodes/proxy", "nodes/log", "nodes/spec"]verbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: kubelet-reader-binding
subjects:
- kind: ServiceAccountname: prometheusnamespace: monitoring
roleRef:kind: ClusterRolename: kubelet-readerapiGroup: rbac.authorization.k8s.io
3.1.5.访问方式示例
3.1.5.1.使用 kubectl proxy
(绕过 TLS 验证)
kubectl proxy --port=8080 &
curl http://localhost:8080/api/v1/nodes/<node-name>/proxy/metrics/cadvisor
3.1.5.2.直接访问(需证书或 Token)
# 使用 ServiceAccount Token
TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)
curl -k -H "Authorization: Bearer $TOKEN" https://<Node-IP>:10250/metrics/cadvisor# 使用客户端证书(如 kubeconfig 中的证书)
curl --cert /path/to/client.crt --key /path/to/client.key --cacert /path/to/ca.crt https://<Node-IP>:10250/metrics
3.1.6.生产环境最佳实践
- 禁用匿名访问:确保 Kubelet 启动参数包含
--anonymous-auth=false
。 - 启用证书轮换:配置
--rotate-certificates=true
提升密钥安全性。 - 限制网络访问:
- 通过防火墙规则仅允许 API Server 和监控系统访问 10250 端口。
- 使用 Kubernetes NetworkPolicy 限制 Pod 到 Kubelet 的通信。
- 源码位置:
pkg/kubelet/server/server.go
(核心服务端实现)pkg/kubelet/server/auth.go
(认证鉴权逻辑)
3.2.cAdvisor资源监控数据采集 端口:4194
3.2.1.cAdvisor 的作用
- cAdvisor 是一个开源的容器资源监控工具,集成在 Kubelet 中,用于实时收集节点和容器的资源使用数据,包括:
- CPU 使用率
- 内存使用量
- 文件系统(磁盘)使用情况
- 网络流量统计
- 容器的启动时间和运行状态等。
- 这些数据通过 REST API 暴露,供 Prometheus、Heapster 或其他监控系统采集。
3.2.2.端口 4194 现已不支持
- 在 Kubernetes 早期版本(如 1.7 之前),cAdvisor 默认通过端口 4194 对外暴露监控数据。
- 用户可以直接访问
http://<Node-IP>:4194/metrics
获取容器的 Prometheus 格式指标 - 从 Kubernetes 1.12 开始,出于安全性和架构简化的考虑,Kubelet 默认不再单独监听 4194 端口,而是将 cAdvisor 的 API 集成到 Kubelet 的主 API 端口(默认 10250)中。具体变化包括:
- cAdvisor 数据路径合并:cAdvisor 的监控数据现在通过 Kubelet 的
/metrics/cadvisor
端点暴露,访问地址为https://<Node-IP>:10250/metrics/cadvisor
。 - 认证与授权:访问需要经过 Kubelet 的 TLS 认证(如使用 ServiceAccount Token 或客户端证书),避免未授权访问风险。
- 旧端口弃用:4194 端口默认关闭,若需启用需显式配置 Kubelet 参数(不推荐)。
- cAdvisor 数据路径合并:cAdvisor 的监控数据现在通过 Kubelet 的
3.2.3.通过 Kubelet 主端口(10250)访问 cAdvisor 数据
# 使用 kubectl 代理绕过 TLS 认证(仅测试环境)
kubectl proxy --port=8080 &
curl http://localhost:8080/api/v1/nodes/<node-name>/proxy/metrics/cadvisor# 直接访问(需配置证书或 Token)
curl -k -H "Authorization: Bearer $(cat /var/run/secrets/kubernetes.io/serviceaccount/token)" https://<Node-IP>:10250/metrics/cadvisor
- 通过
/metrics/cadvisor
获取的 Prometheus 格式数据片段:
container_cpu_usage_seconds_total{container="nginx", namespace="default", pod="nginx-abc123"} 12345.67
container_memory_usage_bytes{container="nginx", namespace="default", pod="nginx-abc123"} 56789012
- 源码位置:
pkg/kubelet/cadvisor/cadvisor_linux.go
(平台相关实现)vendor/github.com/google/cadvisor/manager/manager.go
(核心逻辑)
3.3.只读API 端口10255(状态查询)
3.3.1.端口 10255 的基本作用
- Kubelet 的 10255 端口 是一个 只读(Read-Only)HTTP 端口,主要用于暴露节点和 Pod 的监控数据及健康状态。它提供无需认证的访问,常用于以下场景:
- 资源监控:获取节点和容器的 CPU、内存、磁盘等指标。
- 健康检查:检查 Kubelet 和节点的工作状态。
- 调试与诊断:快速查看节点上运行的 Pod 列表或容器状态。
3.3.2.端口 10255 的暴露端点
- 通过
http://<Node-IP>:10255
可访问以下关键端点:/healthz
:检查 Kubelet 的健康状态,返回200 OK
表示正常。/pods
:返回节点上所有 Pod 的清单(JSON 格式)。/metrics
:暴露 Prometheus 格式的监控指标(包括 cAdvisor 数据)。/metrics/cadvisor
:直接获取容器的详细资源使用指标(与 10250 端口的路径一致)。/spec
:返回节点的硬件和操作系统信息(如 CPU 核心数、内存大小等)。
3.3.3.只读端口10255已默认弃用
- 早期版本(如 Kubernetes 1.10 之前):
- 默认启用 10255 端口,供监控工具(如 Heapster)或管理员直接访问,无需认证。
- 安全改进(Kubernetes 1.10+):
- 由于无需认证的特性存在安全风险,Kubernetes 逐步弃用该端口:
- 1.10+ 版本:默认关闭 10255 端口,需显式启用。
- 1.18+ 版本:部分发行版(如 Kubeadm 部署的集群)完全禁用该端口。
- 1.20+ 版本:Kubelet 参数
--read-only-port
被标记为废弃,未来可能移除。
- 直接查看kubelet配置,可以看到确实已标记废弃
# kubelet -h | grep read-only-port
--read-only-port int32 The read-only port for the Kubelet to serve on with no authentication/authorization (set to 0 to disable) (default 10255) (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
3.3.4.如何启用 10255 端口(不推荐)
- 若需临时启用(仅限测试环境),需配置 Kubelet 的启动参数:
# 编辑 Kubelet 配置文件(如 /etc/kubernetes/kubelet.conf) KUBELET_ARGS="--read-only-port=10255"# 或者通过 systemd 服务文件添加参数 ExecStart=/usr/bin/kubelet --read-only-port=10255 ...
- 注意:启用后需确保节点防火墙限制对该端口的访问!
3.3.5.访问示例
- 查看节点上所有 Pod 信息:
curl http://<Node-IP>:10255/pods
- 获取 Prometheus 监控指标:
curl http://<Node-IP>:10255/metrics
- 检查 Kubelet 健康状态:
curl -v http://<Node-IP>:10255/healthz
3.3.6.使用 kubelet API 主通信端口 10250 替代 10255
- 默认的 Kubelet HTTPS 端口(10250)提供相同功能,但需认证:
# 使用 ServiceAccount Token 访问(需 RBAC 授权)
TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)
curl -k -H "Authorization: Bearer $TOKEN" https://<Node-IP>:10250/metrics
- 与端口 10250 的对比
特性 | 端口 10255 (只读) | 端口 10250 (读写) |
---|---|---|
协议 | HTTP(明文) | HTTPS(加密) |
认证 | 无 | 需证书或 Token |
功能 | 只读数据(如监控、Pod 列表) | 读写操作(如执行命令、日志访问) |
安全性 | 低 | 高 |
默认状态 | 新版本默认关闭 | 始终启用 |
3.4.健康检查 /healthz 端口10248
3.4.1./healthz 端点简介
- /healthz 是 kubelet 的关键健康检查接口,用于指示其运行状态:
- 功能与用途
- 存活探针(Liveness Probe):供 kubelet 自身或外部系统(如 API Server)检查其是否正常运行。
- 健康状态反馈:返回 200 OK 表示健康,其他状态码(如 500)表示异常。
- 依赖项检查:某些配置下会验证 kubelet 依赖的组件(如容器运行时)是否可用。
- /healthz 端点的访问端口 默认10248
- 可以通过kubelet 参数
--healthz-port
指定端口
3.4.2./healthz 访问示例
- 响应为ok,则表示节点健康
# 查看本地端口监听情况 # ss -tuln | grep 10248 tcp LISTEN 0 4096 127.0.0.1:10248 *:*# curl http://localhost:10248/healthz ok
- 安全性设计
- 本地访问限制:默认仅监听
127.0.0.1
,不暴露给外部网络。 - 无认证机制:由于仅限本机访问,无需额外认证。
- 本地访问限制:默认仅监听
3.4.3.10248 与主端口 10250 的区别
特性 | 端口 10248 (--healthz-port ) | 端口 10250(主 API 端口) |
---|---|---|
协议 | HTTP(明文) | HTTPS(加密) |
访问范围 | 仅本机(localhost ) | 外部网络(默认监听所有接口) |
功能 | 仅健康检查(/healthz ) | 全功能 API(Pod 管理、监控等) |
认证 | 无 | 强制证书/Token 认证 |
3.4.4.--healthz-port
参数状态与版本变化
- 弃用状态:
--healthz-port
参数已被标记为 废弃(DEPRECATED),Kubernetes 推荐通过 kubelet 配置文件(由--config
指定)设置相关参数。
- 弃用原因:
- Kubernetes 逐步淘汰命令行参数,转向统一的配置文件管理,以提高可维护性。
- 版本影响:
- 1.10+ 版本:开始推荐使用配置文件。
- 1.23+ 版本:部分发行版可能默认关闭该端口。
4.kubelet 核心功能层
- 请见:Kubernetes控制平面组件:Kubelet详解(二):核心功能层
- 本文主要讲解了 kubelet 架构中的核心功能层,包括核心管理模块的 PLEG、cAdvisor、GPUManager、OOMWatcher、ProbeManager、DiskSpaceManager、EvictionManager;运行时协调模块的 syncLoop、PodWorker,以及容器生命周期管理模块的 StatusManager、VolumeManager、ImageGC、ContainerGC、ImageManager、CertificateManager,对每个组件都做了详细讲解
相关文章:
Kubernetes控制平面组件:Kubelet详解(一):API接口层介绍
云原生学习路线导航页(持续更新中) kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计(一)Kubernetes架构原则和对象设计(二)Kubernetes架构原则和对象设计(三)Kubernetes控…...
Java项目层级介绍 java 层级 层次
java 层级 层次 实体层 控制器层 数据连接层 Service : 业务处理类 Repository :数据库访问类 Java项目层级介绍 https://blog.csdn.net/m0_67574906/article/details/145811846 在Java项目中,层级结构(Layered Architecture…...
【操作系统】零拷贝技术
1. DMA技术 DMA技术也就是直接内存访问技术。在进行I/O设备和内存的数据传输的时候,数据传输的工作全部交给DMA控制器,而不是CPU负责。 2. 传统的文件传输 传统的文件传输的代码如下: read(file, tmp_buf, len); write(socket, tmp_buf,…...
从零构建高性能桌面应用:GPUI Component全解析与实战指南
简介 高性能UI组件库正在重塑桌面应用开发的格局,而GPUI Component作为新兴的Rust桌面UI组件库,凭借其卓越的跨平台支持能力、GPU加速渲染和企业级功能特性,正成为构建现代化高性能桌面应用的首选。本文将从零开始,全面解析GPUI Component的核心特性、安装配置流程,并通过…...
java 中 DTO 和 VO 的核心区别
DTO 和 VO 的核心区别 特性DTO(数据传输对象)VO(视图对象)设计目的服务层与外部系统(如前端、其他服务)之间的数据传输为前端展示层定制数据,通常与 UI 强绑定数据内容可能包含业务逻辑需要的字…...
bazel迁移cmake要点及具体迁移工程示例(apollo radar)
文章目录 bazel迁移cmake要点及具体迁移工程示例迁移要点指南依赖库管理proto编译目标库及二进制文件生成项目导出runtime_data软件打包 conti_rardar完整迁移过程common_msgcommoncanbusconti_radar编译 bazel迁移cmake要点及具体迁移工程示例 迁移要点指南 迁移主要的内容包…...
跨时钟域(CDC,clock domain crossing)信号处理
参考视频: 数字IC,FPGA秋招【单bit信号的CDC跨时钟域处理手撕代码合集】_哔哩哔哩_bilibili 一、亚稳态 原因是:建立时间和保持时间没有保持住。然后在下图的红框里面,产生亚稳态。因为电路反馈机制,最后大概率会恢复…...
Java高频面试之并发编程-16
hello啊,各位观众姥爷们!!!本baby今天又来报道了!哈哈哈哈哈嗝🐶 面试官:volatile 实现原理是什么? volatile 关键字的实现原理 volatile 是 Java 中用于解决多线程环境下变量可见性…...
MyBatis 一对多关联映射在Spring Boot中的XML配置
在Spring Boot中使用MyBatis实现一对多关系时,可以通过XML映射文件来配置。下面我将详细介绍几种实现方式。 基本概念 一对多关系指的是一个实体对象包含多个子对象集合的情况,例如: 一个部门有多个员工一个订单有多个订单项一个博客有多个…...
Spring Boot异步任务失效的8大原因及解决方案
Spring Boot异步任务失效的8大原因及解决方案 摘要:在使用Spring Boot的@Async实现异步任务时,你是否遇到过异步不生效的问题?本文总结了8种常见的异步失效场景,并提供对应的解决方案,帮助你彻底解决异步任务失效的难题。 一、异步失效的常见场景 1. 未启用异步支持 ❌ …...
嵌入式Linux I2C驱动开发详解
文章目录 一、I2C协议的核心原理 1. I2C协议的“双线制”通信 2. I2C的地址寻址机制 二、Linux I2C驱动框架的分层设计 1. I2C核心 2. I2C适配器 3. I2C设备驱动 三、I2C驱动开发测试 一、I2C协议的核心原理 1. I2C协议的“双线制”通信 SDA(数据线) 和…...
基于 Spring Boot 瑞吉外卖系统开发(十二)
基于 Spring Boot 瑞吉外卖系统开发(十二) 菜品删除 单击“批量删除”和“删除”时,会携带需要删除的菜品的id以delete请求方式向“/dish”发送请求。 URLhttp://127.0.0.1:8080/dish调用方法DELETE参数ids DishController添加删除方法 …...
基于 51 单片机的 PWM 电机调速系统实现
51 单片机通过定时器来实现 PWM(脉冲宽度调制)控制,这是一种通过调整方波信号的占空比来控制输出功率的技术。下面详细介绍如何使用 51 单片机实现 PWM 控制并应用于电机调速。 1. PWM 控制原理 PWM 信号是一个周期性的方波,通过调整高电平时间(Ton)与周期(T)的比例(…...
wordpress主题分享
发布于:Eucalyptus-Blog 一、引言 大家对WordPress免费主题都非常感兴趣,但是一般收费的WordPress主题功能才多,其实有很多开源的免费WordPress主题都很不错,对于很多新建站的小伙伴,这些主题完全足够用了。这里就分享…...
【合新通信】无人机天线拉远RFOF(射频光纤传输)解决方案
无人机天线拉远RFOF方案通过光纤替代传统射频电缆,实现无人机与地面控制站之间的高保真、低损耗信号传输,尤其适用于高频段(如毫米波)、远距离或复杂电磁环境下的无人机作业场景。 核心应用场景 军事侦察与电子战 隐蔽部署&…...
视觉-语言-动作模型:概念、进展、应用与挑战(下)
25年5月来自 Cornell 大学、香港科大和希腊 U Peloponnese 的论文“Vision-Language-Action Models: Concepts, Progress, Applications and Challenges”。 视觉-语言-动作 (VLA) 模型标志着人工智能的变革性进步,旨在将感知、自然语言理解和具体动作统一在一个计…...
git如何将本地 dev 分支与远程 dev 分支同步
要让本地 dev 分支与远程 dev 分支完全同步(丢弃本地多余的提交记录),可以按照以下步骤操作: 1. 获取远程最新状态 git fetch origin dev # 拉取远程 dev 分支的最新提交,但不会修改本地代码 IDEA中点击fetc…...
自动化测试与功能测试详解
🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 什么是自动化测试? 自动化测试是指利用软件测试工具自动实现全部或部分测试,它是软件测试的一个重要组成 部分,能完成许多手工测试无…...
python3数据类型
常见python3数据类型 Number(数字)String(字符串)bool(布尔类型)List(列表)Tuple(元组)Set(集合)Dictionary(字典&#x…...
《Python星球日记》 第66天:序列建模与语言模型
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、传统语言模型1. n-gram 模型基础2. n-gram 模型的局限性 二、RNN 在语言建模…...
CRM和SCRM有什么区别
CRM(客户关系管理)与SCRM(社会化客户关系管理)的主要区别在于沟通方式、客户互动、数据来源和客户参与度。CRM更侧重企业对客户信息的管理与内部流程优化,而SCRM强调客户主动参与,通过社交媒体等平台加强互…...
破解 Qt QProcess 在 Release 模式下的“卡死”之谜
在使用 Qt 的 QProcess 以调用外部 ffmpeg/ffprobe 进行音视频处理时,常见的工作流程是: gatherParams:通过 ffprobe 同步获取媒体文件的参数(分辨率、采样率、声道数、码率等)。 reencode:逐个文件调用 f…...
重学安卓14/15自由窗口freeform企业实战bug-学员作业
背景: 在aosp14版本及以后版本上,安卓的自由窗口部分的工具栏部分都有了较大的更新 工具栏这部分已经移到了SystemUI进程的WMShell进行统一的管理。 但是近来有学员朋友在对自由窗口进行相关的拖拽操作时候,有遇到这个工具栏相关的一个bug&…...
【layout组件 与 路由镶嵌】vue3 后台管理系统
前言 很多同学在第一次搭建后台管理系统时,会遇到一个问题,layout组件该放哪里?如何使用?路由又该如何设计? 这边会讲一下我的思考过程和最后的结果,大家可以参考一下,希望大家看完能有所收获。…...
【PXIE301-211】基于PXIE总线的16路并行LVDS数据采集、1路光纤数据收发处理平台
板卡概述 PXIE301-211是一款基于PXIE总线架构的16路并行LVDS数据采集、1路光纤收发处理平台,该板卡采用Xilinx的高性能Kintex 7系列FPGA XC7K325T作为实时处理器,实现各个接口之间的互联。板载1组64位的DDR3 SDRAM用作数据缓存。板卡具有1个FMC…...
linux-进程信号的产生
Linux中的进程信号(signal)是一种用于进程间通信或向进程传递异步事件通知的机制。信号是一种软中断,用于通知进程某个事件的发生,如错误、终止请求、计时器到期等。 1. 信号的基本概念 - 信号(Signal)&am…...
基于 Nexus 在 Dockerfile 配置 yum, conda, pip 仓库的方法和参考
在 Nexus 配置代理仓库的方法,可参考 pypi 的配置博客:https://hellogitlab.com/CI/docker/create_your_nexus_2 更多代理格式,参考官方文档,如 pypi:https://help.sonatype.com/en/pypi-repositories.html 配置 yum…...
精品可编辑PPT | 全面风险管理信息系统项目建设风控一体化标准方案
这份文档是一份全面风险管理信息系统项目建设风控一体化标准方案,涵盖了业务架构、功能方案、系统技术架构设计、项目实施及服务等多个方面的详细内容。方案旨在通过信息化手段提升企业全面风险管理工作水平,促进风险管理落地和内部控制规范化࿰…...
Redis集群安装
Redis集群安装 1.集群介绍 首先要了解,Redis的高可用机制。 2个master节点,挂掉1个,1不过半,则集群宕机,不可用,容错率为0;3个master节点,挂掉1个,2>1,…...
下载知网外文文献全文的方法
知网和一些外文数据库机构是合作关系,因知网没有订购外文文献全文,所以可以搜到外文文献但不能下载全文,基本提供的都是外文文献摘要。本文就实例演示一下获取知网外文文献全文的方法步骤。 例如下面这篇知网外文文献,该文献被收…...
解决IDEA无法运行git的问题
之前git一直没有问题,今天打开就提示我安装git,自然用git去提交新项目也会遇到问题。 我出现问题的原因是:git路径缺失 文件->设置->git 发现git的路径为空,按照实际位置填写即可...
基于Qt6 + MuPDF在 Arm IMX6ULL运行的PDF浏览器——MuPDF Adapter文档
项目地址:总项目Charliechen114514/CCIMXDesktop: This is a Qt Written Desktop with base GUI Utilities 本子项目地址:CCIMXDesktop/extern_app/pdfReader at main Charliechen114514/CCIMXDesktop 前言 这个部分说的是Mupdf_adaper下的文档的工…...
Ubuntu20.04 搭建Kubernetes 1.28版本集群
环境依赖 以下操作,无特殊说明,所有节点都需要执行 安装 ssh 服务安装 openssh-server复制代码 sudo apt-get install openssh-server修改配置文件复制代码 vim /etc/ssh/sshd_config找到配置项 复制代码 LoginGraceTime 120 PermitRootLogin prohibit-password StrictModes…...
操作系统和数据库账号密码的安全管理、使用,安当SMS凭据管理系统
引言:密码管理困局下的破局之道 在数字化转型的深水区,企业正面临前所未有的密码管理挑战。某跨国制造企业因数据库密码泄露导致核心工艺参数外泄,某三甲医院因运维账号滥用引发百万级医疗数据泄露事件,这些真实案例揭示着传统密…...
Java设计模式之代理模式:从入门到精通(保姆级教程)
1. 代理模式概述 代理模式(Proxy Pattern)是一种结构型设计模式,它为其他对象提供一种代理以控制对这个对象的访问。代理对象在客户端和目标对象之间起到中介作用,可以在不改变目标对象代码的情况下增加额外的功能。 1.1 专业概念解释 代理模式:为其他对象提供一种代理…...
单片机-STM32部分:13-1、蜂鸣器
飞书文档https://x509p6c8to.feishu.cn/wiki/V8rpwIlYIiEuXLkUljTcXWiKnSc 一、应用场景 大部分的电子产品、家电(风扇、空调、电水壶)都会有蜂鸣器,用于提示设备的工作状态 二、原理 蜂鸣器是一种将电信号转换为声音信号的器件࿰…...
JVM——方法内联
引入 在现代软件开发中,性能优化始终是一个关键课题。随着硬件架构的不断演进,CPU的主频提升逐渐放缓,而软件复杂度却持续增加,这使得编译器优化技术的重要性日益凸显。方法内联(Method Inlining)作为编译…...
C++类成员
一、内联函数(Inline Functions) 作用 解决频繁调用小函数时的栈内存消耗问题,通过将函数代码直接插入调用点,避免压栈/出栈开销。 定义形式 inline 返回类型 函数名(参数列表) { ... }• 隐式声明:类内直接定义的成员…...
SpringBoot校园失物招领信息平台
SpringBoot校园失物招领信息平台 文章目录 SpringBoot校园失物招领信息平台1、技术栈2、项目说明2.1、登录注册2.2、管理员端截图2.3、用户端截图 3、核心代码实现3.1、前端首页3.2、前端招领广场3.3、后端业务处理 1、技术栈 本项目采用前后端分离的架构,前端和后…...
代码随想录算法训练营第三十八天
LeetCode题目: 1143. 最长公共子序列1035. 不相交的线53. 最大子数组和392. 判断子序列2094. 找出 3 位偶数(每日一题) 其他: 今日总结 往期打卡 1143. 最长公共子序列 跳转: 1143. 最长公共子序列 学习: 代码随想录公开讲解 问题: 给定两个字符串 text1 和 text2࿰…...
Nginx stream模块是连接级别的负载均衡
在Nginx的stream模块中,upstream的权重配置实现的是连接级别的负载均衡,这和http模块不同。 当客户端发起一个新的TCP连接时,Nginx根据各upstream的权重值选择其中一个upstream建立连接,之后该连接上的所有数据传输都由这个upstre…...
贝叶斯算法
贝叶斯算法是一类基于贝叶斯定理的机器学习算法,它们在分类任务中表现出色,尤其在处理具有不确定性和 probabilistic 关系的数据时具有独特优势。本文将深入探讨贝叶斯算法的核心原理、主要类型以及实际应用案例,带你领略贝叶斯算法在概率推理…...
计算机网络:CPU与时钟的关系
在计算机中,CPU(中央处理器)与时钟的关系是核心且密不可分的。时钟信号是驱动CPU运行的“心跳”,决定了计算机执行指令的节奏和协调性。以下是两者的关键关系及作用: 1. 时钟信号:CPU的“节拍器” 时钟频率(Clock Speed) CPU的时钟频率(如3.5 GHz)表示每秒的时钟周期…...
java中强引用、软应用、弱应用、虚引用
在Java中,引用类型决定了对象的生命周期和垃圾回收的时机。Java提供了四种不同的引用类型:强引用、软引用、弱引用和虚引用。每种引用类型的行为和用途不同,了解这些差异对优化内存管理和垃圾回收非常重要。 1. 强引用(Strong Re…...
分析红黑树工程实用的特点
🧭 本节目标 理解红黑树在工程中的优劣势对比红黑树与其他数据结构(AVL 树、跳表、哈希表等)分析红黑树为何成为内核级应用(如 Linux CFS、内存管理)首选总结红黑树工程上的典型使用建议 一、红黑树工程级使用的主要特…...
C/C++ 内存管理深度解析:从内存分布到实践应用(malloc和new,free和delete的对比与使用,定位 new )
一、引言:理解内存管理的核心价值 在系统级编程领域,内存管理是决定程序性能、稳定性和安全性的关键因素。C/C 作为底层开发的主流语言,赋予开发者直接操作内存的能力,却也要求开发者深入理解内存布局与生命周期管理。本文将从内…...
如何使用主机名在 CMD 中查找 IP 地址?
在网络中,每个系统都有一个由几位数字组成的唯一标识,称为 IP 地址。然而,记住它们可能是一项艰巨的任务,尤其是当系统数量众多时。例如,互联网上运行的每个网站都有一个 IP 地址,以便其他系统在需要时可以调用它们,但你认为记住我们访问的每个网站的长串数字是可行的吗…...
解读RTOS:第二篇 · 线程/任务管理与调度策略
1. 引言 在 RTOS 中,线程(Task)是最基本的执行单元,它封装了应用功能、资源使用和优先级属性。任务管理与调度策略决定了系统在多任务场景下的响应速度、资源分配效率与实时性保证。理解并掌握任务创建、状态转换、优先级设计和调度算法,是 RTOS 应用开发的核心内容。 2…...
linux下minio的进程管理脚本
准备工作: 参考链接: Deploy MinIO: Single-Node Single-Drive — MinIO Object Storage for Linux 下载: wget https://dl.min.io/server/minio/release/linux-amd64/minio kill-app.sh #!/bin/bash # 文件名: kill-app.sh…...
论文学习_A Survey of Binary Code Similarity
摘要:二进制代码相似性方法的主要目的是比较两个或多个二进制代码片段,以识别它们之间的相似性与差异(研究背景)。由于在许多实际场景中源代码往往不可获取,因此具备比较二进制代码的能力显得尤为重要,例如…...