首页 > 解决方案 > 强制 pod 的模式具有来自该 pod 内容器的标签

问题描述

我们的团队编写了一个 docker 镜像。如果运行此映像的 pod 失败,我们希望收到警报。(为此,我们使用 Prometheus 的警报管理器和kube-state-metrics)。

另一个团队正在创建运行该图像作业(注意他们是通过类似于argo的东西来完成的)。为了获得我们想要的警报,我们要求该团队包含一个特定的标签,即作业创建的 pod 将具有一个标签,我们可以在 promql 中使用该标签来在该 pod 失败时创建警报。

我们可以想到强制使用正确标签的唯一方法是从容器内检查此标签,并失败并显示错误消息告诉我们标签丢失。因此,要么通过向下的 API(但这是运行该作业的团队的另一个要求),或者更有可能通过运行,kubectl get pods -l ...因为该容器已经kubectl用于其他用途。

如果这是一种不好的做法,我们的团队中有一个争论。容器坚持使用 pod 标签是一种反模式吗?我们想知道对于这种情况是否有更清洁的设计?

标签: dockerkuberneteskubernetes-podprometheus-alertmanager

解决方案


在我看来,在 Kubernetes 中强制执行某些字段的惯用方式是创建一个动态变异准入控制器

https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers/ https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#mutatingadmissionwebhook

我知道这听起来有点复杂,但相信我,它真的很简单。最终,准入控制只是一个 webhook 端点(一段代码),它可以更改和强制创建对象的特定状态。

顺便说一句,您还可以使用验证 webhook 并简单地禁止创建不包含您想要的标签的 pod,并带有相应的相关错误消息。


推荐阅读