【问题标题】:How to solve k8s persistentvolume-controller no volume plugin matched for kubeadm如何解决 k8s persistentvolume-controller 没有与 kubeadm 匹配的音量插件
【发布时间】:2020-09-22 11:07:20
【问题描述】:

我已经使用 kubeadm 在裸机上配置了一个 kubernetes 集群。一切正常,我可以部署一个示例 nginx 应用程序。当我想使用volumeClaimTemplates 部署有状态集时出现问题,如下所示

  volumeClaimTemplates:
  - metadata:
      name: jackrabbit-volume
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 2Gi
      storageClassName: jackrabbit

和存储类

allowVolumeExpansion: true
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  annotations:
    meta.helm.sh/release-name: chart-1591185140
    meta.helm.sh/release-namespace: gluu
    storageclass.beta.kubernetes.io/is-default-class: "false"
  labels:
    app.kubernetes.io/managed-by: Helm
    storage: jackrabbit
  managedFields:
  - apiVersion: storage.k8s.io/v1
mountOptions:
- debug
parameters:
  fsType: ext4
  pool: default
provisioner: kubernetes.io/no-provisioner
reclaimPolicy: Retain

我也尝试使用hostPath 规范添加persistentVolume,但仍然无法正常工作。

 ----     ------              ----               ----                         -------
  Warning  ProvisioningFailed  82s (x3 over 98s)  persistentvolume-controller  no volume plugin matched

【问题讨论】:

  • 存储类中是否缺少 metadata.name: jackrabbit.fullname
  • 嘿@hoque 名字在那里。当我做kubectl get sc 时,我可以看到它。
  • 您好,您有时间查看我的回答吗?

标签: kubernetes local-storage kubeadm


【解决方案1】:

在您的 StorageClass 中,您使用的是kubernetes.io/no-provisioner,这意味着您正在尝试使用本地卷插件。

您的集群还不知道kubernetes.io/no-provisioner,这就是no volume plugin matched 出现的原因。

根据documentation,此插件不作为内部配置器包含在kubernetes.io 中。 Here 您可以看到一个图表,其中列出了所有 Provisioner、它们的插件名称(如果它们包含在 Internal Provisioner 中)以及指向配置示例的链接。

在我们可以阅读的文档中:

您不仅限于指定“内部”供应商 此处列出(其名称以 kubernetes.io 为前缀并已发货 与 Kubernetes 一起)。您还可以运行并指定外部 供应商,它们是独立的程序,遵循 specification 由 Kubernetes 定义。外部供应商的作者拥有完整的 自行决定他们的代码在哪里,供应商如何 发货,它需要如何运行,它使用什么卷插件(包括 Flex) 等。 kubernetes-sigs/sig-storage-lib-external-provisioner 包含一个库,用于编写实现 规范的大部分。一些外部供应商列在下面 存储库 kubernetes-incubator/external-storage.

例如,NFS 不提供内部配置器,而是提供 可以使用外部供应商。也有第 3 方的情况 存储供应商提供自己的外部供应商。

Local external provisioner 保留在 this GitHub 存储库中,您可以在那里找到 Getting Started 指南,该指南将引导您了解如何使用它。

【讨论】:

  • 你好。抱歉,我花了很长时间才回复。我设法解决了这个问题。你的解释很好,帮助很大。但是,我只是使用了一个非常简单的StorageClasskubernetes.io/no-provisioner 并工作了。
  • 很高兴它成功了。如果您的解决方案包括更多和相关的发现,请继续并发布解释所有内容的答案。这样其他人在遇到类似问题时可以得到帮助。
【解决方案2】:

persistentvolume-controller 中的no volume plugin matched 错误通常出现在(在描述 PVC 时)向 PVC 分配 PV 存在问题

要验证这一点 - 在 pod / statefulsets 上运行 kubectl describe - 如果您看到以下错误:

... pod has unbound immediate PersistentVolumeClaims

在使用本地卷时,这可能是由多种原因造成的 - 一些示例:

1 ) PVC 请求的存储空间过多,没有可以满足该值的 PV(PV 存储值需要等于或大于 PVC 存储请求的值)。

2 ) 并不是所有的PVC都作为对应的PV——在这种情况下我们可以看到有些资源会成功,有些会卡住:

$ kubectl get pods
NAME      READY   STATUS    RESTARTS   AGE
mongo-0   2/2     Running   0          3m38s
mongo-1   0/2     Pending   0          3m23s

$ kubectl get pvc
NAME                               STATUS    VOLUME           CAPACITY   ACCESS MODES   STORAGECLASS    AGE
mongo-persistent-storage-mongo-0   Bound     mongo-local-pv   50Gi       RWO            local-storage   80m
mongo-persistent-storage-mongo-1   Pending 

3 ) 当调度器无法将节点与 PV 匹配时。

使用本地卷时,PV 的nodeAffinity 是必需的,并且应该是集群中现有节点的值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-23
    相关资源
    最近更新 更多