当前位置:首页 > 文章列表 > 科技周边 > 业界新闻 > Kubernetes v1.37 原生直方图进入 Beta 后如何核对监控兼容性

Kubernetes v1.37 原生直方图进入 Beta 后如何核对监控兼容性

来源:17golang原创 2026-09-14 10:12:13 0浏览 收藏

如果 Kubernetes v1.37 升级后监控团队担心“原生直方图会不会让旧面板失效”,先记住结论:NativeHistograms 在 v1.37 已进入 Beta 并默认开启,但 Kubernetes 会继续提供经典直方图;真正决定是否采到原生格式的是 Prometheus 版本和 scrape 配置。迁移期不要直接关闭经典数据,先让两种格式并存。

官方地址:https://kubernetes.io/

要点速览
  • Kubernetes v1.37 默认打开原生直方图,覆盖 apiserver、scheduler、kubelet 等组件的指标子系统。
  • Prometheus 3.x 应按 job 设置 scrape_native_histograms: true,同时保留 always_scrape_classic_histograms: true
  • 旧查询带 _bucket,原生查询直接使用指标名;验证通过后仍可按 job 回退。

这次 Beta 变化到底改变了什么

经典 Prometheus 直方图预先写死多个 le 桶,每个桶都会形成时间序列。原生直方图改用动态指数桶,把分布信息放进一条更紧凑的直方图序列,适合观察 API 延迟这类长尾数据。Kubernetes 官方说明它在 v1.37 进入 Beta,且 NativeHistograms 默认开启;这一变化发生在组件指标子系统,不等于你的 Prometheus 已经开始存储原生数据。

支持的组件包括 kube-apiserverkube-controller-managerkube-schedulerkubeletkube-proxy。如果某个组件显式关闭了 feature gate,它仍只暴露经典格式。

Kubernetes v1.37 指标子系统把经典桶和原生直方图通过不同协议交给 Prometheus 的结构示意图
图1:Kubernetes v1.37 原生直方图与经典桶并存、再由 Prometheus 选择采集格式的结构示意图。

先看 Prometheus 版本,再决定配置写法

兼容性核对的第一项不是改 Kubernetes 参数,而是确认 Prometheus。官方文档给出的边界可以压缩成下面这张表:

Prometheus原生直方图迁移动作
低于 2.40不支持升级或只保留经典格式
2.40 到 2.x实验性,全局开关使用 --enable-feature=native-histograms
3.0 到 3.8稳定,推荐按 job同时打开原生与经典抓取
3.9+稳定,按 job 控制不要再依赖旧的全局开关

Prometheus 3.x 的迁移配置可以先这样写。注释保留在配置块里,便于和变更单一起评审:

scrape_configs:
  - job_name: kubernetes-apiservers
    # 允许 Prometheus 请求并存储原生直方图
    scrape_native_histograms: true
    # 迁移期间保留 _bucket、_count、_sum,保护旧面板和告警
    always_scrape_classic_histograms: true
    static_configs:
      - targets: ["kube-apiserver.monitoring.svc:443"]

如果自定义了 scrape_protocols,还要确认其中包含 PrometheusProto。原生直方图依赖 Protobuf 协议;直接用普通文本方式访问 /metrics,看到经典桶并不能证明原生数据没有暴露。

用三层证据核对采集是否真的兼容

  1. 组件层:在 Prometheus 中查询 kubernetes_feature_enabled{name="NativeHistograms"},返回 1 只能说明该组件的 feature gate 已启用。
  2. 协议层:对测试环境的指标端点请求 Prometheus Protobuf,检查直方图消息是否同时出现 classic bucket 与 schema/positive_span 字段。示例只作操作示意,不要把令牌写进脚本:
# 仅在已完成认证的测试环境检查 Protobuf 内容协商
curl -H 'Accept: application/vnd.google.protobuf;proto=io.prometheus.client.MetricFamily;encoding=delimited' \
  https:///metrics
