我正在使用带有 EFS 的 PV。我创建了一个 PV 和 PVC。删除 StatefulSet 后,PV 恢复为已发布状态。当我删除并重新应用 StatefulSet 时,它不会附加到同一个 PV,相反 PVC 状态显示为待定。我的问题是如何让 StatefulSet 中的 Pod 重新绑定到同一个 PV?
[kubeXpress]# k get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY **STATUS** CLAIM STORAGECLASS REASON AGE
efsvol 1Mi RWO Retain **Released** default/efsvol aws-efs 10m
[kubeXpress]# k get pvc
efsvol **Pending** aws-efs 10m
[kubeXpress]# k get po
NAME READY STATUS RESTARTS AGE
web-0 0/1 **Pending** 0 4m
[kubeXpress]# k describe po web-0
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedScheduling 2m (x37 over 12m) default-scheduler pod has unbound PersistentVolumeClaims (repeated 6 times)
答案1
似乎您需要为新 Pod 创建一个新的 PVC 才能使用现有的 PV。
如果您PV.Spec.ClaimRef
在 PV 设置中删除引用,则任何具有适当设置的新 PVC 都可以使用它。或者,如果您想将 PV 分配给确切的 PVC,您可以填写PV.Spec.ClaimRef
PVC 的名称,然后使用该名称创建 PVC。
不要忘记Retain
对 PV 使用策略以防止其发布后被删除。
PV示例:
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv0001
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
nfs:
path: /tmp
server: 172.17.0.2
persistentVolumeReclaimPolicy: Retain #Here is policy
claimRef: #Here is claim reference
name: claim1
namespace: default
PVC示例:
apiVersion: "v1"
kind: "PersistentVolumeClaim"
metadata:
name: "claim1"
spec:
accessModes:
- "ReadWriteOnce"
resources:
requests:
storage: "1Gi"
volumeName: "pv0001"