KubernetesのパッケージマネージャーHelmとは?
KubeConではコンテナオーケストレーションのツールであるKubernetesが大きな注目を集め、そのエコシステムの拡がりを感じることができたが、そのKubernetesのサブプロジェクトとして最近注目されているのがHelmだ。国内のSIベンダーに在籍するKubernetesのコミッターにインタビューを行った時に「もしも次にCNCFにホストされるプロジェクトがあるとすれば、IstioとHelmかも」という呟きを聞いたことをきっかけに、Helmについて調査を始めた。
KubeConでも非常に注目されたマイクロサービスを運用管理するための「サービスメッシュ」と呼ばれる管理ソフトウェアであるIstioは、GoogleやIBM、そしてLyft(軽量なProxyサーバーEnvoyの開発で知られている)が協力して開発しているソフトウェアであり、Ciscoなども事例を紹介するほどに、じわじわと浸透していると筆者は見ていた。一方、Kubernetesをより簡単に操作するためのパッケージマネージャーであるHelmは、まだそれほど注目されていないという認識であった。しかし前述のコメントをきっかけに、過去の海外のカンファレンスのセッションの動画を漁っていた時に出会ったのが、Microsoftが2017年4月に買収したDeisというベンチャーのエンジニア、Michelle Nooralli氏がKubernetesを導入する際のパッケージマネージャーとして紹介したものだ。これはCoreOSが開催したCoreOS Fest 2017でのセッションだ。
Helm in a Handbasket - Michelle Nooralli and Matt Butcher, Microsoft
この動画は、Michelle Nooralli氏とMatt Butcher氏が、デモを交えながら2人でHelmを解説したものだ。まず「KubernetesがクラウドのLinuxになった」というLinux FoundationのJim Zemlinのコメントから発想されたのか、「KubernetesはOSである」という例えから始まる。つまりLinuxが様々なプログラムを実行するための環境としてコンピュータを動かすソフトウェアであるなら、コンテナを基本としたクラウドネイティブな環境においては、KubernetesはOSとして認識されるべきであるというメッセージだ。
'Kubernetes is becoming the Linux of the cloud' - Jim Zemlin, Linux Foundation #GoogleNext17
— Kubernetes (@kubernetesio) 2017年3月10日
(注:GoogleのイベントでLinux Foundationのシニアディレクター、Jim Zemlinが語った「Kubernetes is Linux of Cloud」というコメントを紹介するKubernetesの公式ツイッターアカウント)
まずKubernetesがOSであるとすれば、ソフトウェアを導入する際のパッケージマネージャーとしてapt-get、yumやrpm、そしてHomebrewなどと同様のものが必要であると語り、それがKubernetesにおいてはHelmであると紹介した。
そしてHelmを構成するファイルの簡単な紹介から、Helmを使ってリポジトリーにあるRedisを検索するようすにつながり、デモが開始するのである。
この辺は、いわゆるストラテジーなどを語るマーケティング畑の人間ではなく、エンジニアらしさが感じられるスタイルと言えるだろう。いきなりRedisのちょっと古いバージョンをインストールして、「$ helm upgrade」コマンドで最新のバージョンにアップグレード、そして削除するところをデモする。要所要所でKubernetesのCLIであるkubectlを叩いてPodの状況を見せつつ、ちゃんとKubernetesのPodが動いているところを見せて、基本的なHelmの動きを確認させるのだ。
そして後半では、Microsoft謹製のオープンソースソフトウェア、Visual Studio Codeを利用して、HelmのパッケージであるChartの書き方をVS CodeのプラグインであるHelm Chart Pluginを使って、シンタックスのエラーを確認しながらChartを作成するデモを行う。Chartとは、Helmにおいてはパッケージに相当するもので、Chartはそのパッケージを表現するyamlファイルとKubernetesを構成するために必要なmanifest等で構成される。そのような複数のファイル構成と記述を、VS Codeがアシストすることで生産性を上げることができる。
そしてさらに、実験的なソフトウェアであることを断りながら紹介したのは、Draftと呼ばれるソフトウェアである。これはVS Codeの中からも実行できるが、単体としても実行可能なソフトウェアで、MicrosoftのAzureのエンジニアが開発を行っているようだ。開発のサイクルの中でDockerやKubernetesのセットアップを行わずに「$ draft create」や「$ draft up」というコマンドだけで、コンテナ化、KubernetesのPod作成、Deployまでを自動化するツールのようだ。
より詳しくは、以下の公式サイトを参照されたい。
VS CodeのChartプラグインに話を戻すと、コードを書く上で変数などが代入された結果をレンダリングできる機能も紹介された。ある変数を大文字<->小文字に変換できるところをデモで見せたButcher氏が、思わず会場から拍手が起こったことに「大文字と小文字を変換するだけで拍手が起きるとは思わなかった。ありがとう!」とコメントする一幕もあり、参加者が集中している様子が見て取れる。
後半は主にVS Codeからのデモとなったが、Helmを使ってkubectlを使わなくても他のエンジニアが作ったChartを再利用することで、汎用性の高いソフトウェアの実装が可能になる効果は充分に理解できるデモであった。また別のデモでは、「$ helm rollback」コマンドでバージョンを元に戻す機能を見せていたように、Helmを使って開発のワークフローが抽象化され、より開発そのものに注力できると言うのが、このセッションでのメッセージだろう。
Nooralli氏はHelmを、人工知能を持った自走式掃除ロボットであるRoombaに例えて、面倒なことを省いて開発プロセスを実行できる点を強調していた。つまり従来の「コードを書いてビルドしてステージングに入れて、テストをしてOKなら本番環境へ」という手順を非常に原始的なやり方の例えとして箒に、コンテナとKubernetesによるオーケストレーションを掃除機に、そしてHelmによる自動化をRoombaに例えて、開発者はアプリケーション実行のため必要なモジュールに気を使わずにもっと開発をするべきだし、インフラエンジニアもこのスタイルを受け入れるべきだというのが最終的なメッセージだ。
なお、Kubernetesを使いこなしているMicrosoftのエンジニアでさえ、Kubernetesは難しいという認識であるところから、Helmがスタートしているということは、覚えておいて損はないだろう。
最後に、より現実的なユースケースとして、PHPでアプリケーションを書いてそれをHelmでコンテナ化、Kubernetesを使ってオーケストレーション、そして実行というデモを行なった。
ここでも、常に開発者の目線でこのツールを評価していることがわかる。
Helmは、KubernetesのSIG(Special Interest Group)であるSIG-Appsの中で開発が進んでいるという。そういう意味ではKubernetes純正のパッケージマネージャーという位置付けだ。Kubernetesに興味のあるエンジニアは、ぜひ、この最新のツールを試してみることをお勧めする。
kubernetes/helm: The Kubernetes Package Manager
また以下のサイトでは、すでに公開されているChartを検索できる。ここでも、Kubernetes/Helmのコミュニティの拡大を感じることができるだろう。
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- LinuxCon+ContainerCon+CloudOpen China開催。中国企業の存在感が大きかった初日
- RancherのCatalog機能を詳細に見てみる
- All Things OpenからFermyonTechのMatt Butcher氏のセッションを紹介
- Open Source Summit NA 2022、マイクロサービスをWASMで実装したデモを紹介
- 「Cloud Native Trail Map」の10ステップを紐解く(ステップ1~3)
- コンテナを使いこなすための心強い味方! 「Kubernetes」(後編)
- KubeCon+CloudNativeCon開催、勢いのあるKubernetesとCNCFプロジェクトが一同に
- Google Cloudの開発責任者が語るKubernetesの成功の秘訣
- Linux Foundationがミニカンファレンスを開催。オープンソースプロジェクト運営のポイントを語る
- Red Hatがセキュリティ強化と自動化がポイントのOpenShift 4.3をリリース