Skip to main content

Command Palette

Search for a command to run...

Pod 对象也能被淘汰么

Updated
2 min read

原文:Could Kubernetes Pods Ever Become Deprecated?

作者:Martin Heinz

随着时间的推移,所有的软件项目都会加入新的功能和 API,与此相对地,也会有功能和 API 被移除。Kubernetes 这样的大型项目也并无不同,但是核心 API 的废弃和删除,始终有些含混,Kubernetes 中的核心对象或者说是 API,例如 Pod、Deployment 和 Service,是不是可以删除呢?如果答案是肯定的,那么该如何进行呢?

长话短说

GA 状态的核心 API,例如 v1 API 中的对象也是可能淘汰的。Kubernetes 中的的淘汰话题需要分为 API、CLI 以及 FeatureGate 这三个方面,每方面又会有自己的成熟阶段,例如 Alpha、Beta 或者 GA,这些成熟度的定义,就代表了在什么时间、什么条件下进行淘汰操作—— Pod 这样的东西也不能例外。因此本文尝试对这一问题进行进一步的探讨,看看过往的例子和一些未来的假设。

分而治之

不同的对象或功能有不同的规则,所以在讨论淘汰规则之前,首先对这些淘汰目标进行分类:

  • REST 对象:这是绝大多数人最多打交道的东西,因此也是最引人关注的方向,这里包括了 Pod 或者 Deployment 这样的顶层对象,也包含了它们的成员字段,例如 containersvolumes 或者 env;另外还有一些常量,例如 imagePullPolicy 使用的 AlwaysIfNotPresent 等。
  • CLI 和命令行参数:这一部分内容是针对客户端的。最容易想到的可能就是 kubectl,其实还包含了 kubeletkube-apiserver 或者 kube-scheduler 及其子命令和选项等。
  • 功能和行为:各种不同成熟度的试验特性是无法用 API 或者 CLI 来表达的,但是它们也应该有自己的淘汰过程和节奏。
  • 指标:最后 Kubernetes 的各个组件还在 /metrics 端点中提供了大量指标。这些指标可能会在监控等系统中使用,因此也不能直接删除,而需要有一定的淘汰规则。

REST 对象

REST API 需要遵守一个普遍规则——官宣淘汰之时,API 版本至少要支持:

  • GA:12 个月或者 3 次发版(取最长时间)
  • Beta:9 个月或者 3 次发版(取最长时间)
  • Alpha:0 次发版

看起来好像非常清晰,其实里面包含了很多其它(可能很难理解)的规则,所以我们先进入示例环节来进行澄清。假设有一个叫做 Task 的 API 对象(有趣的事实:这是 Pod 的原名,请参见 First Commit of Kubernetes)。这个对象处于 GA 状态,其 API 版本为 v1,淘汰需要经过什么过程呢?

Kubernetes 版本API 版本推荐行为
Xv1v1此时 Task 对象处于 GA 状态,并没有进入淘汰周期
X+1v2alpha1, v1v1引入 v2alpha1,宣布 Task 开始淘汰,此时 v2alpha1 中并不包含 Task
X+2v2alpha2v1v1v2alpha2 替代 v2alpha1
X+3v2beta1, v1v1v2alpha2v2beta1 替换
X+4v2beta2v2beta1v1v1引入 v2beta2v2beta1 依旧存在,但是开始淘汰
X+5v2v2beta2v2beta1v1v1引入 v2,包括首选使用的 v1 在内的所有其他版本进入淘汰周期
X+6v2v2beta2v2beta1v1v2没有移除任何 API,但是 v2 已经成为首选版本
X+7v2v2beta2v1v2移除 v2beta1
X+8v2v1v2移除 v2beta2
X+9v2v1v2没有什么变化,按照规则,v1 必须继续存活一个版本
X+10v2v2最终删除了 v1,其中的 Task 对象也宣告终结

从上表来看,如果在 v2alpha1 开始淘汰 Task 对象,就需要 9 个版本才能最终完成。读者需要注意的是,根据当下的发布节奏,每年发版三次,整个淘汰流程可能需要三年多。

