我有以下pvc
(持久卷声明):
piVersion: v1
kind: PersistentVolumeClaim
metadata:
name: test-claim-web
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
和 Google Cloud 支持的 pv
(持久卷):
apiVersion: v1
kind: PersistentVolume
metadata:
name: test-pv-1
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
gcePersistentDisk:
pdName: test-1
fsType: ext4
以及谷歌云中存在的磁盘。
如果我先创建pv
,然后在pvc
之后创建,kubectl get pvc,pv
将显示:
NAME STATUS VOLUME CAPACITY ACCESSMODES AGE
test-claim-web Bound test-pv-1 10Gi RWO 15s
NAME CAPACITY ACCESSMODES STATUS CLAIM REASON AGE
test-pv-1 10Gi RWO Bound default/test-claim-web 25s
但是如果我删除并重新创建pv
,kubectl get pvc,pv
将显示:
NAME STATUS VOLUME CAPACITY ACCESSMODES AGE
test-claim-web Bound test-pv-1 10Gi RWO 3m
NAME CAPACITY ACCESSMODES STATUS CLAIM REASON AGE
test-pv-1 10Gi RWO Available 18s
- 为什么
pvc
仍然Bound
? pvc
(重新)绑定不会自动绑定吗?(我还观察到,在pvc
之后创建pv
会使pvc
永远等待Pending
状态。
我使用以下 Kubernetes 版本:
Client Version: version.Info{Major:"1", Minor:"2", GitVersion:"v1.2.4", GitCommit:"3eed1e3be6848b877ff80a93da3785d9034d0a4f", GitTreeState:"clean"}
Server Version: version.Info{Major:"1", Minor:"2", GitVersion:"v1.2.4", GitCommit:"3eed1e3be6848b877ff80a93da3785d9034d0a4f", GitTreeState:"clean"}
如果我删除并重新创建 pv,kubectl 得到 pvc,pv 将显示 [绑定]。 为什么 pvc 仍然是绑定的?
这是 Kubernetes 1.2 中的错误,它将在 1.3 中修复。PV 和 PVC 最终都应该被绑定。
但是,删除绑定的 PV 是一个非常糟糕的主意,因为 PVC 可能会在正在运行的 Pod 中使用,并且 Pod 突然丢失了下面的存储空间。你永远不应该触摸绑定的PV!
它我还观察到,在 pvc 之后创建 pv 会使 pvc 永远等待,状态为"挂起"
不会永远等待,它应该在 10 分钟后被绑定。使用 kube-controller-manager --pvclaimbinder-sync-period=15s
将其缩短为 15 秒。同样,这在 Kubernetes 1.3 中会更好,那里默认为 15 秒。