【Helm】チャートを作成してみる

はじめに

Helmを使って簡単なチャートを作成してみます。

Helmとは何か、基本的な知識と簡単な使い方については下記で解説しています。

【Helm入門】Helm使ってみる
はじめにこれからHelmを使ってみたい人に向けて、Helmとはどんなものなのかざっくり解説し、実際にローカルで動かしてイメージを掴んでみたいと思います。HelmとはHelmとは、Kubernetes用のパッケージマネージャーです。...

Helmのチャート

Helmのチャートとは、Kubernetes上でアプリケーションを実行するためのリソースが定義されたパッケージです。

Helmチャートは主に以下のような構成で管理されます。(他にもファイルがありますが、今回は省略しています)

.
├── Chart.yaml
├── templates
│   ├── deployment.yaml
│   └── service.yaml
└── values.yaml
Charts
Explains the chart format, and provides basic guidance for building charts with Helm.

それぞれのファイル・ディレクトリの役割は以下のようになります。

  • Chart.yaml: チャートに関する基本情報(チャート名やバージョンなど)
  • values.yaml: チャートで設定可能な値
  • templates/: テンプレートとなるKubernetesのマニフェスト

valus.yamlは、自由な形式のYAMLファイルになります。ユーザーがチャートで設定可能にしたい値を自由に選択できるようになっています。

チャートの作成

まずは、helmコマンドでチャートのディレクトリを作成します。

helm create mychart

以下のようなファイルが作成されます。

.
├── Chart.yaml
├── charts
├── templates
│   ├── NOTES.txt
│   ├── _helpers.tpl
│   ├── deployment.yaml
│   ├── hpa.yaml
│   ├── ingress.yaml
│   ├── service.yaml
│   ├── serviceaccount.yaml
│   └── tests
│       └── test-connection.yaml
└── values.yaml

今回はChart.yamltemplates/deployment.yamlvalues.yamlしか使わないので、それ以外は削除してしまいます。

.
├── Chart.yaml
├── templates
│   └── deployment.yaml
└── values.yaml

テンプレートの作成

まずはテンプレートとなるtemplates/deployment.yamlを作成します。

内容としてはシンプルなNginxのコンテナです。

テンプレートは以下になります。{{ .Values.metadata.name }}{{ .Values.replica }}values.yamlで設定される値になります。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Values.metadata.name }}
spec:
  replicas: {{ .Values.replica }}
  selector:
    matchLabels:
      app: mychart
  template:
    metadata:
      labels:
        app: mychart
    spec:
      containers:
        - name: ntginx
          image: nginx:latest

values.yamlの作成

次にvalues.yamlを作成します。

形式は自由ですが、テンプレートで{{ .Values.metadata.name }}{{ .Values.replica }}としているので、以下のようになります。

metadata:
  name: mychart-from-value
replica: 2

チャートをインストールしてみる

helm install --dry-run --debugで適用するマニフェストが確認できます。

❯ helm install --dry-run --debug ./mychart --generate-name
NAME: mychart-1639404725
LAST DEPLOYED: Mon Dec 13 23:12:07 2021
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
USER-SUPPLIED VALUES:
{}

COMPUTED VALUES:
metadata:
  name: mychart-from-value
replica: 2

HOOKS:
MANIFEST:
---
# Source: mychart/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mychart-from-value
spec:
  replicas: 2
  selector:
    matchLabels:
      app: mychart
  template:
    metadata:
      labels:
        app: mychart
    spec:
      containers:
        - name: ntginx
          image: nginx:latest

values.yamlの値が設定されているのがわかります。

実際にチャートをインストールしてみます。

helm install ./mychart --generate-name

リリースが確認できます。

❯ helm list
NAME                    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART           APP VERSION
mychart-1639404888      default         1               2021-12-13 23:14:50.93399 +0900 JST     deployed        mychart-0.1.0   1.16.0

下記でも適用したマニフェストが確認できます。

helm get manifest mychart-1639404888

参考

タイトルとURLをコピーしました