本文へスキップ
BecomeCoder

Kubernetesコース · 第6章 運用と実践 ― 現場で使うために · レッスン33

Helm ― Kubernetesのパッケージマネージャ

ローカル実施

導入

ここまで見てきたように、1つのアプリを動かすだけでも Deployment・Service・ConfigMap・Ingress…と YAML がどんどん増えます。しかも環境ごとに少しずつ値を変えたい。これを毎回手書きするのは大変です。Helm(ヘルム) は、この YAML 群をテンプレート化してひとまとめに管理する道具です。

説明

Helm は k8s の パッケージマネージャです。スマホのアプリストアや、Node の npm、Python の pip のように「必要なものを1コマンドで導入・更新・削除」できるようにします。Helm では、まとめられた YAML 一式を Chart(チャート) と呼びます。

Chart は次の2つでできています。

  • テンプレート … 値を穴あきにした YAML(例:replicas: {{ .Values.replicaCount }})。
  • values.yaml … その穴に入れるを書いたファイル。環境ごとに差し替えられる。
# 公開Chartのカタログ(リポジトリ)を登録
$ helm repo add bitnami https://charts.bitnami.com/bitnami

# PostgreSQLを1コマンドで導入(values.yamlの値で挙動を調整)
$ helm install my-db bitnami/postgresql --set auth.password=s3cr3t

# 値を変えて更新
$ helm upgrade my-db bitnami/postgresql --set primary.persistence.size=20Gi

# 直前の状態に戻す(切り戻し)
$ helm rollback my-db

{{ ... }} の穴に values の値が差し込まれてから k8s に適用される、というのが Helm の核です。

graph LR
    T["Chartのテンプレート<br/>replicas: {{ .Values.count }}"]
    V["values.yaml<br/>count: 3"]
    T --> R["値が埋まった完成YAML<br/>replicas: 3"]
    V --> R
    R -->|helm install| K["クラスタへ適用"]

特にありがたいのが既製 Chart の存在です。PostgreSQL・Redis・nginx といった定番ミドルウェアは、有志やベンダーが Chart を公開しています。自分で大量の YAML を書かなくても、helm install 一発で本番相当の構成を導入できます。

「同じ Chart + 環境ごとの values.yaml」という形は、第5章の「同じイメージ + 環境ごとの ConfigMap」とよく似ています。共通の型と、差分だけの値を分ける――これが k8s 運用に一貫して流れる考え方です。