プログラミング初心者がアーキテクトっぽく語る

見苦しい記事も多数あるとは思いますが訂正しつつブログと共に成長していければと思います

なぜKubernetesを使うのか

今のご時世はなんでもコンテナだ。少なくとも会社の偉い人たちはそう思っている。

コンテナと言えばDockerだ。Dockerがあればコンテナに関わることは一通りできる。

しかし「Kubernetes」という単語もよく耳にする。Dockerで十分ではないのだろうか?

今回はなぜKubernetes(以下、k8s)が必要か考えてみる。


仮想マシンに例えてみる

仮想マシンに例えるとDockerはESXiやKVMである。vCenterやOpenStackではない。

ではコンテナにおけるvCenterやOpenStackはなんだろう?それがk8sだ。

vCenterやOpenStackなしで仮想化環境を運用するのが不可能なようにk8sなしでコンテナ環境を運用することは困難だ。


Dockerだけでコンテナ環境を運用してみる

Dockerだけでコンテナ環境を運用したときに直面する課題について考えてみよう。

docker runを打ち続けるのが辛い

Dockerではコンテナをdocker runコマンドで1つずつ起動しなくてはならない。しかしマイクロサービスでは沢山の数のコンテナが必要だ。しかもコンテナよって必要なパラメータは異なる。さらに必要なコンテナの数は負荷状況によって変化する。この作業を手動で迅速にミスなく実施することは不可能である。Dockerの上にもう1つ自動化のレイヤーが欲しい。

増えていくホストを管理するのが辛い

Dockerは1台のホストしか扱えない。しかしマイクロサービスでは性能と可用性を考慮して複数のホストにコンテナを分散して配置したい。負荷が増えればホストを増やして対応したい。ホストをまたいだコンテナ管理の枠組みが必要だ。

肥大化するDockerネットワークを管理するのが辛い

Dockerではホスト間のネットワークは分断されている。一方、マイクロサービスでは複数のホストに分散されたコンテナ同士を1つの論理的グループとして扱いたい。またコンテナ数の動的な増減にネットワークを迅速に追従させたい。そのためにはDockerにはない新たな接続性やネットワーク設定の自動化が必要だ。


Kubernetesが欲しくなる

このようにコンテナで拡張性と可用性を備えたサービスを運用しようとするとDockerだけでは足りない。Dockerの上にもう1つ自動化の枠組みが欲しくなる。

自分でスクリプトをゴリゴリ書くよりも誰かが開発・試験してくれたフレームワークがあった方が嬉しい。多くの人が採用しているフレームワークならばなおよい。

そこで注目を集めているのがk8sだ。


Docker composerやSwarmは?

DockerのCore機能を利用してコンテナの高度な自動化、オーケストレーションを提供するツールがDockerのコミュニティから提供されている。Docker composerやSwarmなどが有名だ。

Docker composerもSwarmもk8sと同じ問題を解決するためのツールである。これらDocker系ツールに対するk8sの優位性はなんだろう?

高機能

Docker composerはk8sと比較するとかなり機能が乏しい。Swarmはk8sに近いがk8sの方がやや高機能だ。

Docker技術に縛られる

両方ともDockerに縛れてしまい、将来、他のコンテナ技術へ移行する選択肢がなくなってしまう。

まとめ

高機能で特定のコンテナ技術にロックインされないk8sが事実上、コンテナオーケストレータのスタンダードとなっている。

しかし、Dockerが前提で、k8sほどの機能性が不要であればDocker composerやSwarmでも十分かもしれない。


信頼できるのか?

目の付け所がよくても本番稼働に耐えられる安定性がなくては使うのを躊躇するだろう。

著名なクラウドプロバイダの対応状況

まず注目すべきことは、ほとんどの著名なクラウド事業者が既にk8sサービスを開始していることだ。

頻繁なアップデート

k8sのメンテナンスはCNFCという団体が行っている。

CNCFは頻繁にk8sのアップデートを行い、安定性を高めている。

まとめ

こうしたことから「k8sは信頼できる」という評価を得ている。


意外と始めやすい

k8s自体は大規模で複雑なシステムだ。一からインストールするとなると大変だ。

パッケージ化されたサービス・製品

それを考慮してk8sを使いやすい形でパッケージングしたクラウドサービスやプラットフォームが各社から提供されている。そのようなサービス、製品を利用すれば案外スムーズにk8sの利用を開始することができる。

試験

開発者としては「どうやって試験すればいいんだ?」と不安になるだろう。クラウドを利用すれば試験のたびにお金がかかるし、On premiseに試験用k8s環境を用意するのもやはりお金と時間がかかる。

k8s上で動作するプログラムの試験にはMinikubeというツールを使うのが一般的だ。Minikubeは1台のサーバ上でMasterプロセスとWorkerプロセスを実行する仮想マシンだ。Dockerがインストール済みですぐに利用できる。