kustomize的文档提供了一个不错的单行代码,可以比较两个不同的叠加层...
diff \
<(kustomize build $OVERLAYS/staging) \
<(kustomize build $OVERLAYS/production)
是否有一种方法可以做到这一点,但要针对特定的kubernetes命名空间内运行的内容以及磁盘上已定义的覆盖层上的内容呢?
更具体地说,知道kubectl apply -k .
会在不实际执行的情况下会做什么吗?使用--dry-run
只是说吐出对象列表,而不是真正的差异。
答案 0 :(得分:0)
我不确定这是否是您要的内容,但是在Kubernetes中您有kubectl diff
。
在APIServer dry-run and kubectl diff上有很好的解释。
您可以使用选项-k
,--kustomize
来实现:
或者也许类似于单线设置特定命名空间的上下文:
$ 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 -
这只是我未测试的示例。
答案 1 :(得分:0)
尝试使用此kustomize命令(当前为Alpha版)
KUSTOMIZE_ENABLE_ALPHA_COMMANDS=true kustomize resources diff -k your/kustomize/overlay
答案 2 :(得分:0)
我的 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
注释并添加了一些颜色。
答案 3 :(得分:0)
kustomize build ./ | kubectl diff -f -
在 Kustomize 4.x.x 版