Webアプリケーションを開発する際、実際に本番で動作する環境で動作することが重要です。1台のサーバー上に複数の「コンテナ」と呼ばれる単位で開発環境を構築して、それぞれを独立したサーバーのように利用できる技術が開発され使われてきました。この複数のコンテナを効率良く運用・開発するための技術が「コンテナオーケストレーション」です。
今回はコンテナオーケストレーションの仕組みやメリットについて詳しく見ていきましょう。
この記事の目次
コンテナオーケストレーションとは
コンテナオーケストレーショとはコンテナを効率良く運用・開発するための技術です。まず先にコンテナについて説明します。
コンテナとは
コンテナとは1台のサーバーのOS上に作られた論理的な区画のことを指します。コンテナの内部にアプリケーションを動作させるために必要なライブラリなどを1つにまとめて、個別のサーバーのように使えるようにします。
これではコンテナと仮想マシンの区別がつかないかもしれません。しかしコンテナは仮想マシンとは異なる概念です。特にオーバーヘッドと隔離レベルについて大きな違いがあります。
仮想マシンの場合、仮想マシン上で動作させるOSのためのリソースが必要となり、起動時間も比較的長めになります。一方、コンテナの場合、アプリケーションやライブラリの起動に必要なリソースだけ準備すれば良く、起動時間も通常のアプリケーションとさほど変わりません。このようにコンテナの方が動作時のオーバーヘッドが小さいのが特徴です。
複数コンテナの統合管理「コンテナオーケストレーション」
またコンテナはホストOSの1つとして動作するため、ホストOSのプロセスからコンテナプロセスの確認も可能です。コンテナは仮想マシンと比べると隔離レベルが低く、複数のコンテナが動作している場合は、運用に注意が必要となります。
コンテナを1つのホストOSで動作させるだけなら、さほど運用に手間はかかりませんが、マルチホストで構成されたクラスター環境で動作させる場合、ホストOS間のネットワークやストレージの管理、どのホストにどのコンテナを動作させるのかなど、スケジューリング管理なども必要です。
このように複数のコンテナを統合的に管理するための技術がコンテナオーケストレーションです。
コンテナオーケストレーションの仕組み
コンテナ上で動作しているアプリケーションを複数のサーバーへの展開、あるコンテナがダウンした時に別のコンテナを動作させるなどのクラスター管理、アプリケーションへ高負荷がかかった時にサーバーを増やす、負荷が減った時にサーバーを減らすなどのスケーリング管理など、複数のコンテナの運用管理には、とても手間がかかります。
コンテナオーケストレーションはこのような複数のコンテナを効率的に運用管理するため仕組みです。それではコンテナオーケストレーションを導入することで、どのようなメリットがあるのか見ていきましょう。
コンテナオーケストレーションのメリット
コンテナオーケストレーションを導入するメリットは主に以下の3つです。
仮想マシンより高速に動作する
コンテナは仮想マシンよりも高速に動作させることができます。これはゲスト用のOSを必要としないためオーバーヘッドを発生させないで動作させることができるからです。
頻繁なアプリケーションのリリースに迅速に対応できる
コンテナで動作しているアプリケーションのバージョンアップなど、アプリケーションの更新やリリースに対して迅速に対応できます。また複数のコンテナを準備することで、同じアプリケーションの複数のバージョンを同時に動作させることもできます。
複数のコンテナを統合的に管理できる
アプリケーションの規模によっては、膨大な数のコンテナを同時に管理することが求められることもあります。このような場合でも、コンテナオーケストレーションを導入すれば少ない手間で効率良くコンテナの管理が可能です。
コンテナオーケストレーションで注目のツール
コンテナオーケストレーションで注目のツールを2つ紹介します。
Docker(ドッカー)
サイトdocker
Dockerはコンテナそのものであり、後述するコンテナオーケストレーション「Kubernetes」のデフォルトとなっているコンテナです。アプリケーションの実行に使われる環境を1つのイメージファイルにまとめることができ、そのイメージファイルを使って、「テスト環境」「ステージング環境」「本番環境」など、複数の環境でアプリケーションの実行環境を構築できます。
このように複数の環境で同一のコンテナイメージを使用することで、「テスト環境では動作するけど、本番環境でうまく動かない」といったリスクを減らすことができます。
Dockerを使うことで、アプリケーションの開発から本番環境へのデプロイまで、アプリケーションの開発者自身でできるため、スムーズなデプロイが可能となります。
Kubernetes(クーベネティス)
サイトKubernetes
Kubernetesはコンテナオーケストレーションの業界標準となっているツールです。元々はGoogle社内で利用されていた、Borgと呼ばれる管理ツールがベースとなっています。
Kubernetesの主な特徴は以下の4つです。
- アプリケーションを迅速にデプロイできる
- 稼働中のコンテナ数を変更できる
- アプリケーションに新機能をスムーズに追加できる
- ハードウェアの利用率を制限できる
Kubernetesは複数台のホストをネットワークで接続したクラスター環境で利用することが多いです。これは性能の良い少数のホストで動作させるより、多数の低性能なホストを使ってシステムを開発した方がコストパフォーマンスの面で有利となることが多いからです。
このような構成のクラスターでは一部のホストが故障した場合でも、他のホストがその役割を肩代わりすることで、システム全体を正常に動作させ続けることが容易でもあります。具体的にはKubernetesはマスターノードとワーカーノードで構成されます。マスターノードはKubernetesの管理運用のためのコンポネントで、ワーカーノードがコンテナクラスタのデプロイ先となります。
開発者はマスターノードに対し命令すると、マスターノードのAPIによってワーカーノードにPod(コンテナのグループ)を割り当て、状態の管理ができます。
コンテナオーケストレーションであるKubernetesの登場で、アプリケーションの開発から公開までの一連の作業の自動化と高速化ができるようになりました。
コンテナオーケストレーションの今後
Dockerの誕生以降、コンテナオーケストレーションとして様々なツールが誕生しました。2020年現在、コンテナオーケストレーションとしてKubernetesが業界標準の地位を確立し、日本国内においても徐々に普及しはじめました。
Dockerはアプリケーションの基盤としてだけでなく、DevOpsやサーバーレスへの対応、マイクロアーキテクチャなどのクラウド環境におけるアプリケーション開発においても重要な存在となることが期待されます。
そのDockerを本番環境で運用管理し、分散アプリケーションの基盤として稼働させるための重要な役割を果たすのがコンテナオーケストレーションです。従来の仮想マシンでは繁雑な管理が求められた分散環境の構築が、コンテナオーケストレーションを使うことで、軽量かつ容易に実現できるようになったのです。
まとめ
サーバーを仮想化する技術は歴史が古く、これまで様々なツールが使われてきました。しかしコンテナの登場で分散アプリケーションのより効率的な開発が可能となり、複数のコンテナの管理を目的としたコンテナオーケストレーションとして、「Mesosphere DC/OS」や「Docker Swarm」「Cloud Foundry」など様々な選択肢がありました。
そのような状況で、2017年以降、コンテナオーケストレーションのデファクトスタンダードとなったのがKubernetesです。2018年からは本番環境で本格的に採用が進み、今後はサーバーレスへの対応など機能や品質面での改善が期待されます。