Kubectl 导出已弃用。任何替代品

Bob*_*601 23 export deprecated kubernetes

我正在寻找一种从部署的组件导出 yaml 文件但没有集群特定信息的方法。

kubectl get MYOBJECT --export -o yaml > my.yaml
Run Code Online (Sandbox Code Playgroud)

但是由于“导出”现在已被弃用(自 1.14 起,通常应在 1.18 中消失(未在变更日志中找到),有什么替代方法?

谢谢

cod*_*ger 8

没有一致的方法可以做到这一点,因为没有关于默认和其他实时数据清理的总体指南。这就是它被弃用的原因。您应该将源文件保存在 git 或类似文件中。


Eri*_*vic 8

如果要使用 YAML 输入/输出,可以使用yq

这对我有用,根据您的需要添加或删除过滤器:

kubectl get secret "my_secret" -n "my_namespace" --context "my_context" -o yaml \
    | yq d - 'metadata.resourceVersion' \
    | yq d - 'metadata.uid' \
    | yq d - 'metadata.annotations' \
    | yq d - 'metadata.creationTimestamp' \
    | yq d - 'metadata.selfLink'
Run Code Online (Sandbox Code Playgroud)

  • 如果您像我一样并获得 yq 4,则新语法如下: kubectl get Secret "my_secret" --namespace="my_namespace" -o yaml \ | yq e 'del(.metadata.resourceVersion)' - \ | yq e 'del(.metadata.uid)' - \ | yq e 'del(.metadata.annotations)' - \ | yq e 'del(.metadata.creationTimestamp)' - \ | yq e 'del(.metadata.selfLink)' - \ | yq e 'del(.metadata.managedFields)' - \ (2认同)

小智 7

使用 JQ 可以解决问题。

kubectl get secret <secretname> -ojson | jq 'del(.metadata.namespace,.metadata.resourceVersion,.metadata.uid) | .metadata.creationTimestamp=null'
Run Code Online (Sandbox Code Playgroud)

产生完全相同的JSON

kubectl get secret <secretname> -ojson --export
Run Code Online (Sandbox Code Playgroud)


hoq*_*que 6

目前的一种选择是执行-o yaml-o json删除不必要的字段


Mar*_*elo 5

另一种选择是使用注释字段kubectl.kubernetes.io/last-applied-configuration,该字段保存资源初始应用配置而没有自动生成的字段。

例子:

kubectl get <resource kind> <resource name> -o yaml | \
yq r - 'metadata.annotations."kubectl.kubernetes.io/last-applied-configuration"'
Run Code Online (Sandbox Code Playgroud)


小智 5

终于创建了一个易于使用的工具:https : //github.com/itaysk/kubectl-neat

您可以轻松地将其安装为 kubectl krew插件:

kubectl krew install neat
Run Code Online (Sandbox Code Playgroud)

用法也很简单

kubectl get pod mypod -o yaml | kubectl neat
Run Code Online (Sandbox Code Playgroud)

  • 天哪,kubectl-neat 这个名字很恰当。非常整洁。更新 IAC 时会产生巨大的差异。感谢您添加该链接! (2认同)