ラベルとアノテーション

ベストプラクティスのこの部分では、チャートの中でラベルとアノテーションを使用する際の ベストプラクティスについて議論します。

ラベルかアノテーションか?

メタデータの項目は以下の条件でラベルにすべきです:

  • リソースを特定するためにKubernetesによって使用される場合
  • システムに問い合わせをする目的でオペレータに公開すると便利な場合

例えば、オペレータが特定のチャートの全てのインスタンスを便利に見つけられるように、 ラベルとしてhelm.sh/chart: NAME-VERSIONを使うことを推奨します。

メタデータの項目が問い合わせの目的で使用されない場合、代わりにアノテーションを 使うべきでしょう。

Helmフックは常にアノテーションです。

標準的なラベル

次のテーブルはHelmチャートが使う、共通のラベルを定義しています。Helmそれ自体は 特定のラベルが存在することを必要としません。RECとマークされたラベルは使用を推奨され、 グローバルな一貫性のためにチャートに記述される べき です。 OPTとマークされた項目は任意です。これらは慣用句として、あるいは一般的に使用されているもの ではありますが、業務上頻繁に使用されるものではありません。

名前ステータス説明
app.kubernetes.io/nameRECこれはアプリ全体を反映した名前であるべきです。一般的には{{ template "name" . }}がこのために使われるでしょう。これは多くのKubernetesマニフェストで使用されるものであり、Helm特有のものではありません。
helm.sh/chartRECこれはチャート名とバージョンにすべきです: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}.
app.kubernetes.io/managed-byRECこれは常に{{ .Release.Service }}に設定するべきです。Helmで管理されているものを全て見つけるために使用されます。
app.kubernetes.io/instanceRECこれは{{ .Release.Name }}にすべきです。 これは、同じアプリケーションの異なるインスタンスを区別するのに役立ちます。
app.kubernetes.io/versionOPTアプリのバージョンで、{{ .Chart.AppVersion }}に設定できます。
app.kubernetes.io/componentOPTこれはアプリケーション内の違った役割示す共通のラベルです。例、 app.kubernetes.io/component: frontend
app.kubernetes.io/part-ofOPT 複数のチャートとソフトウェアが一体となって一つのアプリケーションを構成している場合のラベル。例えば、ウェブサイトを生成するデータベースとアプリケーションソフトウェアなど。これは、対応するトップレベルのアプリケーションにも設定することができます。

Kubernetesのapp.kubernetes.ioプレフィックスが付いたラベルについて、 Kubernetes documentationでより詳細な情報を見つけることができます。