コンテンツにスキップ

コマンド@Helmfile

はじめに

本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。


01. helmfileコマンド

globalオプション

▼ オプション無し

使用する helmfile.d ディレクトリ下にある helm.yaml ファイルを再帰的に使用する。

# helmfile.dディレクトリ配下を再帰的に読み込む。
$ helmfile <サブコマンド>

▼ -e

Helmリリース対象の実行環境名 (dev、stg、prd) を設定する。

$ helmfile -e prd <コマンド>

*例*

$ helmfile -e prd diff
$ helmfile -e prd apply

▼ -f

使用する helmfile.yaml ファイルを指定する。

$ helmfile -e prd -f ./helmfile.yaml <コマンド>

▼ --interactive

コマンドの実行前の確認を要求する。

$ helmfile -e prd --interactive destroy

...

Do you really want to delete?
  Helmfile will delete all your releases, as shown above.

 [y/n]:

▼ --set

$ helmfile -e prd -f helmfile.yaml apply --set region=tokyo
{{.Values.region}}


apply

▼ apply

まず helmfile diff コマンドを実行することにより、この時に差分があれば、helmfile sync コマンドを実行する。

helmfile sync コマンドとは異なり、Helmリリース間に差分がないと、リビジョンは更新されない。

注意点として、Helmの使用と同様に、CRDのマニフェストは作成できるが変更できない。

$ helmfile -e prd apply

Upgrading release=foo-release, chart=./charts/foo
Release "foo-release" has been upgraded. Happy Helming!
NAME: foo-release
LAST DEPLOYED: Wed Jun  1 13:53:57 2022
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None

Listing releases matching ^foo-release$
foo-release 2022-06-01 13:53:57.271186378 +0900 JST deployed foo-release-0.0.1 0.0.1

UPDATED RELEASES:
NAME                CHART                VERSION
foo-release         ./charts/foo         0.0.1

▼ --skip-crds

CRDの作成をスキップする。

kubectl apply コマンドでCRDを作成した場合に役立つ。

注意点として、CRDの更新はHelmがサポートしていないため、あくまで作成をスキップする。

$ helmfile -e prd apply --skip-crds

▼ --skip-diff-on-install

helmfile apply コマンド時に helmfile diff コマンドを実行しない。

$ helmfile -e prd apply --skip-diff-on-install


destroy

▼ destroyとは

インストール済みの全てのチャートをアンインストールする。

CRDも削除する。

$ helmfile -e prd destroy

▼ 特定のHelmリリースのみ destroy したい

helmfile コマンドで複数のHelmリリースを一緒に管理している場合、特定のHelmリリースのみ destroy できない。

代わりに、helm uninstall コマンドで特定のHelmリリースを削除する。

$ helm uninstall <Helmリリース名>

# 削除したHelmリリースのみが差分として出力される
$ helmfile -e prd diff


list

▼ list

Helmfileでインストールしたチャートの一覧を取得する。

$ helmfile list

NAME          NAMESPACE      ENABLED   LABELS   CHART              VERSION
foo-chart     foo-namespace  true               charts/foo-chart   1.0.0
bar-chart     bar-namespace  true               charts/bar-chart   1.0.0
baz-chart     baz-namespace  true               charts/baz-chart   1.0.0


diff

▼ diffとは

全てのHelmリリースに対して、helm-diffプラグインを実行する。

helm-diffプラグインでは、前回のHelmリリースと、今回の helm upgrade --dry-run コマンドの差分を取得する。

$ helmfile -e prd diff

▼ --debug

オプションの無い helmfile diff では、以下の出力になってしまう。

  • Secretに出力された値がエンコードされてしまっている。
  • helm upgrade --dry-run コマンドのどの段階でエラーになったかがわからない。

--debug オプションであれば、これらを確認できる。

$ helmfile -e prd --debug diff

▼ 色付け

helmfile diff コマンドでは、差分を色付けできる。

ただ、バージョンによって機能しないことがあるため、その場合は明示的に HELM_DIFF_COLOR 変数を有効化する。

$ HELM_DIFF_COLOR=true helmfile -e prd diff

▼ grepとの組み合わせ

マニフェストの差分が多すぎる場合、先にどのリソースへ変更があるのかを把握したほうがよい。

grep コマンドを使用して、差分のあるリソースやファイルを確認しておく。

$ helmfile -e prd diff | grep kind

# 差分のあるマニフェストのkindキーのみを取得する。
kind: Service
kind: Deployment
kind: PersistentVolume
$ helmfile -e prd diff | grep Source

# 差分のあるマニフェストのkindキーのみを取得する。
Source: project/manifests/service.yaml
Source: project/manifests/deployment.yaml
Source: project/manifests/persistent-volume.yaml


sync

▼ syncとは

全てのHelmリリースに関して、helm upgrade --install コマンドを実行する。

helmfile apply コマンドとは異なり、Helmリリース間に差分がなくとも、リビジョンを更新する。

注意点として、Helmの使用と同様に、CRDのマニフェストは作成できるが変更できない。

$ helmfile -e prd sync


template

▼ templateとは

全てのHelmリリースに関して、helm template コマンドを実行する。

$ helmfile -e prd template

▼ --include-crds

CRDも含めて、helm template コマンドを実行する。

$ helmfile -e prd template --include-crds


write-values

▼ write-valuesとは

個人的に感動したコマンド。helmfile コマンドの実行で使用される values ファイルを、ファイルに書き出す。

複数の values ファイルを使用している場合に、これらに同じキーがあると、後に読み込まれた values ファイルが優先されるようになっている。

この時に、helmfile write-values コマンドを使用すると、優先された値で定義された values ファイルを確認できる。

$ helmfile -e prd -f ./helmfile.yaml write-values

# helmfile.yamlファイルのディレクトリ以下に、ディレクトリとファイルが生成される。
Writing values file foo-77cab19b/foo.yaml