作者:Han Kang(谷歌),Elana Hashman(Red Hat)
Kubernetes 1.21 标志着指标稳定性框架的毕业阶段,同时也标志着第一个官方支持的稳定指标。稳定的指标不仅提供了可支持性的保证,指标稳定性框架还为你在遇到有问题的指标时提供了逃生通道。
这里查看Kubernetes 稳定指标列表[1]
从消费的角度来看,稳定的指标可以可靠地在多个 Kubernetes 版本中使用,而不会出现摄入失败的风险。
指标的稳定性是社区持续关注的问题。集群监控基础设施通常假定某些控制平面指标具有稳定性,因此我们引入了一种将指标版本化为适当 API 的机制,其稳定性保证了正式指标的弃用过程。
指标目前可以有两个稳定级别:alpha 或 stable。
Alpha指标没有稳定性保证;因此,可以随时修改或删除它们。此时,Kubernetes 的所有指标都隐含地属于这一类。
Stable指标可以保证不发生变化,除非该指标可能在未来的 Kubernetes 版本中被标记为弃用。我们所说的不改变,指的是三件事:
从摄取的角度来看,为已经存在的标签添加或删除可能的值是向后兼容的,但不是标签本身。因此,允许从现有标签中添加或删除值。在将来的 Kubernetes 版本中,稳定指标也可以被标记为弃用,因为这将在元数据字段中进行跟踪,实际上并不会改变指标本身。
不允许从稳定指标中删除或添加标签。为了从现有的稳定指标中添加或删除一个标签,我们必须引入一个新的指标并弃用稳定的指标;否则将违反兼容性协议。
虽然弃用策略只影响稳定指标的稳定性保证(而不是 alpha 指标),但可以选择性地在 alpha 指标上提供弃用信息,以帮助组件所有者告知用户未来的意图,并帮助完成过渡计划。
经过弃用过程的稳定指标将表示该指标最终将被删除。指标的弃用生命周期大致是这样的(每个阶段代表一个 Kubernetes 版本):
弃用的指标与它们的稳定指标具有相同的稳定性保证。如果一个稳定指标已被弃用,那么已弃用的稳定指标就保证不会改变。当一个稳定指标被弃用时,未来的 Kubernetes 版本将指定为该指标被认为弃用的版本。
根据 Kubernetes 官方弃用策略的精神,已弃用的指标的描述文本将以已弃用通知字符串“(Deprecated from x.y)”作为前缀,并在指标注册期间发出警告日志。
像它们的稳定指标一样,弃用的指标将自动注册到指标端点。在随后的版本中(当指标的 deprecatedVersion 等于 current_kubernetes_version - 4),被弃用的指标将变成隐藏的指标。隐藏指标不会自动注册,因此默认情况下对最终用户是隐藏的。这些隐藏指标可以在达到隐藏状态后为一个版本显式地重新启用,从而为集群操作人员提供一个迁移路径。
在指标实例化期间,可以通过将元数据字段 StabilityLevel 设置为“Stable”来指定稳定性。当一个 StabilityLevel 没有明确设置时,指标默认为“Alpha”稳定性。请注意,在运行时确定字段的指标不能被标记为 Stable。稳定的指标将在预提交阶段的静态分析期间被检测出来,并且必须由 sig-instrumentation 检查。
var metricDefinition = kubemetrics.CounterOpts{
Name: "some_metric",
Help: "some description",
StabilityLevel: kubemetrics.STABLE,
}
有关设置指标稳定性和弃用的更多示例,请参见指标稳定性 KEP[2]。
这个项目,就像所有 Kubernetes 一样,是许多来自不同背景的贡献者共同努力的结果。我们非常感谢 Kubernetes 社区所有帮助审核项目设计和实施的贡献者,包括但不限于以下人士:
如果你有兴趣参与测仪的设计和开发或 Kubernetes 指标系统的任何部分,请加入Kubernetes Instrumentation SIG[3]。我们正在快速发展,并一直欢迎新的贡献者。
[1]
Kubernetes 稳定指标列表: https://github.com/kubernetes/kubernetes/blob/master/test/instrumentation/testdata/stable-metrics-list.yaml
[2]
指标稳定性 KEP: https://github.com/kubernetes/enhancements/tree/master/keps/sig-instrumentation/1209-metrics-stability
[3]
Kubernetes Instrumentation SIG: https://github.com/kubernetes/community/tree/master/sig-instrumentation