问题描述
我将 statefulset 扩展到 4,当缩减到 1 时,我看到我仍然有 4 个持久卷,索引从 0 到 3。
我还看到他们的状态都是绑定 我猜是因为我将它用作有状态集,所以它在缩小后不会删除卷。
我尝试手动删除其中一个(索引为 2 的那个),因为我确信它会释放我的音量,所以我使用了:
kubectl delete persistentvolume <volume>
嗯,这没有帮助,它只是让这个卷永远处于终止状态......:/
我现在不知道如何删除这个和所有其他未使用的卷。
这里是 stateful set yaml 中的卷配置。
volumeClaimTemplates:
- Metadata:
name: data
spec:
accessModes: ["ReadWriteOnce"]
storageClassName: "default"
resources:
requests:
storage: 7Gi
如果我跑
kubectl get pvc --all-namespaces
我明白
NAMESPACE NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
default data-0 Bound pvc-23af1aec-e385-4778-b0b0-56f1d1dfdfee 7Gi RWO default 4h5m
default data-1 Bound pvc-34625107-1352-4715-b12c-2fc6ff22ed08 7Gi RWO default 4h4m
default data-2 Bound pvc-15dbdb53-d951-465d-b9c3-ebadfcc3c725 7Gi RWO default 4h3m
default data-3 Bound pvc-d317657f-194a-4f4f-8c5f-dff2843b693f 7Gi RWO default 4h3m
如果我跑
kubectl get --no-headers persistentvolumes
我明白了:
pvc-15dbdb53-d951-465d-b9c3-ebadfcc3c725 7Gi RWO Delete Terminating default/data-2 default 4h4m
pvc-23af1aec-e385-4778-b0b0-56f1d1dfdfee 7Gi RWO Delete Bound default/data-0 default 4h6m
pvc-34625107-1352-4715-b12c-2fc6ff22ed08 7Gi RWO Delete Bound default/data-1 default 4h5m
pvc-d317657f-194a-4f4f-8c5f-dff2843b693f 7Gi RWO Delete Bound default/data-3 default 4h3m
解决方法
在 statefulset 中,K8s 不会在 pod 终止后自动删除 PV
或 PVC
,这是为了避免进一步的复杂化和数据安全。这就是为什么在缩小之后,我们需要手动进行。在 Pod 终止后删除 PVC
将触发删除相应的 Persistent Volume,具体取决于存储类别和回收策略。
请尝试删除 persistent volume claim
或 PVC
而不是 persistent volume
。如果您删除 pvc
,它会自动删除相应的 pv
。
只需在您的 bash 中运行此命令:
kubectl delete pvc data-3