Helm概要
Helmを学ぶ前に、まずKubernetesについて知っておく必要がある。Kubernetesについて知らない場合は、先にKubernetesについて学んでほしい。
Helm概要
HelmはKubernetesクラスタ用のパッケージマネージャーであり、Kubernetesクラスタで実行されるアプリケーションのデプロイに、この「Helm」というツールが活用される。
Helmは設定ファイルに基づいてアプリケーションのデプロイを自動実行するツールで、Kubernetesアプリケーションのパッケージマネージャーとして現在最も人気のある製品の一つである。
HelmはDeis(2017年にMicrosoftが買収)のプロジェクトの一つで、2015年に開催された最初のKubeCon(The Kubernetes Community Conference)でHelm Classicとして発表された。Helmプロジェクトは2016年1月にKubernetesプロジェクトと統合され、Kubernetesのサブプロジェクトになった。そして2016年後半にHelm 2.0、2018年6月にHelm 3.0がリリースされ、本格的なCNCF(Cloud Native Computing Foundation)プロジェクトへ昇格した。
Kubernetesにアプリケーションをデプロイするための事実上の標準ツール「Helm」
最近では、コンテナクラスタ技術であるKubernetesを活用したサービス運用が増えており、Kubernetes上で動作することを前提としたソフトウェアも登場している。一方で、Kubernetesでのアプリケーション配置には課題も多い。
Kubernetesは、サービスを複数の小さなコンポーネントに分割して実装するマイクロサービスアーキテクチャと相性がよい。このような構成のサービスでは、各コンポーネントを個別にクラスタへデプロイする必要がある。また、サービスを外部に公開したり各種設定を行ったりするために、Kubernetesクラスタに「リソース」を作成して設定を実行する必要がある。これらの作業は複雑になることがあるため、Kubernetesクラスタへのデプロイを支援したり、デプロイ済みコンテナを管理したりするためのさまざまなツールが登場している。
ここで紹介するHelmは、そのようなKubernetesクラスタへのアプリケーションデプロイを支援するツールの一つである(図1)。
図1. Helm公式Webサイト
最近のOSやプログラミング言語の多くでは、第三者が作成したソフトウェア(パッケージ)を集めて公開するサービス(リポジトリ)が提供されており、そこに公開されているソフトウェアの検索、ダウンロード、インストールなどを簡単な操作で行える「パッケージマネージャー」というソフトウェアが提供されている。HelmはKubernetes用パッケージマネージャーとも呼ばれ、OSやプログラミング言語のパッケージマネージャーと似た機能を備えている。Helmが提供する具体的な機能を簡単にまとめると次のとおりである。
- Chartという設定ファイルを基にした各種リソースの自動生成
- デプロイ済みアプリケーションの削除や更新などの管理
- リポジトリに公開されたChartの検索、ダウンロード、インストール
- Chartのパッケージングおよびリポジトリへのアップロード
Kubernetesの基盤となっているコンテナ技術Dockerでは、すでにコンテナイメージを提供するリポジトリ機構が用意されている。そのためHelmでは、イメージ自体は直接扱わず、「Chart」という設定ファイルだけをリポジトリで管理する構造になっている。その点を除けば、Helmが提供する機能は一般的なパッケージマネージャーが提供する機能とほぼ同じであり、helmというCLIツールを使ってChartをダウンロードしたり、それを基にクラスタへ自動でアプリケーションをデプロイしたりできる。
また、Helmでは「stable」や「incubator」という名称の公式リポジトリが提供されているほか、サードパーティによるリポジトリも多く提供されている。これらのリポジトリに公開されたChartは、Artifact Hubというサイトを通じて検索できるようになっている(図2)。
図2. Helmの公式リポジトリ「Artifact Hub」
Helmの歴史とコミュニティ
Helmは2016年2月にv1.0がリリースされ、現在までに2回のメジャーアップデートが行われている。この記事時点の最新版は、2022年8月にリリースされたv3.9.4である。
- Helm v1
- 2015年にDEISの内部プロジェクトとして開始
- 2017年にDEISはMicrosoftに買収
- 2015年にDEISの内部プロジェクトとして開始
- Helm v2
- 2016年1月: Googleプロジェクトに参加
- 2016年から2018年: Helm 2の高度化(2.0.0から2.12.2)
- 2018年6月: CNCFプロジェクトに参加
- Helm v3
- 2019年11月: リリース発表
- 2019年から2021年: Helm 3の高度化(3.0.0から3.5.2)
当初はKubernetesのサブプロジェクトとして開発が進められていたが、その後Linux Foundation傘下の非営利団体Cloud Native Computing Foundation(CNCF)配下となり、現在もその体制で開発が進められている。CNCFはクラウド関連技術の開発を推進する団体であり、Kubernetes自体もCNCF配下で開発されている。このような歴史的背景から、HelmはKubernetesの事実上の公式パッケージマネージャーとしても知られている。
Helmプロジェクト自身が提供する「stable」や「incubator」などの公式リポジトリでは、すでにさまざまなアプリケーションのChartが公開されており、メンテナーによって作成されたChartも多く公開されている。また、以前紹介したKubernetes関連ツールであるIstioやJenkins Xといったソフトウェアでも、Helmが公式のインストールツールとして採用され、使用されている。
なお、helmは船などで使われる舵を意味する単語である。また、chartは航海用地図に由来している。
Helmの主な特徴
HelmはGo言語で書かれており、HelmクライアントとHelmライブラリの2つの構成要素で構成される。
HelmはHelmクライアントを通じて、Kubernetesで実行されるアプリケーションをLinuxのyumコマンドのようにインストール、つまりデプロイし、削除できる。アプリケーション管理はChartというパッケージ化された構成ファイルを使用して行われる。Chartにはアプリケーション自体は含まれておらず、アプリケーションを構築するために必要な情報が含まれている。また、Artifact HubというサイトにはさまざまなChartが公開されており、利用できる。
HelmライブラリはKubernetesクライアントライブラリを使用してKubernetesと通信する。通信にはREST+JSONが使用される。独自のデータベースは不要で、Kubernetes Secretにデータを保持する。
Helmの基本概念は次のとおりである。
- Chart: アプリケーションインスタンスを作るために必要な構成ファイルの集合。
- Configuration: Chartインストール時にアプリケーションに対するさまざまなパラメータを設定するためのもの。
- Release: Chartがインストールされ、アプリケーション、つまりReleaseオブジェクトが実行可能な状態になったインスタンス。
Helmでは次のことができる。
- Chartの新規作成
- ChartをChartアーカイブ(tgz)としてパッケージング
- Chartが保存されたChartリポジトリの操作
- KubernetesクラスタへのChartのインストールおよび削除
- HelmでインストールしたChartのリリースライフサイクル管理
Helmクライアントとライブラリの役割はそれぞれ次のとおりである。
Helmクライアント
エンドユーザー向けのコマンドラインプログラムで、次を担当する。
- ローカルChart開発
- リポジトリ管理
- Release管理
- Helmライブラリと連携してChartを送信したり、Releaseのアップグレードや削除を要求したりできる。
Helmライブラリ
すべてのHelm操作をKubernetes APIとともに実行する。
- ChartからReleaseオブジェクトを作成
- Releaseオブジェクトを構築し、Kubernetesにインストール
- Releaseオブジェクトをアップグレードまたは削除
Helmと類似したツール
Helmと類似したツールには、Ksonnet、Kapitan、Kustomize、kompose、Ansibleがある。
Helmコマンドの例
| コマンド | 説明 |
|---|---|
| helm install | Chartをインストールする。 |
| helm list | Release一覧を表示する。 |
| helm pull | Chartをダウンロードしてローカルに展開する。 |
| helm repo add | Chartリポジトリを追加する。 |
| helm repo list | Chartリポジトリ一覧を表示する。 |
| helm search | Chartを検索する。 |
| helm show | Chartの詳細情報を表示する。 |
| helm uninstall | Releaseを削除する。 |
| helm upgrade | 新しいChartへアップグレードする。 |