我有一个 k8s 集群,其中的机器位于两个不同的区域。最初,我有一个带有 PersistentVolumeClaim 的 StatefulSet,而 Pod 和 PersistentVolume 位于区域 #1。现在我想让 pod 运行一个区域 #2,所以我必须将 PersistentVolume 也移动到区域 #2。
我该怎么做?我知道在 same 区域的不同节点中,事情非常简单 - pod 会自动带上 PersistentVolume。但我不知道跨区域做什么。
非常感谢您的建议!
答案 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
要在 StorageClass
或 PersistentVolume
中使用特定的 PersistentVolumeClaim
,您必须使用 storageClassName
。
以下带有 volumeClaimTemplates
和 storageClassName
的示例
`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。
其他文档