IT・技術研修ならCTC教育サービス

サイト内検索 企業情報 サイトマップ

研修コース検索

コラム

クラウド時代のオープンソース実践活用

CTC 教育サービス

 [IT研修]注目キーワード   OpenStack  OpenFlow/SDN  情報セキュリティ  Python  システムトラブルシュート 

第90回 Kubernetesとマイクロサービスの関係 (中井悦司) 2016年5月

はじめに

 先日、「Kubernetes Meetup Tokyo #1」に参加して、「Exploring the Philosophy behind Docker/Kubernetes/OpenShift」というタイトルのセッションでお話をさせていただきました(*1)。Dokcer、Kubernetes、OpenShiftは、お互いに深い関係を持つソフトウェアですが、それぞれが生まれた背景、そして、それぞれが目指す世界には違いもあります。このセッションでは、このような世界観の違いを理解するポイントを紹介させていただきました。

 今回は、その中でも特に、「Kubernetesが生まれた背景」について説明したいと思います。

コンテナスケジューラーとしてのKubernetes

 Kubernetesは、Dockerが稼働する複数のサーバーを束ねて管理する、オーケストレーションツールに位置づけられます。Dockerコンテナでアプリケーションをデプロイする際に、コンテナを起動するサーバーを自動的に選び出してくれます。また、スケールアウト型のアプリケーションに対しては、複数のコンテナを起動して、自動的にロードバランスの処理を行うなどの機能もあります。サーバーの台数がそれほど多くなければ、手作業での管理も可能ですが、多数のサーバー上で複数のアプリケーションを混在して利用するとなると、このようなツールが必要になることは容易に想像ができるでしょう。

 現在、Kubernetesは、GoogleとRed Hatのエンジニアが中心となって開発が進められていますが、実は、Googleが社内のアプリケーション基盤として利用していた「Borg」と呼ばれるシステムが元になっています。Google専用に開発されたツールをオープンソースとして、より一般的な形で再実装しているというわけです。2016年の年初には、Googleのエンジニアによる「Borg, Omega, and Kubernetes」というタイトルのエッセイが公開されており、この中で、なぜGoogleではBorgを必要としたのかという理由が説明されています(*2)。

 その理由の1つは、コンテナの管理機能をAPIとして公開することで、アプリケーション開発者に対して、個々のサーバーやOSの存在を意識せずにアプリケーションの管理ができるようにすることです。サーバーリソースの割り当てをコンテナ単位で制御したり、コンテナ単位でアプリケーションの情報を取得することで、アプリケーション監視や問題判別の精度が向上したという説明がなされています。

 これは、「多数のサーバーを1つのコンピューターとして見せる」と考えると分かりやすいでしょう。1台のサーバー上で複数のプロセスへのリソース配分を制御するのは、OSのプロセススケジューラーの役割ですが、この「1つのコンピューター」上で複数のコンテナへのリソース配分を制御するのが、BorgやKubernetesの「コンテナスケジューラー」としての役割となります(図1)。

fig01

図1 複数ホストを「1つのコンピューター」に見せる考え方

アプリケーションのマイクロサービス化

 プロセススケジューラーとコンテナスケジューラーの対比を念頭において図1を見ると、少しおもしろい考えが浮かんできます。図1のコンテナは、「1つのコンピューター」上で稼働する「プロセス」と考えることはできないでしょうか。つまり、1つのコンテナが1つのアプリケーションを提供するのではなく、複数プロセスが連携するかのように、複数のコンテナが連携して1つのアプリケーションを提供するのです。

 これはちょうど、「マイクロサービス」の考え方とも合致してきます。従来、アプリケーションを設計する際は、機能別にモジュールを分けておき、モジュール単位でのリファクタリングや機能拡張を実現してきました。これをコンテナという単位で行うわけです。これにより、稼働中のアプリケーションに対して、一部のコンテナを入れ替えることで、機能拡張を実現することも可能になります。Web上で提供されるアプリケーションの中には、バージョンアップのお知らせもなく、気がつくと新しい機能が追加されていることがあります。コンテナを利用したマイクロサービスによって、このようなオンラインでの機能拡張が自然に実現できるというわけです。

次回予告

 今回は、コンテナスケジューラーとしてのKubernetesの役割を紹介しました。一言でスケジューラーと言っても、Google規模のデータセンターとなると、スケジューリングのアルゴリズムにもさまざまな工夫が必要なようで、Borgの後継となるOmegaでは、新しいスケジューラーの仕組みが取り入れられているそうです(*3)。Kubernetesのスケジューラー機能がプラグイン形式となっているのは、今後、このようなスケジューラーの機能拡張も視野にいれているのかも知れません。

 さて、今週から来週にかけてまた、いくつかのセミナーに参加する予定となっています。次回もまた、これらのセミナーからの話題をお届けしたいと思います。

参考資料

*1 Exploring the Philosophy behind Docker/Kubernetes/OpenShift

*2 Borg, Omega, and Kubernetes

*3 OMEGA, AND WHAT IT MEANS FOR KUBERNETES: A Q&A ABOUT CLUSTER SCHEDULING

 

++ CTC教育サービスから一言 ++
このコラムでLinuxや周辺技術の技術概要や面白さが理解できたのではないかと思います。興味と面白さを仕事に変えるには、チューニングやトラブルシューティングの方法を実機を使用して多角的に学ぶことが有効であると考えます。CTC教育サービスでは、Linuxに関する実践力を鍛えられるコースを多数提供しています。興味がある方は以下のページもご覧ください。
 CTC教育サービス Linuxのページ
 http://www.school.ctc-g.co.jp/linux/
 

Linux研修トレーニングならCTC教育サービス


 

筆者書籍紹介

Software Design plusシリーズ
「独習Linux専科」サーバ構築/運用/管理
  ――あなたに伝えたい技と知恵と鉄則

本物の基礎を学ぶ!新定番のLinux独習書

中井悦司 著
B5変形判/384ページ
定価3,129円(本体2,980円)
ISBN 978-4-7741-5937-9
詳しくはこちら(出版社WEBサイト)
「独習Linux専科」サーバ構築/運用/管理

 [IT研修]注目キーワード   OpenStack  OpenFlow/SDN  情報セキュリティ  Python  システムトラブルシュート