自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(180)
  • 收藏
  • 关注

原创 【K8S学习之生命周期钩子】详细了解 postStart 和 preStop 生命周期钩子

Kubernetes 的生命周期钩子(Lifecycle Hooks)允许在容器启动和终止时执行自定义操作,主要包括 postStart 和 preStop 两个钩子。postStart 在容器启动后立即执行,常用于初始化、日志记录等;preStop 在容器终止前执行,用于优雅下线、资源清理等。这些钩子通过 exec 命令在容器内运行,postStart 会阻塞容器启动,而 preStop 默认最多等待 30 秒(可通过 terminationGracePeriodSeconds 调整)。使用生命周期钩子可

2025-05-12 16:20:18 791

原创 【K8S学习之探针】详细了解就绪探针 readinessProbe 和存活探针 livenessProbe 的配置

Kubernetes中的Pod健康检查主要通过两种探针实现:LivenessProbe和ReadinessProbe。LivenessProbe用于检测容器是否存活,失败时会重启容器;ReadinessProbe用于检测容器是否准备好接收流量,失败时会将Pod从服务端点中移除。探针的配置参数包括initialDelaySeconds、timeoutSeconds、periodSeconds等,支持HTTP、TCP和Exec三种探测方式。HTTP探测适用于Web服务,TCP探测适用于数据库和缓存服务,Exec

2025-05-12 16:18:38 938

原创 【kind管理脚本-3】脚本函数说明文档 —— 便捷使用 kind 创建、删除、管理集群脚本

本脚本整合了多种常用的 Kind 集群管理操作,通过封装命令行参数,用户可以方便地创建、删除、管理以及调试 Kind 集群。同时还提供了加载模板配置、检查健康状态等实用功能。建议在使用前确认已安装kind和kubectl,并根据需要调整全局配置变量(如开启 metrics-server 或 ingress 安装)。希望这份说明文档能够帮助您快速了解和使用该脚本。如有疑问或需要进一步定制,欢迎进一步探讨。

2025-04-08 15:49:37 731

原创 【kind管理脚本-2】脚本使用说明文档 —— 便捷使用 kind 创建、删除、管理集群脚本

当然可以,以下是为你这份 Kind 管理脚本写的一份,可作为README.md。

2025-04-08 15:48:52 553

原创 【kind管理脚本-1】便捷使用 kind 创建、删除、管理集群脚本

【代码】【kind管理脚本-1】便捷使用 kind 创建、删除、管理集群脚本。

2025-04-08 15:48:00 487

原创 【k8s学习之CSI】理解 LVM 存储概念和相关操作

💡生产环境推荐用标准方式:先分区 ➜🧪测试环境 / 临时用途可以直接用整盘 ➜你是打算长期用这块盘作为 LVM 存储吗?我可以根据你的使用场景建议最合适的方式。在使用 LVM(Logical Volume Manager)时,创建逻辑卷(LV)时可以选择是否指定物理卷(PV)。下面是两种方式的总结以及相关的注意事项。不指定物理卷:LVM 会自动从卷组中的所有物理卷中选择空间,适用于卷组中空间充足的情况。指定物理卷:你可以控制逻辑卷的存储位置,前提是物理卷已经初始化为 PV,并加入到卷组中。

2025-04-07 14:16:01 1080

原创 【mac开发环境配置】配置 iterm2

【代码】【mac开发环境配置】配置 iterm2。

2025-02-22 13:34:29 479

原创 【k8s 深入学习之 event 聚合】event count累记聚合(采用 Patch),Message 聚合形成聚合 event(采用Create)

【代码】【k8s 深入学习之 event 聚合】event count累记聚合(采用 Patch),Message 聚合形成聚合 event(采用Create)

2024-12-03 15:36:53 673

原创 【k8s深入学习之 event 记录】初步了解 k8s event 记录机制

