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