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

2021.12.13
2024.03.24
Kubernetes
Helm

本ページはAmazonアフィリエイトのリンクを含みます。

はじめに

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

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

【Helm入門】Helm使ってみる

【Helm入門】Helm使ってみる

はじめに これからHelmを使ってみたい人に向けて、**Helmとはどんなものなのか**ざっくり

Helmのチャート

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

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

1.
2├── Chart.yaml
3├── templates
4│   ├── deployment.yaml
5│   └── service.yaml
6└── 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コマンドでチャートのディレクトリを作成します。

1helm create mychart

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

1.
2├── Chart.yaml
3├── charts
4├── templates
5│   ├── NOTES.txt
6│   ├── _helpers.tpl
7│   ├── deployment.yaml
8│   ├── hpa.yaml
9│   ├── ingress.yaml
10│   ├── service.yaml
11│   ├── serviceaccount.yaml
12│   └── tests
13│       └── test-connection.yaml
14└── values.yaml

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

1.
2├── Chart.yaml
3├── templates
4│   └── deployment.yaml
5└── values.yaml

テンプレートの作成

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

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

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

1apiVersion: apps/v1
2kind: Deployment
3metadata:
4  name: {{ .Values.metadata.name }}
5spec:
6  replicas: {{ .Values.replica }}
7  selector:
8    matchLabels:
9      app: mychart
10  template:
11    metadata:
12      labels:
13        app: mychart
14    spec:
15      containers:
16        - name: ntginx
17          image: nginx:latest

values.yamlの作成

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

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

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

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

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

1❯ helm install --dry-run --debug ./mychart --generate-name
2NAME: mychart-1639404725
3LAST DEPLOYED: Mon Dec 13 23:12:07 2021
4NAMESPACE: default
5STATUS: pending-install
6REVISION: 1
7TEST SUITE: None
8USER-SUPPLIED VALUES:
9{}
10
11COMPUTED VALUES:
12metadata:
13  name: mychart-from-value
14replica: 2
15
16HOOKS:
17MANIFEST:
18---
19# Source: mychart/templates/deployment.yaml
20apiVersion: apps/v1
21kind: Deployment
22metadata:
23  name: mychart-from-value
24spec:
25  replicas: 2
26  selector:
27    matchLabels:
28      app: mychart
29  template:
30    metadata:
31      labels:
32        app: mychart
33    spec:
34      containers:
35        - name: ntginx
36          image: nginx:latest

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

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

1helm install ./mychart --generate-name

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

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

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

1helm get manifest mychart-1639404888

参考

Support

\ この記事が役に立ったと思ったら、サポートお願いします! /

buy me a coffee
Share

Profile

author

Masa

都内のIT企業で働くエンジニア
自分が学んだことをブログでわかりやすく発信していきながらスキルアップを目指していきます!

buy me a coffee