Kubernetes Kubectl导出已弃用。有其他选择吗

Kubernetes Kubectl导出已弃用。有其他选择吗,kubernetes,export,deprecated,Kubernetes,Export,Deprecated,我正在寻找一种方法,从已部署的组件导出yaml文件,但不包含特定于集群的信息 kubectl get MYOBJECT --export -o yaml > my.yaml 但既然“export”现在已经被弃用了(从1.14开始,通常应该在1.18中消失(在changelog中没有找到),那么还有什么替代方案呢 谢谢,没有一致的方法可以做到这一点,因为没有关于默认和其他实时数据清理的总体指导原则。这就是为什么它被弃用的原因。您应该将源文件保存在git或类似的格式中。当前的一个选择是执行-

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

kubectl get MYOBJECT --export -o yaml > my.yaml
但既然“export”现在已经被弃用了(从1.14开始,通常应该在1.18中消失(在changelog中没有找到),那么还有什么替代方案呢


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

当前的一个选择是执行
-o yaml
-o json
并删除不必要的字段ing JQ做到了这一点

kubectl get secret <secretname> -ojson | jq 'del(.metadata.namespace,.metadata.resourceVersion,.metadata.uid) | .metadata.creationTimestamp=null'
kubectl get secret-ojson | jq'del(.metadata.namespace、.metadata.resourceVersion、.metadata.uid)|.metadata.creationTimestamp=null'
生成与相同的JSON

kubectl get secret <secretname> -ojson --export
kubectl获取秘密-ojson-导出

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

这为我带来了窍门,根据您的需要添加或删除过滤器:

kubectl get secret“my_secret”-n“my_名称空间”-context“my_context”-o yaml\
|yq d-“metadata.resourceVersion”\
|yq d-“metadata.uid”\
|yq d-“元数据.注释”\
|yq d-'metadata.creationTimestamp'\
|yq d-“元数据.selfLink”

另一个选项是使用注释字段
kubectl.kubernetes.io/last applicated configuration
,该字段保存资源初始应用配置,而不自动生成字段

例如:

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

基于上述输入,我在我们的fubectl项目中创建了一个短片:

希望这对其他人也有帮助:

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)' -
kubectl get-n-o yaml\
|yq eval“del(.metadata.resourceVersion、.metadata.uid、.metadata.annotations、.metadata.creationTimestamp、.metadata.selfLink、.metadata.managedFields)”的值-

最后创建了一个易于使用的工具:

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

用法也很简单

kubectl get pod mypod -o yaml | kubectl neat

事实上,使用
kubectl get MYOBJECT-o yaml>my.yaml
而不是
kubectl get MYOBJECT-export-o yaml>my.yaml
似乎会产生几乎相同的输出,除了几个不应该造成任何伤害的附加字段。不妨删除整个元数据并编写一个新值添加这一行:``` yq d-'metadata.managedFields'``如果你像我一样,得到了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)-\n天哪,kubectl neat的名字很贴切。它非常整洁。在更新IAC时有很大的不同。感谢添加该链接!除了我没有看到
状态
键之外。这才是真正的整洁(y)
kubectl get pod mypod -o yaml | kubectl neat