Helm 3.0 - 11 / Charts

Page content

Helm3について その11

気がつけば Helm 3.0.1がリリースになってた。

3.0.2の dot releaseは bug fixのみ。3.1.0の minor version upは 後方互換性を失わない機能拡張有りと明言されてたので、きっとBug Fixのみ。

というわけで、今日はここCharts

改めてチャートとは

Kubernetesリソース群(manifest files)をまとめた物。ある単一サービスだったり、大規模なアプリケーションだったりまで含められる。

チャートは決められたディレクトリ構造に格納され、バージョン管理されたアーカイブ(PACKAGE-VERSION.tar.gz)としてデプロイされる。

チャートのディレクトリ構造

./
├── Chart.yaml                      # (Reserved) チャート情報を入れたファイル
├── LICENSE                         # (Optional) ライセンス情報
├── README.md                       # (Optional) ユーザに読んで欲しい情報
├── charts/                         # (Optional) 依存するチャートを格納するフォルダ
├── crds/                           # (Optional) Custom Resource Definitionsを格納するフォルダ
├── templates/                      # (Reserved) リソースのテンプレートを格納するフォルダ
│   ├── NOTES.txt                   # (Optional) リリースの情報等を記入したテキストファイル。install直後と helm statusでレンダリング結果が表示される。
│   ├── _helpers.tpl                # (Any) ヘルパーテンプレート。直接 Kubernetes リソースは作らないが、他のテンプレートのパーツを提供する。
│   ├── k8s-resouces.yaml           # (Any) Kubernetes のリソースを作り出すテンプレートファイル
│   └── tests/                      # (Any) リリースのテスト用ジョブテンプレートを格納するフォルダ
│       └── test-jobs.yaml          # (Any) テスト用のジョブテンプレートファイル
├── values.yaml                     # (Reserved) 変更可能な値一覧を記入したファイル
└── values.yaml.scema.json          # (Optional) values.yamlファイルのスキーマ
  • Reservedは Helmが予約している名前なので変更不可
  • Optionalは Helmが予約している名前なので変更不可。必要なら作る
  • Anyは ユーザが任意でファイル名を付けて適宜作成

Chart.yamlファイル

必須フィールド

apiVersion: チャートのAPIバージョン
name: チャートの名前
version: SemVer 2によるバージョン表記

任意フィールド

kubeVersion: SemVerレンジ表記による互換性のあるKubernetes Version
description: 一言でチャートを説明
type: チャートのタイプ
keywords:
  - キーワードリスト
home: https://ホームページURL
sources:
  - https://ソースコードのURLリスト
dependencies: # 依存するチャートのリスト
  - name: チャートの名前
    version: チャートのバージョン
    repository: チャートレポジトリのURL
    alias: チャートの別名(Optional)
maintainers: # メンテナのリスト
  - name: メンテナの名前
    email: メンテナのメールアドレス
    url: メンテナのURL
icon: アイコンのリソース(.pngか .svgファイル)の URL
appVersion: アプリケーションのバージョン SemVerじゃなくても良い
deprecated: このチャートがdeprecatedなら trueで設定する

その他のフィールドは警告等のメッセージを出さずに無視される。

Versioning

基本的に SemVer 2標準 でバージョンを定義する必要がある(SemVerの Pre Releaseや Build情報等がついていても良い)

appVersionだけは例外で アプリケーション都合で付けられたバージョン番号を記入しておけば良い。appVersionは チャートの管理上は使われておらず、単なる情報として記載する。

従来のHelmと違って レポジトリ内のパッケージファイルは パッケージ名+バージョン(+アーカイブ拡張子) で認識されるので、ちゃんとつける事。

apiVersion

v2がHelm3の標準。この場合は Helm3以上が必須なチャートという事になる。

従来互換なら v1

変更点は2つ。

依存チャートを requirements.yamlに書くのがv1、Chart.yamlに書くのがv2

typeは applicationと libraryの2種類があるが、libraryがサポートされたのが v2

Deprecating

チャートがもはや管理されていない状況になったら Deprecatedとして markしておく必要がある。

最新Versionが deprecatedとして markされた場合、以前のバージョンを含めて全てのチャートが deprecatedとして扱われる。

一般的に stableなチャートとして扱われる kubernetes/charts プロジェクトでは Deprecatedとする場合の workflowが定義されているので それに従う事

type

単体で アプリケーションとして利用出来るチャートは application として定義する。

リリースされるリソースを持たない、他のチャートからパーツとして利用されることを前提としているチャートは library として定義する。

application チャートの typeを libraryに変更した場合、それに含まれる K8s リソースがレンダリングされないため注意する。

続きはまた明日

長くなってきたので一旦ここまで。