不建议使用Kubectl Export。任何替代

时间:2020-04-23 16:28:17

标签: kubernetes export deprecated

我正在寻找一种从已部署的组件中导出yaml文件的方法,但该方法不包含集群的特定信息。

kubectl get MYOBJECT --export -o yaml > my.yaml

但是由于现在不推荐使用“ export”(从1.14版本开始,通常应该在1.18版本中消失(在changelog中找不到)),还有什么替代方法?

谢谢

8 个答案:

答案 0 :(得分:6)

如果要使用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'

答案 1 :(得分:5)

由于没有关于默认设置和其他实时数据清除的总体指南,因此没有一致的方法来执行此操作。这就是为什么不推荐使用的原因。您应该将源文件保存在git或类似文件中。

答案 2 :(得分:5)

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

答案 3 :(得分:5)

使用JQ可以解决问题。

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

产生与

完全相同的JSON
kubectl get secret <secretname> -ojson --export

答案 4 :(得分:5)

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

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

kubectl krew install neat

用法也很简单

kubectl get pod mypod -o yaml | kubectl neat

答案 5 :(得分:3)

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

示例:

kubectl get <resource kind> <resource name> -o yaml | \
yq r - 'metadata.annotations."kubectl.kubernetes.io/last-applied-configuration"'

答案 6 :(得分:1)

对于使用 yq v4.x 的任何人,您可以执行以下操作以获得所需内容:

kubectl get <resource> -n <namespace> <resource-name> -o yaml \
  | yq eval 'del(.metadata.resourceVersion, .metadata.uid, .metadata.annotations, .metadata.creationTimestamp, .metadata.selfLink, .metadata.managedFields)' -

答案 7 :(得分:0)

基于上述输入,我在fubectl项目中创建了一个简短的示例:https://github.com/kubermatic/fubectl/pull/58

希望对其他人也有帮助

kget-ex RESOURCE > export.yaml