Kubernetes 命名空间迁移到另一个集群

Kubernetes namespace migration to another cluster

假设我们有一个名为 CLUSTER_01 的 Kubernetes 集群,上面有一个 DEV 名称 space。我想在另一个名为 CLUSTER_02 的集群中重新创建此 DEV 名称 space。什么是最简单和最好的方法来做到这一点。

虽然理论上可以从 etcd 数据存储中查询数据并将其迁移到另一个集群,但无论如何您都会遇到本地设置和变量的不一致问题。最简单的方法是从清单或 Helm 图表(无论您有什么)重新创建命名空间中的所有资源。

Velero (formerly Heptio Ark) 为您提供备份和恢复 Kubernetes 集群资源和持久卷的工具。您可以 运行 Velero 与云提供商或本地。 Velero 让您:

  1. 备份您的集群并在丢失时恢复。
  2. 将集群资源迁移到其他集群。
  3. 将您的生产集群复制到开发和测试集群。 Velero 包括:

运行在您的集群上的服务器

运行本地

的命令行客户端

如果您通过一些工具(如 Jenkins 或类似工具)对 Kubernetes 部署进行了标准化,那么您就有了为每个部署创建的一组标准对象,例如 configmap、secret、ingress、deployment、hpa 等。

那么最简单的方法就是将对象作为 YAML 转储到文件中,然后将它们重新应用到新的 Custer。虽然这不是一个好的做法,但却是最简单的做法。

kubectl get configmap -n <namespace> -o yaml > CLUSTER_O1_Namespace.yaml

从较低的对象开始,如 configmap、机密、外部端点,然后应用主要对象,如部署、入口和 hpa。

确保您首先应用入口控制器等 k8s 对象所需的外部依赖项,并且与您的 CLUSTER_01 相同。

正如@Arghya 建议的那样,如果您有带宽,请使用 Velero (formerly Heptio Ark)