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

How to move a PersistentVolume from one zone to another zone?

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

我该怎么做?我知道在 same 区域的不同节点中,事情非常简单——pod 将自动带来 PersistentVolume。但是不知道跨区怎么办。

非常感谢任何建议!

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

您可以通过 Regional Persistent Disks with specified StorageClass 完成。根据您的需要,您可以使用:

  • 动态配置

To enable dynamic provisioning of regional persistent disks, create a StorageClass with the replication-type parameter, and specify zone constraints in 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

以上示例描述了一个名为 regionalpd-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

要在 PersistentVolumePersistentVolumeClaim 中使用特定的 StorageClass,您必须使用 storageClassName.

下面是 volumeClaimTemplatesstorageClassName

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

关于将PV移动到不同的区域,你可以使用Volume Snapshots or use 3rd party software like Velero. You can find many migrating PV tutorials online using Volume Snapshots like Migrating Kubernetes PersistentVolumes across Regions and AZs on AWS

其他文档