默认 StorageClass:要检查什么?
Default StorageClass: what to check?
我被这个问题困住了:
我配置了 kubeadm(目前集群在一台专用服务器上)。
我使用 helm 安装了 elasticsearch。它几乎可以正常工作,除了存储。该图表使用默认的 StorageClass 来动态配置 PV。
所以我创建了一个默认的 StorageClass (kubernetes.io/gce-pd / pd-standard) 并在 apiserver 中激活了 DefaultStorageClass 准入插件以启用动态配置。
但这仍然行不通。 pods 仍然有 FailedBinding 事件 "no persistent volumes available for this claim and no storage class is set"。
我检查了 elasticsearch 的 helm chart,它没有为其 PVC 指定 StorageClass,所以它应该可以工作。
另外,我还遗漏了其他东西:我不明白 kubernetes 将在磁盘上分配 PV,我从来没有在任何地方配置它。而且它也不在 StorageClass 中。
我已检查动态配置是否正常工作,因为它在 PVC 定义中插入了默认的 StorageClass:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
annotations:
volume.beta.kubernetes.io/storage-provisioner: kubernetes.io/gce-pd
creationTimestamp: "2019-12-19T10:37:04Z"
finalizers:
- kubernetes.io/pvc-protection
labels:
app: kibanaelastic-master
name: kibanaelastic-master-kibanaelastic-master-0
namespace: elasticsearch
resourceVersion: "360956"
selfLink: /api/v1/namespaces/elasticsearch/persistentvolumeclaims/kibanaelastic-master-kibanaelastic-master-0
uid: 22b1c23a-312e-4b56-a0bb-17f2da372509
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 30Gi
storageClassName: slow
volumeMode: Filesystem
status:
phase: Pending
那么我还应该检查什么?
有什么线索吗?
别介意,我发现了错误。我在默认存储 class 中使用了错误的配置器。并且未配置此供应商。我很好奇如何让这个错误更明显和更容易理解。
让我在这里宣传我的 5 美分 :)。
I can't understand where kubernetes will allocate the PV on disks, i never configured it anywhere. And it's not in the StorageClass too.
假设我们使用的是 GCP,整个存储 Classes,PV 声明预计将以下列方式工作:
- 存储空间Class
- PersistentVolumeClaim(在该存储 Class 上)
volumes:
Deployment 字段(例如)
示例:
$ cat minio-storage-class.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: minio-disk
provisioner: kubernetes.io/gce-pd
parameters:
type: pd-standard
reclaimPolicy: Delete
volumeBindingMode: Immediate
在 GCP 中创建新存储 class。
然后我们使用该存储 class 参数声明我们的持久卷:
$ cat minio-pvc.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: minio-claim
namespace: default
annotations:
volume.beta.kubernetes.io/storage-class: minio-disk
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
重要的是我们在annotations
中指定了minio-disk
存储class。
之后我们可以看到,创建了 minio-claim PVC,Phase 为 "bound" .
之后我们可以在部署中使用它(为清楚起见,我省略了文件的 3/4):
cat minio-deploy.yaml
---
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: minio
...
spec:
...
template:
...
spec:
volumes:
- name: storage
persistentVolumeClaim:
claimName: minio-claim
...
I'm curious how i could get this error more visible and understandable.
如果您看到您的 PVC 为 "Pending",您可以使用以下方法对其进行故障排除:
$ kubectl describe persistentvolumeclaim <your-pvc-name>
在我的例子中它看起来像:
$ kubectl describe persistentvolumeclaim minio-claim-broken
Name: minio-claim-broken
Namespace: default
StorageClass: minio-disk-1
Status: Pending
Volume:
Labels: <none>
Annotations: volume.beta.kubernetes.io/storage-class: minio-disk-1
volume.beta.kubernetes.io/storage-provisioner: kubernetes.io/gce-pd
Finalizers: [kubernetes.io/pvc-protection]
Capacity:
Access Modes:
VolumeMode: Filesystem
Mounted By: <none>
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning ProvisioningFailed 61s (x10 over 6m47s) persistentvolume-controller Failed to provision volume with StorageClass "minio-disk-1": invalid option "diskformat" for volume plugin kubernetes.io/gce-pd
这让您深入了解创建过程中出了什么问题(存储 Class 定义中的选项无效)
希望对您有所帮助:)
我被这个问题困住了: 我配置了 kubeadm(目前集群在一台专用服务器上)。 我使用 helm 安装了 elasticsearch。它几乎可以正常工作,除了存储。该图表使用默认的 StorageClass 来动态配置 PV。
所以我创建了一个默认的 StorageClass (kubernetes.io/gce-pd / pd-standard) 并在 apiserver 中激活了 DefaultStorageClass 准入插件以启用动态配置。 但这仍然行不通。 pods 仍然有 FailedBinding 事件 "no persistent volumes available for this claim and no storage class is set"。
我检查了 elasticsearch 的 helm chart,它没有为其 PVC 指定 StorageClass,所以它应该可以工作。 另外,我还遗漏了其他东西:我不明白 kubernetes 将在磁盘上分配 PV,我从来没有在任何地方配置它。而且它也不在 StorageClass 中。
我已检查动态配置是否正常工作,因为它在 PVC 定义中插入了默认的 StorageClass:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
annotations:
volume.beta.kubernetes.io/storage-provisioner: kubernetes.io/gce-pd
creationTimestamp: "2019-12-19T10:37:04Z"
finalizers:
- kubernetes.io/pvc-protection
labels:
app: kibanaelastic-master
name: kibanaelastic-master-kibanaelastic-master-0
namespace: elasticsearch
resourceVersion: "360956"
selfLink: /api/v1/namespaces/elasticsearch/persistentvolumeclaims/kibanaelastic-master-kibanaelastic-master-0
uid: 22b1c23a-312e-4b56-a0bb-17f2da372509
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 30Gi
storageClassName: slow
volumeMode: Filesystem
status:
phase: Pending
那么我还应该检查什么?
有什么线索吗?
别介意,我发现了错误。我在默认存储 class 中使用了错误的配置器。并且未配置此供应商。我很好奇如何让这个错误更明显和更容易理解。
让我在这里宣传我的 5 美分 :)。
I can't understand where kubernetes will allocate the PV on disks, i never configured it anywhere. And it's not in the StorageClass too.
假设我们使用的是 GCP,整个存储 Classes,PV 声明预计将以下列方式工作:
- 存储空间Class
- PersistentVolumeClaim(在该存储 Class 上)
volumes:
Deployment 字段(例如)
示例:
$ cat minio-storage-class.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: minio-disk
provisioner: kubernetes.io/gce-pd
parameters:
type: pd-standard
reclaimPolicy: Delete
volumeBindingMode: Immediate
在 GCP 中创建新存储 class。
然后我们使用该存储 class 参数声明我们的持久卷:
$ cat minio-pvc.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: minio-claim
namespace: default
annotations:
volume.beta.kubernetes.io/storage-class: minio-disk
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
重要的是我们在annotations
中指定了minio-disk
存储class。
之后我们可以看到,创建了 minio-claim PVC,Phase 为 "bound" .
之后我们可以在部署中使用它(为清楚起见,我省略了文件的 3/4):
cat minio-deploy.yaml
---
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: minio
...
spec:
...
template:
...
spec:
volumes:
- name: storage
persistentVolumeClaim:
claimName: minio-claim
...
I'm curious how i could get this error more visible and understandable.
如果您看到您的 PVC 为 "Pending",您可以使用以下方法对其进行故障排除:
$ kubectl describe persistentvolumeclaim <your-pvc-name>
在我的例子中它看起来像:
$ kubectl describe persistentvolumeclaim minio-claim-broken
Name: minio-claim-broken
Namespace: default
StorageClass: minio-disk-1
Status: Pending
Volume:
Labels: <none>
Annotations: volume.beta.kubernetes.io/storage-class: minio-disk-1
volume.beta.kubernetes.io/storage-provisioner: kubernetes.io/gce-pd
Finalizers: [kubernetes.io/pvc-protection]
Capacity:
Access Modes:
VolumeMode: Filesystem
Mounted By: <none>
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning ProvisioningFailed 61s (x10 over 6m47s) persistentvolume-controller Failed to provision volume with StorageClass "minio-disk-1": invalid option "diskformat" for volume plugin kubernetes.io/gce-pd
这让您深入了解创建过程中出了什么问题(存储 Class 定义中的选项无效)
希望对您有所帮助:)