コンテンツにスキップ

共通項目@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