Kubectl Export 已弃用。任何选择

Kubectl Export is deprecated . Any alternative

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

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

但由于 "export" 现已弃用(从 1.14 开始,通常应该在 1.18 中消失(未在更新日志中找到它),有什么替代方案?

谢谢

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

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

使用 JQ 就可以了。

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

产生与

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

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

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

示例:

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

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

希望对其他人也有帮助:

kget-ex RESOURCE > export.yaml

对于使用 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)' -

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

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

kubectl krew install neat

用法也很简单

kubectl get pod mypod -o yaml | kubectl neat

导出在最新版本的 Kube 或 Openshift 中已弃用。我们可以直接像下面这样

 oc get virtualservices -o yaml > project.yaml
 oc get routes -o yaml > project.yaml