news 2026/5/13 0:13:02

记一次 Kubebuilder Operator 开发中的 CRD 注解超限问题

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
记一次 Kubebuilder Operator 开发中的 CRD 注解超限问题

概念厘清:注解、CSA 与三路合并的来龙去脉

要理解这个问题,需要先弄清楚几个关键概念。

1. annotations 是什么?

在 Kubernetes 中,注解是与对象关联的键值对,用于存储非标识性的元数据。这些信息可以被工具、库或控制器读取,但 Kubernetes 自身不依赖它们来核心逻辑。

2. last-applied-configuration

当使用 kubectl apply 命令时,默认采用的是 客户端应用(Client-Side Apply, CSA) 模式。为了智能地计算用户下一次 apply 时究竟需要修改哪些字段(而不是盲目覆盖),kubectl 需要一个参照物。

它的解决方案是:将你上次通过 apply 提交的整个 YAML/JSON 文件内容,完整地保存在一个名为的注解里。

这个过程依赖于三路合并:

旧状态: last-applied-configuration 注解中的内容。

当前状态:从 Kubernetes API 服务器获取的资源当前状态。

新状态:用户本次想要应用的 YAML 文件。

kubectl 会对比这三者,精确计算出需要修改、添加或删除的字段。

3. 问题原因

Kubebuilder 生成的 CRD 包含了非常详尽的 OpenAPI 验证规则(即 spec.versions[*].schema)。这些规则本身就是一个极其庞大的 JSON 结构。当这个庞大的结构被整个塞进 last-applied-configuration 注解时,注解的大小就很容易触达 256KB 的天花板。

解决办法

既然问题的根源是 CSA 模式依赖于一个本地的、可能很大的注解,那么解决方案就是换用一种不依赖这个注解的模式。

服务端应用(Server-Side Apply, SSA) 正是为此而生。

SSA 的核心思想:

所有权转移:SSA 将字段管理的职责从客户端转移到了 API 服务器。

字段管理器:服务器会为每个字段记录一个“管理者”。当你声明一个字段时,你就成为了它的管理者。

冲突解决:如果另一个管理者(比如另一个工程师或控制器)试图修改你管理的字段,默认情况下会产生冲突,需要明确指定 --force-conflicts 来覆盖。

实施与效果:

切换到 SSA 非常简单,只需在 kubectl apply 命令后加上 --server-side 标志。例如,修改你的 Makefile:

install: manifests kustomize ## Install CRDs into the K8s cluster specified in ~/.kube/config.

$(KUSTOMIZE) build config/crd | $(KUBECTL) apply --server-side=true -f -

执行此命令后:

API 服务器接管了字段合并的职责。

不再需要生成和存储那个庞大的 last-applied-configuration 注解。

CRD 的元数据大小显著减小,256KB 的限制自然就不再是问题了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/11 19:53:18

约翰·伯格的资产配置理论

约翰伯格的资产配置理论 关键词:约翰伯格、资产配置理论、投资组合、风险分散、长期投资 摘要:本文深入探讨了约翰伯格的资产配置理论。该理论强调通过合理的资产配置实现风险分散和长期稳定的投资回报。文章首先介绍了理论提出的背景,包括目的、预期读者和文档结构等内容。…

作者头像 李华
网站建设 2026/5/13 19:43:22

命越算越薄?一张电器说明书给你讲透唯物主义命理观

【CSDN 独家】命越算越薄?一张电器说明书给你讲透唯物主义命理观扔掉“天机不可泄露”的玄学外衣,用程序员思维解码命运的底层逻辑。关键词:命理、唯物主义、心理学、程序员思维、决策陷阱 预计阅读:6分钟开场:程序员买…

作者头像 李华
网站建设 2026/5/11 17:12:11

【课程设计/毕业设计】基于springboot的人力资源管理系统的设计与实现员工个人信息修改、请假、员工 的薪资管理、考勤管理、社保管理【附源码、数据库、万字文档】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/5/11 3:47:36

Java计算机毕设之基于 SpringBoot 的人事人力资源管理系统设计与实现基于springboot的人力资源管理系统的设计与实现(完整前后端代码+说明文档+LW,调试定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/5/12 12:42:44

Spring Cloud Alibaba + Dubbo

在微服务世界里,服务间的调用就像小伙伴之间传纸条。你可以直接跑过去,也可以用 Dubbo——微服务界的“极速传声筒”,帮你瞬间把消息传到对方手里,还保证安全可靠。 本文将从 Dubbo 的原理、配置、使用场景到实战经验进行全面解析…

作者头像 李华
网站建设 2026/5/12 7:20:50

# 使用 Flutter 构建跨平台应用:入门与实战

## 一、什么是 Flutter?**Flutter** 是由 Google 开发的开源 UI 软件开发工具包,用于为移动、Web、桌面和嵌入式设备构建高性能、高保真的应用程序。它使用 **Dart** 编程语言,并允许开发者通过一套代码库同时为 Android 和 iOS 创建原生级体…

作者头像 李华