永続ボリュームの削除
このトピックでは、PVを削除する方法、または関連するすべてのPVCが削除されたあとにPVを保持する方法について説明します。 PVCを削除するには、「永続ボリューム要求の削除」を参照してください。
ファイル・システム・ストレージの場合、デフォルトの動作では、関連するすべてのPVCが削除されたときにPVが保持されます。
ブロック・ボリューム・ストレージの場合、デフォルトの動作では、関連するすべてのPVCが削除されたときにPVを削除します。 ボリュームに重要なデータが含まれている場合など、関連するすべてのPVCが削除されたあとにPVを保持することをお勧めします。 「永続ボリュームの保持」を参照してください。
PVが保持されている場合は、後でオプションでPVを削除できます。
永続ボリューム要求の削除
PVCを削除するには、まずそのPVCを使用しているすべてのポッドを削除します。 ポッドがまだPVCを使用しているときにPVCを削除しようとすると、PVCは終了状態でスタックし、削除されません。 そのPVCを使用しているすべてのポッドが削除されると、PVCは削除されます。
-
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
オプションを省略することを除き、前述のコマンドと同じコマンドを使用します。 -
PVCを使用しているすべてのポッドを削除します。
削除する
claimName
に関連付けられているkubectl get pods
コマンドによってレポートされるポッド名を使用します。$ kubectl delete pod pod1_name pod2_name
-
PVCを削除します。
$ kubectl delete pvc claim1_name
-
(オプション) 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
永続ボリュームの再要求ポリシーの変更
-
クラスタ内の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
-
PVの再要求ポリシーを変更します。
$ kubectl patch pv fss-pv -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'
-
再要求ポリシーの変更を確認します。
RECLAIM POLICY
列には、Retain
と表示されます。$ kubectl get pv
リリース済の永続ボリュームからのデータのリカバリ
前の請求者のデータがまだボリューム上にあるため、PVが前の請求からリリースされた後、PVは別の請求に使用できません。 データを回復してから、同じストレージを使用してPVを再作成し、そのストレージに対する新しい要求を作成します。
-
PVを削除します。
$ kubectl delete pv pv_name
関連するブロック・ボリュームまたはファイル・システムは、PVの削除後も存在します。
-
ブロック・ボリュームまたはファイル・システム上のデータを手動でリカバリおよびクリーン・アップします。
-
(オプション)ブロック・ボリュームまたはファイル・システムを手動で削除します。
同じブロック・ボリュームまたはファイル・システムを再利用するには、同じストレージ・アセット定義で新しいPVを作成します。