永続ボリュームの削除

このトピックでは、PVを削除する方法、または関連するすべてのPVCが削除されたあとにPVを保持する方法について説明します。 PVCを削除するには、「永続ボリューム要求の削除」を参照してください。

ファイル・システム・ストレージの場合、デフォルトの動作では、関連するすべてのPVCが削除されたときにPVが保持されます。

ブロック・ボリューム・ストレージの場合、デフォルトの動作では、関連するすべてのPVCが削除されたときにPVを削除します。 ボリュームに重要なデータが含まれている場合など、関連するすべてのPVCが削除されたあとにPVを保持することをお勧めします。 「永続ボリュームの保持」を参照してください。

PVが保持されている場合は、後でオプションでPVを削除できます。

永続ボリューム要求の削除

PVCを削除するには、まずそのPVCを使用しているすべてのポッドを削除します。 ポッドがまだPVCを使用しているときにPVCを削除しようとすると、PVCは終了状態でスタックし、削除されません。 そのPVCを使用しているすべてのポッドが削除されると、PVCは削除されます。

  1. PVCを使用しているすべてのポッドをリストします。

    JSONオブジェクトを問い合せるためのJQコマンドライン・ユーティリティがインストールされていることを確認します。

    次のコマンドを使用して、削除するPVCに関連付けられているすべてのネームスペースのポッドをリストします。

    $ kubectl get pods --all-namespaces -o=json | jq -c '.items[] | {name: .metadata.name, namespace: .metadata.namespace, claimName: .spec | select(has("volumes")).volumes[] | select(has("persistentVolumeClaim")).persistentVolumeClaim.claimName} | select(.claimName != null)'
    
    {"name":"pod1_name","namespace":"namespace1_name","claimName":"claim1_name"}
    {"name":"pod2_name","namespace":"namespace1_name","claimName":"claim1_name"}
    {"name":"pod3_name","namespace":"namespace2_name","claimName":"claim2_name"}

    現在の名前空間でのみポッドを一覧表示するには、--all-namespacesオプションを省略することを除き、前述のコマンドと同じコマンドを使用します。

  2. PVCを使用しているすべてのポッドを削除します。

    削除するclaimNameに関連付けられているkubectl get podsコマンドによってレポートされるポッド名を使用します。

    $ kubectl delete pod pod1_name pod2_name
  3. PVCを削除します。

    $ kubectl delete pvc claim1_name
  4. (オプション) PVを削除します。

    「Persistent Volume Reclaim Policy」が「Delete」の場合、PVは、このPVに関連付けられているすべてのPVCが削除されると自動的に削除されます。

    すべてのPVCをリストするには、kubectl get pvcコマンドを使用します。

    「Persistent Volume Reclaim Policy」が「Retain」の場合、次のコマンドを使用してPVを削除できます:

    $ kubectl delete pv pv_name

永続ボリュームの保持

PVを削除するのではなく、ボリュームに重要なデータが含まれている場合など、関連するすべてのPVCが削除されたあとにPVを保持することをお勧めします。 関連するすべてのPVCが削除された後にPVが保持されるようにPVの再要求ポリシーを変更する手順は、「永続ボリュームの再要求ポリシーの変更」を参照してください。

「Persistent Volume Reclaim Policy」が「Delete」の場合、PVは、このPVに関連付けられているすべてのPVCが削除されると自動的に削除されます。 この動作を回避するには、保持ポリシーを指定します。 保持ポリシーでは、PVは削除されませんが、要求から解放されます。 データをリカバリする手順は、「リリース済の永続ボリュームからのデータのリカバリ」を参照してください。

PVが保持されていても削除する場合、またはデータのリカバリ後にPVを削除する場合は、次のコマンドを使用します:

$ kubectl delete pv pv_name

永続ボリュームの再要求ポリシーの変更

  1. クラスタ内のPVを一覧表示します。

    $ kubectl get pv
    NAME    CAPACITY  ACCESS MODES  RECLAIM POLICY  STATUS  CLAIM            STORAGECLASS  REASON  AGE
    fss-pv  200Gi     RWX           Delete          Bound   default/fss-pvc  pca-fss               20h
  2. PVの再要求ポリシーを変更します。

    $ kubectl patch pv fss-pv -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'
  3. 再要求ポリシーの変更を確認します。

    RECLAIM POLICY列には、Retainと表示されます。

    $ kubectl get pv

リリース済の永続ボリュームからのデータのリカバリ

前の請求者のデータがまだボリューム上にあるため、PVが前の請求からリリースされた後、PVは別の請求に使用できません。 データを回復してから、同じストレージを使用してPVを再作成し、そのストレージに対する新しい要求を作成します。

  1. PVを削除します。

    $ kubectl delete pv pv_name

    関連するブロック・ボリュームまたはファイル・システムは、PVの削除後も存在します。

  2. ブロック・ボリュームまたはファイル・システム上のデータを手動でリカバリおよびクリーン・アップします。

  3. (オプション)ブロック・ボリュームまたはファイル・システムを手動で削除します。

    同じブロック・ボリュームまたはファイル・システムを再利用するには、同じストレージ・アセット定義で新しいPVを作成します。