问题描述
我有此永久性索赔
$ kubectl get pvc -ngitlab-managed-apps
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
prometheus-prometheus-server Pending 0s
$ kubectl describe pvc prometheus-prometheus-server -ngitlab-managed-apps
Name: prometheus-prometheus-server
Namespace: gitlab-managed-apps
StorageClass:
Status: Pending
Volume:
Labels: app=prometheus
chart=prometheus-9.5.2
component=server
heritage=Tiller
release=prometheus
Annotations: <none>
Finalizers: [kubernetes.io/pvc-protection]
Capacity:
Access Modes:
VolumeMode: Filesystem
Mounted By: prometheus-prometheus-server-78bdf8f5b7-pkvcr
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
normal FailedBinding 14s (x5 over 60s) persistentvolume-controller no persistent volumes available for this claim and no storage class is set
我已经创建了这个持久卷
$ kubectl get pv
NAME CAPACITY ACCESS MODES RECLaim POLICY STATUS CLaim STORAGECLASS REASON AGE
prometheus-prometheus-server 8Gi RWO Retain Released gitlab-managed-apps/prometheus-prometheus-server manual 17m
$ kubectl describe pv prometheus-prometheus-server
Name: prometheus-prometheus-server
Labels: type=local
Annotations: kubectl.kubernetes.io/last-applied-configuration:
{"apiVersion":"v1","kind":"PersistentVolume","Metadata":{"annotations":{},"labels":{"type":"local"},"name":"prometheus-prometheus-server"}...
pv.kubernetes.io/bound-by-controller: yes
Finalizers: [kubernetes.io/pv-protection]
StorageClass: manual
Status: Released
Claim: gitlab-managed-apps/prometheus-prometheus-server
Reclaim Policy: Retain
Access Modes: RWO
VolumeMode: Filesystem
Capacity: 8Gi
Node Affinity: <none>
Message:
Source:
Type: HostPath (bare host directory volume)
Path: /var/prometheus-server
HostPathType:
Events: <none>
为什么索赔不要求数量?除了名称,还有其他需要匹配的内容吗?我应该查看任何日志吗?目前,我仅看到“此声明没有可用的永久卷,并且未设置任何存储类”
解决方法
要了解错误消息,您需要了解static和dynamic的配置工作。
当管理员创建的所有静态PV均与用户的PersistentVolumeClaim不匹配时,群集可能会尝试动态设置卷(尤其是PVC)。此设置基于StorageClasses。
创建PersistentVolumeClaim之后,Kubernetes控制平面将查找满足声明要求的PersistentVolume。如果控制平面找到具有相同StorageClass的合适的PersistentVolume,则会将声明绑定到该卷。
您的错误说,“您的PVC找不到匹配的PV,并且您也没有提及任何storageClass名称。”
您的PV有StorageClass: manual
,但是您的PVC没有任何storageClass(StorageClass: ""
)。将StorageClass: manual
添加到您的PVC应该可以解决您的问题。
您必须选择以下配置选项之一。
静态配置:
- 创建PV
- 使用标签选择器创建PVC,以便它可以找到带有所提及标签的PV。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: myclaim
spec:
selector: # <----- here
matchLabels:
release: "stable"
... ...
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: myclaim
label: # <---- here
release: "stable"
动态配置:
- 使用提及的预配器创建storageClass
- 使用提到的storageClass名称创建PVC
或
- 使用提到的相同的storageClass名称创建PV和PVC。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: slow
provisioner: some-provisioner
... ... ...
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: myclaim
spec:
storageClassName: slow # <---- here
... ... ...
这是一个简短说明,请访问official doc了解更多详细信息。