コマンド@Helm¶
はじめに¶
本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。
01. helm
コマンド¶
create¶
▼ createとは¶
指定したパスにチャートのサンプルファイルを作成する。
$ helm create <チャートへのパス>
destroy¶
▼ destroyとは¶
指定したHelmリリースでインストールされたチャートを削除する。
$ helm destroy <Helmリリース名>
Helmは、CRDを含むチャートのインストールはサポートしているが、アップグレードとアンインストールをサポートしていない。
そのため、helm destroy
コマンド時にはCRDを削除しない仕様になっている。
CRDは手動で削除する必要がある。
$ kubectl get crd
$ kubectl delete crd <CRD名>
dependency¶
▼ build¶
requirements.yaml
ファイルに定義された依存対象のサブチャートを、chart
ディレクトリ内にダウンロードする。
また、Chart.lock
ファイルを作成する。
$ helm dependency build
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "foo" chart repository
Update Complete. ⎈Happy Helming!⎈
Saving 1 charts
env¶
▼ env¶
Helmの環境変数を表示する。
$ helm env
# Helmのバイナリファイルの場所
HELM_BIN="/usr/local/bin/helm"
# CRDの性能制限
HELM_BURST_LIMIT="100"
# Helmのキャッシュファイルの場所
HELM_CACHE_HOME="/.cache/helm"
HELM_CONFIG_HOME="/.config/helm"
HELM_DATA_HOME="/.local/share/helm"
HELM_DEBUG="false"
HELM_KUBEAPISERVER=""
HELM_KUBEASGROUPS=""
HELM_KUBEASUSER=""
HELM_KUBECAFILE=""
HELM_KUBECONTEXT=""
HELM_KUBEINSECURE_SKIP_TLS_VERIFY="false"
HELM_KUBETOKEN=""
HELM_MAX_HISTORY="10"
HELM_NAMESPACE="default"
# Helmのプラグインの場所
HELM_PLUGINS="/.config/plugins"
# イメージ/チャートリポジトリの情報
HELM_REGISTRY_CONFIG="/.config/helm/registry.json"
HELM_REPOSITORY_CACHE="/.config/helm/repository"
HELM_REPOSITORY_CONFIG="/.config/helm/repositories.yaml"
get¶
▼ getとは¶
特定のHelmリリースに含まれるhelm template
コマンドの結果を取得する。
$ helm get <Helmリリース名>
history¶
▼ historyとは¶
指定したHelmリリースの履歴を取得する。
$ helm history <Helmリリース名>
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
<Helmリリース名> Wed Jan 01 12:00:00 2020 SUSPENDED foo-<バージョンタグ> <バージョンタグ> Initial install
<Helmリリース名> Wed Jan 01 12:00:00 2020 SUSPENDED foo-1.1.0 1.1.0 Rolled back to 1
<Helmリリース名> Wed Jan 01 12:00:00 2020 DEPLOYED foo-1.0.0 1.0.0 Upgraded successfully
install¶
▼ installとは¶
チャートなどを指定し、Kubernetesリソースとして作成する。
チャートへのパスを指定する以外にも、指定方法には種類がある。
$ helm install <Helmリリース名> <チャートへのパス>
パラメーター | 例 | 補足 |
---|---|---|
チャートへのパス | ./foo-chart |
|
<チャートレジストリ名>/<チャートリポジトリ名> |
foo-registry/foo-repository |
・https://zenn.dev/mikutas/articles/2ab146fa1ea35b |
チャートリポジトリURL | https://example.com/foo-chart |
|
<チャートリポジトリURL> <チャートレジストリ名>/<チャートリポジトリ名> |
https://example.com/foo-chart foo-registry/foo-repository |
|
チャートアーカイブへのパス | ./foo-chart-<バージョンタグ>.tgz |
values ファイルを使用する場合、values ファイルはチャートアーカイブ (.tgz 形式ファイル) の外にある必要がある。・https://helm.sh/docs/helm/helm_install/ |
▼ --disable-openapi-validation¶
チャートをインストールする時に、OpenAPIを使用したマニフェストの静的解析を無効化する。
特に、CRDのファイルサイズが大きすぎてインストールできない場合に使用する。
$ helm install --disable-openapi-validation <Helmリリース名> <チャートへのパス>
▼ --dry-run¶
Kubernetesに作成されるリソースのマニフェストを取得する。
作成する前に、チャートの設定が正しいか否かを確認できる。
$ helm install --dry-run <Helmリリース名> <チャートへのパス>
# Source: prd/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
...
▼ -f¶
指定したvalues
ファイル使用して、helm install
コマンドを実行する。
チャートのルートディレクトリに『values.yaml
』の名前でファイルが存在している場合、自動的に読み込まれる.
そのため、このオプションは不要である。
$ helm install <Helmリリース名> <チャートへのパス>
これ以外の名前の場合は、オプションによるvalues
ファイルの指定が必要になる。
なお、指定したvaluesファイルとは別に、チャートのルートディレクトリのvalues
ファイルも暗黙的に読み込まれていることに注意する。
このvalues
ファイルは、デフォルト値として使用される。
# デフォルト値として、チャートのルートディレクトリのvaluesファイルも暗黙的に読み込まれている
$ helm install <Helmリリース名> <チャートへのパス> -f foo-values.yaml
複数を指定することができ、同じ設定値がある場合は、より後に読み込んだvalues
ファイルの設定値を優先する。
同様にして、指定したvaluesファイルとは別に、チャートのルートディレクトリのvalues
ファイルも暗黙的に読み込まれていることに注意する。
# デフォルト値として、チャートのルートディレクトリのvaluesファイルも暗黙的に読み込まれている
$ helm install <Helmリリース名> <チャートへのパス> -f foo-values.yaml -f bar-values.yaml
▼ kube-context¶
helm
コマンドの向き先を指定して、helm install
コマンドを実行する。
# Minikubeの場合
$ helm install <Helmリリース名> <チャートリポジトリ名>/<チャート名> --kube-context minikube
# AWSの場合
$ helm install <Helmリリース名> <チャートリポジトリ名>/<チャート名> --kube-context <AWSアカウントID>.dkr.ecr.ap-northeast-1.amazonaws.com/prd-foo-eks-cluster
▼ --generate-name¶
リリース名を省略して、helm install
コマンドを実行する。
代わりに、ランダム値がリリース名になる。
$ helm install <チャートリポジトリ名>/<チャート名> --generate-name
▼ --force¶
既存のマニフェストを置き換える。
kubectl replace
コマンドに近い。
$ helm install <Helmリリース名> <チャートへのパス> -f foo-values.yaml --force
▼ --wait¶
作成したPodがReady状態になるまで、helm install
コマンドの完了を待機する。
$ helm install <Helmリリース名> <チャートへのパス> -f foo-values.yaml --wait
*例*
$ helm install foo-release . -f foo-values.yaml --wait
lint¶
▼ lintとは¶
チャートの構造の誤り (例:values
ファイルやChart.yaml
ファイルがあるか) を実行する。
例えば、以下ではエラーになっていない。
$ helm lint <チャートへのパス> -f foo-values.yaml
==> Linting foo-chart
[INFO] Chart.yaml: icon is recommended
[INFO] values.yaml: file does not exist
Error: 0 chart(s) linted, 0 chart(s) failed
例えば、以下ではエラーになっている。
$ helm lint <チャートへのパス> -f foo-values.yaml
==> Linting foo-chart
[ERROR] Chart.yaml: version is required
[INFO] Chart.yaml: icon is recommended
[ERROR] templates/: validation: chart.metadata.version is required
[ERROR] : unable to load chart validation: chart.metadata.version is required
Error: 1 chart(s) linted, 1 chart(s) failed
▼ -f¶
指定したvalues
ファイル使用して、helm lint
コマンドを実行する。
なお、指定したvaluesファイルとは別に、チャートのルートディレクトリのvalues
ファイルも暗黙的に読み込まれていることに注意する。
このvalues
ファイルは、デフォルト値として使用される。
# デフォルト値として、チャートのルートディレクトリのvaluesファイルも暗黙的に読み込まれている
$ helm lint <チャートへのパス> -f foo-values.yaml
==> Linting kubernetes
[INFO] Chart.yaml: icon is recommended
[INFO] values.yaml: file does not exist
1 chart(s) linted, 0 chart(s) failed
▼ --quiet¶
warning、danger、のみを検出するようにを設定する。
$ helm lint <チャートへのパス> --quiet -f foo-values.yaml
==> Linting .
[ERROR] ...
▼ --strict¶
warningでも終了コード1
(失敗) で終えるようにする。
また、values
ファイルの値がHelmテンプレートで使用されていない場合に、これを警告する。
執筆時点 (2023/05/26) でまだリリースされていない。
$ helm lint <チャートへのパス> --strict -f foo-values.yaml
list¶
▼ listとは¶
Helmリリースの一覧を取得する。
チャートは、バージョンによって中身のyaml
ファイルに差があるため、ここでチャートのバージョンを確認すると良い。
$ helm list
NAME VERSION UPDATED STATUS CHART
<Helmリリース名> 1 Wed Jan 01 12:00:00 2020 DEPLOYED foo-chart-<バージョンタグ> # <-- チャートのバージョンがわかる。
package¶
▼ packageとは¶
チャートからチャートアーカイブ (.tgz
形式ファイル) を作成する。
または、すでにアーカイブが存在する場合は更新する。
アーカイブ名にはバージョンが設定される。
複数のチャートを指定できる。
$ helm package <fooチャートへのパス> <barチャートへのパス> <bazチャートへのパス>
Successfully packaged chart and saved it to: /foo-<バージョンタグ>.tgz
▼ -d¶
チャートアーカイブ (.tgz
形式ファイル) の作成先のディレクトリを指定しつつ、helm package
コマンドを実行する。
$ helm package <チャートへのパス> -d <作成するチャートアーカイブのパス>
plugin¶
▼ install¶
プラグインをインストールする。
$ helm plugin install https://github.com/jkroepke/helm-secrets --version 1.0.0
▼ list¶
インストール済みのプラグインの一覧を表示する。
$ helm plugin list
NAME VERSION DESCRIPTION
diff 3.4.2 Preview helm upgrade changes as a diff
secrets 3.7.0 plugin provides secrets values encryption for Helm charts secure storing
▼ uninstall¶
指定したプラグインをアンインストールする。
$ helm plugin uninstall secrets
pull¶
▼ pullとは¶
指定したチャートリポジトリからチャートをチャートアーカイブ (.tgz
形式ファイル) でプルする。
チャートアーカイブは、チャートに解凍した上で使用した方がよい。
▼ -d¶
チャートのプル先のディレクトリを指定して、helm pull
コマンドを実行する。
$ helm pull <チャートリポジトリURL> -d <プル先のディレクトリ>
OCIリポジトリからもプルできる。
# AWSの場合
$ helm pull oci://<AWSアカウントID>.dkr.ecr.ap-northeast-1.amazonaws.com/<チャート名>
▼ --version¶
チャートのバージョンを指定して、helm pull
コマンドを実行する。
$ helm pull <チャートリポジトリURL> --version <バージョンタグ>
push¶
▼ pushとは¶
チャートリポジトリにチャートをプッシュする。
プッシュする前にチャートをチャートアーカイブ (.tgz
形式ファイル) に圧縮しておく必要がある。
$ helm push <チャートアーカイブへのパス> <チャートリポジトリURL>
# AWSの場合
$ aws ecr get-login-password --region ap-northeast-1 | helm registry login --username AWS --password-stdin <AWSアカウントID>.dkr.ecr.ap-northeast-1.amazonaws.com
$ helm push <チャートアーカイブへのパス> oci://<AWSアカウントID>.dkr.ecr.ap-northeast-1.amazonaws.com
registry¶
▼ registryとは¶
チャートリポジトリを操作する。
▼ login¶
チャートリポジトリにログインする。
$ <チャートリポジトリのプロバイダーによる> | helm registry login \
--username <ユーザー名> \
--password-stdin \
<チャートリポジトリ名>
# AWSの場合
$ aws ecr get-login-password --region ap-northeast-1 | helm registry login \
--username AWS \
--password-stdin \
<AWSアカウントID>.dkr.ecr.ap-northeast-1.amazonaws.com
repo¶
▼ repoとは¶
チャートリポジトリを操作する。
▼ add¶
helm
コマンドの実行環境にチャートリポジトリを登録する。
$ helm repo add <チャートリポジトリ名> <チャートリポジトリURL>
"<チャート名>" has been added to your repositories
登録していないチャートにhelm
コマンドでアクセスしようとするとエラーになってしまう。
$ helm show all <チャートリポジトリ名>
Error: failed to download "<チャートリポジトリ名>"
▼ index¶
チャートリポジトリのメタデータが設定されたindex.yaml
ファイルを作成する。
$ helm repo index <チャートへのパス>
*例*
$ helm repo index .
▼ list¶
事前にhelm repo add
コマンドで追加しておいたチャートリポジトリの一覧を取得する。
$ helm repo list
NAME URL
<チャートリポジトリ名> https://example.com/charts
▼ remove¶
事前にhelm repo add
コマンドで追加しておいたチャートリポジトリを削除する。
$ helm repo remove <チャート名>
"<チャートリポジトリ名>" has been removed from your repositories
*例*
$ helm repo remove foo-chart
▼ update¶
事前にhelm repo add
コマンドで追加しておいたチャートリポジトリの情報を更新する。
チャートを特定のバージョンにアップグレードする前にリポジトリの情報を更新しておく必要がある。
$ helm repo update <チャートリポジトリ名>
Hang tight while we grab the latest from your chart repositories...
...
Update Complete. ⎈Happy Helming!⎈
search¶
▼ searchとは¶
事前にhelm repo add
コマンドで追加しておいたチャートリポジトリを検索する。
▼ hub¶
チャートリポジトリをキーワードで検索する。
$ helm search hub <キーワード>
URL CHART VERSION APP VERSION DESCRIPTION https://artifacthub.io/example.com <バージョンタグ> <バージョンタグ> This is foo chart
<OCIリポジトリURL> <チャートバージョン> <アプリケーションのHelmリリースバージョン> <説明文>
show¶
▼ show¶
チャートの情報を取得する。
▼ all¶
チャート内の全てのマニフェストを取得する。
$ helm show all <チャート名>
*例*
$ helm show all foo-chart
▼ chart¶
チャートのChart.yaml
ファイルを取得する。
$ helm show chart <チャート名>
apiVersion: v2
appVersion: <バージョンタグ>
maintainers:
- name: hiroki hasegawa
name: foo-chart
type: application
version: <バージョンタグ>
▼ values¶
チャートに渡せるパラメーターをvalues
ファイルとして取得する。
values
ファイル本体は、チャートリポジトリで参照できる。
$ helm show values <チャート名>
# valuesファイルが表示される。
$ helm show values foo-chart
template¶
▼ templateとは¶
Kubernetesに作成されるリソースのマニフェストを出力する。
yaml
ファイルにリダイレクトするようにすると良い。
# チャート名をreleasesとしている場合
$ helm template . -f foo-values.yaml >| releases.yaml
▼ -f¶
指定したvalues
ファイル使用して、helm template
コマンドを実行する。
なお、指定したvaluesファイルとは別に、チャートのルートディレクトリのvalues
ファイルも暗黙的に読み込まれていることに注意する。
このvalues
ファイルは、デフォルト値として使用される。
# デフォルト値として、チャートのルートディレクトリのvaluesファイルも暗黙的に読み込まれている
$ helm template . -f foo-values.yaml >| <出力先ファイル>
*例*
$ helm template . -f foo-values.yaml >| release.yaml
*例*
CI上でマニフェストの静的解析を実行したい場合に、CIの実行環境に暗号化キーの使用許可を付与する必要はない。
helm template
コマンドに暗号化されたYAMLファイルをそのまま渡すと、暗号化ツール (例:SOPS) を介さない。
# 暗号化ツールを使用せずにSecretを作成する
$ helm template . -f foo-values.yaml -f <暗号化されたYAMLファイル> >| <出力先ファイル>
# 暗号化されたYAMLファイル
foo: ***
helm template
コマンドは、暗号化されたYAMLファイルを単なるYAMLファイルとして認識し、暗号化されたままマニフェストを展開する。
apiVersion: v1
kind: Secret
metadata:
name: foo-secret
type: Opaque
data:
# 暗号化されたままで展開される
foo: ***
▼ -set¶
デフォルト値を上書きし、helm template
コマンドを実行する。
$ helm template . -f foo-values.yaml -set foo.test=TEST >| release.yaml
▼ --include-crds¶
CRDを含めて、マニフェストを出力する。
$ helm template . -f foo-values.yaml --include-crds >| release.yaml
▼ --show-only¶
特定のディレクトリのテンプレートを出力する。
$ helm template . -f foo-values.yaml --show-only ./templates/bar
uninstall¶
▼ uninstallとは¶
Helmリリースを指定し、そのHelmリリースでインストールされたKubernetesリソースを削除する。
$ helm uninstall <Helmリリース名>
*例*
$ helm uninstall foo-release
upgrade¶
▼ upgradeとは¶
指定したバージョンのチャートを使用して、Helmリリースをアップグレードする。
Helmは、CRDを含むチャートのインストールはサポートしているが、アップグレードとアンインストールをサポートしていない。
そのため、helm upgrade
コマンド時にはCRDのインストールを実行する仕様になっている。
▼ --atomic¶
helm upgrade
コマンドが正常に完了しなかった場合に、自動的にロールバックする。
$ helm upgrade --atomic <Helmリリース名> <チャートへのパス> -f foo-values.yaml
*例*
$ helm template --atomic . -f foo-values.yaml >| release.yaml
▼ --install¶
新しいリビジョン番号を作成し、インストール済のHelmリリースをアップグレードする。
$ helm upgrade --install <Helmリリース名> <チャートへのパス> -f foo-values.yaml
Release "<Helmリリース名>" has been upgraded. Happy Helming!
NAME: <Helmリリース名>
LAST DEPLOYED: Sat Jan 1 12:00:00 2022
NAMESPACE: default
STATUS: deployed
REVISION: 3 # <---- リビジョン番号が増えていく
TEST SUITE: None
▼ --force¶
既存のマニフェストを置き換える。
kubectl replace
コマンドに近い。
$ helm upgrade <Helmリリース名> <チャートへのパス> -f foo-values.yaml --force
▼ --skip-crds¶
--install
オプションを有効化した上で、--skip-crds
オプションを有効化する。
これにより、helm upgrade
コマンド時にCRDのインストールをスキップし、非CRDのみをインストールできる。
なお、CRDのアップグレードはHelmの仕様上必ずスキップする。
$ helm upgrade --skip-crds --install <Helmリリース名> <チャートへのパス> -f foo-values.yaml
*例*
helm upgrade
コマンド時に、CRDの作成をスキップし、非CRDのみをインストールする。
$ helm upgrade --skip-crds --install foo-release . -f foo-values.yaml >| release.yaml
▼ --wait¶
作成したPodがReady状態になるまで、helm upgrade
コマンドの完了を待機する。
$ helm upgrade <Helmリリース名> <チャートへのパス> -f foo-values.yaml --wait
*例*
$ helm upgrade foo-release . -f foo-values.yaml --wait