13
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【本気で学ぶKubernetes】Helmでアプリを一発デプロイ!パッケージ管理入門

13
Last updated at Posted at 2025-12-12

はじめに

こんにちは!

本記事は「本気で学ぶKubernetes」シリーズの第13回です。このシリーズでは、Kubernetesの基礎から実践まで、段階的に学んでいきます。

このシリーズは、第1回から順に読むことで体系的に学べる構成にしています。
まだご覧になっていない方は、ぜひ最初からご覧ください!

Kubernetesとは?クラスタ構成の全体像をつかむ

今回は、Helmを使ったパッケージ管理について学んでいきます。

この記事は人間がKubernetesの公式ドキュメントを読み漁りながら、人間の手で書いていますのでご安心ください!

マニフェスト管理の課題について

これまでの記事でPodやDeployment、Serviceなどさまざまなマニフェストを書いてきましたが、それら全てを何も使わず管理しようとすると非常に大変です。

実際の運用では、もっと細かく多くのファイルを管理する必要も場合によっては出てきます。

例えば環境ごとに設定を変えたり、複雑なアプリケーションをデプロイしたり、またはバージョンアップを行った際に複数のマニフェストを更新する必要が出てきたりします。

これらを全て一つずつkubectl applyしていくのは大変ですし、依存関係を理解してデプロイ順序を考える必要もあります。

Helmとは

HelmはKubernetesのパッケージマネージャーです。

イメージとしてはLinuxのaptやyum、macOSのHomebrewのようなもので、アプリケーションを簡単にインストールしたりアップデートができます。

Helmでは複数のマニフェストを一つのパッケージ(Chart)として管理できるようになります。
また、テンプレート機能が備わっているためで設定値を変えるだけで環境ごとに異なる設定を簡単に適用することができます。

出典: Helm公式ドキュメント

Helmの基本概念

Helmを使う上で、必ず押さえておくべき重要な概念が4つあります。
これらの関係を図で表すと以下のようになります。

helm-構成図.png

Chart

Chartは複数のマニフェストのテンプレートとデフォルト設定をまとめたパッケージです。

nginxをデプロイする場合、通常はDeployment、Service、ConfigMapなど複数のマニフェストを書く必要がありますが、nginx Chartを使えばこれらがすでにテンプレートとして用意されています。

nginx Chart、WordPress Chart、Prometheus Chartなど、有名なアプリケーションはほとんどChartが用意されています。

Repository

RepositoryはChartの保管場所です。

Helm公式リポジトリやBitnamiなどのコミュニティリポジトリが存在していて、helm repo addコマンドでリポジトリを追加することで、そこから好きなChartをインストールできます。自分でリポジトリを作成して保管することもできます。

Release

ReleaseはChartをKubernetesにインストールした実体を指します。

一つのChartから複数のReleaseを作成することができるので、同じnginx Chartから「nginx-dev」「nginx-prod」という2つの異なるReleaseを作ることも可能です。各Releaseは独立して管理され、それぞれ異なる設定を持つことができます。

Values

ValuesはChartのカスタマイズ設定です。

Chartにはデフォルトの設定がありますが、values.yamlファイルを作成して設定を上書きすることでレプリカ数、イメージタグ、リソース制限などを柔軟に変更できます。これにより同じChartを使いながら環境ごとに異なる設定を適用することが可能です。

Helmのインストール

ここからは実際にHelmをインストールしてマニフェスト管理とデプロイを行なっていきたいと思います。
*筆者の環境がMacOSのためMacOS版だけ記載しております。Win版やLinux版は別途ご確認ください。

macOS (Homebrew)

brew install helm

helm version

# version.BuildInfo{Version:"v3.18.6", GitCommit:"b76a950f6835474e0906b96c9ec68a2eff3a6430", GitTreeState:"clean", GoVersion:"go1.24.6"}

インストール後、バージョンが表示されれば無事にインストール完了です。

実際にHelmを使ってみる

今回は、Helmを使ってシンプルなnginxをデプロイしてみます。

まず、minikubeクラスタを起動しておきます。

minikube start

HelmではChartを配布するリポジトリを追加しておく必要があります。

helm repo add bitnami https://charts.bitnami.com/bitnami

# "bitnami" has been added to your repositories

helm repo update

# Hang tight while we grab the latest from your chart repositories...
# ...Successfully got an update from the "kubernetes-dashboard" chart repository
# ...Successfully got an update from the "bitnami" chart repository
# Update Complete. ⎈Happy Helming!⎈

nginxをインストールしてみます。

helm install my-nginx bitnami/nginx

