web-dev-qa-db-ja.com

リリースされた永続ボリュームをどうするか?

TL; DR。 PVCを削除した後にデータにアクセスする方法と、PVCを削除した後にPVが消えない理由について、私は迷っています。

私が取っている手順:

  1. gCEに手動でディスクを作成しました:

    gcloud compute disks create --size 5Gi disk-for-rabbitmq --zone europe-west1-b
    
  2. 走った:

    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
    
  3. 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 docsDelete再利用ポリシーについて言っていることではないでしょうか?

ここで、PVのデータへのアクセスを回復するためにPVCを再作成しようとすると、次のようになります。

$ kubectl apply -f /tmp/pv-and-pvc.yaml
persistentvolume "pv-for-rabbitmq" configured
persistentvolumeclaim "pvc-for-rabbitmq" created
$

私はまだpvsでこれを取得します。 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
$

...そしてpvcsでこれを取得します:

$
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のデータへのアクセスを回復するにはどうすればよいですか?

15
gmile

あなたは、PVとPVCがより関連していると考えて、典型的な誤解で動いています。

永続ボリューム:K8では、このリソースには多くのオプションがあります。たとえば、hostPathは、ポッドが実行されているノードから指定されたサイズを予約し、それを両方の目的のパスにマップします。ポッドとノード。

永続ボリュームの要求:PVC、特にGKEでは、Google Cloud Platformに物理永続ディスクを作成し、それをポッドが実行されているノードにセカンダリディスクとして接続します。したがって、この主張はクラウドプロバイダー固有のものです。

注:ディスクを手動で作成する必要はありません。申し立てを作成し、何が起こるかを確認してください。しばらく時間を与える必要がありますが、最終的にはステータスがBOUNDになるはずです。これは、永続ディスクが作成され、接続され、使用できるようになることを意味します。

もしあなたがそうするなら df -h、接続されたデバイスとして表示され、kubectl get pv、最終的には永続ボリュームです

削除について。 PVまたはPVCを削除しても、何も起こりません。引き続きポッドに移動して、マップされたパスに移動できます。問題ない。ポッドは削除されないため、引き続きアクセスできます。ポッドが停止し、PVまたはPVCなしで再作成されると、エラーが発生します。

0
suren