kubernetes 集群上的活动内容与kustomize上的活动内容之间的差异

ergxz8rk  于 2023-10-17  发布在  Kubernetes
关注(0)|答案(6)|浏览(109)

kustomize的文档提供了一个很好的一行程序,比较两个不同的覆盖.

diff \
  <(kustomize build $OVERLAYS/staging) \
  <(kustomize build $OVERLAYS/production)

有没有一种方法可以做同样的事情,但是针对的是在特定的kubernetes命名空间中运行的东西和磁盘上定义的覆盖?
更具体地说,知道kubectl apply -k .会做什么,而不实际做?使用--dry-run只是说吐出一个对象列表,而不是一个真实的差异。

rdrgkggo

rdrgkggo1#

kustomize build ./ | kubectl diff -f  -

在Kustomize版本4.x.x中

llmtgqce

llmtgqce2#

如果你正在寻找一种可视化的方法,我强烈建议你尝试Monokle的比较和同步功能:

在上面的图片中,你可以看到一个例子,我正在将cluster-install kustomization的输出与我的minikube集群中的对象进行比较。
您可以轻松确定群集中缺少哪些资源以及哪些资源不同。
最重要的是,您不仅限于将kustomization与集群进行比较。您还可以比较两个集群,两个kustomizations, Helm 图表等。

xkrw2x1b

xkrw2x1b3#

我不确定这是不是你要找的,但是在Kubernetes中你有kubectl diff
这在APIServer dry-run and kubectl diff上解释得很好。
您可以使用选项-k--kustomize,它可以:
处理客户化目录。此标志不能与-f或-R一起使用。
或者类似于一行程序的东西来为特定的命名空间设置上下文:

$ kubectl config set-context staging --user=cluster-admin --namespace=staging
$ kubectl config set-context prod --user=cluster-admin --namespace=prod

一旦你有了上下文设置,你可以用以下方式使用它们:

kubectl config use-context staging; cat patched_k8s.yaml | kubectl config use-context prod; kubectl diff -f -

这只是一个我没有测试过的例子。

5ktev3wc

5ktev3wc4#

我在我的shell配置中有一个小函数来做到这一点:

kdiff() {
  overlay="${1}"
  kustomize build ${overlay} \
    | kubectl diff -f - ${@:2} \
    | sed '/kubectl.kubernetes.io\/last-applied-configuration/,+1 d' \
    | sed -r "s/(^\+[^\+].*|^\+$)/$(printf '\e[0;32m')\1$(printf '\e[0m')/g" \
    | sed -r "s/(^\-[^\-].*|^\-$)/$(printf '\e[0;31m')\1$(printf '\e[0m')/g"
}

它删除了last-applied-configuration注解并添加了一些颜色。

sdnqo3pr

sdnqo3pr5#

现在你可以直接在diff中使用kustomize:

kubectl diff -k ./

Kubectl diff --help
-k,--kustomize='':处理客户化目录。此标志不能与-f或-R一起使用。

dwbf0jvd

dwbf0jvd6#

试试这个kustomize命令,目前还在alpha版本中:

KUSTOMIZE_ENABLE_ALPHA_COMMANDS=true kustomize resources diff -k your/kustomize/overlay

通过https://kubernetes.slack.com/archives/C9A5ALABG/p1582738327027200?thread_ts=1582695987.023600&cid=C9A5ALABG

相关问题