5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ミニマムなHelm Chartを作ってみる

Posted at

TL;DR

Helmは、Kubernetesアプリケーションにおけるパッケージマネジャーです。
この記事ではミニマムなHelm Chartを作成することにより、Helmの概要について説明します。

記事で使用するサンプルHelm Chartは以下のリポジトリにあります。

Github: https://github.com/cacapouh/helm-chart-minimum-example

Helmパッケージの初期化

Helmパッケージを初期化するには、以下のコマンドを使用します。

helm create ${ディレクトリ名}

コマンド実行結果:

$ helm create simple-app
Creating simple-app

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

helm createコマンドを実行すると、デフォルトのマニフェストファイルが生成されます。
この記事ではミニマムなHelm Chartを作る関係で、以下のようにファイルを削除します。

$ cd simple-app
$ rm -rf charts values.yaml templates/*
$ tree .
.
├── Chart.yaml
└── templates

Helm Chartのざっくり説明

Helm Chartは、Kubernetesアプリケーションのパッケージで、
主な要素はChart.yamlファイルとtemplateディレクトリです。

Chart.yamlはバージョン情報やパッケージ名を含むファイルで、こちらで詳細な仕様が説明されています。

Chart.yaml
apiVersion: v2
name: simple-app
description: A Helm chart for Kubernetes
type: application
version: 0.1.0
appVersion: "1.1.0"

templateディレクトリは、適用するマニフェストファイルを格納する場所です。

この記事の例では扱いませんが、
template配下のマニフェストファイルでは、Go Templateが利用可能です。
(上記で削除してしまいましたが)テンプレートに使う値は、values.yamlで定義することが可能です。

※ Go Templateは、Go言語で利用されるテンプレートエンジンです。

デプロイ対象のアプリ

サンプルアプリとして、以下の簡素なPythonスクリプトをデプロイします。

${プロジェクトルート}/main.py
if __name__ == '__main__':
    print("Hello World")

マニフェストの作成

次に上記のPythonアプリ用Dockerfileと、
Deploymentのマニフェストファイルを作成します。

${プロジェクトルート}/Dockerfile
FROM python:3.9.18-slim

RUN mkdir /work
WORKDIR /work

COPY main.py /work
ENTRYPOINT python main.py
${プロジェクトルート}/templates/deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: simple-app-deployment
  labels:
    app: simple-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: simple-app
  template:
    metadata:
      labels:
        app: simple-app
    spec:
      containers:
        - name: simple-app
          image: "simple-app:latest"
          imagePullPolicy: IfNotPresent

Helmパッケージのインストール

Dockerビルドして、helm installコマンドを実行します。

Dockerビルド
$ docker build . -t simple-app

$ minikube image loadminikube image load simple-app:latest # minikube環境の場合
helm install
$ helm install ./simple-app --generate-name

動作チェック

以下はhelm install後にPodのログを確認した結果です。
Pythonスクリプトに記載の通り、Hello Worldと出力されています。

$ kubectl get pods
NAME                                     READY   STATUS      RESTARTS      AGE
simple-app-deployment-678bcdc8bf-7kjpn   0/1     Completed   2 (27s ago)   29s
simple-app-deployment-678bcdc8bf-fp8bp   0/1     Completed   2 (27s ago)   29s

$ kubectl logs simple-app-deployment-678bcdc8bf-7kjpn 
Hello World

おわりに

templateディレクトリ配下にマニフェストファイルを設置し、
helm installすることにより、マニフェストを適用することができました。

実務でありそうなケースとして、
アプリケーションを構成する複数のマニフェストファイルが存在する場合、
Go Template機能を利用して1つのファイルで本番環境設定とテスト環境設定を切り替えることができます :thumbsup:

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?