我正在尝试从一个集群中导出一些kube资源(配置映射,部署,服务),以便可以将其应用于另一个集群。
类似这样的事情。
kubectl --kubeconfig $ {src} -n $ {ns}获取配置映射$ {cm} -o yaml | \ kubectl --kubeconfig $ {dst} -n $ {ns}应用-f-
这种工作一次。第一次尚未创建资源的地方。如果我第二次运行它,尝试更新目标位置,则会收到类似...的错误
对象已被修改;请将更改应用到最新版本,然后重试。
我怀疑它与显示在输出中的resourceVersion或timestamp字段有关。
是否可以输出资源,以便将所有服务器端特定信息分条?另一堆是sed delete和grep -v语句。
TIA
答案 0 :(得分:1)
您可以将以下命令与--export
标志一起使用,以去除特定于群集的信息。
kubectl get cm cmname -o yaml --export > cm.yaml
请注意,--export
已过时,以后将被删除。因此,使用它需要您自担风险。
答案 1 :(得分:0)
您需要编辑输出数据以删除某些元数据字段,例如UID,创建时间等。
答案 2 :(得分:0)
因此,在简化出口的情况下,我想到了...。
sub_string_A="resourceVersion|selfLink|uid|creationTimestamp"
sub_string_B="resourceVersion|selfLink|uid|creationTimestamp|annotations|last-applied-configuration|status|loadBalancer|clusterIP"
namespace=test
src=clusterA.yml
dst=clusterB.yml
dry_run=false
kubectl --kubeconfig ${src} -n ${namespace} get ingress -o yaml \
| grep -v -E "${sub_string_A}" \
| kubectl --kubeconfig ${dst} -n ${namespace} --dry-run=${dry_run} apply -f -
kubectl --kubeconfig ${src} -n ${namespace} get statefulsets -o yaml \
| grep -v -E "${sub_string_B}" \
| kubectl --kubeconfig ${dst} -n ${namespace} --dry-run=${dry_run} apply -f -
Ingress的行为似乎与其他资源不同。这样就得到了不同的模式。