# 返回内容应交给 Prometheus 解码器或抓取链路检查,不要把二进制响应当文本阅读
  1. 查询层:在保留经典数据的前提下,对同一时间窗口分别运行两类 P99 查询:
# 经典直方图:必须保留 le 桶标签
histogram_quantile(0.99, sum by (le) (rate(apiserver_request_duration_seconds_bucket[5m])))

# 原生直方图:直接对指标序列聚合,不再写 _bucket 和 le
histogram_quantile(0.99, sum(rate(apiserver_request_duration_seconds[5m])))

两条查询的数值不必逐点完全相同,但都应有数据且趋势可解释。若打开原生抓取后旧面板突然空白,优先检查 always_scrape_classic_histograms 是否仍为 true,不要先修改 Grafana 表达式。

Prometheus 3.x 原生直方图迁移配置、协议核对和经典与原生 PromQL 对照的结果示意图
图2:围绕 Prometheus 配置、Protobuf 协议和两类 PromQL 的兼容性核对结果示意图。

面板迁移不要一步切断经典数据

建议把迁移拆成四个小动作:先在一个 scrape job 灰度打开两种格式;再把 P99 等查询从 ..._bucket 改为原生直方图写法;随后在预发布环境检查 Grafana 面板和告警;最后确认没有旧查询依赖,再将 always_scrape_classic_histograms 设为 false,换取更低的存储开销。

回滚也分两层。最快三秒级的动作是在 Prometheus job 上设 scrape_native_histograms: false,不需要重启 Kubernetes;如果组件本身不希望暴露原生格式,再将对应组件的 --feature-gates=NativeHistograms=false 改回去并重启。Beta 的价值是可渐进采用,不是要求所有仪表盘同一天完成改写。

检查项通过信号不通过时先做什么
版本Prometheus ≥ 2.40先升级采集端
协议包含 PrometheusProto检查自定义协议列表
旧面板_bucket 查询仍有数据打开经典格式保留
回退单个 job 可关闭原生抓取先验证灰度范围和变更权限

常见问题

升级 Kubernetes v1.37 后必须立刻改所有 PromQL 吗?

不必。组件默认双格式暴露,先保留经典抓取即可;等原生查询在预发布验证通过,再按面板和告警逐项迁移。

为什么直接访问 /metrics 只看到了 _bucket?

普通文本协议只展示经典桶。Prometheus 在启用原生抓取时会通过内容协商请求 Protobuf,直接检查时必须带对应的 Accept 头。

Prometheus 低于 2.40 能否只升级 Kubernetes?

不能获得原生直方图存储能力。Kubernetes 仍可暴露经典格式,但采集端需要升级到 2.40 或更高版本,3.x 更适合按 job 渐进迁移。

上线前结论:把“feature gate 已开启”“Prometheus 能请求 PrometheusProto”“旧查询仍有数据”“原生查询已在预发布验证”当作四个独立勾选项。四项都通过后,再考虑关闭经典抓取;任何一项不清楚,都先保持双格式。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
Go bufio.Writer 写入成功但 Flush 报错如何处理Go bufio.Writer 写入成功但 Flush 报错如何处理
上一篇
Go bufio.Writer 写入成功但 Flush 报错如何处理
Go Rows.Err 循环结束后为什么仍然需要检查
下一篇
Go Rows.Err 循环结束后为什么仍然需要检查
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • PubMedQA数据集详解:生物医学问答基准、功能与应用指南
    PubMedQA
    深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
    7次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    125次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    49次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    16次使用
  • OpenCompass大模型评测体系详解:功能、使用指南与应用场景
    OpenCompass
    OpenCompass是上海AI实验室推出的开源大模型评测平台,提供CompassKit、CompassHub和CompassRank三大核心组件,支持LLM及多模态模型的一站式标准化评估与排行榜查询。
    67次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码