Helm
Kubernetes用のパッケージマネージャ。
テンプレート言語で.yaml
を書ける。
公式ページ
https://helm.sh/
GitHub
https://github.com/helm/helm
Qiitaの日本語記事:
Kubernetes: パッケージマネージャHelm
導入
インストール
管理者権限でPowerShellを立ち上げて実行。
choco install kubernetes-helm
初期化
helm init --max-history 200
履歴データが大量にならないために、--max-history
を指定することが推奨されている。
コマンド
helm create
チャートを作成する。
helm create [チャート名]
helm install
チャートをインストールする。
# 最新のチャートを入れるために更新する
helm repo update
# 公式チャートからインストール
# ex) helm install stable/mysql
helm install [チャート名]
# `--name`オプションでリリース名を指定できる
helm install --name [リリース名] [チャート名]
# ローカルのチャートをインストールする
# ex) helm install --name hoge .
helm install --name [リリース名] [チャートのパス]
# 指定したネームスペースがなければ作る
helm install --name [リリース名] --namespace=[ネームスペース名] [チャートのパス]
チャートをインストールするたびに新しいリリースが作成され、kube-system
ネームスペース内のConfigMapsに格納されます。
--name
オプションを指定しない場合はランダムな名前でリリースが作成されるので、基本的に指定したほうが良いです。
高度な使い方
--node-selectors
--override
--output
helm init --output json
helm get -h
Helmコマンドのヘルプを表示する。
helm list
リリースの一覧を取得する。
helm list
# アンインストールされているリリースも表示
helm list -all
helm delete
リリースをアンインストールする。
helm delete [リリース名]
リリースのアンインストールは、リリースを完全に削除したわけではない。
次のコマンドによって状態を取得したり、ロールバックすることができる。
# リリースの状態を取得
helm status [リリース名]
# アンインストールしたリリースを復活
helm rollback [リリース名]
# リリースを完全に削除
helm delete --purge [リリース名]
リリースを完全に削除するにはhelm delete --purge [リリース名]
を実行してください。
helm template
テンプレートを展開したyamlを出力する。
# ex) helm tempalte .
helm template [チャートのパス]
# 特定のテンプレートのみ出力する
helm template . -x tempaltes/app.yaml
スニペット
テンプレートyamlからデプロイメント名を取得
brew install python
helm template -f deploy/value.yaml deploy
すべてのリリースを完全に削除する
helm del --purge $(helm ls -q)
既存のリリースを削除してインストールしなおす
helm del --purge [リリース名]; helm install --name [リリース名] --namespace [ネームスペース名] [チャートのパス]
テンプレートをファイル単位で指定してデプロイ
# ex) helm template . -x templates/app.yaml | kubectl apply -f -
helm template [チャートのパス] -x [テンプレートのファイルパス] | kubectl apply -f -
以下の警告がでるが無視して問題ない。
Warning: kubectl apply should be used on resource created by either kubectl create --save-config or kubectl apply
テンプレート
チャートのディレクトリ構成は次のようになる。
mychart/
Chart.yaml
values.yaml
charts/
templates/
...
次のコマンドでチャートのひな形を生成する。
helm create mychart
cd mychart
# ゼロから作業するときは最初に生成されたtemplatesを消す
rm -fr templates/*.*
次のコマンドでtemplates
配下の.yaml
で定義したリソースをまとめて生成できる。
helm install .
# release nameを指定する場合
helm install --name my-release .
# 既存のチャートを削除して再生成
helm install . --name my-release --replace
テンプレートの.yaml
を編集したら次のコマンドでコンテナを作りなおす。
helm del hoge --purge
helm install . --name hoge
IF/ELSE
{{- if .Values.hoge }}
type: NodePort
{{- else if .Values.hoge }}
type: ClusterIP
{{- else }}
type: ClusterIP
{{- end }}
Values
# values.yamlの値を入れる
name: {{ .Values.app.name }}
# 値がないときのデフォルト値を設定する
name: {{ .Values.app.name | default "hoge"}}
--set
を使うと、values.yamlの設定値を上書きできる。
hoge=default
helm install --name hoge . --set hoge=123
空白の制御
https://helm.sh/docs/chart_template_guide/#controlling-whitespace
例えば、単なるIF文などを書くときに{{IF ~~~ }}
と書くと展開後にその行が空行になってしまう。
user:
{{ if eq .Values.hoge "aaa"}}
hoge: aaa
{{ end }}
user:
hoge: aaa
{{- IF ~~~ }}
のようにハイフンを書くとこの空白を取り除ける。
user:
{{- if eq .Values.hoge "aaa"}}
hoge: aaa
{{- end }}
user:
hoge: aaa
Functions
tpl
helmテンプレートを展開する。外部設定ファイルでhelmテンプレートを使いたいときに。
Springのapplication.ymlをテンプレートで書けるようにする例:
apiVersion: v1
kind: ConfigMap
metadata:
name: 'my-conf'
namespace: 'my-namespace'
data:
{{ (tpl (.Files.Glob "config/app/application.yml").AsConfig . ) | indent 2 }}
Ref:
https://helm.sh/docs/charts_tips_and_tricks/#using-the-tpl-function
FAQ
helm install
できなくなった
作業ディレクトリを変えたら新しい作業ディレクトリに移動してからhelm init
する。
helm init --upgrade
VSCode拡張
- vscode-helm
← Git Hub IntelliJ IDEA →