kubernetes - Kubernetes PV 在删除/重新创建后拒绝绑定
问题描述
给定以下 PVC 和 PV:
- PVC:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: packages-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
volumeName: packages-volume
- 光伏:
apiVersion: v1
kind: PersistentVolume
metadata:
name: packages-volume
namespace: test
spec:
claimRef:
name: packages-pvc
namespace: test
accessModes:
- ReadWriteMany
nfs:
path: {{NFS_PATH}}
server: {{NFS_SERVER}}
capacity:
storage: 1Gi
persistentVolumeReclaimPolicy: Retain
如果我创建 PV,然后创建 PVC,它们将绑定在一起。但是,如果我删除 PVC 然后重新创建它,它们不会绑定(pvc 挂起)。为什么?
解决方案
请注意,删除后PVC
,PV
保持Released
状态:
$ kubectl get pv packages-volume
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
packages-volume 1007Gi RWX Retain Released default/packages-pvc 10m
它应该具有状态Available
,以便它可以被另一个PersistentVolumeClaim
实例重用。
为什么不是Available
?
如果您显示 的当前yaml
定义PV
,您可以通过执行以下操作轻松完成:
kubectl get pv packages-volume -o yaml
您可能会注意到,claimRef
它包含uid
最近删除的部分PersistentVolumeClaim
:
claimRef:
apiVersion: v1
kind: PersistentVolumeClaim
name: packages-pvc
namespace: default
resourceVersion: "10218121"
uid: 1aede3e6-eaa1-11e9-a594-42010a9c0005
您可以通过发出以下命令轻松验证它:
kubectl get pvc packages-pvc -o yaml | grep uid
就在您删除您的PVC
并将其与PV
定义包含的内容进行比较之前。您会看到这与您在删除后uid
仍然引用的完全相同。这个剩余的参考是保持状态的实际原因。PV
PVC
PV
Released
为什么新创建PVC
的状态仍然存在Pending
?
尽管您新创建的文件PVC
在您看来与您使用相同文件PVC
创建它时刚刚删除的完全相同,但从它的角度来看,它是一个全新的对象实例,具有完全不同的. 这就是它保持状态并且无法绑定到.yaml
Kubernetes
PersistentVolumeClaim
uid
Pending
PV
解决方案:
要PV
Available
再次进行,您只需要删除提到的uid
参考,例如通过发出:
kubectl patch pv packages-volume --type json -p '[{"op": "remove", "path": "/spec/claimRef/uid"}]'
或者通过删除整个claimRef
部分,可以按如下方式完成:
kubectl patch pv packages-volume --type json -p '[{"op": "remove", "path": "/spec/claimRef"}]'
推荐阅读
- c# - 如何产生一个进程并与之通信
- excel - 将 Excel 中的行与公共列 (A) 合并并在列 (D) 中保留最大值
- vba - 如何获取嵌套在集合中的范围的地址/值
- neo4j - neo4j cypher 基于属性字符串值创建两个节点之间的关系
- python - DataFrame 中的 .replace() 不会替换
- javascript - 是否可以在 Quilljs 编辑器中的 textarea 下方显示工具栏选项?
- sql - SQL将字节转换为INT和BIGINT
- android - Android浏览器中的深层链接未打开应用程序
- visual-studio-code - VS Code 中 APIDoc/JSDoc 的语法高亮
- java - 测试套件在 JUnit5 中是否被认为已弃用?