The Doppler Quarterly (日本語) 春 2018 | Page 65
サービスの定義と展開は、 YAML で記述した構成ファイルを使用して行われ (YAML はマー
クアップ言語ではありません )、展開は、最終状態が指定され、 K8s がその状態を保とうとす
る宣言型のスタイルで定義されます。たとえば、展開時にクラスター全体で常に 8 個の Pod
を稼働させておく必要があるサービスを定義することができ、 1 つの Pod で障害が発生する
と、 K8s が別の Pod のスケジュールを設定して、定義した展開の最終状態 (8 個の Pod が稼
働している状態 ) を維持しようとします。また K8s のマスターノードが、できる限り効率的にク
ラスター全体のワーカーノードで Pod のスケジュールを設定し、負荷が均等に分散されるに
ようにして耐障害性を確保します。
Kubernetes マスター
コントローラー
マネージャー
API サーバー
ユーザー
スケジューラー
開発者
/ オペレーター
etcd
kubelet
kube-proxy
cAdvisor
Pod
Pod
...
Pod
kubelet
...
Pod
kube-proxy
cAdvisor
Pod
...
Pod
プラグインネットワーク (Flannel、 Weavenet など )
Kubernetes ノード
Kubernetes ノード
図 3: Kubernetes のアーキテクチャー
Helm
このような分散されたクラスターで自動的にスケジュールを設定して耐障害性を確保すると
いう問題を解決するシステムがあることはわかりましたが、展開したいアプリケーションを記
述するにはどうすればよいのでしょうか。Confi gMap、サービス、 Pod、永続ボリュームな
どを指定する必要がある、 Sock Shop のような比較的シンプルな Web サイトであっても、
YAML の構成がかなり複雑になる可能性があるということは想像できるかと思います。こ
こで登場するのが Helm です。Helm については、 K8s のパッケージマネージャーであり、
Linux における yum と apt のようなものであると考えてください。また同様に、 Helm Chart
は deb と rpm に似た K8s のパッケージです。Helm は、単一のコマンドで K8s のクラス
ター上にインストールできる Chart にアプリケーション全体をパッケージ化する手段を開発
者に提供します。Helm は、 K8s の効果的なパッケージマネージャーを提供するだけでなく、
アプリケーションをパッケージ化して公開レポジトリにパブリッシュし、他のユーザーが活用
できるようにするための手段となります。開発者は、データベース (MySQL、 MongoDB) から
WordPress などの Web パブリッシングアプリケーションに至るまで、役に立つさまざまなア
プリケーションをパッケージ化した、数百のキュレートされた安定性の高い Chart を利用で
きます。
2018 年春号 | THE DOPPLER | 63