文章

K8s 1.31 Elli 详解

Kubernetes 1.31 Elli 详解

概述

v1.31「Elli」于 2024-08-13 发布,是 Kubernetes 十周年后首个版本,代号是一只戴水手帽的快乐小狗。含 45 项增强(GA 11 / Beta 22 / Alpha 12)。关键里程碑:完成全部 in-tree 云提供商集成与 Ceph 卷插件的移除;kube-proxy nftables 后端默认启用;新 DRA API(结构化参数)Alpha 引入;镜像卷、细粒度授权等面向 AI/安全的新特性登场。

发布基本信息

项目内容
发布日期2024-08-13
代号Elli
开发周期14 周(2024-05-07 ~ 2024-08-13)
增强总数45(GA 11 / Beta 22 / Alpha 12)
贡献113 家公司、528 名个人(核心);生态 379 家/2268 人

主要新特性解读

🟢 GA 特性

1. AppArmor 字段化 GA

  • 从注解迁移到 securityContext.appArmorProfile.type,正式稳定。

2. kube-proxy LoadBalancer 连接排空 GA(KEP-3836)

  • 解读:为 LoadBalancer 服务实现连接排空,终止节点时不丢流量。v1.30 默认启用,v1.31 GA。
  • 相关概念connectionDraining、terminating endpoint、externalTrafficPolicy

3. PV lastTransitionTime GA

  • 解读:PV 在 Pending/Bound/Released 阶段间转换的时间戳,可用于 SLO 指标。
  • 相关概念:PV phase、SLO 监控。

4. Job/StatefulSet/ReplicaSet 增强 GA

  • 弹性 Indexed Job、StatefulSet 起始序号 spec.ordinals.start、ReplicaSet 缩容随机选择、Job 可重试/不可重试 Pod 失败。
  • 相关概念ordinals.start、缩容确定性、podFailurePolicy

5. cgroup v1 进入维护模式(KEP-4569,亦为弃用)

  • 不再加新功能,仅关键安全修复。建议迁 cgroup v2(v1.35 将移除)。

🟡 Beta 特性

1. kube-proxy nftables 后端默认启用(KEP-3866)

  • 解读:nftables 性能与可扩展性优于 iptables,默认启用 Beta。需内核 ≥ 5.13,仅 Linux。
  • 注意:NodePort 等行为与 iptables 模式有差异,迁移前看指南。
  • 相关概念:nftables、conntrack、--ipvs vs --iptables vs --nftables

2. 多 Service CIDR(KEP-1880)

  • 解读:管理员可动态修改 Service CIDR 范围,零停机解决 IP 耗尽。此前 IP 范围在集群创建时硬编码。
  • 相关概念ServiceCIDRIPAddress API、ClusterIP 分配。

3. Service trafficDistribution 默认启用

  • 流量路由偏好字段默认 Beta。

4. PV 回收策略保证(KEP-2644)

  • 解读:在 PV 上加 finalizer,确保 PVC 先删时「Delete」回收策略仍执行,防止存储泄漏。
  • 相关概念:PV finalizer、persistentVolumeReclaimPolicy

5. VolumeAttributesClass(KEP-3751)

  • 解读:通用 K8s 原生 API,动态修改卷参数(如已分配 IO),在线垂直扩展卷平衡成本性能。
  • 相关概念VolumeAttributesClass、CSI 调整、IO 突发。

6. Bound SA Token 节点绑定(KEP-4193)

  • 支持仅绑定节点(非 Pod)的令牌,声明含节点信息并验证节点存在。

🔴 Alpha 特性

1. 新 DRA API / 结构化参数(KEP-3063)

  • 解读:更好的加速器管理。核心是「结构化参数」让资源信息对 K8s 与客户端透明,支持 Cluster Autoscaler 模拟。
  • 演进:v1.32 旧 DRA 撤回、结构化参数 Beta;v1.34 DRA 核心 GA。
  • 相关概念:Device Plugin、ResourceClaim、ResourceSlice、GPU 调度。

2. 镜像卷 / ImageVolume(KEP-4639)

  • 解读:将 OCI 镜像直接作为 Pod 卷挂载。面向 AI/ML 场景(如把模型/数据集打包为镜像挂载)。
  • 相关概念:OCI artifact、image: volume source、emptyDir 对比。

3. 设备健康信息暴露(KEP-4680)

  • Pod .status 每个容器新增 allocatedResourcesStatus,报告设备健康。

4. 细粒度选择器授权(KEP-4601)

  • 解读:webhook 授权器可基于标签/字段选择器允许 list/watch。例:允许 list .spec.nodeName 匹配特定值的 Pod,支持更安全的按节点扩展。
  • 相关概念:node authorizer、RBAC、字段选择器授权。

5. 匿名 API 访问限制(KEP-4633)

  • 可配置匿名请求可访问的端点,防止 RBAC 误配置。

弃用与移除

类型项目说明
移除全部 in-tree 云提供商集成标志云提供商外部化完成(自 v1.26 起)
移除in-tree provider feature gates仅留 Portworx
移除CephFS 卷插件迁 CephFS CSI 驱动
移除Ceph RBD 卷插件迁 RBD CSI 驱动
移除--keep-terminated-pod-volumes2017 弃用,正式移除
弃用status.nodeInfo.kubeProxyVersion默认关闭,v1.33 移除
弃用非 CSI 卷限制调度插件改用 NodeVolumeLimits
即将移除SHA-1 证书Go 1.24 完全移除,需迁非 SHA-1

重大变更与升级注意

⚠️ CephFS / Ceph RBD 移除

  • 使用 cephfs/rbd 卷类型的工作负载,升级前必须改用 CSI 驱动重建。

⚠️ in-tree 云提供商全部移除

  • 必须迁移外部集成(v1.29 已默认移除,v1.31 清理残余 feature gate)。

⚠️ cgroup v1 维护模式

  • 确认 OS 与容器运行时支持 cgroup v2,测试工作负载兼容性。

⚠️ SHA-1 证书

  • 私有 CA 用 SHA-1 的尽快迁移,Go 1.24(2025 上半年)完全移除。

⚠️ nftables 迁移

  • 默认启用 Beta,行为与 iptables 有差异,NodePort 场景重点验证。

⚠️ 调度器 QueueingHint 变更(自定义插件开发者)

  • 自定义插件若拒绝条件可通过 Pod 更新解决,必须为 Pod/Update 事件实现 QueueingHint。

运维实践要点

  1. Ceph 迁移:升级前用 CSI 驱动重建 Ceph 工作负载,验证数据可访问。
  2. nftables 试点:测试集群先开 nftables,验证 NodePort/LoadBalancer/NetworkPolicy 行为,再推生产。
  3. 多 Service CIDR 规划:长期运行集群提前评估,避免 IP 耗尽时手忙脚乱。
  4. VolumeAttributesClass 试点:数据库类有状态服务可动态调 IO。
  5. DRA/镜像卷关注:AI/ML 平台团队跟踪 DRA 与镜像卷成熟度,规划 GPU/模型挂载方案。
  6. SHA-1 证书审计:扫描集群组件与客户端证书签名算法。

常见问题 / 坑点

问题原因解决方案
Ceph 工作负载启动失败in-tree 插件移除改用 Ceph CSI 驱动
云 LB/Volume 异常in-tree 云提供商移除部署外部 CCM
nftables 模式 NodePort 行为不同默认启用 Beta查迁移指南,必要时回退 iptables
旧客户端证书报 SHA-1 错Go 移除 SHA-1重签非 SHA-1 证书

关联知识

参考资源


状态: 📖 已掌握