web-dev-qa-db-ja.com

GKEのHelmで動的にプロビジョニングされたPersistentVolumeをどのように再利用できますか?

PersistentVolumeClaimStorageClassを使用して、必要なsotrageを動的にプロビジョニングするヘルムチャートを展開しようとしています。これは期待どおりに機能しますが、次のようなワークフローを可能にする構成が見つかりません

helm delete xxx

# Make some changes and repackage chart

helm install --replace xxx

常にリリースを実行したくないので、将来の展開でストレージを再利用したいと考えています。

ストレージクラスをreclaimPolicy: Retainに設定するとディスクは保持されますが、helmはPVCを削除してそれらを孤立させます。ヘルムがPVCを削除しないようにPVCに注釈を付けると、この問題は修正されますが、インストールを実行するとエラーが発生します

Error: release xxx failed: persistentvolumeclaims "xxx-xxx-storage" already exists

実権を握ってリリースを管理するための基本的なことを誤解していると思います。おそらく、ボリュームはチャートでまったく作成されるべきではありません。

7
user3125280

PersistenVolumeClain 実際の PersistentVolume とポッドの間のマッピングを作成します。

PVに"helm.sh/resource-policy": keepアノテーションを使用することは、 documentation での注釈のため、最良のアイデアではありません。

注釈「helm.sh/resource-policy」:keepは、ヘルム削除操作中にこのリソースをスキップするようTillerに指示します。ただし、このリソースは孤立します。 Helmはそれを管理しなくなります。これは、すでに削除されているがリソースを保持しているリリースでhelm install --replaceを使用する場合に問題を引き起こす可能性があります。

リリースを削除した後にPVを手動で作成する場合、HelmはPVCを削除します。PVCは「利用可能」とマークされ、次のデプロイ時に再利用します。実際には、データを保持するためにPVCをクラスターに保持する必要はありません。ただし、常に同じPVを使用するには、 ラベルとセレクター を使用する必要があります。

ボリュームを保持して再利用するために、次のことができます。

  1. 例としてfor_app=my-appというラベルでPersistenVolumeを作成し、そのボリュームに「保持」ポリシーを次のように設定します。

apiVersion: v1 kind: PersistentVolume metadata: name: myappvolume namespace: my-app labels: for_app: my-app spec: persistentVolumeReclaimPolicy: Retain capacity: storage: 5Gi accessModes: - ReadWriteOnce

  1. HelmでPersistenVolumeClaim構成を変更します。ラベルfor_app=my-appが付いたPersistenVolumeのみを使用するためのセレクターを追加する必要があります。

apiVersion: v1 kind: PersistentVolumeClaim metadata: name: myappvolumeclaim namespace: my-app spec: selector: matchLabels: for_app: my-app accessModes: - ReadWriteOnce resources: requests: storage: 5Gi

したがって、アプリケーションは起動時に毎回同じボリュームを使用するようになります。

ただし、PVを使用しないようにするには、同じ名前空間内の他のアプリのセレクターを使用する必要がある場合があることに注意してください。

8
Anton Kostenko

実際、StateFulセットとVolumeClaimTemplatesを使用することをお勧めします: https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/

そこにある例は、それ自体が語るべきです。

0
Jacco Hoeve