コンテンツにスキップ

共通項目@Helm

はじめに

本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。


01. Helm の metadata.labels キー

Helm の metadata.labels キーとは

Helm を使用している場合に、Helm の情報を設定する。

Helm が設定してくれるため、開発者が設定する必要はない。


種類

キー 値の例 説明
charthelm.sh/chart foo-chart 使用しているチャート名を設定する。
release foo-releasefoo-application Helm リリース名、ArogoCD の Application 名を設定する。
heritage HelmTiller v3 の場合は Helmv2 の場合は Tiller になる。


02. Helm の metadata.annotation キー

meta.helm.sh キー

meta.helm.sh キーとは

Helm の helm install コマンドを使用して作成した Kubernetes リソースに付与される。

Helm の各リリースに紐づいており、別のリリースであれば、Kubernetes リソースを再作成することになる。

そのため、一部の Kubernetes リソースを別のチャートでリリースし直したい場合、Kubernetes リソース、カスタムリソース、スタムリソース定義の meta.helm.sh キーを手動で書き換える必要がある。

# CRDの場合
$ kubectl annotate --overwrite crd <CRD名> meta.helm.sh/release-namespace="<新しいNamespace>"
$ kubectl annotate --overwrite crd <CRD名> meta.helm.sh/release-name="<新しいリリース名>"

また反対に、特定の Kubernetes リソース (例:CRD) を Helm の管理外としたい場合、このキーを削除する必要がある。

$ kubectl annotate --overwrite crd <CRD名> meta.helm.sh/release-namespace-
$ kubectl annotate --overwrite crd <CRD名> meta.helm.sh/release-name-

補足として、ArgoCD を経由して Helm を使用する場合、内部的には kubectl apply コマンドと同様の処理を実行しているため、この meta.helm.sh キーはない。

▼ 種類

キー 値の例 説明
meta.helm.sh/release-name foo-release Helm のリリース名を設定する。これを削除すると、helm-diff で削除判定になっても、実際には削除されない。
meta.helm.sh/release-namespace foo-namespace helm install コマンド時の Namespace を設定する。これを削除すると、helm-diff で削除判定になっても、実際には削除されない。
meta.helm.sh/resource-policy keep Kubernetes リソース定義や CRD に付与することにより、 helm install コマンド時や helm uninstall コマンド時に、その再作成処理や削除処理をスキップする。これは、特に CRD に付与したほうがよい。公式チャートのアップグレード時に、特定のチャート内の Kubernetes リソースを別チャートに移行したい場合に役立つ。他に、Helm リリースのアンインストール時に特定の Kubernetes リソース (例:PersistentVolume) を残したい場合に役立つ。

CRD に meta.helm.sh/resource-policy キーを付与しておくと、helm destroy コマンド時に削除をスキップできる。

$ helm destroy <Helmリリース名>

...

Deleting argocd
These resources were kept due to the resource policy:
[CustomResourceDefinition] foo.io

...

$ kubectl get crd foo.io

foo.io    2023-01-22T06:08:21Z