我正在寻找一种从已部署的组件中导出yaml文件的方法,但该方法不包含集群的特定信息。
kubectl get MYOBJECT --export -o yaml > my.yaml
但是由于现在不推荐使用“ export”(从1.14版本开始,通常应该在1.18版本中消失(在changelog中找不到)),还有什么替代方法?
谢谢
答案 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'
产生与
完全相同的JSONkubectl 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