Helm

Kubernetes のパッケージマネージャーで、アプリケーションのデプロイをテンプレート化して管理する

Kubernetesパッケージ管理

Helm とは

Helm は Kubernetes のパッケージマネージャーで、複数の Kubernetes マニフェスト (Deployment, Service, ConfigMap 等) を 1 つの Chart としてパッケージ化し、テンプレート変数で環境ごとの設定を切り替えてデプロイする。npmNode.js のパッケージマネージャーであるように、Helm は Kubernetes のパッケージマネージャーだ。

Chart の構造

Helm Chart はディレクトリ構造で管理される。Chart.yaml にメタデータ、values.yaml にデフォルトのパラメータ値、templates/ 配下に Kubernetes マニフェストのテンプレートを配置する。デプロイ時に values.yaml の値がテンプレートに注入される。

my-app/
  Chart.yaml          # Chart のメタデータ
  values.yaml         # デフォルト値
  templates/
    deployment.yaml   # テンプレート
    service.yaml
    ingress.yaml

テンプレート

テンプレートの例を示す。

# templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Release.Name }}-app
spec:
  replicas: {{ .Values.replicaCount }}
  template:
    spec:
      containers:
        - name: app
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
          resources:
            requests:
              cpu: {{ .Values.resources.requests.cpu }}
              memory: {{ .Values.resources.requests.memory }}
# values.yaml (デフォルト)
replicaCount: 2
image:
  repository: myapp
  tag: latest
resources:
  requests:
    cpu: 100m
    memory: 128Mi

環境ごとの values

環境ごとの values の例を示す。

# values-prod.yaml
replicaCount: 5
image:
  tag: "1.2.3"
resources:
  requests:
    cpu: 500m
    memory: 512Mi
# dev 環境
helm install my-app ./my-app

# prod 環境 (values-prod.yaml で上書き)
helm install my-app ./my-app -f values-prod.yaml

helm コマンド

helm コマンドの例を示す。

# インストール
helm install my-app ./my-app

# アップグレード
helm upgrade my-app ./my-app

# ロールバック
helm rollback my-app 1

# アンインストール
helm uninstall my-app

# リリース一覧
helm list

# テンプレートのレンダリング確認 (ドライラン)
helm template my-app ./my-app

公開 Chart の利用

公開 Chart の利用の例を示す。

# リポジトリの追加
helm repo add bitnami https://charts.bitnami.com/bitnami

# Chart の検索
helm search repo nginx

# インストール
helm install my-nginx bitnami/nginx

NGINX、PostgreSQLRedis、Prometheus など、よく使うミドルウェアは公開 Chart で簡単にデプロイできる。

EKS での Helm

EKS では helm コマンドが kubectl と同じ kubeconfig を使用する。AWS Load Balancer Controller、ExternalDNS、cert-manager などの EKS アドオンも Helm Chart で管理する。

Helm vs Kustomize vs kubectl

Helm と Kustomize vs kubectl の違いを以下にまとめる。

ツール テンプレート パッケージ管理 用途
Helm ✅ (Go テンプレート) ✅ (Chart) 複雑なアプリのデプロイ
Kustomize ❌ (パッチベース) 環境ごとの差分管理
kubectl apply シンプルなデプロイ

Helm の理解を深めるには関連書籍が参考になる。

この記事は役に立ちましたか?

関連用語

関連する記事