4

我希望我的持久卷驻留在特定区域中,例如 us-central1-a,但我想通过 PVC 部署它,而不是直接创建 PV 对象。这在 GKE 中可能吗?

4

2 回答 2

3

您应该使用区域永久性磁盘

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

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

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:
    - europe-west1-b
    - europe-west1-c

创建一个 PersistentVolumeClaim 对象,并使用 storageClassName 字段来引用您创建的 StorageClass。例如,以下清单创建一个名为 region-pvc 的 PersistentVolumeClaim 并引用 regionpd-storageclass

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

以下清单是使用之前创建的 PersistentVolumeClaim 的示例 Pod:

kind: Pod
apiVersion: v1
metadata:
  name: task-pv-pod
spec:
  volumes:
    - name: task-pv-storage
      persistentVolumeClaim:
        claimName: regional-pvc
  containers:
    - name: task-pv-container
      image: nginx
      ports:
        - containerPort: 80
          name: "http-server"
      volumeMounts:
        - mountPath: "/usr/share/nginx/html"
          name: task-pv-storage

您可以按照本指南向您展示如何做到这一点

于 2020-10-26T08:56:41.173 回答
2

您似乎无法为 PV 或 PVC 指定区域,但您可以volumeBindingMode: WaitForFirstConsumer在 StorageClass 上进行设置以确保 PV 与使用它的 pod 位于同一区域中。然后可以使用 pod 上的 nodeSelector 来选择区域。

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: ssd
parameters:
  type: pd-ssd
provisioner: kubernetes.io/gce-pd
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true

PVC:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: db
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 200Gi
  storageClassName: ssd

荚:

kind: Pod
apiVersion: v1
metadata:
  name: foo
spec:
  nodeSelector:
    failure-domain.beta.kubernetes.io/zone: us-central1-a
  containers:
    ...
于 2021-03-30T17:05:52.840 回答