(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【Kubernetes】PVを削除しても過去のPVCが残り続ける事象

スポンサーリンク

事象

PVを落とし上げしているにもかかわらず

$ kubectl delete apply -f pv.yaml
persistentvolume "pv-1" deleted
$ kubectl get pv
No resources found in default namespace.
$ kubectl apply -f pv.yaml
persistentvolume/pv-1 created

起動直後にPVCが紐づいている。

$ kubectl get pv
NAME   CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS     CLAIM             STORAGECLASS   REASON   AGE
pv-1   10Mi       RWO            Retain           Released   default/testclaim                          2s
環境情報
  • kubectl 1.18

原因と解決策

PVを起動する際に使用したyamlのspec.calaimRefに値が入っている。

spec:
  accessModes:
  - ReadWriteOnce
  capacity:
    storage: 10Mi
  claimRef:
    apiVersion: v1
    kind: PersistentVolumeClaim
    name: testclaim
    namespace: default
    resourceVersion: "4553"
    uid: ...

よってclaimRefに関する箇所を削除すればCLAIM欄は空白になる

$ kubectl apply -f pv.yaml
persistentvolume/pv-1 created
$ kubectl get pv
NAME   CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE
pv-1   10Mi       RWO            Retain           Available                                   5s

以下、補足です

補足

PVにPVCが紐づいている状態のPVをyamlに保管すると

$ kubectl get pv pv-1 -o=yaml > pv-1.yaml

そのyamlにはPVCの情報がspce欄に残っているため、そのyamlで起動すると該当のPVCを削除した後も事象のようにバインドされているような見え方をします。

見え方だけならいいですが、PVは紐づけされていると認識するため、別のPVCで該当のPVを指定してもPVCでPendingになってしまいます。

$ kubectl get pvc
NAME     STATUS    VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
test-pvc   Pending                                                     xs

以上、ご参考になれば幸いです。