繁体   English   中英

如何删除已安装的卷? 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}}'

但是挂载仍然存在于节点上。 我尝试手动编辑和 null 终结器,尽管它说“已编辑”; kubectl get pv显示未修改的终结器。

我不明白发生了什么,为什么以上所有方法都不起作用? 我想在删除时,节点 /home/demo 上的挂载文件夹也会被删除。

这是使用hostPath时的预期行为,因为它不支持删除其他卷类型。 我使用kubeadmgke集群对此进行了测试,并且在删除pvpvc后,安装的目录和文件保持不变。

取自有关回收政策的手册:

目前,只有 NFS 和 HostPath 支持回收。 AWS EBS、GCE PD、
Azure 磁盘和 Cinder 卷支持删除。

虽然文档中提到recycle 自 1.5 版以来已弃用,但它仍然可以工作并且可以清理您的文件,但不会删除您安装的目录。 这并不理想,但这是最接近的解决方法。

重要提示:要成功使用回收,您不能删除 PV 本身。 如果您删除 PVC,则 controller 管理器会创建清理卷的回收器 pod,并且此卷可用于绑定到下一个 PVC。

查看 control-manager 日志时,您可以看到host_path deleter拒绝删除/home/demo/目录,它只支持删除/tmp/.+目录。 但是,经过测试,此tmp也不会被删除。

'Warning' reason: 'VolumeFailedDelete' host_path deleter only supports /tmp/.+ but received provided /home/demo/```

也许您可以尝试使用 /tmp/ 下的主机路径在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM