コンテンツにスキップ

コマンド@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とは

事前に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