TL; DR。 PVCを削除した後にデータにアクセスする方法と、PVCを削除した後にPVが消えない理由について、私は迷っています。
私が取っている手順:
gCEに手動でディスクを作成しました:
gcloud compute disks create --size 5Gi disk-for-rabbitmq --zone europe-west1-b
走った:
kubectl apply -f /tmp/pv-and-pvc.yaml
次の設定で:
# /tmp/pv-and-pvc.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-for-rabbitmq
spec:
accessModes:
- ReadWriteOnce
capacity:
storage: 5Gi
gcePersistentDisk:
fsType: ext4
pdName: disk-for-rabbitmq
persistentVolumeReclaimPolicy: Delete
storageClassName: standard
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-for-rabbitmq
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
storageClassName: standard
volumeName: pv-for-rabbitmq
pVCを手動で削除しました(高レベル:ここでは、偶発的な削除やhelm
リリースの構成ミスなどの悲惨なシナリオをシミュレートしています)。
kubectl delete pvc pvc-for-rabbitmq
この時点で、次のことがわかります。
$ kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pv-for-rabbitmq 5Gi RWO Delete Released staging/pvc-for-rabbitmq standard 8m
$
余談ですが、理解を深めてください:PVに再利用ポリシーが
Delete
に設定されているにもかかわらず、なぜPVがまだ存在するのですか?Isn docs がDelete
再利用ポリシーについて言っていることではないでしょうか?
ここで、PVのデータへのアクセスを回復するためにPVCを再作成しようとすると、次のようになります。
$ kubectl apply -f /tmp/pv-and-pvc.yaml
persistentvolume "pv-for-rabbitmq" configured
persistentvolumeclaim "pvc-for-rabbitmq" created
$
私はまだpv
sでこれを取得します。 PVがReleased
状態でスタックしています:
$
kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pv-for-rabbitmq 5Gi RWO Delete Released staging/pvc-for-rabbitmq standard 15m
$
...そしてpvc
sでこれを取得します:
$
kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
pvc-for-rabbitmq Pending pv-for-rabbitmq 0 standard 1m
$
PVがReleased
ステータスでスタックしているようで、PVCはAvailable
ステータスでないPVにアクセスできません。
では、なぜ同じPVとPVCが再び友達になれないのでしょうか。 PVCを作成して既存のPVのデータへのアクセスを回復するにはどうすればよいですか?
あなたは、PVとPVCがより関連していると考えて、典型的な誤解で動いています。
永続ボリューム:K8では、このリソースには多くのオプションがあります。たとえば、hostPath
は、ポッドが実行されているノードから指定されたサイズを予約し、それを両方の目的のパスにマップします。ポッドとノード。
永続ボリュームの要求:PVC、特にGKEでは、Google Cloud Platformに物理永続ディスクを作成し、それをポッドが実行されているノードにセカンダリディスクとして接続します。したがって、この主張はクラウドプロバイダー固有のものです。
注:ディスクを手動で作成する必要はありません。申し立てを作成し、何が起こるかを確認してください。しばらく時間を与える必要がありますが、最終的にはステータスが
BOUND
になるはずです。これは、永続ディスクが作成され、接続され、使用できるようになることを意味します。
もしあなたがそうするなら df -h
、接続されたデバイスとして表示され、kubectl get pv
、最終的には永続ボリュームです
削除について。 PVまたはPVCを削除しても、何も起こりません。引き続きポッドに移動して、マップされたパスに移動できます。問題ない。ポッドは削除されないため、引き続きアクセスできます。ポッドが停止し、PVまたはPVCなしで再作成されると、エラーが発生します。