创建持久卷导致 storageclass.storage.k8s.io "fast" 未找到

Creating Persistent Volume Results in storageclass.storage.k8s.io "fast" not found

我使用 kubeadm 在两个 Centos7 虚拟机上安装了 kubernetes。

我正在尝试遵循 Example: Deploying Cassandra with Stateful Sets or Scalable-Cassandra-deployment-on-kubernetes 个示例。

创建本地卷有效,但 kubectl get pvc 总是导致状态 Pendingkubectl descrive pvc <*pvc name*> 导致以下警告:

Events:
Type     Reason              Age                   From                         Message
----     ------              ----                  ----                         -------
Warning  ProvisioningFailed  54s (x16854 over 2d)  persistentvolume-controller  storageclass.storage.k8s.io "fast" not found

我不确定如何创建 "fast" 存储 class 才能成功创建卷并完成示例。

创建持久卷时,必须确保相应的 storage class 存在。

A StorageClass provides a way for administrators to describe the “classes” of storage they offer. Different classes might map to quality-of-service levels, or to backup policies, or to arbitrary policies determined by the cluster administrators. Kubernetes itself is unopinionated about what classes represent. This concept is sometimes called “profiles” in other storage systems.

例如,在您找到的 yaml 文件底部链接的指南中:

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: fast
provisioner: k8s.io/minikube-hostpath
parameters:
  type: pd-ssd

这是存储的定义 class,api 并且配置器确保它如何映射到实际存储并取决于 Kubernetes 实现及其位置 运行.

因此你应该仔细检查你是否声明了存储 class:

$ kubectl get storageclasses --all-namespaces

如果您没有存储 class,您应该创建它并指定正确的供应商,或者如果它只是一个测试,您可以考虑创建您已经拥有的存储 class 的卷声明.

例子

例如 运行 在 Google Kubernetes Engine 上我默认有一个 standard class。尝试部署声明时我还有一条待处理的错误消息。

部署以下 yaml 文件(并注意配置已更改)我能够成功创建持久卷声明,因为现在 Kubernetes 知道我的意思是类型 "fast":

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: fast
provisioner: kubernetes.io/gce-pd  
parameters:
  type: pd-ssd
  zones: us-central1-a, us-central1-b