Helm を使うと Kubernetes クラスタ上に簡単にアプリケーションなどをインストールできる.そして Helm Chart は Artifact Hub で確認できる.また values.yaml
と組み合わせれば Helm Chart のデフォルト設定を変更することもできる.しかし helm
コマンドを使って実行する場合,以下のようになり「宣言的に」管理できないという課題も残る.今回は Jenkins をサンプルとして使う.
$ helm install my-jenkins jenkins/jenkins --version 3.3.23 -f values.yaml
Helmfile とは ⎈
そこで Helmfile を紹介する💡Helmfile を使うと helm
コマンドを実行するときの設定を YAML で「宣言的に」管理できるようになる.現在もアクティブ開発されていて利用実績も多そう.今回は Helmfile を試していく!
前提として helmfile
コマンドを準備しておく.今回は Homebrew を使う.また helmfile diff
コマンドを使うこともあるため helm-diff も追加でインストールしておく.それにしても v0.140
ってスゴイ👀
$ brew install helmfile $ helm plugin install https://github.com/databus23/helm-diff $ helmfile version helmfile version v0.140.0
Helmfile に入門する ⎈
Helmfile では,以下のように helmfile.yaml
を作るところから開始する.helm
コマンド的には helm install my-jenkins jenkins/jenkins --version 3.3.23 -f values.yaml
と同じ意味になる.サンプルとして values.yaml
も載せておく.今回は serviceType
と servicePort
を変更する.
📁 helmfile.yaml
releases: - name: my-jenkins chart: jenkins/jenkins version: 3.3.23 values: - values.yaml
📁 values.yaml
controller: serviceType: NodePort servicePort: 8888
さっそく helmfile apply
コマンドを使って Helm Chart をインストールする.
$ helmfile apply (中略) UPDATED RELEASES: NAME CHART VERSION my-jenkins jenkins/jenkins 3.3.23
すぐに Jenkins にアクセスできるようになる.画面右下に書いてある通り Jenkins 2.289.1 になっていた.
Helm Chart を更新する ⎈
次に Helm Chart を更新する.以下のように helmfile.yaml
で version: 3.3.23
→ version: 3.4.1
にする.
releases: - name: my-jenkins chart: jenkins/jenkins version: 3.4.1 values: - values.yaml
実行をする前に helmfile diff
コマンドを使って差分を確認することもできる.今回はバージョン間の差が少なかった.
$ helmfile diff Comparing release=my-jenkins, chart=jenkins/jenkins (中略) default, my-jenkins, StatefulSet (apps) has changed: # Source: jenkins/templates/jenkins-controller-statefulset.yaml apiVersion: apps/v1 kind: StatefulSet metadata: name: my-jenkins namespace: default labels: "app.kubernetes.io/name": 'jenkins' - "helm.sh/chart": "jenkins-3.3.23" + "helm.sh/chart": "jenkins-3.4.1" "app.kubernetes.io/managed-by": "Helm" "app.kubernetes.io/instance": "my-jenkins" "app.kubernetes.io/component": "jenkins-controller" (中略)
もう1度 helmfile apply
コマンドを実行するとすぐに更新される!簡単!
$ helmfile apply (中略) UPDATED RELEASES: NAME CHART VERSION my-jenkins jenkins/jenkins 3.4.1
1度削除をしておく.
$ helmfile delete DELETED RELEASES: NAME my-jenkins
Helmfile で複数環境を作る ⎈
もう少し Helmfile の良さを試していく.Helmfile では production
や staging
など「複数環境」を作ることができる.helmfile.yaml
に以下のように environments
を設定して {{ .Environment.Name }}
で参照することができる.
📁 helmfile.yaml
environments: development: staging: production: releases: - name: my-jenkins chart: jenkins/jenkins version: 3.4.1 values: - values-{{ .Environment.Name }}.yaml
そして values-production.yaml
や values-staging.yaml
など,環境ごとに values.yaml
を用意しておく.今回試す values-staging.yaml
では servicePort
を 8889
に変えた.
$ tree . . ├── helmfile.yaml ├── values-development.yaml ├── values-production.yaml └── values-staging.yaml 0 directories, 4 files
📁 values-staging.yaml
controller: servicePort: 8889
さっそく -e
オプションを使って staging
環境を作る.指定した通り servicePort
も 8889
になっている.便利!
$ helmfile -e staging apply (中略) UPDATED RELEASES: NAME CHART VERSION my-jenkins jenkins/jenkins 3.4.1 $ kubectl describe services my-jenkins | egrep '^Port:' Port: http 8889/TCP
まとめ ⎈
今回は Helmfile に入門した.Helmfile にはまだ他にも機能があるため引き続き試していくぞー!