docker - 强制 pod 的模式具有来自该 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 并简单地禁止创建不包含您想要的标签的 pod,并带有相应的相关错误消息。
推荐阅读
- apache-flex - Flex 3 到 Flash 4 - 折线图显示不正确
- php - Laravel“使用未定义的常量论坛 - 假定为'论坛'”错误
- python - Python 如何在 FOR-LOOP 回归中计算和存储残差
- oracle - 使用 Oracle EBS 将数据发送到 Azure
- javascript - 如何访问 Vue.js 中的动态元素?
- uml - 什么是最适合基于以下场景建模的 UML 图?
- search - emacs:在区域上搜索和替换
- winforms - 安装 WinForm 应用程序后指定文件类型图标下不需要的常规图标
- ios - iOS 13 In Tab Bar子视图控制器viewWillAppear未被调用
- vue.js - Vue CLI 3 使用 Terser 删除 console.log 和代码注释