(一)kubernetes pv pvc

对于k8s的pv与pvc应该都不陌生,但是对使用过程中,还是会对这两者的状态会有疑惑。删除pv时为何会被hang住?pv无缘无语failed?下面这图是状态的变化。

1、首先创建个pv,这里用的后端存储是nfs。当刚创建好的pv状态必然是Available的,表示可以被pvc绑定。

apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-pv
spec:
  storageClassName: manual
  capacity:
    storage: 1Gi
  accessModes:
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  nfs:
    path: /data/k8s # 指定nfs的挂载点
    server: 10.151.30.1 # 指定nfs服务地址

kubectl get pv nfs-pv

2、新建pvc

刚添加的 PVC 状态是 Pending,如果有合适的 PV,这个 Pending 状态会立刻变为 Bound 状态,同时相应的 PVC 也会变为 Bound,PVC 和 PV 进行了绑定。 我们可以先添加 PVC,后添加 PV,这样就能保证看到 Pending 状态。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nfs-pvc
spec:
  storageClassName: manual
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi

(图1)新建pvc对象资源后,刚刚新建完成会是penidng状态。

(图2)如找到合适的pv绑定的话,则状态会变成bound,pv的状态也会跟着从Available变成bound。  

3、删除PV

现在的pvc与pv是在绑定状态了,均为bound。如不小心删了pv会有什么反应?

 

 

 删除pv的时候已经是hang住了,也就是说没有真正的删除pv,但这时pv的状态是Terminating,pvc的状态则是bound。也就是说,当时已绑定在一起的应该需要先删除pvc,在删除pv。这种对于pvc是没有任何影响的。但还是需要把问题处理下去。

我们可以通过编辑 PV,删除 PV 中的 finalizers 属性来强制删除 PV:

kubectl edit pv nfs-pv

删除掉finalizers 属性中的内容

 

 

 删除完成后,Pv算是真正的删除了,而pvc的也是Lost状态。

 

 

 当pvc是Lost时,说明之前已经绑定的pv已经没有了,但是pvc里还有着pv的绑定信息,可以导看看情况

 kubectl get pvc nfs-pvc -o yaml

 

 

 要解决这个问题,就把之前创建的pv重新创建出来即可。创建完成后,pv pvc的状态都恢复成bound状态了。

kubectl apply -f volume.yaml
persistentvolume/nfs-pv created

 

 上面是误操作,删除pv的情况下会发生的错误。

 

posted on 2020-09-30 17:39  Cutecatkk  阅读(502)  评论(0)    收藏  举报