如何删除已安装的卷? PV/PVC 不会删除|编辑|补丁
How to remove mounted volumes? PV/PVC won't delete|edit|patch
我在这个基本设置上使用 kubectl apply -f pv.yaml
:
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-demo
spec:
storageClassName: "normal"
capacity:
storage: 1Gi
persistentVolumeReclaimPolicy: Delete
accessModes:
- ReadWriteOnce
hostPath:
path: /home/demo/
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-demo
spec:
storageClassName: "normal"
resources:
requests:
storage: 200Mi
accessModes:
- ReadWriteOnce
---
apiVersion: v1
kind: Pod
metadata:
name: nginx-demo
labels:
name: nginx-demo
spec:
containers:
- image: nginx
name: nginx
volumeMounts:
- mountPath: /usr/share/nginx/html
name: pv-demo
volumes:
- name: pv-demo
persistentVolumeClaim:
claimName: pvc-demo
现在我想删除所有内容,所以我使用了:kubectl delete -f pv.yaml
但是,该卷仍然保留在 /home/demo 的节点上,必须手动删除。
所以我尝试在删除之前打补丁和移除保护:
kubectl patch pv pv-demo -p '{"metadata":{"finalizers":null}}'
但是挂载仍然存在于节点上。
我尝试手动编辑和清空 Finalizers,尽管它说 'edited'; kubectl get pv
显示未修改的终结器。
我不明白这是怎么回事,为什么以上所有方法都不起作用?我想要删除时,节点 /home/demo 上的挂载文件夹也会被删除。
这是使用 hostPath
时的预期行为,因为它不支持对其他卷类型的删除。我用 kubeadm
和 gke
集群测试了这个,在删除 pv
和 pvc
后,安装的目录和文件保持不变。
摘自关于回收政策的手册:
Currently, only NFS and HostPath support recycling. AWS EBS, GCE PD,
Azure Disk, and Cinder volumes support deletion.
虽然 documentation as deprecated since version 1.5 中提到了 recycle
它仍然有效并且可以清理您的文件,但它不会删除您的挂载目录。这并不理想,但这是最接近的解决方法。
重要提示:
要成功使用回收,您不能删除 PV 本身。如果您删除 PVC,那么控制器管理器会创建回收器 pod 来清理卷,并且该卷可用于绑定到下一个 PVC。
查看控制管理器日志时,您可以看到 host_path deleter
拒绝删除 /home/demo/
目录,它仅支持删除 /tmp/.+
目录。然而,经过测试,这个 tmp
也没有被删除。
'Warning' reason: 'VolumeFailedDelete' host_path deleter only supports /tmp/.+ but received provided /home/demo/```
也许你可以试试 /tmp/ 下的主机路径
我在这个基本设置上使用 kubectl apply -f pv.yaml
:
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-demo
spec:
storageClassName: "normal"
capacity:
storage: 1Gi
persistentVolumeReclaimPolicy: Delete
accessModes:
- ReadWriteOnce
hostPath:
path: /home/demo/
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-demo
spec:
storageClassName: "normal"
resources:
requests:
storage: 200Mi
accessModes:
- ReadWriteOnce
---
apiVersion: v1
kind: Pod
metadata:
name: nginx-demo
labels:
name: nginx-demo
spec:
containers:
- image: nginx
name: nginx
volumeMounts:
- mountPath: /usr/share/nginx/html
name: pv-demo
volumes:
- name: pv-demo
persistentVolumeClaim:
claimName: pvc-demo
现在我想删除所有内容,所以我使用了:kubectl delete -f pv.yaml
但是,该卷仍然保留在 /home/demo 的节点上,必须手动删除。
所以我尝试在删除之前打补丁和移除保护:
kubectl patch pv pv-demo -p '{"metadata":{"finalizers":null}}'
但是挂载仍然存在于节点上。
我尝试手动编辑和清空 Finalizers,尽管它说 'edited'; kubectl get pv
显示未修改的终结器。
我不明白这是怎么回事,为什么以上所有方法都不起作用?我想要删除时,节点 /home/demo 上的挂载文件夹也会被删除。
这是使用 hostPath
时的预期行为,因为它不支持对其他卷类型的删除。我用 kubeadm
和 gke
集群测试了这个,在删除 pv
和 pvc
后,安装的目录和文件保持不变。
摘自关于回收政策的手册:
Currently, only NFS and HostPath support recycling. AWS EBS, GCE PD,
Azure Disk, and Cinder volumes support deletion.
虽然 documentation as deprecated since version 1.5 中提到了 recycle
它仍然有效并且可以清理您的文件,但它不会删除您的挂载目录。这并不理想,但这是最接近的解决方法。
重要提示: 要成功使用回收,您不能删除 PV 本身。如果您删除 PVC,那么控制器管理器会创建回收器 pod 来清理卷,并且该卷可用于绑定到下一个 PVC。
查看控制管理器日志时,您可以看到 host_path deleter
拒绝删除 /home/demo/
目录,它仅支持删除 /tmp/.+
目录。然而,经过测试,这个 tmp
也没有被删除。
'Warning' reason: 'VolumeFailedDelete' host_path deleter only supports /tmp/.+ but received provided /home/demo/```
也许你可以试试 /tmp/ 下的主机路径