首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

通过 kube-state-metrics 添加 CRD 状态指标

在 Kubernetes 中,自定义资源(CRD)是一种扩展 API 的机制,可以使用 Kubernetes APIServer 来存储和管理自定义对象。本文我们将描述如何在不编写自定义资源注册表和自己构建 KSM 的情况下,根据自定义资源的状态来添加指标。

配置

需要下面描述的 YAML 配置文件来定义你的自定义资源和要转换为指标的字段。

有两个参数需要用到:

在内联的 yaml 中

指定的配置文件路径

如果提供了两个标志,则内联配置将优先。当同一资源存在多个条目时,kube-state-metrics 将退出并报错,这包括引用不同 API 版本的配置。

除了指定 标志之外,还应该将复数形式的自定义资源种类添加到 标志中的暴露资源列表中。如果不指定 ,那么 kube-state-metrics 将考虑在 中配置的所有已知自定义资源和所有可用的默认 kubernetes 对象。

也可以将 kube-state-metrics 配置为仅在自定义资源模式下运行,除了指定 标志之外,还可以将 设置为 true。使用此配置,kube-state-metrics 只会考虑在 中配置的已知自定义资源。

注意:、 和 这几个公共标签是保留的,将被 字段中的值覆盖。

示例

下面我们将将使用以下自定义资源来进行说明:

单值

配置如下:

使用上面的配置会产生如下所示指标:

多指标

然后会产生如下所示的指标:

指标类型

该配置支持 OpenMetrics 规范 中的三种指标。指标类型由 字段及其在类型特定结构中的特定配置指定。

Gauge

Gauge 是表示的是当前的测量值,如当前使用的内存字节数或队列中的项目数,对于 gauge 来说,绝对值是大家感兴趣的东西。例如:

使用上面的配置可以产生如下所示的指标:

不过需要注意下类型转换。Gauge 生成 float64 类型的值,但自定义资源可以是各种类型,kube-state-metrics 对很多类型执行隐式类型转换,支持的类型包括:

(u)int32/64、int、float32 和 byte 转换为 float64

如果 NilIsZero 为真,nil 一般会被映射为 0.0,否则会产生一个错误

bool 类型 true 映射到 1.0,false 映射到 0.0

对于字符串,以下逻辑适用:

"true" 和 "yes" 被映射为 1.0,"false" 和 "no"被映射为 0.0(全部不区分大小写)

RFC3339 时间被解析为浮点时间戳

最后使用 https://pkg.go.dev/strconv#ParseFloat 将字符串解析为浮点数,它应该支持所有常见的数字格式,如果失败,则会产生错误

Kubernetes 控制器上的状态条件示例:

这适用于根据 kubernetes api (https://pkg.go.dev/k8s.io/apimachinery/pkg/apis/meta/v1#Condition) 公开状态条件的 kubernetes 控制器 CR:

可以产生如下所示的指标:

StateSet

StateSet 表示一系列相关的布尔值,也称为 bitset。如果需要对 ENUM 进行编码,则可以通过 StateSet 来完成。例如:

StateSet 类型的指标将为每个资源的列表中定义的每个值生成一个指标,如果该值与列表中的值匹配,则该值将为 1。会生成如下所示的指标:

Info

Info 指标用于暴露文本信息,这些信息在进程生命周期内不应更改,常见示例是应用程序的版本、修订控制提交和编译器的版本。 Info 类型的指标的值始终为 1,例如:

会产生如下所示的指标:

命名

默认指标名称带有前缀以避免与其他指标冲突。默认情况下,使用 的指标前缀与自定义资源的 连接,你可以使用 字段覆盖此行为。

会产生如下所示的指标:

要完全省略命名空间空间和/或子系统,请将它们设置为空字符串:

会产生如下的指标:

日志

如果已注册指标路径但未在自定义资源上找到,则会记录错误日志。对于某些资源,这可能会产生大量无用的日志数据,可以使用资源或指标上的 设置指标或资源的错误日志详细程度:

路径语法

Path 路径被指定为字符串列表,每个字符串都是一个 path 片段,根据自定义资源的数据动态解析。如果缺少 path 的任何部分,则结果为零。例如:

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20230222A07F6K00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券