在工作中接到客户反馈测试环境vessel服务异常,查看日志发现pvc状态异常。
[root@lolicp ~]# k get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
manual-pvc Pending manual 27s
[root@lolicp ~]# k describe pvc manual-pvc
Name: manual-pvc
Namespace: default
StorageClass: manual
Status: Pending
Volume:
Labels: <none>
Annotations: <none>
Finalizers: [kubernetes.io/pvc-protection]
Capacity:
Access Modes:
VolumeMode: Filesystem
Used By: <none>
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning ProvisioningFailed 0s (x4 over 35s) persistentvolume-controller storageclass.storage.k8s.io "manual" not found
排查思路
查看storageclass
通过命令发现并不存在名为manual
的storageclass
[root@lolicp ~]# k get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
local-path (default) rancher.io/local-path Delete WaitForFirstConsumer false 513d
local-volume kubernetes.io/no-provisioner Delete Immediate false 29m
查看pv
状态 | 含义 |
---|---|
Available | 空闲 PV,未被绑定 |
Bound | 被某个 PVC 绑定 |
Released | PVC 被删除,但 PV 还没回收 |
Failed | 回收失败(比如无法清空 hostPath) |
查看pv时发现STATUS
变为了Released
[root@lolicp ~]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
manual-pv 1Gi RWO Retain Released default/manual-pvc manual 57s
创建storageclass
最好根据实际情况创建。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: manual
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: Immediate
创建后需要重建pvc,可能等待也可以?
重置pv状态
重置完成后,预计5分钟内会刷新绑定关系。
[root@lolicp ~]# kubectl patch pv manual-pv -p '{"spec":{"claimRef": null}}'
persistentvolume/manual-pv patched
验证
[root@lolicp ~]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
manual-pv 1Gi RWO Retain Available manual
[root@lolicp ~]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
manual-pv 1Gi RWO Retain Bound default/manual-pvc manual 4m29s
[root@lolicp ~]# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
manual-pvc Bound manual-pv 1Gi RWO manual 50s