web-dev-qa-db-ja.com

Kubernetes:PersistentVolumeClaim(pvc)を削除できません

呼び出して次の永続的なボリュームを作成しました

kubectl create -f nameOfTheFileContainingTheFollowingContent.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-monitoring-static-content
spec:
  capacity:
    storage: 100Mi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/some/path"

---

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pv-monitoring-static-content-claim
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: ""
  resources:
    requests:
      storage: 100Mi

この後、pvcを削除しようとしました。しかし、このコマンドは止まりました。 kubectl describe pvc pv-monitoring-static-content-claimを呼び出すと、次の結果が得られます

Name:          pv-monitoring-static-content-claim
Namespace:     default
StorageClass:
Status:        Terminating (lasts 5m)
Volume:        pv-monitoring-static-content
Labels:        <none>
Annotations:   pv.kubernetes.io/bind-completed=yes
               pv.kubernetes.io/bound-by-controller=yes
Finalizers:    [foregroundDeletion]
Capacity:      100Mi
Access Modes:  RWO
Events:        <none>

kubectl describe pv pv-monitoring-static-content

Name:            pv-monitoring-static-content
Labels:          <none>
Annotations:     pv.kubernetes.io/bound-by-controller=yes
Finalizers:      [kubernetes.io/pv-protection foregroundDeletion]
StorageClass:
Status:          Terminating (lasts 16m)
Claim:           default/pv-monitoring-static-content-claim
Reclaim Policy:  Retain
Access Modes:    RWO
Capacity:        100Mi
Node Affinity:   <none>
Message:
Source:
    Type:          HostPath (bare Host directory volume)
    Path:          /some/path
    HostPathType:
Events:            <none>

永続ボリュームを使用する実行中のポッドはありません。誰かがPVCとPVが削除されない理由を教えてもらえますか?

26
Yannic Klem

なぜこれが起こったのかはわかりませんが、kubernetesダッシュボードからpvとpvcのファイナライザーを削除すると、両方が削除されました。これは、質問で説明した手順を繰り返した後に再び起こりました。バグのようです。

19
Yannic Klem

これは、永続的なボリュームが保護されている場合に発生します。これを相互検証できるはずです:

コマンド:

kubectl describe pvc PVC_NAME | grep Finalizers

出力:

Finalizers: [kubernetes.io/pvc-protection]

kubectl patchを使用してファイナライザをnullに設定することにより、これを修正できます。

kubectl patch pvc PVC_NAME -p '{"metadata":{"finalizers": []}}' --type=merge

Ref; 使用中のストレージオブジェクト保護

18
Xiak

PVは保護されています。 PVCを削除する前にPVを削除してください。また、参照されているPVCのいずれかを要求しているポッド/デプロイメントを削除します。詳細については、チェックアウトしてください 使用中のストレージオブジェクト保護

10

あなたはあなたのPVCの編集を取り除くことができます! PVC保護を削除します。

  1. kubectl edit pvc YOUR_PVC -n NAME_SPACE
  2. 手動で編集し、この行の前に#を入力します enter image description here
  3. すべてのPVとPVCが削除されます
6
Ali Atakan

この問題は数時間前に会ったばかりです。

この参照を使用した展開を削除すると、PV/PVCは自動的に終了します。

4
akai

PVがまだ存在する場合は、ReclaimPolicyがRetainに設定されているためである可能性があり、この場合、PVCがなくなっても削除されません。ドキュメントから:

PersistentVolumeには、「保持」、「リサイクル」、「削除」など、さまざまな再生ポリシーを設定できます。動的にプロビジョニングされたPersistentVolumesの場合、デフォルトの再生ポリシーは「削除」です。つまり、ユーザーが対応するPersistentVolumeClaimを削除すると、動的にプロビジョニングされたボリュームが自動的に削除されます。ボリュームに貴重なデータが含まれている場合、この自動動作は不適切な場合があります。その場合、「保持」ポリシーを使用する方が適切です。 「保持」ポリシーでは、ユーザーがPersistentVolumeClaimを削除しても、対応するPersistentVolumeは削除されません。代わりに、すべてのデータを手動で回復できるリリースフェーズに移動します

4

私の場合、pvpvcの両方に関連付けられたポッドを削除する限り、終了ステータスのpvpvcはなくなります

3
j3ffyang