一、背景
总所周知,K8S存储是PV,调用创建PV给POD来做存储的是PVC,默认情况下PVC删除同时会将相应的PV一并删除。
如果一个还有POD挂载的PVC被执行了删除操作,此时PVC不会被删除而是变成Terminating状态,注意如果此时POD删除,PVC连同其数据卷PV也会被一并删除,那这种情况下如何补救呢!!!
二、操作步骤
保留所有pvc的yaml文件
kubectl get pvc datadir-kafka-0 -o yaml > datadir-kafka-0.yaml
确认pvc是由那个那个pod挂载的
确认该pod挂载了几个terminal状态的pvc
1、调节pv的回收策略为Retain
#过滤PVC对应的PV名字
kubectl get pvc -n ${名称空间} | grep elasticsearch | awk '{print $3}'
#确定PV回收策略,如果不是以下策略需要修改
kubectl edit pv ${pv名字} -n ${名称空间}
2、删除相应pod
#此时挂载的PVC也会随之删除,但相应PV数据卷却不会被删除,因为已经修改回收策略为Retain
#并且注意此时重启的pod为pending状态
kubectl delete pods ${pod名} -n ${名称空间}
重启创建pvc
kubectl apply -f datadir-kafka-0.yaml
此时kubectl get pvc 出于lost状态
3、再次编辑之前修改的pv,删除里面关于之前PVC的信息
kubectl edit pv ${pv名字} -n ${名称空间}
找到红色方框里的内容,并删除,共7行
5、再次查看PVC正常bound,pod正常runing,使用得还是之前的pv卷