有些对象虽然没进入 GA,但是用户已经将其视为 GA 并进行使用。例如 1.19 中才进入 GA 的 Ingress,或者 1.21 的 CronJob。这种 beta 甚至是 alpha 的版本,淘汰节奏就不会这么宽松了。要检查资源所属的分类,可以运行 kubectl api-resources | grep beta,读取所有集群中的所有 beta API 对象类型。

REST 对象字段成员、常量以及对象结构,淘汰规则跟对象是一致的。也就是说,imagePullPolicy 中使用的 AlwaysIfNotPresentNever 不会随机变化也不会从一节挪到另一节。

例如 PodSecurityPolicy 可能是近期的一个最大变化。这个 API 对象会从 v1beta1 转向 EOL,在 v1.21 中开始淘汰,在 v1.25 中被移除。详情可参见 KEP_2579

另一个进行中的重要淘汰就是 selfLink 字段,这是 KEP-1164 中的一部分,这一变更的过程记录在 Github Issue 之中。

如果你有兴趣了解其它的淘汰过程,希望了解其中的逻辑关系以及整个流程,可以在 kubernetes/enhancements repository 搜索包含 deprecate 关键字的 KEP。

客户端和参数

和 REST 对象类似,kubectlkubelet 的子命令及其参数也是有自己的淘汰策略的。

这部分的规则比前面的案例要简单,对于 kubectl 这样的面对客户的组件来说:

  • GA:12 个月或者两次发版(取最长时间)
  • Beta:3 个月或者 1 次发版(取最长时间)
  • Alpha:0 次发版

对于 kubeletkube-apiserver 或者 kube-scheduler 这样的面向管理员的组件:

  • GA:12 个月或者两次发版(取最长时间)
  • Beta:3 个月或者 1 次发版(取最长时间)
  • Alpha:0 次发版

近期这方面的最知名案例应该算是 kubelet 中的 dockershim 了。在 KEP-2221 中讲到,在 v1.20 中设置淘汰,在 v1.24 中进行删除。

这方面的另一个显著目标就是 seccomp Profile 即将 GA,这一过程在 KEP-135 中进行跟进。这个特性并不会真正地对参数和 CLI 产生影响,但是它的 GA 过程会要求淘汰 kubelet--seccomp-profile-root,详情请参见 SIG Node 文档

所以这一节的淘汰过程是比较较宽松的,但是如果你正在自动化过程中使用 kubectl alpha,最好在升级集群和 CLI 之前检查一下它的淘汰情况。

Feature Gate

Kubernetes 每个版本中都会包含很多的实验性功能。这些功能被称为 Feature Gate,它们使用 Key/Value 形式的开关进行控制。

这些特性既然是用于试验的,其淘汰策略自然和其它的 Kubernetes 对象有所不同。随着特性的逐步成熟,它的 Feature Gate 也会发生变化。Alpha 阶段的功能,其 Feature Gate 会被缺省关闭;而 Beta 阶段的功能则会缺省打开;如果该功能进入 GA,对应的 Feature Gate 就不再需要了,会被淘汰,无法操作。

Alpha 功能可能随时消失;Beta 功能可能会在 1 次发版以后删除;进入 GA 的功能则会在两次发版后删除。

这方面的最好例子就是官方的 Feature Gate 列表。以其中包含的 AffinityInAnnotations 为例,它就是从 Alpha 淘汰的;而 BlockVolumeDryRun 或者 EndpointSlice 则已经进入了 GA。我还没有看到过有从 Beta 被淘汰的 Feature Gate。

如果打开了某些 Feature Gate,在集群升级之前一定要检查一下,防止一些特性因升级被删除。

指标

最后一个需要关注的就是监控指标,可能会有监控工具对指标进行聚合和消费,因此其淘汰过程也是需要多加小心的。和前面章节中的内容不同,指标只分成两类——稳定和 Alpha,声明淘汰之后,稳定指标可以在 3 次发版之后移除,Alpha 可以随时移除。

例如 rest_client_request_latency_seconds 就是一个值得观察的指标淘汰案例,这个过程在 v1.17 的版本说明里体现。

如果想要了解更多监控指标生命周期的问题,可以查看一下系统指标的相关文档

结论

现今很多项目会采用“有破坏性的快速演进”方法来进行淘汰工作,其中往往会包含繁杂的手工操作,所以 Kubernetes 这样的大项目提出了如此深思熟虑的启用过程,让用户有时间来进行有计划的迁移,这是让人非常愉快的。

