コンテンツにスキップ

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