如何将 PersistentVolume 从一个区域移动到另一个区域?

时间:2021-02-16 14:33:33

标签: kubernetes persistent-volumes kubernetes-pvc persistent-volume-claims

我有一个 k8s 集群,其中的机器位于两个不同的区域。最初,我有一个带有 PersistentVolumeClaim 的 StatefulSet,而 Pod 和 PersistentVolume 位于区域 #1。现在我想让 pod 运行一个区域 #2,所以我必须将 PersistentVolume 也移动到区域 #2。

我该怎么做?我知道在 same 区域的不同节点中,事情非常简单 - pod 会自动带上 PersistentVolume。但我不知道跨区域做什么。

非常感谢您的建议!

1 个答案:

答案 0 :(得分:1)

这是 GKE 上的示例,但是其他云提供商应该有类似的选项,但具有不同的区域名称。

您可以使用指定的 Regional Persistent Disks 通过 StorageClass 来完成。取决于您的需要,您可以使用:

  • 动态配置
<块引用>

要启用区域永久性磁盘的动态配置,请使用 StorageClass 参数创建 replication-type,并在 zone 中指定 allowedTopologies 约束。

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: regionalpd-storageclass
provisioner: pd.csi.storage.gke.io
parameters:
  type: pd-standard
  replication-type: regional-pd
volumeBindingMode: WaitForFirstConsumer
allowedTopologies:
- matchLabelExpressions:
  - key: topology.gke.io/zone
    values:
    - europe-west1-b
    - europe-west1-c

以上示例描述了一个名为 regionpd-storageclass 的 StorageClass,它使用标准永久性磁盘并将数据复制到 europe-west1-b 和 europe-west1-c 区域

  • 手动配置
gcloud compute disks create \
 gce-disk-1 \
   --size 500Gi \
   --region europe-west1 \
   --replica-zones europe-west1-b,europe-west1-c

如果您想在特定区域中创建 Persistent Volume,您可以在 storageClass 中指定它,如下例所示:

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: PV-us-central-1a
provisioner: kubernetes.io/gce-pd
parameters:
  type: pd-standard
  zone: us-central1-a

要在 StorageClassPersistentVolume 中使用特定的 PersistentVolumeClaim,您必须使用 storageClassName

以下带有 volumeClaimTemplatesstorageClassName 的示例

  `volumeClaimTemplates`:
  - metadata:
      name: www
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: "my-storage-class"
      resources:
        requests:
          storage: 1Gi

关于将 PV 移动到不同区域,您可以使用 Volume Snapshots 或使用 Velero 等第三方软件。您可以使用 migrating PV 在线找到许多 Volume Snapshots 教程,例如 Migrating Kubernetes PersistentVolumes across Regions and AZs on AWS

其他文档

相关问题