那么这篇文章的要点在哪里:

  • 所有东西都可能淘汰?是的?
  • 需要担心吗?显然不用。

看看淘汰的时间线长度,就知道无需担心突然袭击了。但是为长远计,应该检查版本说明,注意其中是否有你正在使用的 Alpha 功能。还应该阅读 淘汰 API 指南,其中会列出所有未来将要移除的 API 对象。最后要说明的是,外部供应商的 CRD 的生命周期是自行负责的,可能和官方策略并不一致。

More from this blog

龙虾恐慌:AIOps 又要改名了?

ChatGPT 开始,把 AI 拉近到普罗大众的面前,让无数人感受到 AI 的亲民魅力。而龙虾,则把大模型驱动的自动化能力,突然间变得水灵灵、活泼泼地走进千家万户。它不只是“风口上的猪”,而是风口本身。热度高到让 Mac mini 一度断货,不知道这在不在库克的预料之内。 每代人都有每代人的鸡蛋,春节期间,我就领了我的鸡蛋。翻出古老的 MacBook Air M1,充值各种大模型。当然了,这个工具

Mar 9, 20261 min read

再见 2025

我猜不少人以为这个号废了吧?并没有,只是今年变化有点大,一直有种抄起键盘,无从说起的感觉,所以一直偷懒到今天,2025 的最后一天。 今年是我的第四个本命年,去年末一期播客里,大内说本命年不是灾年,是变化年,有危也有机。可是讲真啊,只看到危,没看到机。 各种因缘际会,从鹅厂跳槽到前东家,已经接近四年,第一个合同期已经进入尾声。除了前两年还在云原生领域嗷嗷叫,后两年基本都是些鸡零狗碎的东西了,用老东家的术语说是——偏离主航道,可谓是前景暗淡了。 一旦确定要滚蛋,反倒心思轻松起来,每天骑着我的小红车...

Jan 5, 20261 min read

辅助编程?dora 说:我知道你很急可是请你别急

从 OpenGPT 把大模型的火烧旺了之后,这三年来,相信很多组织或摩拳擦掌、或躬身入局,希望借助聪明能干的大模型,或想偿还技术宅,或想降本增效,或想弯道超车。一时间,沉寂许久的 AIxx 又活过来了,LLM Ops、Vibe Coding、中医大模型、GPT 算命等等,全都老树发新芽,焕发了勃勃生机。那么视角拉回从业者最关注的饭碗相关的领域之一——AI 辅助开发,产生了什么触动,应该如何拥抱呢? DORA 的年度报告中给出了很有意思的结论——强者恒强。 执行摘要部分总结了几个有趣的点: 问题...

Oct 6, 20251 min read

[译]dora:ai 辅助软件开发状态报告

执行摘要 在 2025 年,科技领导者面临的核心问题已不再是“是否要采用 AI”,而是“如何实现其价值”。 DORA 的研究基于超过 100 小时的定性访谈和来自全球近 5,000 名技术专业人士的问卷调查。研究揭示了一个关键事实:AI 在软件开发中的主要角色是“放大器”。它会放大高效能组织的优势,也会凸显组织的缺陷。 关键结论:AI 是放大器 AI 投资的最大回报并非来自工具本身,而是来自组织底层系统的战略性建设: 高质量的内部平台 清晰的工作流 团队的协同能力 缺少这些基础,AI ...

Oct 2, 202514 min read

僭越了,有人在用 Rust 写 Kubernetes

一个新语言问世,最爱做的事情之一,就是重写存量软件了。 云原生喝酒 SIG 重点扶持项目——rk8s(https://github.com/rk8s-dev/rk8s) 也可以归在这个范畴里,只不过这个项目重写的东西比较大,是 Kubernetes。 从 2025 年 1 月第一个 Commit 开始,到现在有了 200 多次 Commit,十几万行代码。当然距离 Kubernetes 的几百万行代码还差得远——老马就是喜欢整这种大无畏项目。 另外该项目也是国内第一个脱离 Cargo 转向使用 ...

Sep 27, 20253 min read

【伪】架构师

342 posts

Pod 对象能被淘汰吗?