登录
推荐 文章 Go 技术 课程 下载 专题 AI
首页 >  科技周边 >  业界新闻

Kubernetes 1.37 升级前需要关注哪些默认行为变化

来源:17golang原创

时间:2026-09-06 11:25:08 399浏览 收藏

Kubernetes 1.37 已发布,真正值得升级前排查的不是“新增了多少功能”,而是哪些能力改变了默认路径。官方发布说明显示,这一版包含 67 项增强,其中 HPA 缩容到零、并发 watch 对象解码、etcd RangeStream、StorageVersionMigration 等能力会影响默认运行方式;而 Pod 级资源管理、DRA Workload ResourceClaims 仍需要显式开启。

升级前可以先记住一个判断:默认开启不等于所有业务都立刻改变,默认关闭也不等于不能测试。应把控制面、工作负载、存储和回退条件拆开验证。

要点速览
  • 控制面读取大对象时会更多使用流式 Range 和并发解码,但旧版 etcd 会自动回退。
  • HPA 可以在对象或外部指标场景下使用 minReplicas: 0,MemoryQoS 默认门已打开但默认参数刻意保持保守。
  • SELinux 卷行为只在 CSI 驱动选择加入时产生实际影响,StatefulSet 的 maxUnavailable 默认行为在 1.37 恢复。

先确认版本与升级范围

不要只看客户端的 kubectl version。先记录控制面、每个节点 kubelet,以及 etcd 的实际版本,并把使用 CRD 转换 webhook、CSI、HPA、StatefulSet 的业务列出来。

# 查看客户端与服务端版本,确认升级目标是否已经生效
kubectl version
# 查看节点版本,排查控制面与节点混合版本窗口
kubectl get nodes -o custom-columns=NAME:.metadata.name,KUBELET:.status.nodeInfo.kubeletVersion
# 查看 API Server 暴露的服务端版本
kubectl get --raw /version

这一轮的目标不是立刻修改 feature gate,而是建立升级前基线:API Server 启动耗时、etcd 内存峰值、webhook 并发、HPA 副本数和挂载失败数都应有旧版本数据可比。

检查控制面启动与存储读取变化

1.37 默认启用 ConcurrentWatchObjectDecode,watch 事件的解码和转换会进入有界并发池,官方说明默认工作池为 10 个协程,并由收集器按原顺序交付。对带 CRD 转换 webhook 的集群,调用总量不变,但冷缓存初始化时的同时请求数会上升。

同一版本的 EtcdRangeStream 默认开启,API Server 可以分块读取大列表,减少一次性响应在 etcd 和 API Server 中同时驻留的内存。它需要 etcd 3.7+;遇到旧 etcd 的 Unimplemented 响应会自动退回原来的 unary Range,因此升级后仍要观察延迟和内存,而不能假设一定获得流式收益。

Kubernetes 1.37 控制面 watch cache、并发解码、etcd RangeStream 与旧版回退关系图
图1:控制面读取路径中,并发解码与 RangeStream 的默认关系,以及旧版 etcd 的回退边界。

StorageVersionMigration API 在 1.37 升级到稳定版并默认启用。它提供了声明式迁移入口,但不会因为升级完成就自动改写所有历史对象;需要由集群管理员或 CRD 维护者创建迁移对象,并为迁移过程安排监控和窗口。

复查工作负载和存储默认值

工作负载侧至少检查以下五项:

变化默认状态升级前要问的问题
HPA scale to zeroBeta,默认开启对象指标或外部指标是否允许空载为 0,恢复延迟能否接受?
MemoryQoSBeta,feature gate 默认开启kubelet 的内存保护和 throttling 参数是否沿用保守默认值?
PVC last-usedBeta,默认开启清理脚本是否会误把 Unused 条件当成可直接删除?
SELinux 卷挂载稳定,相关开关默认开启CSI 驱动是否设置 seLinuxMount: true,共享卷的标签是否一致?
StatefulSet maxUnavailable1.37 恢复默认有序更新时能否承受并行不可用副本?

HPA 的 0 副本不是普通 CPU 利用率场景的无条件缩容开关,发布说明限定在对象或外部指标工作负载,并要求设置 spec.minReplicas: 0。MemoryQoS 虽然默认门打开,但官方说明默认值是为了避免旧工作负载突然遭遇意外内存节流。SELinux 变化只对启用 SELinux 且 CSI 驱动加入该能力的卷产生影响;同一节点上不同 SELinux 标签的 Pod 共享一个卷时,旧的递归重标记假设可能不再成立。

Kubernetes 1.37 HPA、MemoryQoS、PVC、SELinux 和 StatefulSet 默认行为影响关系图
图2:把 1.37 的工作负载默认行为放到副本、内存、卷和更新四个检查面中逐项确认。

区分默认开启与默认关闭的 Beta 能力

升级清单中最容易混淆的是“Beta”与“默认启用”。Pod-level Resource Managers 在 1.37 进入 Beta,但 PodLevelResourceManagers 仍默认关闭;DRA Workload ResourceClaims 也进入 Beta,却由 DRAWorkloadResourceClaims 控制且默认关闭。没有明确的业务需求、节点版本和回滚方案时,不要顺手开启。

相反,HPA scale to zero、MemoryQoS、并发 watch 解码和 RangeStream 属于需要主动观察的默认路径。对它们应做灰度和指标对比,而不是仅检查 feature gate 输出。

用灰度指标完成升级验收

先升级一个非关键控制面或测试集群,再挑选带 CRD 转换 webhook、外部指标 HPA、CSI 卷和 StatefulSet 的代表性命名空间。重点看 API Server 是否出现持续的 429、webhook 是否达到并发上限、etcd 内存峰值是否下降、HPA 是否能从 0 恢复、PVC 条件是否被误用,以及 StatefulSet 更新是否超过业务容忍度。

如果问题只在 SELinux 卷出现,优先按卷和 CSI 驱动边界处理;需要保留旧的递归标记语义时,再评估 Pod 的 seLinuxChangePolicy: Recursive。如果 RangeStream 未生效,先确认 etcd 版本,不要把自动回退误判成 API Server 故障。

官方变更可从 Kubernetes v1.37 发布说明DRA 更新说明继续核对;生产升级应把实际启用的 gate、组件版本和回退动作一起归档。

常见问题

Kubernetes 1.37 是否会自动把 HPA 缩到 0?

不会。只有使用对象或外部指标、并显式设置 minReplicas: 0 的 HPA 才进入这条能力路径。

etcd 不是 3.7,升级 1.37 会失败吗?

官方发布说明给出的行为是探测到不支持的 RPC 后回退到 unary Range;仍应通过监控确认旧路径的内存和延迟是否可接受。

SELinuxMount 默认开启后所有卷都会变吗?

不会。只有启用 SELinux 且 CSI 驱动在 CSIDriver 中选择 seLinuxMount: true 时才会进入新挂载语义。

声明:本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>