通常这种信号用于通知相关的 goroutine 或者处理流程,广播器已经停止工作,可以做一些清理操作或者退出。实现 Kubernetes 控制器中的事件管理,适合用于开发自定义控制器或调试集群事件处理逻辑。对象的停止和关闭控制。具体来说,它的作用是在广播器的生命周期中进行信号传递,用于通知。无缓冲的通道用于信号传递,表示某个事件的发生,而不需要传递具体数据。,控制写入时的并发,避免同一时间写入 event 过多导致错乱(这部分逻辑在。中的作用是提供一个停止信号,通知正在运行的 goroutine(如。

2024-12-02 17:19:50 1584

原创 【k8s深入理解之 Scheme 补充-7】理解无版本资源、有版本资源、元数据信息等联系和区别

无版本资源在 Kubernetes 中主要用于描述全局性的信息和状态,它们不参与版本控制,也不进行版本转换。常见的无版本资源包括Status和等。这些资源通常用于提供 API 资源的发现、反馈信息或元数据,而不是用于代表长期存在的 API 对象。位于位于无状态资源的用途通过和等资源,用户可以查询 Kubernetes 集群支持的所有 API 版本和 API 组。它们提供集群的元数据,帮助客户端了解哪些资源是可用的。通过查询APIGroup。

2024-11-28 17:23:53 1156

原创 【k8s深入理解之 Scheme 补充-6】理解资源外部版本之间的优先级

中,记录的是版本的优先级顺序。中,记录的是版本的注册顺序。都是 Kubernetes。

2024-11-28 17:14:30 747

原创 【k8s深入理解之 Scheme 补充-5】理解 Scheme 中的 converter(记录版本转换函数)和 fieldLabelConversionFuncs(记录标签转换函数)

附录1 | Scheme 中 fieldLabelConversionFuncs 和 converter 有什么关联或区别吗在 Kubernetes 的代码中, 是核心的类型注册和处理工具,而其中的 和 是两种不同但相关的机制,分别处理字段标签转换和对象转换。以下是它们的定义、作用和相互关系的详细解析: 是 中一个字段,它是一个映射(map),用于存储特定资源的字段标签转换函数。类型定义(伪代码):作用功能:处理 Kubernetes API 查询中的字段选择器()。当用户在 API 请

2024-11-28 17:07:40 668

原创 【k8s深入理解之 Scheme 补充-4】理解资源的内外部版本(存放位置不同、版本转换函数自动生成、版本新增字段等)

实现的。这种设计确保了不同版本的 API 能够保持兼容性,同时使内部版本的结构更适合核心逻辑处理。以下是转换机制的详细解析,包括内部版本是否包含所有外部字段以及转换过程是否需要通过内部版本中转。

2024-11-28 17:01:44 1282

原创 【k8s深入理解之 Scheme 补充-3】理解 k8s 各个库(apimachinery、api、kubernetes)的关系

是 Kubernetes 的核心模块,它们在功能上有明确的分工,共同构建 Kubernetes 的生态系统。与 Kubernetes API Server 交互时引用这些类型。用于编写客户端代码,比如使用。

2024-11-28 16:44:18 1140

原创 【k8s深入理解之 Scheme 补充-2】理解 register.go 暴露的 AddToScheme 函数

是专门设计为供外部调用的接口,用于将当前 API 组的所有资源类型和相关逻辑(如默认值和转换函数)注册到全局 Scheme 中。它通过封装复杂的注册逻辑,提供了一个统一、简单且易于使用的接口,大大降低了集成的复杂性。是专门供外部调用的接口。它的主要作用是将当前 API 组的所有资源类型、元数据、版本等注册到全局的。,从而支持这些类型的序列化、反序列化、默认值设置和版本转换等操作。测试代码中需要模拟某些资源的序列化或反序列化操作时,也需要调用。通常会被 Kubernetes 的核心组件或工具(如。

2024-11-28 11:29:52 1134

原创 【k8s深入理解之 Scheme 补充-1】理解 Scheme 中资源的注册以及 GVK 和 go 结构体的映射

是对 API的初始化,通常是注册流程的起点。是高层次的封装,用于批量注册资源类型。是低层次的实现,用于更精细地注册单个资源类型,特别是需要自定义Kind的场景。获取的是指针类型所指向的元素类型的名称,通常用于获取结构体类型的名称。

2024-11-28 11:28:39 1180

原创 【k8s深入理解之 Scheme】全面理解 Scheme 的注册机制、内外部版本、自动转换函数、默认填充函数、Options等机制

这段代码的作用是将多种与资源操作相关的选项类型(如GetOptions等)注册到Scheme中,以便 Kubernetes API 服务器在处理这些操作时能够识别和正确序列化/反序列化这些类型。这样可以确保 API 请求中的参数能够在不同版本的 API 之间正确处理,并且在资源操作(如列出、获取、创建、删除)时提供灵活的选项。是 Kubernetes API 中列出资源时的参数,允许你控制返回的资源内容、过滤方式、分页和排序。在 Kubernetes Go 客户端中,通过。

2024-11-27 18:57:56 1146

原创 【k8s之深入理解调度】调度框架扩展点理解

参数主要控制调度器在Permit阶段等待的行为,具体来说,它定义了调度器等待 Pod 获得“Permit”(许可)的最大时长。也就是说,如果一个 Pod 在Permit阶段被插件要求等待,调度器会根据设定的时间限制,等待这个 Pod 获得许可。的作用是在Permit阶段控制调度器等待 Pod 被允许调度的时间,适用于需要等待特定条件的场景,如 Pod 协同调度、资源协调、或任务队列管理。如果在指定时间内没有获得许可,调度将超时并失败。

2024-10-03 18:57:49 1789 1

原创 【k8s深入理解之csi插件】理解存储 csi 插件的总体逻辑框架

下面的分析是k8s通过ceph-csi(csi plugin)接入ceph存储(csi相关组件的分析以rbd为例进行分析),对csi系统结构、所涉及的k8s对象与组件进行了简单的介绍,以及k8s对存储进行相关操作的流程分析,存储相关操作包括了存储创建、存储扩容、存储挂载、解除存储挂载以及存储删除操作。CSI是Container Storage Interface(容器存储接口)的简写。

2024-10-03 17:14:00 1528

原创 【环境配置】go多版本管理工具gvm

Go语言版本管理器(Gvm)是管理Go语言环境的开源工具。支持安装多个版本的Go并管理每个项目的模块。它最初由开发,Gvm与Ruby RVM类似,允许你为每个项目或一组项目创建一个开发环境,分离不同的Go版本和包依赖关系,来提供更大的灵活性,以防不同版本造成的问题。Gvm管理Go的多个版本,包括安装、卸载和指定使用Go的某个版本查看官方所有可用的Go版本,同时可以查看本地已安装和默认使用的Go版本管理多个GOPATH,并可编辑Go的环境变量可将当前目录关联到GOPATH可以查看GOROOT。

2024-08-05 11:17:38 2183 2

原创 【kubebuilder 学习之初学】编写官方样例 Cronjob Controller

/ +kubebuilder:object:root=true 标记这是一个根对象,这个类型直接对应于一个 Kubernetes API 资源,而不是嵌套在其他资源中的子资源。// +kubebuilder:resource:shortName=cj2 执行该类型的缩写为 cj2// +kubebuilder:subresource:status 为该类型生成个 status 子资源// 用户自定义 crd。

2024-06-25 19:26:55 966

原创 【k8s调度】梳理调度相关知识与device plugin

比如,PodFitsHost 算法(负责的是,检查 Pod 的 nodeSelector 与 Node 的名字是否匹配),这种情况下,除非 Node 的名字发生变化,否则你即使删除再多的 Pod,抢占者也不可能调度成功。具体来说,在为某一对 Pod 和 Node 执行 Predicates 算法的时候,如果待检查的 Node 是一个即将被抢占的节点,即:调度队列里有 nominatedNodeName 字段值是该 Node 名字的 Pod 存在(可以称之为:“潜在的抢占者”)。

2024-03-25 17:31:25 1579 1

原创 【k8s网络】梳理cni发展脉络

设备非专业术语作用Docker0网桥理解为二层交换机,处理包头为 mac 的数据包网络栈存储用于通信的网络设备和规则等(网卡、路由表、iptables规则等)一个 net namespace 可以简单理解为,一个主机–net=host,表示容器共享宿主机的网络栈(此时可理解为两个人共用一套设备),此时可提高通信效率,但可能会端口冲突veth pair网线用于联通不同的 net namespace,可以理解为连接两个主机间的网线。

2024-03-25 17:28:33 1716

原创 【K8S内外部版本】一文了解 Kubernetes 资源内部版本internal与外部版本v1等及Schema注册

以Pod资源代码定义为例,代码示例如下。

2024-03-05 11:03:41 1378

原创 【K8S类型系统】一文梳理 K8S 各类型概念之间的关系(GVK/GVR/Object/Schema/RestMapper)

Group 组、Version版本、Namespace 命名空间,这些都很容易理解,都是为了隔离,资源版本隔离(Group、Version)和用户资源隔离(Namespace)Kind 对象类型,如 Kind=Sh 对应 sh 类型文件,Kind=Doc 对应 doc 类型文件Resource 可以理解为 Kind 的含义补充,用于获取真正的资源对象;GVK 专注于类型定义,确定是哪种资源对象,GVR 专注于获取资源对象或对资源对象进行操作;

2024-03-01 17:18:07 1352 1

原创 【git使用】常用的 git 撤销操作(restore、reset、revert)

注意坑新增文件是未被跟踪状态(untracked),也就是下面命令不会对此文件生效所以新增文件,需要先被 git 记录到,也就是 git add new-file之后执行这些操作,就会生效了# 丢弃工作区的修改(不包括对文件自身的操作,如添加文件、删除文件)# 将暂存区的修改重新放回工作区(包括对文件自身的操作,如添加文件、删除文件)# 撤销最新的 commit,将其改动放回到 工作区git reset HEAD~ # 或 git reset --mixed HEAD~ 都是同一个意思。

2024-01-04 17:18:26 2550 1

转载 【git使用】深度理解 git merge合并的使用场景

因此对于 merge commit,只需要记录究竟是保留了 A 的改动还是 B 的改动即可,因此大多数情况下我们 merge commit 都是没有变更的,只是个记录。首先,关于 commit,我们可以理解为,每个 commit 会保留一个 pointer 指向它的 parent commit,并且一般我们的 commit 只有一个 parent。例如上面的例子,A 改成了 123,B 改成了 456,因此存在冲突,解决冲突的时候改成了 789,因此 merge commit 有了改动。

2024-01-04 16:26:05 2202

原创 【git使用】了解三种git commit合并的使用场景(rebase、merge、cherry-pick)

在 dev 上开发了一段时间后要把 master 分支提交的新内容更新到 dev 分支,此时切换到 dev 分支,使用 git rebase master,等 dev 分支开发完成了之后,要合并到上游分支 master 上的时候,切换到 master 分支,使用 git merge dev。rebase的过程实际就是以当git 前最新的master的版本,再"拉"出一条分支作为当前最新的分支上,原先该分支上的改动就变成现在分支上的新的commit 了。上面的命令可以转移从 A 到 B 的所有提交。

2024-01-04 16:25:06 2527 1

原创 【git使用】历史commit的分割(git rebase和 git reset的联合使用)

因为每一个commit只会保存它的parent节点,并不知道它的下一个节点时什么。比方说在一次 commit 中,包含了两个编辑过的文件(A 和 B);commit 01, commit 02, commit 03 为最近的三次提交,是提交时的备注信息。可以配合不同的模式(–mixed, --soft, --hard)达到不同的效果。后,会列出 commit-B 之后的所有 commit,之后 vim 形式操作。该命令主要用于修改历史 commit,如历史 commit 的拆分,合并等。

2024-01-04 16:23:16 1635

原创 【k8s源码分析-Apiserver-2】kube-apiserver 结构概览以及主体部分源码分析

假 设 所 有 的 认 证 器 都 被 启 用 , 当 客 户 端 发 送 请 求 到 kubeapiserver服务,该请求会进入Authentication Handler函数(处理认 证相关的Handler函数),在Authentication Handler函数中,会遍历已启用的认证器列表, 尝试执行每个认证器, 当有一个认证器返回 true时,则认证成功,否则继续尝试下一个认证器。当客户端发起一个请求,经过认证阶段时,只要有一个认证器通过,则认证成功。在客户端请求通过认证之后, 会来到授权阶段。

2023-12-25 17:01:01 1493 1

原创 【Kubernetes学习之连接集群】利用 kubeconfig 或 secret Token 连接 k8s 集群

serviceaccount的权限由集群中对应的rolebinding决定,官方文档:

2023-12-07 16:22:25 1516

原创 【k8s源码分析-Apiserver-1】理解 apiserver 的结构(AggregatorServer、KubeAPIServer、ApiExtensionsServer)

Prometheus 项目与Kubernetes项目一样,也来自于 Google 的Borg体系,它的原型系统,叫作 BorgMon,是一个几乎与 Borg 同时诞生的内部监控系统。而 Prometheus 项目的发起原因也跟 Kubernetes 很类似,都是希望通过对用户更友好的方式,将 Google 内部系统的设计理念,传递给用户和开发者。作为一个监控系统,Prometheus 项目的作用和工作方式,其实可以用如下所示的一张官方示意图来解释。可以看到,Prometheus 项目工作的核心,是。

2023-12-06 16:11:43 976

原创 【Go学习之 go mod】gomod小白入门,在github上发布自己的项目(项目初始化、项目发布、项目版本升级等)

go mod init {项目名},不推荐随便命名项目名,这样不便于以后发布到 github,若本地使用的话可以随意命名项目名首先在 github 创建个 repo然后初始化go mod init {项目名}本地创建的项目不上传 github 的话,项目名随便指定若该项目需要上传 github,并需要后期 go get 下载的话,go mod init 一定要与 github 上存储仓库路径一致。

2023-11-19 11:28:09 5711 1

原创 【K8S device-plugin】以 vgpu 项目分析 device-plugin、Scheduler Extender Plugin、KubeSchedulerConfiguration 关系

注意此处,若没有 KubeSchedulerConfiguration 的声明配置,k8s 会认为这些(nvidia.com/gpumem、nvidia.com/gpucores)是资源设备,k8s 调度时候会进行寻找,发现所有节点上都没此资源设备配额(kubectl describe node nodeName 可以看到每个 node 的设备资源情况),导致该 pod 调度失败。首先创建个 device-plugin,注册 gpu 资源(nvidia.com/gpu)

2023-10-13 15:49:48 1437

原创 【k8s 开发排错】k8s组件开发排错之pprof

组件,各种操作系统的安装方式见https://www.graphviz.org/download/#linux。UI分析工具使用起来相对比较麻烦,我们需要先导出文件,然后再使用。比如我们导出kube-scheduler的堆栈信息。然后就可以在浏览器上看到具体的堆栈信息图了。注意,这里需要在服务端安装。工具起服务进行分析。

2023-10-13 11:28:07 863

转载 【K8S源码之Scheduler—1SchedulingQueue三级调度队列】

从设计上三队列分别存储:活动队列、bakcoff队列、不可调度队列,其中backoff中会根据任务的失败来逐步递增重试时间(最长10s)、unschedulableQ队列则延迟60s通过后台定时任务分别将backoffQ队列、unschedulableQ队列来进行重试,加入到activeQ中,从而加快完成pod的失败重试调度。

2023-09-04 15:12:11 506

转载 【K8S源码之Scheduler—0概览】

scheduler extender是k8s对调度器的一种扩展机制,我们可以定义对应的extender,在对应资源的调度的时候,k8s会检查对应的资源,如果发现需要调用外部的extender,则将当前的调度数据发送给extender,然后汇总调度数据,决定最终的调度结果。当从apiserver感知到要调度的pod的时候,scheduler会根据pod的优先级,来讲其加入到内部的一个优先级队列中,后续调度的时候,会先获取优先级比较高的pod来进行优先满足调度。

2023-09-04 10:59:16 157

转载 【K8S源码之Pod漂移-转载】k8s驱逐篇(7)-kube-controller-manager驱逐-taintManager源码分析

的主要功能为:当某个node被打上NoExecute污点后,其上面的pod如果不能容忍该污点,则将会驱逐这些pod,而新建的pod也需要容忍该污点才能调度到该node上;通过kcm启动参数来确定是否启动true时启动(启动参数默认值为truekcm启动参数,默认值true,配合共同作用,两者均为true,才会开启污点驱逐;的主要功能为:当某个node被打上NoExecute污点后,其上面的pod如果不能容忍该污点,则将会驱逐这些pod,而新建的pod也需要容忍该污点才能调度到该node上;

2023-08-18 18:10:42 215

转载 【K8S源码之Pod漂移-转载】k8s驱逐篇(6)-kube-controller-manager驱逐-NodeLifecycleController源码分析

k8s v1.16版本中已经分为了与,本文主要介绍。主要功能有:(1)定期检查node的心跳上报,某个node间隔一定时间都没有心跳上报时,更新node的值为false或unknown,开启了污点驱逐的情况下,给该node添加NoExecute的污点;(2)当污点驱逐未开启时,当node的值为false或unknown且已经持续了一段时间(该时间可配置)时,对该node上的pod做驱逐(删除)操作;(3)当污点驱逐开启时,node上有NoExecute。

2023-08-18 18:08:49 464

转载 【K8S源码之Pod漂移-转载】k8s驱逐篇(5)-kube-controller-manager驱逐

kube-controller-manager驱逐主要依靠以及其中的;

2023-08-18 18:06:57 255

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除