# NAME: my-nginx
# LAST DEPLOYED: Thu Dec 11 10:30:00 2025
# NAMESPACE: default
# STATUS: deployed
# REVISION: 1
# TEST SUITE: None
# NOTES:
# CHART NAME: nginx
# ...省略...

今まではnginxを立てる際に手作業でマニフェストを用意していましたが、リポジトリを指定してインストールするだけDeployment、Serviceなどがまとめて作成されます。

Helmでインストールしたアプリケーションを確認してみます。

helm list

# NAME      NAMESPACE REVISION UPDATED                                 STATUS   CHART         APP VERSION
# my-nginx  default   1        2025-12-11 10:30:00.123456 +0900 JST   deployed nginx-22.3.8    1.29.4  

kubectl get all

# NAME                            READY   STATUS    RESTARTS   AGE
# pod/my-nginx-5d4cf56db-xxxxx    1/1     Running   0          30s
#
# NAME                 TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
# service/kubernetes   ClusterIP      10.96.0.1       <none>        443/TCP        10m
# service/my-nginx     LoadBalancer   10.96.123.456   <pending>     80:30080/TCP   30s
#
# NAME                       READY   UP-TO-DATE   AVAILABLE   AGE
# deployment.apps/my-nginx   1/1     1            1           30s

# NAME                                 DESIRED   CURRENT   READY   AGE
# replicaset.apps/my-nginx-758699d99   1         1         1       60s

kubectlコマンドで確認してみると実際にDeployment、Service、Podがすべて作成されていることがわかりまあした。

Values.yamlでのカスタマイズ

次はHelmのデフォルト設定を変更していきますが、冒頭で触れた通りvalues.yamlを作成することで細かくカスタマイズができます。

helm show values bitnami/nginx

# ## @section Global parameters
# ...省略...
# replicaCount: 1
# ...省略...

上記はデフォルト設定ですがレプリカ数が1に設定されています。nginxのレプリカ数を2に変更してServiceタイプをNodePortにしたい場合、以下のようにvalues.yamlを作成します。

custom-values.yaml
replicaCount: 2
service:
  type: NodePort

続いて作成したcustom-values.yamlのファイル名を指定してアップグレードコマンドを実行します。

helm upgrade my-nginx bitnami/nginx -f custom-values.yaml

# Release "my-nginx" has been upgraded. Happy Helming!
# NAME: my-nginx
# ...省略...

kubectl get pods

# NAME                        READY   STATUS    RESTARTS   AGE
# my-nginx-xxxxxxxxxx-xxxxx   1/1     Running   0          2m
# my-nginx-xxxxxxxxxx-xxxxx   1/1     Running   0          30s

kubectl get svc

# NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
# my-nginx     NodePort    10.96.123.456   <none>        80:30080/TCP   2m

レプリカ数が2に増えて、ServiceタイプもNodePortに変更されました。

クリーンアップ

実行確認は終わりですので、今回作成したリソースを削除しておきます。

helm uninstall my-nginx

# release "my-nginx" uninstalled

Helmの便利なコマンド

Helmには運用で役立つコマンドがいくつかあります。

コマンド 説明
helm list インストール済みのReleaseを一覧表示
helm status <release名> Releaseの詳細を確認
helm upgrade <release名> <chart名> -f <values.yaml> 設定を変更してアップグレード
helm rollback <release名> <リビジョン番号> 指定したリビジョンにロールバック
helm search repo <キーワード> リポジトリからChartを検索
helm show values <chart名> Chartのデフォルト設定を確認
helm show chart <chart名> Chartの情報を確認

Helmを使うメリット

Helmは複数のマニフェストをまとめてインストール・削除できるため、ファイルが散らばることがありませんしhelm installでアプリケーションがデプロイされるため、コマンドを色々実行していく手間も省けます。

またvalues.yamlで環境ごとに設定を変更できるため、テンプレートは共通にして設定だけ変えるという運用が可能です。

公式やコミュニティで公開されているChartを活用すればWordPressやMySQL、Prometheus、Grafanaなどの代表的なアプリケーションをお手軽に利用できます。

まとめと次回予告

今回はHelmを使ったパッケージ管理について学びましたが、マニフェスト管理を楽にしてくれる便利なツールでした。

values.yamlで設定をカスタマイズして環境ごとに異なる設定を適用したり、アップグレードとロールバックが簡単なので運用がとても楽になると思います。

新規開発で1から構成を考えていく際、Helmを使ってマニフェスト管理は役に立つことが多そうですのでぜひ使い方に慣れていければと思います。

次回は、PrometheusやGrafanaを使ってメトリクス監視する方法について学習していきたいと思います。

それでは、また次回!

13
0
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
13
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?