Helm 3.0 - 11 / Charts
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 リソースがレンダリングされないため注意する。
続きはまた明日
長くなってきたので一旦ここまで。