使用 "kubectl apply" 时在 ConfigMap 中查找手动更改

Find manual changes in ConfigMap when working with "kubectl apply"

我有一个 Kubernetes 集群,通过在 CI/CD 管道中执行“apply”命令,以声明方式进行所有部署。

“应用”的工作方式是将对象的状态与命令附带的清单合并。因此,您可能会进行手动更改 - 例如,将新的键值添加到 ConfigMap 并且“应用”将保持不变,即使源代码中不存在该键。

所以我想知道,如何检测此类问题?执行“删除”和“创建”不是一种选择,因为它会破坏可用性。我不想从“应用”更改部署,因为它是生产环境。我只是为了在命名空间中找到手动修改。

kubectl patchkubectl replace 适合您的用例。看看这个blog,它更好地解释了它们之间的区别。

如果您总是想将 configmap 更新为清单中的任何内容,请进行替换。

kubediff就是您要找的。

您可以运行将其作为命令行工具,例如:

$ ./kubediff k8s
Checking ReplicationController 'kubediff'
 *** .spec.template.spec.containers[0].args[0]: '-repo=https://github.com/weaveworks/kubediff' != '-repo=https://github.com/<your github repo>'
Checking Secret 'kubediff-secret'
Checking Service 'kubediff'

或作为 K8s 集群内的服务。此模式还为您提供了一个简单的 UI 显示输出。