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

时间:2020-02-04 05:33:38

标签: kubernetes yaml diff kustomize

kustomize的文档提供了一个不错的单行代码,可以比较两个不同的叠加层...

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

是否有一种方法可以做到这一点,但要针对特定​​的kubernetes命名空间内运行的内容以及磁盘上已定义的覆盖层上的内容呢?

更具体地说,知道kubectl apply -k .会在不实际执行的情况下会做什么吗?使用--dry-run只是说吐出对象列表,而不是真正的差异。

4 个答案:

答案 0 :(得分:0)

我不确定这是否是您要的内容,但是在Kubernetes中您有kubectl diff

APIServer dry-run and kubectl diff上有很好的解释。

您可以使用选项-k--kustomize来实现:

处理Kustomization目录。此标志不能与-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 -

这只是我未测试的示例。

答案 1 :(得分:0)

尝试使用此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

答案 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 版

相关问题