文章

K8s 1.28 Planternetes 详解

Kubernetes 1.28 Planternetes 详解

概述

v1.28「Planternetes」于 2023-08-15 发布,代号取「花园」之意,寓意社区精心呵护、协作成长。本版本含 45 项增强(GA 12 / Beta 14 / Alpha 19),最大亮点是控制平面与节点版本偏差扩大到 n-3,以及 Sidecar 容器、ValidatingAdmissionPolicies 进入 Beta 等调度与准入控制的重要进展。

发布基本信息

项目内容
发布日期2023-08-15
代号Planternetes
开发周期14 周(2023-05-15 ~ 2023-08-15)
增强总数45(GA 12 / Beta 14 / Alpha 19)
Release LeadGrace Nguyen
贡献911 家公司、1440 名个人

主要新特性解读

🟢 GA(稳定)特性

1. 非优雅节点关机恢复(Non-graceful Node Shutdown)

  • 解决问题:节点意外断电/硬死机后,Pod 卡在 Terminating、VolumeAttachment 无法分离,StatefulSet 无法在别处重启。
  • 实现机制:通过外部触发(kubectl drain 或标记节点)强制清理卡住的 Pod 与卷挂载,释放 PV 供新节点接管。
  • 用法:参考 node-shutdown/#non-graceful-node-shutdown,对有状态工作负载做故障演练时验证。
  • 相关概念:VolumeAttachment、force-delete、StatefulSet 故障转移、Pod graceful shutdown。

2. 默认 StorageClass 追溯分配

  • 解决问题:早期未指定 storageClassName 的 PVC 不会自动绑定默认 SC。
  • 新行为:现在自动且始终生效,对历史已存在的 PVC 也会补上默认 SC。
  • 影响:升级后存量 PVC 可能突然被绑定,需检查是否有「故意不绑」的 PVC。
  • 相关概念:StorageClass、PVC binding、provisioner。

3. Kubelet PodResources API GA

  • 意义:设备插件、监控代理可稳定依赖该端点获取 Pod 的 CPU/设备分配信息。
  • 相关概念:Device Plugin、NUMA、Topology Manager、kubectl get --raw /podresources

4. 其他 GA:kubectl events、Proxy Terminating Endpoints、扩展 DNS 配置、IPTables 链所有权清理、Auth API(获取自身用户属性)等。

🟡 Beta 特性

1. ValidatingAdmissionPolicies(CEL 准入)

  • 解读:用 CEL 表达式在 API Server 进程内做准入校验,替代部分 Validating Webhook,免去部署 webhook 服务、降低延迟与运维复杂度。
  • 用法示例
    apiVersion: admissionregistration.k8s.io/v1beta1
    kind: ValidatingAdmissionPolicy
    metadata:
      name: require-labels
    spec:
      matchConstraints:
        resourceRules:
          - apiGroups: [""]
            apiVersions: ["v1"]
            operations: ["CREATE", "UPDATE"]
            resources: ["pods"]
      validations:
        - expression: "has(object.metadata.labels) && 'app' in object.metadata.labels"
          message: "Pod 必须包含 app 标签"
  • 相关概念:CEL(Common Expression Language)、ValidatingWebhookConfiguration、admission chain。

2. Admission Webhook Match Conditions(默认启用)

  • 解读:webhook 配置新增 matchConditions(CEL),仅当条件为真才转发请求,大幅减少无效 webhook 调用
  • 注意:默认启用,升级即生效,可能改变现有 webhook 调用频率。
  • 相关概念:webhook 失败策略 Fail/IgnorenamespaceSelectorobjectSelector

3. CRD 验证规则(CEL)

  • 解读:CRD schema 中直接写 CEL 校验,新增 reasonfieldPath 字段标注失败原因与路径。
  • 相关概念:OpenAPI v3 schema、admission webhook 替代、x-kubernetes-validations

