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