首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kubernetes自动将storageClassName添加到PVC

Kubernetes自动将storageClassName添加到PVC
EN

Stack Overflow用户
提问于 2020-05-25 22:51:02
回答 1查看 926关注 0票数 2

我有一个包含PV和PVC的helm图表,用于挂载NFS卷,这很好用。我需要在一个具有非常严格和有限的安全措施的新集群上安装此helm图表,并且我还看到我的pod处于挂起状态,因为它们无法挂载NFS。

经过调查,我发现问题是PVC和PV有不同的storageClassName:

代码语言:javascript
复制
kubectl -n 57 describe pvc gstreamer-claim


Events:
  Type       Reason             Age                 From                         Message
  ----       ------             ----                ----                         -------
  Warning    VolumeMismatch     98s (x83 over 21m)  persistentvolume-controller  Cannot bind to requested volume "gstreamer-57": storageClassName does not match

这非常奇怪,因为我的舵表中的PVC没有任何storageClassName : PVC:

代码语言:javascript
复制
- apiVersion: v1
  kind: PersistentVolumeClaim
  metadata:
    name: gstreamer-claim
    namespace: {{ .Release.Namespace }}
  spec:
    volumeName: gstreamer-{{ .Release.Namespace }}
    accessModes:
      - ReadWriteOnce
    resources:
      requests:
        storage: 10Gi

PV:

代码语言:javascript
复制
- apiVersion: v1
  kind: PersistentVolume
  metadata:
    name: gstreamer-{{ .Release.Namespace }}
  spec:
    capacity:
      storage: 10Gi
    accessModes:
      - ReadWriteOnce
    persistentVolumeReclaimPolicy: Recycle
    mountOptions:
      - hard
      - nfsvers=4.1
    nfs:
      server: {{ .Values.global.nfsserver }}
      path: /var/nfs/general/gstreamer-{{ .Release.Namespace }}

我试图编辑PVC,但我无法更改它。

为什么会发生这种情况?会不会和集群的安全性有关?如何解决这个问题?

更新

存储类信息:

代码语言:javascript
复制
kubectl -n 57 get sc
NAME                      PROVISIONER                                       AGE
local-storage (default)   kubernetes.io/no-provisioner                      54d
nfs-client                cluster.local/nfs-client-nfs-client-provisioner   43m


kubectl -n 57 get sc local-storage -o yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"storage.k8s.io/v1","kind":"StorageClass","metadata":{"annotations":{"storageclass.kubernetes.io/is-default-class":"true"},"name":"local-storage"},"provisioner":"kubernetes.io/no-provisioner","volumeBindingMode":"WaitForFirstConsumer"}
    storageclass.kubernetes.io/is-default-class: "true"
  creationTimestamp: "2020-03-31T20:46:39Z"
  name: local-storage
  resourceVersion: "458"
  selfLink: /apis/storage.k8s.io/v1/storageclasses/local-storage
  uid: b8352eb1-7390-11ea-84a7-fa163e393634
provisioner: kubernetes.io/no-provisioner
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-25 23:03:07

使用动态预配置,您不需要显式创建PV。创建存储类为nfs-client的PVC。

代码语言:javascript
复制
apiVersion: v1
  kind: PersistentVolumeClaim
  metadata:
    name: gstreamer-claim
    namespace: {{ .Release.Namespace }}
  spec:
    volumeName: gstreamer-{{ .Release.Namespace }}
    accessModes:
      - ReadWriteOnce
    resources:
      requests:
        storage: 10Gi
    storageClassName: nfs-client

另一种选择是将nfs-client设置为默认存储类,这样就不需要在PVC中指定storageClassName: nfs-client

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62004937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档