IT社員3人組によるリレーブログ

某IT企業に勤める同期3人が、日常で思ったことを記録していきます (twitter: @go_mount_blog)

コンテナ管理ツールのdocekr swarm/Kubernetesについて調べてみた

どうもkoheiです。

今年はいったいいくつの台風が来るんでしょうか・・・

 

さて、今日は前回に引き続きDockerについて

特にコンテナの管理ツールについて簡単に書きたいと思います。

正直まだまだ勉強中のところも多いので、ざっくり概要だけ紹介したいと思います。

 

コンテナってなに?って人は前回の記事をどうぞ

go-mount.hatenablog.com

Dockerを実際に使ってみると・・・

Dockerを利用することで、Docker imageがあれば数秒で環境構築できたり、構成管理が容易になったり、docker imageとしてまとめて環境移行できたり・・・などすばらしい機能を提供してくれます。

 

さて、このdockerを使って、実際にWebサービスを提供する環境を作ってみよう!

となると、様々なニーズが出てきます。

  1. webサービスを提供するにしても、フロントエンドのWebサーバから、webサーバからの処理を返すアプリケーション、データベースなど、複数のアプリケーションが必要。それぞれアプリごとにコンテナを作って、複数コンテナを連携させたい。
  2. 安定してサービス提供を行うため、データベースはMaster/Slaveの冗長構成で、別々のサーバで、別々にコンテナを動かして連携させたい
  3. 新しいコンテナを立ち上げるときは、リソースが比較的空いてるサーバに立ち上げてほしい
  4. コンテナがちゃんと起動しているか確認して、停止していたら再起動してほしい

実際にコンテナを使ったサービスを使おうとなると考えることが多い・・・。

と悩ましいところですが、こうした課題を解決すべく、いろんな機能やサービスが提供されています。

複数コンテナの連携

1.の複数コンテナの連携に対しては、docker-composeが有効です。

docker-compose.ymlというファイルにコンテナの組み合わせの定義や、起動順、コンテナ間の接続情報等を記載しておけば、docker-composeコマンド一つで簡単に複数コンテナの起動、連携ができます。

f:id:go-mount:20180927204648p:plain

複数サーバ間でのコンテナの管理

さて、残り2. 3. 4.の課題を解決するための方法としては、Docker Swarm / kubernetesというツールが有名です。

Docker Swarm

docker社が提供する、コンテナ用のクラスタ管理ツールです。

f:id:go-mount:20180927205654p:plain

たくさんのクジラがたくさんのコンテナを一緒に持ってますね。

docker swarmはコンテナの利用状況をチェックするmangerとコンテナを実行するagents側とで分かれています。

swarm mangerに向けて、コンテナの新規実行を依頼すると、agentsの稼働状況を確認して、任意のサーバでコンテナを実行してくれる仕組みになっています。

 

f:id:go-mount:20180927211005p:plain

 

こうして、複数サーバ上でいい感じにコンテナ実行もできてハッピーな感じですが、実はdocker swarmは現在、主流のコンテナ管理ツールから外れつつあります

コンテナの管理ツールとしては後述するkubernetesが現在主流になっています。

kubernetes

kuberneteslogo

docker社が作っていたdocker swarmを差し置いて、コンテナ管理ツールの代表格となっているのがgoogleが開発したkubernetesです。(読み方はクバネティス、クーベネティス、クーベルネイテスなど。k8sと書くことも)

kubernetes.io

 

なぜ、docker社ネイティブのdocker swarmより主流になったのかというと、シンプルにより高機能だったから、と言われています。

結果的に2017年にはdocker社はkubernetesをサポートすることを発表しました。

 

kubernatesの機能としては、これまで話してきたdocker-composeやdocker swarmの機能も全部合わせて、さらにコンテナ間のネットワークルーティング管理等も可能にしています。

 

細かい話はしませんが、ざっと構成要素は下記のようになっています。

f:id:go-mount:20180927214007p:plain

docker swarmの時と同じように、管理機能を持つmaster nodeと実際にコンテナを実行させるnodeに分かれています。docker swarmとさらに違う点としては、複数コンテナを集めてPodという単位でkubernetes上ではコンテナを管理します。

 

高機能だけあって、構成要素も多く複雑になりつつありますが、

それだけ様々な管理機能を提供してくれます。

Kubernetes Dashboard UI

webUIもついてます。(kubernetes公式サイトより)

 

とはいえ、自分たちでk8s環境作って運用するのは難しそう・・・というあなた

kubernatesをベースとしたクラウド上のコンテナ管理サービスというのも複数登場しています。上記のmaster nodeの部分がほぼ意識しなくてもよい形になるため、運用コストはかなり楽になります。

 

Google, Azure, AWSの各社それぞれ出しているのでざっと紹介します

 

Google KUBERNETES ENGINE (GKE)

cloud.google.com

 

Azure Kubernetes Service (AKS)

azure.microsoft.com

 

Amazon Elastic Container Service for Kubernetes (EKS)

aws.amazon.com

 

まとめ

ここまでコンテナ管理ツールについて、書いてきました。

これらの情報についてはこちらの本を参考にしました。

手順も含めて丁寧に情報がまとまっていて、非常に参考になりました。 

Docker/Kubernetes 実践コンテナ開発入門

Docker/Kubernetes 実践コンテナ開発入門

 

 

これらのコンテナ管理ツールですが、まだまだ発展途上の分野です。

高機能で複雑化しつつあるkubernetesから別のものが出てくるのでは?といった話も出ており、今後の動向が注目されています。

 

ではでは