用于 Pvc 和 StorageClass 故障转移的 GKE 区域磁盘

GKE Regional Disk for Pvc and StorageClass failover

我有一个 pod 需要永久磁盘。我在 us-central1-a 上有 1 个 pod 运行ning,如果该区域出现故障,我想迁移到另一个区域而不丢失数据到另一个区域 (us-central1-*)。

是否可以将 pod 迁移到另一个区域(我知道磁盘存在的地方)并为新区域中的 pod 使用区域磁盘?

方法一

使用下面的 StorageClass 我的 pod 总是无法声明任何这些并且我的 pod 永远不会启动。我了解到这个配置了所有区域的区域磁盘将使该磁盘在区域出现故障时可用于所有区域。我不明白为什么我不能申请这些。

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: regionalpd-storageclass
provisioner: kubernetes.io/gce-pd
parameters:
  type: pd-standard
  replication-type: regional-pd
volumeBindingMode: WaitForFirstConsumer
allowedTopologies:
- matchLabelExpressions:
  - key: topology.kubernetes.io/zone
    values:
    - us-central1-a
    - us-central1-b
    - us-central1-c
    - us-central1-f

错误:我的 PVC 状态总是待处理

  Normal   NotTriggerScaleUp  106s                cluster-autoscaler  pod didn't trigger scale-up (it wouldn't fit if a new node is added):
      Warning  FailedScheduling   62s (x2 over 108s)  default-scheduler   0/8 nodes are available: 8 node(s) didn't find available persistent volumes to bind.

尝试 2

此存储配置将允许我 运行 我的 pod 在 2/4 个区域中,其中 1 个区域是初始区域,1 个是随机区域。当我故意减少并移出我的初始 pods 区域时,我将收到以下错误,除非我足够幸运选择了其他随机配置的区域。此功能是故意的,因为 Google 假设 2 区域故障的可能性非常低吗?如果确实失败了,我是否必须在另一个区域中提供另一个磁盘以防万一?

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: regionalpd-storageclass
provisioner: kubernetes.io/gce-pd
parameters:
  type: pd-standard
  replication-type: regional-pd
volumeBindingMode: WaitForFirstConsumer

错误:

Normal   NotTriggerScaleUp  4m49s                  cluster-autoscaler  pod didn't trigger scale-up (it wouldn't fit if a new node is added):
  Warning  FailedScheduling   103s (x13 over 4m51s)  default-scheduler   0/4 nodes are available: 2 node(s) had volume node affinity conflict, 2 node(s) were unschedulable.
  Warning  FailedScheduling   43s (x2 over 43s)      default-scheduler   0/3 nodes are available: 1 node(s) were unschedulable, 2 node(s) had volume node affinity conflict.
  Warning  FailedScheduling   18s (x3 over 41s)      default-scheduler   0/2 nodes are available: 2 node(s) had volume node affinity conflict.

我的 PVC

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: my-pvc
  namespace: mynamespace
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 200Gi
  storageClassName: regionalpd-storageclass

我的 Pod 音量

数量:

  - name: console-persistent-volume
    persistentVolumeClaim:
      claimName: my-pvc

Google 云上的区域永久性磁盘仅在 两个区域 中可用,因此您必须将 StorageClass 更改为仅两个区域。

参见 Using Kubernetes Engine to Deploy Apps with Regional Persistent Disks 上的示例 StorageClass 以及有关 GKE: Provisioning regional persistent disks

的更多详细信息