【问题标题】:Persistent Volume Issue on GKEGKE 上的持久卷问题
【发布时间】:2021-01-22 04:09:25
【问题描述】:

所以我正在尝试使用以下定义在 GKE 上创建一个持久卷:


apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv01-3gi
  labels:
    env: prod
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - 'ReadWriteOnce'
  storageClassName: standard

但是,当我尝试应用它时,我收到如下所示的错误消息:

➜ kubectl apply -f pv-1.yaml
The PersistentVolume "pv01-3gi" is invalid: spec: Required value: must specify a volume type

我的理解是卷类型由设置为标准的存储类指示(这是GKE提供的默认存储类


➜ kubectl get storageclass
NAME                 PROVISIONER            AGE
standard (default)   kubernetes.io/gce-pd   16d

我做错了什么?

【问题讨论】:

  • 您好,在这个特定的示例中,您缺少负责将PVgce-pd 磁盘匹配的部分。您可以通过将以下部分添加到 spec 来解决此问题:gcePersistentDiskpdNamefsType 参数。你可以在这里找到它的外观:cloud.google.com/kubernetes-engine/docs/how-to/…

标签: kubernetes google-kubernetes-engine persistent-volumes


【解决方案1】:

请注意,直接配置的持久卷上的存储类仅用于通过持久卷声明引用这些卷

这里的目的是系统管理员设置一堆持久卷并处理引用集群外部硬盘驱动器设备的细节。然后应用程序开发人员可以通过 Persistent Volume Claims 引用这些卷,形象地说:“请给我找一个存储空间至少为 5GB 的 StorageClass SSD 卷”。

换句话说,如果您直接创建 PV,请确保您提供准确的配置,包括对物理存储设备的引用。

【讨论】:

  • 这完美地回答了我的问题。我认为 PV 上的存储类名称会在该存储类中创建一个指定容量的驱动器(使用存储类中定义的配置器)。所以我有点困惑,为什么当我可以从存储类定义中提取卷类型不存在的消息时。
【解决方案2】:

如果使用动态配置器,则无需自己创建 PV。

只需创建一个带有存储类的 PVC,GKE 就会自动为 PV 提供请求的存储大小。

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

【讨论】:

【解决方案3】:

您在spec 中缺少卷类型。例如,我在这里添加了nfs 类型。

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv01-3gi
  labels:
    env: prod
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteOnce
  storageClassName: standard
  volumeMode: Filesystem
  nfs: 
    path: /opt/nfs 
    server: nfs.f22 
    readOnly: false

【讨论】:

    猜你喜欢
    • 2018-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-16
    • 1970-01-01
    • 2018-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多