コンテンツにスキップ

コマンド@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]:


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