Dockerコンテナと関連技術をやさしく解説 (その5)
-Dockerコンテナを普及させた「Kubernetesの重要な役割」とは?
Dockerコンテナはあらゆるクラウドで利用できるようになり、事実上、IT基盤の新たな主役の座を射止めた。その背景には、オーケストレーションツールあるいはコンテナスケジューラーと呼ばれる「Kubernetes」の存在がある。今回はその重要な役割について紹介する。
KubernetesがDockerコンテナ普及の一因
Dockerコンテナは従来の仮想化ハイパーバイザーと比較して、軽量な仮想マシンを効率的かつ高速に起動でき、しかもDockerコンテナのイメージを簡単にパッケージングできる特長を備えています。こうした利便性が高く評価された結果、多くのITエンジニアがDockerコンテナを広く利用するようになったわけですが、その背景にはもう1つ、Dockerコンテナの普及に欠かせない重要なソフトウェアの存在がありました。それが「Kubernetes」です。
ギリシャ語で“操舵手”という意味を持つ複雑なスペルのこのソフトウェアは、一般に「クーバーネイティス」と発音され(他にも「クーベルネイテス」や「キューバーネイティス」と発音する人もいます)、その複雑なスペルがゆえに、途中の文字数を数字に置き換えて「k8s」と省略して書くこともあります。そして、コンテナオーケストレーションツールあるいはコンテナスケジューラーと呼ばれる機能を備えています。
今回はKubernetesがDockerコンテナの普及において、どのような役割を果たしたのかを紹介していきます。
ピンチアウトで拡大
アプリケーションとその基盤の寿命について
Kubernetesの説明の前に、アプリケーションと仮想マシンにおける寿命の話をしておきましょう。
従来のハイパーバイザー型仮想マシンの上でアプリケーションを実行する場合、アプリケーション実行中に仮想マシンが落ちることは許容されません。問題が起きそうなときにはライブマイグレーションと呼ばれる機能によって別の物理マシンへと移動し、論理的に仮想マシンの継続稼働を維持しようとします。
つまり仮想マシンにおいては、仮想マシンの寿命は常にアプリケーションより長いことが一般的に想定されます。
ピンチアウトで拡大
一方、Dockerコンテナ上のアプリケーションは事情が異なります。
Dockerコンテナ上のアプリケーションは、一般に分散システムによって構成されるアプリケーションが想定されています。つまり1つのアプリケーションは、複数のDockerコンテナ上でそれぞれ実行される「サービス」がネットワーク経由で連係することで実現されます。
この分散システムの特長として、アプリケーションに対する負荷が高まれば、それを受け止めるサービスの個数を増やして対応し、負荷が減ればサービスの個数を減らして対応することが可能な点です。さらにサービスの一部が何らかの障害で停止したとしても、残りのサービスでアプリケーションとしての実行を継続することによって、全体としての耐障害性を担保できる点などが特長に挙げられます。
つまり、全体としてアプリケーションが実行中であっても、そのアプリケーションを構成するサービスの個々のDockerコンテナは起動していることもあれば終了していることもある、ということになります。典型的な分散アプリケーションにおいて、その基盤となるDockerコンテナの個々の寿命は、アプリケーションよりも短いことが許容されるのです。
ピンチアウトで拡大
とはいえ、全部のDockerコンテナが終了してしまっては困りますし、意味もなく増えても困ります。そこで、実行中のアプリケーションに対して、適切にDockerコンテナの数を増やしたり維持したり減らしたりする仕組みが必要になります。
その役割を果たすのがKubernetesです。Dockerコンテナを用いた分散アプリケーションの時代にKubernetesが重要となったのは、アプリケーションの起動と終了とは別に、Dockerコンテナの起動と終了を管理するためのツールが必要になったことが大きな理由です。
Kubernetesには自動修復機能がある
適切にDockerコンテナの数を増やしたり減らしたり維持したりする機能が、Kubernetesの最も基本的な機能の1つと言っていいでしょう。
例えばKubernetesに「Dockerコンテナを3つ」と設定すると、Dockerコンテナを3つ起動するだけでなく、なんらかの原因でDockerコンテナの1つが終了した場合、すぐさま別のDockerコンテナを1つ起動して、常にDockerコンテナを3つ維持し続ける機能が備わっています。万が一、Dockerコンテナ数が超過していれば、いずれか1つを終了させて数を減らすこともあります。
Kubernetesには複数のDockerコンテナのあるべき状態を維持し、そこから外れた場合には自動的に修復する能力があります。また、定期的に取得するメトリクスにもとづいたアプリケーションの負荷に応じて、あらかじめ定めた最小数と最大数の間でDockerコンテナの数を増減させるオートスケール機能もあります。
ほかにも、Kubernetesにはストレージを抽象化して利用する機能、運用を自動化する機能など、Dockerコンテナを用いた分散システムのための豊富な機能を備えています。
基盤抽象化や運用自動化など重要性が高まるKubernetes
Dockerコンテナを分散システムの基盤として用いる際に不可欠なのがKubernetesであり、DockerコンテナはKubernetesとの組み合わせによって分散システムの基盤となることが可能となり、多くのパブリッククラウドでも使えるようになったと言えるでしょう。
前述したKubernetesのインフラを抽象化する機能や運用を自動化する拡張機能により、Dockerコンテナはハイブリッドクラウドやマルチクラウドの基盤として、さらにマネージドサービスの基盤としての役割も期待されています。Kubernetesの重要性はさらに高まっていくとともに、利用範囲も広がっていくことでしょう。
※このコラムは不定期連載です。
※会社名および商標名は、それぞれの会社の商標あるいは登録商標です。
-
新野淳一/Junichi Niino
ブログメディア「Publickey」( http://www.publickey1.jp/ )運営者。IT系の雑誌編集者、オンラインメディア発行人を経て独立。新しいオンラインメディアの可能性を追求。