4. Linux Swap 支持

  • 解读:可控地为节点启用 swap,便于性能调优与噪声邻居缓解。面向节点管理员与应用开发者两类用户。
  • 注意:默认不开启节点 swap,需 kubelet 配置 --fail-swap-on=false 并设置 swap 行为。
  • 相关概念:cgroup v1/v2、memory.swap、QoS 类、NodeSwap feature gate。

🔴 Alpha 特性

1. Sidecar 容器(KEP-753,里程碑起点)

  • 解读:init 容器新增 restartPolicy: Always,作为 sidecar。kubelet 不再等 sidecar 完成即启动主容器;主容器退出后 sidecar 被终止;sidecar 失败即使 Pod restartPolicy: Never 也会重启。
  • 演进:此为 Alpha 起点,v1.33 GA。彻底取代 hack 式 sidecar 注入。
  • 相关概念:init container、Pod 生命周期、Istio/Linkerd sidecar 注入。

2. Job Pod 替换策略 & 按索引退避

  • 解读:Indexed Job 支持等旧 Pod 完全终止再建新 Pod(解决 TensorFlow/JAX 名称冲突);每个索引独立 backoffLimit,部分索引失败不影响其他索引。
  • 相关概念:Indexed Job、completionMode: Indexed、ML 训练作业、embarrassingly parallel。

3. 混合版本代理(Mixed Version Proxy)

  • 解读:API Server 聚合层在本地无法识别请求时,透明代理到兼容版本的 API Server,对客户端隐藏升级期间的版本差异。
  • 相关概念:API aggregation、AA server、滚动升级、APIService

4. CDI 设备注入

  • 解读:标准化复杂设备(多 /dev 节点)注入容器的机制,基于 CRI 1.27 的 CDIDevices 字段。
  • 相关概念:CDI(Container Device Interface)、Device Plugin、GPU/加速器。

弃用与移除

类型项目说明
移除GCE PD CSI 迁移完成迁移并移除 in-tree 代码
弃用Ceph RBD in-tree后续 v1.31 移除,迁移到 Ceph CSI
弃用Ceph FS in-tree后续 v1.31 移除,迁移到 Ceph CSI

重大变更与升级注意

⚠️ 版本偏差扩大到 n-3(最重要)

  • 变更:节点(kubelet/kube-proxy)最早可比控制平面晚 3 个次版本。
  • 影响:可每年只升级节点一次仍保持上游支持,利好长时间运行工作负载。
  • 注意:仍支持更频繁升级;n-3 是下限不是推荐。

⚠️ Admission Webhook Match Conditions 默认启用

  • 升级后即生效,评估现有 webhook 是否受 CEL 过滤影响。

⚠️ 默认 StorageClass 追溯分配

  • 检查存量 PVC 是否有「故意不绑默认 SC」的情况。

⚠️ Ceph 存储迁移

  • 使用 Ceph RBD/CephFS 的集群需规划 CSI 迁移(v1.31 将移除 in-tree)。

运维实践要点

  1. 利用 n-3 规划节点升级:可制定「每年一次节点滚动升级」策略,降低维护成本,但务必在支持窗口内。
  2. 引入 ValidatingAdmissionPolicies:将简单的标签/字段校验从 webhook 迁移到 CEL,降低延迟。可结合 kubectl validate 干跑。
  3. Sidecar 容器试点:v1.28 为 Alpha,生产建议等 Beta/GA(v1.33 GA)后采用,但可提前在测试环境验证日志/监控 sidecar 的生命周期行为。
  4. 有状态工作负载故障演练:基于非优雅关机恢复 GA,定期演练 StatefulSet 节点故障转移。

常见问题 / 坑点

问题原因解决方案
升级后部分 PVC 突然绑定默认 SC 追溯分配 GA显式设置 storageClassName: "" 表示不绑
Webhook 调用减少MatchConditions 默认启用检查 matchConditions 是否误过滤
Sidecar 容器不工作v1.28 为 Alpha,需启用 feature gateSidecarContainers=true,且 kubelet/api-server 都需启用

关联知识

参考资源


状态: 📖 已掌握