有没有一种方法可以从kube集群中导出资源,以便可以将其应用于另一个集群

时间:2020-04-16 03:10:05

标签: kubernetes

我正在尝试从一个集群中导出一些kube资源(配置映射,部署,服务),以便可以将其应用于另一个集群。

类似这样的事情。

kubectl --kubeconfig $ {src} -n $ {ns}获取配置映射$ {cm} -o yaml | \ kubectl --kubeconfig $ {dst} -n $ {ns}应用-f-

这种工作一次。第一次尚未创建资源的地方。如果我第二次运行它,尝试更新目标位置,则会收到类似...的错误

对象已被修改;请将更改应用到最新版本,然后重试。

我怀疑它与显示在输出中的resourceVersion或timestamp字段有关。

是否可以输出资源,以便将所有服务器端特定信息分条?另一堆是sed delete和grep -v语句。

TIA

3 个答案:

答案 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的行为似乎与其他资源不同。这样就得到了不同的模式。