我正在寻找一种方法从部署的组件中导出一个yaml文件,但不包含集群特定的信息。
kubectl get MYOBJECT --export -o yaml > my.yaml
但是,由于“导出”现在已经被弃用(自1.14版以来应该通常会在1.18版中消失(在更改日志中找不到它),那么是否有替代方法?
谢谢
我正在寻找一种方法从部署的组件中导出一个yaml文件,但不包含集群特定的信息。
kubectl get MYOBJECT --export -o yaml > my.yaml
但是,由于“导出”现在已经被弃用(自1.14版以来应该通常会在1.18版中消失(在更改日志中找不到它),那么是否有替代方法?
谢谢
使用JQ就可以解决问题。
kubectl get secret <secretname> -ojson | jq 'del(.metadata.namespace,.metadata.resourceVersion,.metadata.uid) | .metadata.creationTimestamp=null'
生成的JSON与原始内容完全相同。
kubectl get secret <secretname> -ojson --export
kubectl get secret my-source-secret -n -my-source-ns -ojson | jq 'del(.metadata.namespace,.metadata.resourceVersion,.metadata.uid,.metadata.selfLink,.metadata.managedFields,.metadata.annotations."kubectl.kubernetes.io/last-applied-configuration") | .metadata.creationTimestamp=null | .metadata.name="my-new-secret-name"' | kubectl apply -n target-ns -f -
- Tilo终于有一个易于使用的工具被创建了:https://github.com/itaysk/kubectl-neat
您可以轻松地将其安装为kubectl krew插件:
kubectl krew install neat
使用方法也非常简单
kubectl get pod mypod -o yaml | kubectl neat
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'
| yq d - 'metadata.managedFields'
- Serge Hartmann由于没有有关默认值和其他实时数据清理的总体指南,因此没有一种一致的方法来执行此操作。这就是为什么它被弃用的原因。您应该将源文件保存在Git或类似的平台上。
目前唯一的选项是执行 -o yaml
或 -o json
命令,并删除不必要的字段。
kubectl get MYOBJECT -o yaml > my.yaml
而不是kubectl get MYOBJECT --export -o yaml > my.yaml
似乎会产生几乎相同的输出,除了一些额外的字段,这并不会造成任何损害。 - finrodkubectl.kubernetes.io/last-applied-configuration
,其中保存了资源的初始应用配置,不包含自动生成的字段。
示例:
kubectl get <resource kind> <resource name> -o yaml | \
yq r - 'metadata.annotations."kubectl.kubernetes.io/last-applied-configuration"'
yq e
? - Prashanth Chandra如果您使用的是 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)' -
.metadata.generation
。 - Charles Moulliard在最新版本的Kube或Openshift中,Export已经被弃用。我们可以直接按照以下方式进行操作:
oc get virtualservices -o yaml > project.yaml
oc get routes -o yaml > project.yaml
使用零第三方工具的解决方案:
kubectl -n $ns get [resourcetype] [resourcename] |\
sed '/^ uid: /d; /^ resourceVersion: /d; /^ creationTimestamp: /d; /^ selfLink: /d; /^status:$/Q;'
基于上述输入,我在我们的fubectl项目中创建了一个简短的内容:https://github.com/kubermatic/fubectl/pull/58
希望它也能对其他人有所帮助:
kget-ex RESOURCE > export.yaml
kubectl get ... -o yaml | kubectl neat
- guettli