コンテナ管理ツールのdocekr swarm/Kubernetesについて調べてみた
どうもkoheiです。
今年はいったいいくつの台風が来るんでしょうか・・・
さて、今日は前回に引き続きDockerについて
特にコンテナの管理ツールについて簡単に書きたいと思います。
正直まだまだ勉強中のところも多いので、ざっくり概要だけ紹介したいと思います。
コンテナってなに?って人は前回の記事をどうぞ
Dockerを実際に使ってみると・・・
Dockerを利用することで、Docker imageがあれば数秒で環境構築できたり、構成管理が容易になったり、docker imageとしてまとめて環境移行できたり・・・などすばらしい機能を提供してくれます。
さて、このdockerを使って、実際にWebサービスを提供する環境を作ってみよう!
となると、様々なニーズが出てきます。
- webサービスを提供するにしても、フロントエンドのWebサーバから、webサーバからの処理を返すアプリケーション、データベースなど、複数のアプリケーションが必要。それぞれアプリごとにコンテナを作って、複数コンテナを連携させたい。
- 安定してサービス提供を行うため、データベースはMaster/Slaveの冗長構成で、別々のサーバで、別々にコンテナを動かして連携させたい。
- 新しいコンテナを立ち上げるときは、リソースが比較的空いてるサーバに立ち上げてほしい
- コンテナがちゃんと起動しているか確認して、停止していたら再起動してほしい
実際にコンテナを使ったサービスを使おうとなると考えることが多い・・・。
と悩ましいところですが、こうした課題を解決すべく、いろんな機能やサービスが提供されています。
複数コンテナの連携
1.の複数コンテナの連携に対しては、docker-composeが有効です。
docker-compose.ymlというファイルにコンテナの組み合わせの定義や、起動順、コンテナ間の接続情報等を記載しておけば、docker-composeコマンド一つで簡単に複数コンテナの起動、連携ができます。
複数サーバ間でのコンテナの管理
さて、残り2. 3. 4.の課題を解決するための方法としては、Docker Swarm / kubernetesというツールが有名です。
Docker Swarm
docker社が提供する、コンテナ用のクラスタ管理ツールです。
たくさんのクジラがたくさんのコンテナを一緒に持ってますね。
docker swarmはコンテナの利用状況をチェックするmangerとコンテナを実行するagents側とで分かれています。
swarm mangerに向けて、コンテナの新規実行を依頼すると、agentsの稼働状況を確認して、任意のサーバでコンテナを実行してくれる仕組みになっています。
こうして、複数サーバ上でいい感じにコンテナ実行もできてハッピーな感じですが、実はdocker swarmは現在、主流のコンテナ管理ツールから外れつつあります。
コンテナの管理ツールとしては後述するkubernetesが現在主流になっています。
kubernetes
docker社が作っていたdocker swarmを差し置いて、コンテナ管理ツールの代表格となっているのがgoogleが開発したkubernetesです。(読み方はクバネティス、クーベネティス、クーベルネイテスなど。k8sと書くことも)
なぜ、docker社ネイティブのdocker swarmより主流になったのかというと、シンプルにより高機能だったから、と言われています。
結果的に2017年にはdocker社はkubernetesをサポートすることを発表しました。
kubernatesの機能としては、これまで話してきたdocker-composeやdocker swarmの機能も全部合わせて、さらにコンテナ間のネットワークルーティング管理等も可能にしています。
細かい話はしませんが、ざっと構成要素は下記のようになっています。
docker swarmの時と同じように、管理機能を持つmaster nodeと実際にコンテナを実行させるnodeに分かれています。docker swarmとさらに違う点としては、複数コンテナを集めてPodという単位でkubernetes上ではコンテナを管理します。
高機能だけあって、構成要素も多く複雑になりつつありますが、
それだけ様々な管理機能を提供してくれます。
webUIもついてます。(kubernetes公式サイトより)
とはいえ、自分たちでk8s環境作って運用するのは難しそう・・・というあなた
kubernatesをベースとしたクラウド上のコンテナ管理サービスというのも複数登場しています。上記のmaster nodeの部分がほぼ意識しなくてもよい形になるため、運用コストはかなり楽になります。
Google, Azure, AWSの各社それぞれ出しているのでざっと紹介します
Google KUBERNETES ENGINE (GKE)
Azure Kubernetes Service (AKS)
Amazon Elastic Container Service for Kubernetes (EKS)
まとめ
ここまでコンテナ管理ツールについて、書いてきました。
これらの情報についてはこちらの本を参考にしました。
手順も含めて丁寧に情報がまとまっていて、非常に参考になりました。
これらのコンテナ管理ツールですが、まだまだ発展途上の分野です。
高機能で複雑化しつつあるkubernetesから別のものが出てくるのでは?といった話も出ており、今後の動向が注目されています。
ではでは