长沙租车网站排名/seo黑帽技术有哪些
本文尝试从Kubelet的发展历史、实现原理、交互逻辑、伪代码实现及最佳实践5个方面对Kubelet进行详细阐述。希望对您有所帮助!
一、kubelet发展历史
Kubelet 是 Kubernetes 中的核心组件之一,负责管理单个节点上的容器运行。它的发展历史和功能演进是 Kubernetes 项目整体发展的一个缩影。以下是 Kubelet 的发展历程和关键特性演进:
Kubernetes 及 Kubelet 的起源
2014 年:Kubernetes 项目启动
- 背景: Kubernetes 项目由 Google 于 2014 年启动,基于 Google 内部的容器管理系统 Borg 和 Omega 的经验。
- 初版 Kubelet: 作为 Kubernetes 的核心组件之一,Kubelet 从一开始就是为了在每个节点上管理容器而设计的。它负责与 API Server 交互,获取 Pod 规范,并根据规范启动和管理容器。
早期发展(2014-2016)
2014 年:Kubernetes v0.1 发布
- 初始功能: 最早的 Kubelet 实现了基本的容器管理功能,包括启动、停止和监控容器。
2015 年:Kubernetes v1.0 发布
- 正式发布: Kubernetes v1.0 标志着项目的稳定版本发布,Kubelet 作为核心组件,功能逐渐完善。
- 功能增强:
- Pod 生命周期管理: 实现了 Pod 的创建、更新和删除流程。
- cAdvisor 集成: 集成 cAdvisor,用于监控容器的资源使用情况(CPU、内存、网络等)。
关键功能发展(2016-2018)
2016 年:Kubernetes v1.2
- 集成 CRI(Container Runtime Interface):
- 背景: 在此之前,Kubelet 直接与 Docker 进行交互。
- 变更: 引入了 CRI,使 Kubelet 可以与多种容器运行时(如 Docker、rkt、CRI-O、containerd)进行交互,增加了灵活性。
2017 年:Kubernetes v1.6
- Dynamic Kubelet Configuration: 引入动态 Kubelet 配置,允许在运行时更改 Kubelet 配置而无需重启节点。
- 增强的调度功能: Kubelet 开始支持高级调度功能,如污点和容忍度(Taints and Tolerations)。
2018 年:Kubernetes v1.10
- CRI 标准化: CRI 接口进一步标准化,确保与不同容器运行时的兼容性。
- Pod 安全性: 增加对 Pod 安全策略(Pod Security Policies)的支持,增强 Pod 的安全性控制。
近期发展(2019-至今)
2019 年:Kubernetes v1.15
- CSI(Container Storage Interface): Kubelet 开始支持 CSI,简化存储插件的集成和管理。
- Device Plugins: 引入设备插件机制,允许第三方供应商扩展和管理特殊硬件资源(如 GPU、FPGA)。
2020 年:Kubernetes v1.18
- Topology Manager: 引入拓扑管理器,优化节点上的资源分配,特别是对于 NUMA 架构和高性能计算的场景。
- 延迟节点功能: 增加对延迟节点功能的支持,提高节点的可靠性和可用性。
2021 年:Kubernetes v1.21
- IPv6/IPv4 双栈支持: Kubelet 开始支持 IPv6 和 IPv4 双栈网络配置,增强网络灵活性。
- Graceful Node Shutdown: 支持节点优雅关闭,确保在节点关闭时,容器和工作负载能安全地停止和迁移。
2022 年至今
- 持续优化和安全增强: Kubelet 不断进行性能优化、安全性增强和新功能的添加,以适应日益复杂的容器化环境和应用场景。
- 扩展与插件支持: 增强对各种插件的支持,包括网络插件(CNI)、存储插件(CSI)和设备插件,提升 Kubelet 的扩展能力。
未来展望
- 进一步增强安全性: 持续改进 Pod 安全策略和节点安全性。
- 边缘计算支持: 适应边缘计算场景,增强 Kubelet 的轻量级和低延迟特性。
- 多容器运行时支持: 深化 CRI 的支持,增强与新兴容器运行时(如 Kata Containers)的兼容性。
总结
Kubelet 作为 Kubernetes 集群中每个节点上的核心代理,一直在不断发展和完善。从最初的简单容器管理到现在的复杂资源调度、安全策略和插件机制,Kubelet 在 Kubernetes 生态系统中扮演着至关重要的角色。它的演进不仅反映了 Kubernetes 项目的发展轨迹,也展示了现代容器编排技术的进步和趋势。
二、Kubelet实现原理
Kubelet 是 Kubernetes 中负责管理每个节点上的 Pod 和容器的核心组件。它的实现原理涉及多个关键方面,包括与 Kubernetes API 服务器的交互、Pod 的生命周期管理、容器运行时接口(CRI)、节点健康检查和资源管理等。以下是 Kubelet 实现原理的详细解析:
1. Kubelet 启动和初始化
启动过程
- 配置加载: Kubelet 启动时,首先加载配置文件和命令行参数,包括节点名称、API 服务器地址、认证信息等。
- 组件初始化: 初始化各个子组件,如 API 客户端、Pod 管理器、容器运行时、网络插件等。
- 注册节点: Kubelet 启动后,会将自己注册到 Kubernetes 集群中,向 API 服务器报告节点的状态和能力。
2. 与 API 服务器的交互
Pod 同步循环
- 监听资源: Kubelet 通过 Watch API 监听 API 服务器上的 Pod 资源变更,包括创建、更新和删除事件。
- 状态报告: 定期向 API 服务器报告节点和 Pod 的状态,包括运行状态、资源使用情况、健康检查结果等。
3. Pod 的生命周期管理
Pod 的创建和删除
- Pod 配置处理: 收到新的 Pod 规范后,Kubelet 解析 Pod 规范,处理配置和依赖,如卷挂载、环境变量等。
- 容器创建: 使用容器运行时(如 Docker 或 containerd)拉取镜像、创建并启动容器。
- Pod 清理: 删除 Pod 时,Kubelet 停止并删除 Pod 内的所有容器,清理相关资源。
容器运行时接口(CRI)
- CRI 插件: Kubelet 通过 CRI 与不同的容器运行时(如 Docker、containerd、CRI-O)交互,实现容器的创建、删除和监控。
- 接口调用: 主要使用 gRPC 接口进行通信,Kubelet 通过调用 CRI 插件的接口来管理容器。
4. 节点健康检查
定期检查
- 健康检查探针: Kubelet 配置健康检查探针(如 Liveness、Readiness 和 Startup),定期检查节点和容器的健康状态。
- 状态报告: 将检查结果报告给 API 服务器,API 服务器根据报告结果进行调度决策。
5. 资源管理
资源监控
- cAdvisor 集成: Kubelet 集成 cAdvisor,用于实时监控节点和容器的资源使用情况(CPU、内存、磁盘等)。
- 资源限制: 根据 Pod 规范中的资源限制(Requests 和 Limits),Kubelet 配置容器的资源使用,确保公平分配和隔离。
6. 网络和存储管理
网络插件(CNI)
- CNI 插件: Kubelet 通过 CNI 插件配置和管理 Pod 的网络,确保每个 Pod 都有一个独立的网络环境。
- 网络隔离: 实现网络隔离和多租户支持,确保 Pod 之间的网络流量受控。
存储管理(CSI)
- CSI 插件: Kubelet 使用 CSI 插件管理持久化存储卷,处理卷的挂载、卸载和动态配置。
- 卷管理: 根据 Pod 规范中的卷配置,Kubelet 负责卷的创建、挂载和生命周期管理。
7. 日志和监控
日志收集
- 容器日志: Kubelet 负责收集和管理容器的日志,支持日志的轮转和清理。
- 系统日志: Kubelet 记录自身的操作日志和状态变化,方便调试和监控。
监控集成
- Prometheus: Kubelet 暴露监控指标,支持 Prometheus 等监控系统的集成,实现节点和 Pod 的性能监控。
8. 安全和认证
安全配置
- 认证和授权: Kubelet 配置认证和授权机制,确保只有合法的请求可以访问节点上的资源。
- Pod 安全策略: Kubelet 支持 Pod 安全策略(PSP),限制 Pod 的操作权限和行为。
关键组件和模块
1. PodManager
- 作用: 管理节点上所有 Pod 的生命周期,处理 Pod 的创建、更新和删除。
- 功能: 负责 Pod 的调度、容器的启动和停止、资源配置等。
2. RuntimeManager
- 作用: 通过 CRI 接口与容器运行时交互,管理容器的生命周期。
- 功能: 拉取镜像、启动容器、停止容器、获取容器状态等。
3. VolumeManager
- 作用: 管理 Pod 的存储卷,处理卷的挂载和卸载。
- 功能: 支持各种存储后端(如本地存储、网络存储)、实现持久化存储。
4. NetworkPlugin
- 作用: 通过 CNI 插件配置和管理 Pod 的网络。
- 功能: 设置网络接口、分配 IP 地址、配置网络策略等。
5. Prober
- 作用: 执行健康检查探针,监控容器和节点的健康状态。
- 功能: 定期检查 Liveness、Readiness 和 Startup 探针,报告检查结果。
Kubelet 的工作流程
- 初始化: Kubelet 启动并初始化各个组件。
- 节点注册: Kubelet 向 API 服务器注册节点信息。
- 监听 Pod 资源: 通过 Watch API 监听 Pod 资源的变化。
- Pod 同步: 根据 Pod 规范,创建或更新 Pod,启动或停止容器。
- 健康检查: 定期执行健康检查,确保 Pod 和容器的健康状态。
- 资源监控: 通过 cAdvisor 监控资源使用情况,报告给 API 服务器。
- 网络和存储管理: 使用 CNI 和 CSI 插件管理网络和存储卷。
- 日志和监控: 收集和管理日志,暴露监控指标。、
Kubelet 作为 Kubernetes 的核心组件,扮演着节点上 Pod 和容器管理的关键角色。其实现原理涉及多个方面,包括与 API 服务器的交互、容器运行时接口、节点健康检查、资源管理、网络和存储管理、日志和监控等。通过这些机制,Kubelet 确保了 Kubernetes 集群中每个节点上的容器能够高效、稳定地运行。
三、Kubelet 与其他组件交互示意图
Kubelet 在 Kubernetes 集群中作为核心组件,主要负责管理每个节点上的 Pod 和容器。为了更好地理解 Kubelet 与其他组件的交互逻辑,下面将通过一个示意图和详细的解释来展示这种交互关系。
+-------------------------------------+| Kubernetes API Server |+-------------------------------------+/|\|| Watch/Sync Pod/Node Status|\|/
+----------------+------------------+ +----------------+
| Controller Manager | | Scheduler |
+-----------------------------------+ +----------------+/|\ /|\| || || |\|/ \|/+-------------------+ +----------------+| Kubelet | | Kubelet |+-------------------+ +----------------+| - PodManager | | - PodManager || - RuntimeManager | | - RuntimeMgr || - VolumeManager | | - VolumeMgr || - NetworkPlugin | | - NetworkPlug || - Prober | | - Prober |+-------------------+ +----------------+/|\ /|\| |Container Runtime Interface (CRI) || |\|/ \|/+-------------------+ +----------------+| Containerd | | Docker |+-------------------+ +----------------+/|\ /|\| |Container Network Interface (CNI) || |\|/ \|/+-------------------+ +----------------+| Network Plugins | | Network Plugins|+-------------------+ +----------------+
详细解释
-
Kubelet 与 Kubernetes API Server 的交互
- Pod 同步: Kubelet 通过 API 服务器的 Watch 机制监听 Pod 的变更事件。当有新的 Pod 被分配到该节点,或者 Pod 状态需要更新时,Kubelet 会获取最新的 Pod 规范。
- 状态报告: Kubelet 定期向 API 服务器报告节点和 Pod 的状态,包括运行状态、资源使用情况和健康状况。
-
Kubelet 与 Controller Manager 的交互
- 节点状态监控: Controller Manager 通过 API 服务器获取节点状态信息,并根据这些信息做出调度决策或触发其他控制逻辑(如自动扩展)。
-
Kubelet 与 Scheduler 的交互
- 调度决策: Scheduler 通过 API 服务器将调度决策告知 Kubelet,即将某个 Pod 分配到具体的节点。Kubelet 接收到调度指令后,负责在本节点上启动和管理该 Pod。
-
Kubelet 内部组件的交互
- PodManager: 管理节点上的 Pod 生命周期,包括创建、更新和删除 Pod。
- RuntimeManager: 通过 CRI 与容器运行时(如 containerd 或 Docker)交互,负责容器的启动、停止和管理。
- VolumeManager: 处理存储卷的挂载和卸载,确保 Pod 访问持久化存储。
- NetworkPlugin: 使用 CNI 插件配置 Pod 的网络,确保网络隔离和通信。
- Prober: 执行健康检查探针,监控 Pod 和容器的健康状态。
-
Kubelet 与容器运行时的交互
- CRI: Kubelet 通过 CRI 接口与具体的容器运行时(如 containerd 或 Docker)进行通信,执行容器的创建、运行和销毁等操作。
-
Kubelet 与网络插件的交互
- CNI: Kubelet 通过 CNI 接口与网络插件交互,负责为 Pod 分配 IP 地址,配置网络接口,实现网络策略和隔离。
交互逻辑说明
-
Pod 同步与管理:
- Kubelet 通过监听 API 服务器的 Pod 变更事件,获取最新的 Pod 规范。
- PodManager 处理 Pod 规范,协调其他子组件(如 RuntimeManager、VolumeManager、NetworkPlugin)完成 Pod 的部署和管理。
-
状态监控与报告:
- Prober 定期检查容器和节点的健康状态,将结果报告给 PodManager。
- PodManager 汇总节点和 Pod 的状态,定期通过 API 服务器向 Controller Manager 和 Scheduler 报告。
-
容器与网络配置:
- RuntimeManager 通过 CRI 接口与容器运行时交互,启动和管理容器。
- NetworkPlugin 通过 CNI 接口与网络插件交互,配置 Pod 的网络环境,确保网络连接和隔离。
结论
Kubelet 是 Kubernetes 集群中每个节点上的关键组件,通过与 API 服务器、Controller Manager 和 Scheduler 等组件的交互,实现了对 Pod 和容器的管理。同时,Kubelet 内部的各个子组件协同工作,处理容器运行时、存储卷和网络配置等任务,确保 Kubernetes 集群的高效运行和资源管理。
四、kubelet 伪代码实现
下面是一个使用 Go 语言实现 Kubelet 核心功能的简化伪代码。这个伪代码示例展示了 Kubelet 的启动过程、与 Kubernetes API 服务器的交互、Pod 的生命周期管理、容器运行时接口(CRI)、健康检查和资源管理等关键功能。
package mainimport ("fmt""time"
)// 配置结构体
type Config struct {ApiServerURL stringRuntimeEndpoint stringNodeName string
}// API 服务器客户端
type ApiServerClient struct {serverURL string
}func NewApiServerClient(url string) *ApiServerClient {return &ApiServerClient{serverURL: url}
}func (c *ApiServerClient) WatchPods() {// 模拟监听 Pod 资源变更fmt.Println("Watching pods from API server...")
}func (c *ApiServerClient) ReportNodeStatus() {// 模拟向 API 服务器报告节点状态fmt.Println("Reporting node status to API server...")
}// 容器运行时接口(CRI)
type ContainerRuntime struct {endpoint string
}func NewContainerRuntime(endpoint string) *ContainerRuntime {return &ContainerRuntime{endpoint: endpoint}
}func (r *ContainerRuntime) CreateContainer(pod string) {// 模拟创建容器fmt.Printf("Creating container for pod %s...\n", pod)
}func (r *ContainerRuntime) RemoveContainer(pod string) {// 模拟删除容器fmt.Printf("Removing container for pod %s...\n", pod)
}// Kubelet 主结构体
type Kubelet struct {config ConfigapiServerClient *ApiServerClientcontainerRuntime *ContainerRuntime
}func NewKubelet(config Config) *Kubelet {return &Kubelet{config: config,apiServerClient: NewApiServerClient(config.ApiServerURL),containerRuntime: NewContainerRuntime(config.RuntimeEndpoint),}
}func (k *Kubelet) Run() {// 启动 Kubeletfmt.Println("Starting Kubelet...")// 注册节点k.RegisterNode()// 启动 Pod 同步循环go k.syncLoop()// 启动状态报告循环go k.statusLoop()// 模拟运行一段时间time.Sleep(10 * time.Second)
}func (k *Kubelet) RegisterNode() {// 模拟节点注册fmt.Println("Registering node with API server...")
}func (k *Kubelet) syncLoop() {for {// 模拟监听和处理 Pod 资源变更k.apiServerClient.WatchPods()time.Sleep(5 * time.Second)// 示例:根据监听结果,创建或删除容器k.containerRuntime.CreateContainer("example-pod")}
}func (k *Kubelet) statusLoop() {for {// 定期向 API 服务器报告节点和 Pod 状态k.apiServerClient.ReportNodeStatus()time.Sleep(10 * time.Second)}
}func main() {// 创建并运行 Kubeletconfig := Config{ApiServerURL: "http://api-server:8080",RuntimeEndpoint: "unix:///var/run/container-runtime.sock",NodeName: "example-node",}kubelet := NewKubelet(config)kubelet.Run()
}
代码说明
-
Config 结构体:存储 Kubelet 的配置参数,包括 API 服务器 URL、容器运行时接口端点和节点名称。
-
ApiServerClient 结构体:用于与 Kubernetes API 服务器交互,包括监听 Pod 资源变更和报告节点状态。
-
ContainerRuntime 结构体:表示容器运行时接口,用于创建和删除容器。
-
Kubelet 结构体:Kubelet 的主结构体,包含配置、API 服务器客户端和容器运行时接口。
-
NewKubelet 函数:创建并初始化一个新的 Kubelet 实例。
-
Run 方法:启动 Kubelet,注册节点,并启动两个循环:
- syncLoop:模拟监听和处理 Pod 资源变更,根据监听结果创建或删除容器。
- statusLoop:定期向 API 服务器报告节点和 Pod 的状态。
注意
- 这个伪代码示例是一个简化版本,主要展示了 Kubelet 的基本功能和工作流程。实际的 Kubelet 实现复杂得多,包括详细的错误处理、更多的资源管理(如存储卷、网络配置等)、更高级的健康检查机制、安全策略等。
- 本示例省略了实际的网络通信、并发处理和更复杂的业务逻辑,仅用于展示 Kubelet 的基本工作原理。
五、kubelet最佳实践及参数优化
优化和配置 Kubelet 可以提高 Kubernetes 集群的性能、可靠性和安全性。以下是一些 Kubelet 的最佳实践和参数优化建议:
Kubelet 最佳实践
1. 定期更新和安全补丁
- 保持更新:定期更新 Kubelet 和相关组件,确保集群使用最新的功能和安全修复。
- 安全补丁:及时应用安全补丁,防止已知漏洞被利用。
2. 资源限制和请求
- 合理设置资源请求和限制:确保 Pod 的资源请求(requests)和限制(limits)合理配置,防止资源争用和节点过载。
- 使用 Cgroups:利用 Cgroups 控制和隔离容器的资源使用,保证资源公平分配。
3. 健康检查和故障恢复
- 配置健康检查:使用 Liveness、Readiness 和 Startup 探针,确保应用程序的健康状态,支持自动故障恢复。
- 启用自愈功能:配置节点自动重启和恢复策略,增强系统的可用性和稳定性。
4. 日志和监控
- 集成日志管理:将容器日志集中管理和分析,如使用 Fluentd、Elasticsearch 和 Kibana(EFK)等工具。
- 监控指标:使用 Prometheus 和 Grafana 监控集群和应用的性能指标,及时发现和解决问题。
5. 网络和存储优化
- 网络插件配置:选择适合的网络插件(如 Calico、Flannel),配置网络策略,确保网络性能和安全性。
- 存储优化:使用合适的存储插件(如 CSI),配置持久化存储卷,提高存储性能和可靠性。
Kubelet 参数优化
Kubelet 提供了许多配置参数,可以通过修改配置文件或启动命令行参数进行调整。以下是一些常用参数及其优化建议:
1. 基本配置
-
–node-ip
- 说明:指定节点的 IP 地址。
- 优化建议:确保配置正确的节点 IP,避免多网卡或多 IP 产生的网络问题。
-
–hostname-override
- 说明:覆盖节点的主机名。
- 优化建议:在主机名不一致的情况下使用,确保 Kubernetes 内部和外部的主机名一致。
2. 性能优化
-
–max-pods
- 说明:每个节点允许的最大 Pod 数量。
- 优化建议:根据节点的资源能力合理设置,防止过载。常见默认值是 110。
-
–kube-reserved
- 说明:预留给 Kubernetes 系统组件的资源。
- 优化建议:预留一定的 CPU、内存和存储资源,防止系统组件资源不足影响节点稳定性。
-
–system-reserved
- 说明:预留给系统守护进程的资源。
- 优化建议:预留一定的系统资源,确保系统守护进程的正常运行。
3. 网络优化
-
–network-plugin
- 说明:指定网络插件(如 cni)。
- 优化建议:选择适合的网络插件,并根据插件文档优化网络配置。
-
–cni-bin-dir
- 说明:CNI 插件二进制文件目录。
- 优化建议:确保路径正确,并包含所需的 CNI 插件。
-
–cni-conf-dir
- 说明:CNI 配置文件目录。
- 优化建议:确保路径正确,并包含正确的 CNI 配置文件。
4. 存储优化
-
–volume-plugin-dir
- 说明:存储插件目录。
- 优化建议:确保路径正确,并包含所需的存储插件。
-
–fail-swap-on
- 说明:是否在检测到 swap 时失败。
- 优化建议:设为 true,确保在启用 swap 时失败,因为 Kubernetes 不支持启用 swap。
5. 健康检查和故障恢复
-
–read-only-port
- 说明:设置 Kubelet 只读端口(通常用于监控)。
- 优化建议:可以关闭此端口以增强安全性(设为 0)。
-
–healthz-port
- 说明:健康检查端口。
- 优化建议:确保此端口启用,并配置健康检查探针。
-
–pod-manifest-path
- 说明:Pod 清单文件路径。
- 优化建议:使用静态 Pod 文件时设置此参数,并确保文件路径和格式正确。
示例:优化后的 Kubelet 启动参数
kubelet \--node-ip=192.168.1.10 \--hostname-override=my-node \--max-pods=100 \--kube-reserved=cpu=500m,memory=1Gi,ephemeral-storage=1Gi \--system-reserved=cpu=200m,memory=500Mi,ephemeral-storage=1Gi \--eviction-hard=memory.available<200Mi,nodefs.available<10% \--network-plugin=cni \--cni-bin-dir=/opt/cni/bin \--cni-conf-dir=/etc/cni/net.d \--volume-plugin-dir=/usr/libexec/kubernetes/kubelet-plugins/volume/exec \--fail-swap-on=true \--read-only-port=0 \--healthz-port=10248 \--pod-manifest-path=/etc/kubernetes/manifests
结论
通过合理配置和优化 Kubelet,可以显著提高 Kubernetes 集群的性能和稳定性。遵循最佳实践,定期监控和调整参数,根据具体的集群环境和业务需求进行优化,确保集群高效、安全、可靠地运行。
完。
希望对您有用!关注锅总,及时获得更多花里胡哨的运维实用操作!
锅总微信公众号
锅总个人博客
https://gentlewok.blog.csdn.net/
相关文章:

Kubernetes之Kubelet详解
本文尝试从Kubelet的发展历史、实现原理、交互逻辑、伪代码实现及最佳实践5个方面对Kubelet进行详细阐述。希望对您有所帮助! 一、kubelet发展历史 Kubelet 是 Kubernetes 中的核心组件之一,负责管理单个节点上的容器运行。它的发展历史和功能演进是 K…...

大模型AI技术实现语言规范练习
人工智能技术可以为语言规范练习提供多种有效的解决方案,帮助学习者更有效地掌握语言规范。以下是一些常见的应用场景。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1. 智能纠错 利用自然语言处理技术,可以…...

202.回溯算法:全排列||(力扣)
class Solution { public:vector<int> res; // 存储当前排列vector<vector<int>> result; // 存储所有排列// 回溯函数,用于生成排列void backtracing(vector<int>& nums, vector<bool>& used) {// 如果当前排列的长度等于 n…...

什么是数据库范式,为什么要反范式?
一、典型回答 数据库范式其实是数据库的设计上的一些规范,这些规范可以让数据库的设计更加简洁、清晰,同时也会更好的保证一致性。 二、三范式 第一范式(1NF):数据库表中的属性的原子性,要求属性具有原子性…...

记录 Bonobo Git 服务器 SMTP 设置
Bonobo 使用标准的 .NET SMTP 设置,可以在 web.config 中指定这些设置。 <system.net><mailSettings><smtp deliveryMethod"network" from"bonobobonoserver.your.domain"><network host"accessible.smtp.host"…...

事务性邮件发送如何选择邮件群发工具
在数字营销的海洋中,事务性邮件如同灯塔,指引着用户在与品牌的互动中前行。它们是自动化的使者,及时响应用户的行为,传递关键信息。然而,选择正确的邮件群发工具,是确保这些信息有效传达的关键。本文将带您…...

替换特殊符号
content content.replaceAll("[\\x00-\\x09\\x11\\x12\\x14-\\x1F\\x7F]", ""); 打印特殊符号: String s new String( Character.toChars(0)); System.out.println((char)0); 2024-06-20 17:21:26.155 ERROR 5584 --- [6884333_inbound] c.…...

深入浅出 langchain 1. Prompt 与 Model
示例 从代码入手来看原理 from langchain_core.output_parsers import StrOutputParser from langchain_core.prompts import ChatPromptTemplate from langchain_openai import ChatOpenAI prompt ChatPromptTemplate.from_template("tell me a short joke about…...

C#二进制、十进制、十六进制数据转换
目录 1、10进制整数转二进制BOOL数组 2、二进制BOOL数组转10进制整型 3、10进制转16进制字符串 4、16进制字符串转10进制 5、16进制字符串转二进制BOOL数组 6、二进制BOOL数组转16进制字符串 1、10进制整数转二进制BOOL数组 /// <summary>/// 10进制整数转二进制BO…...

晶方科技:台积电吃饱,封装迎春?
半导体产业链掀起涨价潮,先进封装迎接利好。 这里我们来聊国内先进封装企业——晶方科技。 近期,由于产能供不应求,台积电决定上调先进封装产品价格,还表示订单已经排到2026年。 大哥吃不下了,剩下的订单全都是空间。…...

ConcurrentModificationException
正在用Iterator迭代器循环操作的集合不能调用集合的删除方法,否则就会报异常:ConcurrentModificationException。 (调用迭代器的remove方法可以) package test;import java.io.*; import java.util.*;public class Demo {public static void main(Strin…...

倾斜摄影OSGB一键轻量化输出3dTiles!
老子云为打通OSGB应用通路,研发了OSGB格式一键转换3dTiles技术服务,通过轻量化操作即可快速实现格式间的转换,并且转换后模型可直接使用amrt展示框架加载、二次开发深度应用,此项服务已在平台上线,欢迎用户体验。接下来…...

深度清洁:使用npm prune命令优化你的Node.js项目
标题:深度清洁:使用npm prune命令优化你的Node.js项目 在Node.js的世界中,随着项目的不断扩展,package.json文件中的依赖项可能会变得冗余和膨胀。未使用的依赖项不仅会占用不必要的磁盘空间,还可能引入安全风险。幸运…...

[Gstreamer] gstbasesink 的 QOS 机制
前言: gstreamer里很多element都提供 QOS 机制,src,filter 和 sink 都有。Sink element 的 QOS 机制由 gstbasesink 统一提供。 qos (quality of service) 是一种评价机制,这个领域中都有这一概念,比如网络的qos。…...

关于bash脚本中extglob不生效的问题
在bash脚本中,我们可以通过: shopt -s extglob 为后续代码提供通配功能。 但如果在block中设置,将不会生效。如: if true; thenshopt -s extglob... fi这是因为: you cannot put shopt -s extglob inside a statement…...

idea运行报错 java: 错误: 无效的源发行版:16
1、打开File——>Project Structure——>Project;选择电脑安装的JDK版本。 并检查File——>Project Structure——>Modules的JDK版本...

selenium 处理网页上的弹窗
处理网页上的弹窗按钮,主要取决于弹窗的类型。在Web自动化测试中,常见的弹窗类型包括:JavaScript弹窗(如alert、confirm和prompt弹窗)和Web页面自定义弹窗(通常是HTML元素实现的)。以下是处理这…...

光模块市场受益于AI热潮同比增长45%,行业前景看好
近日,市场研究机构YOLE Group在最新的市场报告中指出,AI驱动的光模块市场将出现同比45%的增长。预计至2024年,数据通信领域的人工智能光收发器市场将实现高达45%的同比增长,展现出了强大的市场活力和广阔的发展前景。 光收发器市…...

qt经典界面框架
目的 其实就是一个简单的界面显示,是很常用的形式。 说起来简单也是简单,但当初,刚开始做时,感觉非常的复杂,不知如何下手。 现在感觉简单多了。 这个框架利用了QT的现成的MainWindow与QDockWidget,这样就…...

微信群聊不见了?掌握这4个技巧轻松找回,简直太爽了
微信,作为国内最受欢迎的社交应用之一,其群聊功能极大地方便了人们的工作与生活。然而,随着加入的群聊数量日益增多,如何快速找到并管理这些群聊成为了一个难题。 幸运的是,微信提供了一些实用的技巧,帮助…...

Python Type Hint有啥用
Python 的类型提示(Type Hint)是 Python 3.5 引入的一种静态类型检查功能。类型提示的主要目的是增强代码的可读性、可维护性和错误检测能力。虽然 Python 仍然是动态类型的语言,但类型提示可以帮助开发者在编码和维护过程中受益匪浅。 类型…...

【深度学习】基于因果表示学习的CITRIS模型原理和实验
1.引言 1.1.本文的主要内容 理解动态系统中的潜在因果因素,对于智能代理在复杂环境中进行有效推理至关重要。本文将深入介绍CITRIS,这是一种基于变分自编码器(VAE)的框架,它能够从时间序列图像中提取并学习因果表示&…...

CentOS9镜像下载地址加速下载
CentOS 9 是 CentOS 项目的最新版本之一,它基于 RHEL(Red Hat Enterprise Linux)9 的源代码构建。CentOS(Community ENTerprise Operating System)是一个免费的企业级 Linux 发行版,旨在提供一个与 RHEL 兼…...

GPT-5:博士级智能的跨越——未来已来,人机共生的新篇章
在这个科技日新月异的时代,每一次技术的飞跃都预示着人类文明向前迈出的一大步。随着人工智能(AI)领域的持续突破,我们正站在一个前所未有的转折点上,而CPT(假设的模型系列代号,对应GPT…...

陶建辉入选 2023 年度“中国物联网行业卓越人物榜”
在这个技术飞速发展的时代,物联网行业作为推动社会进步的重要力量,正在不断地演化和革新。近日,中国智联网生态大会暨“2023 物联之星”年度榜单颁奖典礼在上海浦东举行。现场公布了拥有物联网行业奥斯卡奖之称的 ——“物联之星 2023 中国物…...

2024南京国际自有品牌产品博览会
展会名称:2024南京国际自有品牌产品博览会 展会时间:2024年10月11-13日 展会地点:南京国际博览中心 展览规模:36000平米 详询主办方陆先生 I38(前三位) I82I(中间四位) 9I72&…...

网络安全入门教程(非常详细)从零基础入门到精通,看完这一篇你就是网络安全高手了。
关于我 我算是“入行”不久的一个新人安全工作者,为什么是引号呢,因为我是个“半个野路子”出身。早在13年的时候,我在初中时期就已经在90sec、wooyun等社区一直学习、报告漏洞。后来由于升学的压力,我逐渐淡出了安全圈子&#x…...

四步轻松搞定!探索字节最新AnimateDiff-Lightning:高质量视频生成的秘密武器!
字节前脚刚发布了文生图大模型 SDXL-Lightning,后脚就又对文生视频领域下手了。 就在这几天又推出了文生视频模型:AnimateDiff-Lightning,它是一种快速的文本到视频生成模型。它生成视频的速度比原始 AnimateDiff 快十倍以上,只需…...

Jenkins定时构建自动化(一):Jenkins下载安装配置
目录 编辑 一、jdk下载安装 1. 已下载安装jdk 2. 未下载安装jdk 二、jenkins安装 1. .war包安装 三、获取IP地址 四、jenkins网页配置 一、jdk下载安装 1. 已下载安装jdk (1)查询jdk版本命令:java -version (2)…...

最新国内首码对接app平台汇总,一手项目资源!
在当前激烈的移动应用市场竞争环境下,有效推广首次代码App项目变得至关重要。文章将探讨一些推广首次代码App项目的策略和适用的推广渠道,助于开发者获取更多流量和用户关注。 选择可靠的平台来进行推广。 在推广首码App项目之前,首先要考虑…...