Helm
https://helm.sh/img/helm.svg
Helm is the best way to find, share, and use software built for Kubernetes.
table: テクニカルターム
Chart パッケージのテンプレート
Helm Client CLI
Tiller k8s で稼働する Helm をデプロイするサーバー。k8s にデプロイする。V3 から廃止になった。
Release Chart をデプロイした単位
Repository リポジトリサーバー
Semver で管理する
組み込み変数
values.yaml
チャートの変数を設定する
デフォルトの空文字("" で問題ないが型ごとに明示的に分けている)
str: ""
int,bool: null
0 は nil として扱われることがあり期待通りの処理にならないことがあるので注意(以下で評価する)
kindIs "invalid" .Values.hoge
eq .Values.hoge nil
デフォルトの値は values.yaml で網羅されていると良さそう
template 内でも使用できるが
リスト型などはあると良い
サブチャートとグローバル変数
サブチャートの使い方
mychart/charts の中でチャートを作成する
Chart.yaml の dependencies に追加する
helm install 時、mychart/charts に subchart-${version}.tgz がインストールされて利用可能になる
values.yaml では、Values.subchart. プレフィックスをつけて変数を使う
Global Values の使い方
Values.global で全てのサブチャートに適用する変数を定義できる
_helpers.tpl で名前付きテンプレートを定義する慣習がある
再利用可能なパーツを定義する
_ で始まるファイルはマニフェストを出力しない慣習がある
code: (bash)
# pending のタスクが残ってしまった時に rollback する
helm -n namespace history myapp
helm -n namespace rollback 7
インストール
code: (bash)
# 後から読み込まれた方が優先される
helm install chart --values values.yaml --values values.override.yaml
チャート作成
code: (bash)
$ helm create mychart
$ tree mychart
mychart
├ ─ ─ Chart.yaml
├ ─ ─ charts
├ ─ ─ templates
│ ├ ─ ─ NOTES.txt
│ ├ ─ ─ _helpers.tpl
│ ├ ─ ─ deployment.yaml
│ ├ ─ ─ hpa.yaml
│ ├ ─ ─ ingress.yaml
│ ├ ─ ─ service.yaml
│ ├ ─ ─ serviceaccount.yaml
│ └ ─ ─ tests
│ └ ─ ─ test-connection.yaml
└ ─ ─ values.yaml
テンプレート作成
組み込み変数
関数
変数定義
range と組み合わせ
スコープに注意
Named template
Best Practices
General Convention
ケバブケース
Values
キャメルケース
ネスト構造は好まれない
安全に扱うために全ての階層でチェックが必要
型を明確にする
ユーザー目線
--set で上書きやすくする
リストの中身を複雑にしない
values.yaml
helm show values $CHART でデフォルト値を出力
書き方
デフォルトから個別に値を変更
アップデートしやすい。差分を追いやすい。
必要な箇所のみ記載
変更点がわかりやすい
記載していない場所は元の Values が使われる。
Templates
ファイル(my-example-configmap.yaml)
ファイル名はケバブケース
リソース名を含める
{{ define }} はグローバルにアクセス可能
_helpers.tpl
名前空間を含ませる
{{- define "nginx.fullname" }}
Json 形式の利用
リスト型などコードが見やすくなる
Dependencies
Labels and Annotations
ラベル
リソースを特定するためにKubernetesによって使用される場合
システムに問い合わせをする目的でオペレータに公開すると便利な場合
Pods and PodTemplates
CRD
RBAC
rbac.create: true がデフォルトが推奨
Versioning
Chart と Application でバージョニングする
Semver e.g.)
エコシステム
Reference
リポジトリのパス
パスワードなどランダムなものを自動的に作成して管理する方法
lookup 関数で存在しているか確認する
存在しない場合は、デフォルトでランダムに作成する
ArgoCD initial-admin-password は Helm に含まれていなかった。どうやって作っているんだろう🤔
ランダムな Secret を作成するために活用できそう
Memo
resources はデフォルトでは指定しない
ユーザーが意識的に設定することを推奨する
Minikube などあらゆる環境で動作可能性を上げるため