强制执行 pod 的模式具有来自该 pod 内容器的标签

Pattern to enforce a pod has a label from the container within that pod

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

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

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

我们的团队正在争论这是否是一种不好的做法。容器坚持使用 pod 标签是反模式吗?我们想知道是否有针对这种情况的更简洁的设计?

在我看来,在 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 并简单地禁止创建不包含您想要的标签的 pods,并显示相应的相关错误消息。