DXの根幹を支える「仮想化」と「コンテナ」
「デジタルトランスフォーメーション(DX)」の推進においては、価値創出の基盤となるITインフラのあり方、組織で行うシステム開発や運用の方法論を、継続的にアップデートしていくことが、重要な取り組みのひとつです。
インフラであれば、「オンプレミス」から、ハードウェアライフサイクルに縛られず、必要なリソースを柔軟に調達できる「クラウド」へ。システム開発においては、クラウド活用を前提に、ビジネスニーズに即したアプリケーションを迅速に立ち上げ、継続的に改善を続ける「DevOps」の実践を視野に入れた方法論を取り入れていくというのが、現在の大きなトレンドになっています。
こうしたトレンドを受け、確実に重要さを増しているのが、「仮想化技術」と、その延長線上にある「コンテナ」と呼ばれるテクノロジです。今回は、この「仮想化」と「コンテナ」について取り上げます。
コンピューティングのパラダイムを変えた「仮想化」技術
「仮想化」は、企業のITインフラを構成する技術として、既に広く活用されていますので、「よく知っている」あるいは「もう使っている」という方も多いかもしれません。ここでは「サーバ仮想化」について、簡単におさらいをします。
ユーザーからのさまざまなリクエストに対して、何らかの処理を行い、結果となるデータを保存したり、要求元に返したりといった役割を持つ「サーバ」には、高い処理能力や信頼性が求められます。そのため、従来の「サーバ」は、専用のハードウェアやOSで構成される、高価なものが一般的でした。こうした「サーバ」を、個人向けのパソコンと共通の技術仕様や部材などを利用して、より安価に提供できるようにした、いわゆる「PCサーバ」が普及しはじめるのは、今から20年ほど前のことです。
当時のPCサーバでは「1つの物理サーバで、1つのシステムを動かす」のが普通でした。理由としては、物理サーバ1台あたりの処理能力が、今よりも圧倒的に低く、1台のサーバに複数の機能を持たせると、パフォーマンスや安定性に悪影響が出るケースが多かったことがあります。その後、PCサーバの技術は進歩し、物理サーバに搭載されるCPUは大幅に高性能化します。また、扱えるメモリ容量も増え、1台の物理サーバで複数のシステムを同時に動かせるだけの余力が生まれました。
「サーバ仮想化」では、サーバのハードウェアが提供する環境を、ソフトウェアで擬似的に作り出します。こうした環境を作るためのソフトウェアを「仮想化基盤」、その上で稼働するソフトウェア的なサーバを「仮想サーバ」あるいは「仮想マシン(VM)」と呼びます。「仮想サーバ」には、物理サーバと同じようにOSやソフトをインストールして動かすことができます。仮想化基盤を利用すると、1つの物理サーバに、複数の仮想サーバを置いて、同時に動かせます。それぞれの仮想サーバは、仮想化基盤の機能を通じて、高い独立性を持った別のサーバとして動かせるため、1つの物理サーバ上で複数のシステムを動かす場合と比べて、安定性も高くなります。
その後の「サーバ仮想化」技術の成熟は、従来の「1つのシステムを動かすために、個別の物理サーバや環境を用意する」ことでユーザーの負担となっていた、さまざまな問題を解決しました。従来であれば、システム構築の度に、物理的なハードウェア機器の調達、導入、運用管理が必要で、その対応に多くの時間とコストが必要でした。また、ハードウェアは、保守が終了するタイミングでの更改が必要なため、多数の物理サーバを運用している企業ほど、その負担も大きくなっていました。
現在のサーバ仮想化では、複数の仮想サーバで物理サーバを共有できることに加え、複数の物理サーバが持つCPUやメモリ、ストレージといったリソースを仮想的に統合し、「リソースプール」として管理できるようになっています。これによって、「調達や運用にコストがかかる物理サーバは、潤沢なリソースを備えたものを数台導入し、その上で多数の仮想サーバを動かして、効率的にリソースを利用する」ことができるようになりました。保有する物理サーバの台数が減ることは、ハードウェアの調達から運用にかかる企業の負荷軽減に直結します。
そして仮想化は、現在提供されている、あらゆる「クラウドサービス」の重要な技術的基盤にもなっています。高度な仮想化技術をベースに提供されるクラウドを活用することで、企業はハードウェアのライフサイクルから脱却し、ITリソースを自社で「保有する」のではなく、必要な時に必要な分だけ、ネットワークを介して「利用する」というスタイルへの転換が可能になったのです。
「コンテナ」技術が求められた背景と得られるメリット
現在普及が進んでいる「コンテナ」は、概念としては「サーバ仮想化」の延長線上にある技術と言えます。コンテナ技術が急速に注目を集める背景には、ビジネスからの要求に対して、ITシステム(アプリケーション)を迅速に開発し、継続的に改善できる、効率的なDevOpsへのニーズが高まっていることがあります。
サーバ仮想化では、物理的なハードウェア機器を「仮想化」していましたが、「コンテナ」では、さらにその上のレイヤにある「アプリケーション」を実行するための各種実行環境や設定をコード化して管理します。特定のアプリケーションを動かすために、システム上で必要なもの一式をひとまとめにする(コンテナ化する)ことで、実行環境の配布と共有が容易になります。またコンテナでは、複数のアプリケーション実行環境がOSを共有するため、OSが提供するリソースを、より効率的に利用できます。
サーバ仮想化では、開発や本番稼働のためのシステム環境を新たに整えたい場合、物理サーバよりは容易であるものの、必要なOSやミドルウェアなどを導入した仮想サーバを準備し、その上で作業を進める必要がありました。「コンテナ」を利用すると、基本的に開発対象となるアプリケーションと、その実行環境だけを考慮すればよいため、下準備を省いて素早く開発に着手し、付加価値を生むためのビジネスロジックの作成により多くのリソースを割けるようになります。
現在、デファクトスタンダードとなっているコンテナ技術は「Docker」と呼ばれるものです。以下に、主にシステム開発、運用の観点から、コンテナを利用することで得られるメリットを挙げます。
1.OSレイヤの構築・運用がオフロードできる
サーバ仮想化では、仮想サーバの利用者自身がOSレイヤを自前で構築し、管理することが必要です。一方、コンテナでは、利用者がOSレイヤの構築、運用管理から解放されます。これによって、より迅速なシステム開発が可能になります。
2.サーバリソースの高効率な運用と軽量な起動プロセス
コンテナでは、複数のコンテナイメージでひとつのOS環境を共有するため、仮想サーバよりも、さらに高い効率でハードウェアリソースを利用できます。また、コンテナはOS上の「プロセス」として起動するため、仮想サーバよりも軽く、速く立ち上げることが可能です。これによって「システム起動」「アプリケーションの入れ替え」「障害時の再起動」などがより短時間で行え、可用性の向上が期待できます。
3.アプリケーションと実行環境の依存関係を簡略化
通常、アプリケーションの実行環境では、プログラムが動作するために必要なソフトウェアのバージョンに依存関係があります。仮想サーバでは、アプリケーションの実行環境ごとに、この依存関係を満たす設定が必要となり、その数だけ仮想サーバを用意しなければなりません。これは、環境準備や運用に掛かる時間と負荷を増やします。
一方、コンテナでは、バージョンの依存関係をパッケージングし、コンテナ自体に含めることができます。これにより負荷が大幅に軽減され、より迅速にアプリケーションを開発、展開できるようになります。
4.高いポータビリティ(可搬性)
通常のシステム開発では、「開発」「検証」「本番」といったフェーズごとに環境が分けられており、アプリケーションを各環境にリリース(配布)して作業を進めます。その際、配布時の手順ミスや、配布先の環境の違いによる障害が発生することも少なくありません。
コンテナの特性として、コンテナイメージ自体に「環境」を含められることによる、ポータビリティ(可搬性)と独立性の高さが上げられます。これによって、前述のような手順ミスや環境の差異に起因する障害発生を防ぐことができます。特に本番環境へのリリース時に障害が発生した場合は、コンティンジェンシープラン(緊急対応計画)の発動によって本番環境を元に戻すために多くの作業の手戻りと工数が発生します。コンテナを活用することで、リリース作業をコンテナイメージの差し替えに集約でき、より容易で安全なリリースを実現することが可能です。
コンテナの高いポータビリティは、企業のITインフラがマルチクラウド環境や、オンプレミスとのハイブリッドクラウド環境である場合でも、配布先の環境に依存しないシステム開発と展開を実現する上で役立ちます。
5.マイクロサービス化の促進
コンテナの持つポータビリティ、独立性の高さは、企業が自社のITアーキテクチャをマイクロサービス化していく際にも役立ちます。マイクロサービスは、疎結合なサービスを組み合わせて大きなサービスを実現するアーキテクチャです。そのため、実行環境を内包したまま、複数の環境にアプリケーションが配布できるコンテナを、マイクロサービスを構成する仕組みとして採用する動きが一般的になっています。
サーバ仮想化による「クラウドリフト」からその先の「シフト」へ
ここまで、コンテナ技術のメリットを挙げてきましたが、企業で活用する上でのデメリットもあります。現時点で、コンテナ活用のハードルを上げている最大の要因は、大規模環境における運用管理の煩雑さです。
実際に、コンテナ技術を採用してシステムを構築する場合には、機能ごとにパッケージングされたコンテナ同士の連携のほか、特に本番環境を安定して運用するための、パフォーマンス、拡張性、可用性、セキュリティといった、さまざまな要件を整える必要があります。こうしたコンテナの実行環境を整えるプロセスは「コンテナオーケストレーション」と呼ばれており、この領域でのデファクトスタンダードが「Kubernetes」というOSSです。
コンテナ技術であるDockerも、それをオーケストレーションするKubernetesも、現在進行形で急速な進化を続けているプロダクトであり、本格的な導入や運用にあたっては、それぞれに特有のスキルや、最新動向へのこまめなキャッチアップが欠かせません。ただ、そのための人材確保や情報収集は、一般的な企業には荷が重いため、ITベンダーやクラウドベンダーではソリューションを提供しています。
例えば、Kubernetesについては、OSSとして利用できる多数のコンポーネントの中から検証済みの「おすすめ」構成をパッケージ化し、サポートと合わせて提供しているベンダーがあります。また、主要なクラウドサービスでは、Kubernetesベースのオーケストレーション環境をマネージドサービスとして提供するところが増えています。まずはこうしたものから使い始めてみるのが、早期にコンテナ技術から恩恵を受けたい企業にとっての近道と言えます。
今日、「仮想サーバ」や「コンテナ」といった技術は、クラウドで提供される主要なコンピューティングサービスの一部となっており、すぐに利用を始めることが可能です。クラウドから最大限のメリットを引き出すためには、「仮想サーバ」から「コンテナ」へとテクノロジが進化した背景を理解し、目標に合わせて、使う技術もアップデートしていくことが重要です。
サーバ仮想化は、クラウドでは「IaaS」に該当しますが、IaaSのみの利用(クラウドリフト)に留まっている間は、前述のように「ハードウェアライフサイクルからの脱却」が、得られるメリットの大部分を占めます。そこから一歩進んで、コンテナや、オーケストレーションのマネージドサービスといった、クラウドならではの最新技術を活用すること(クラウドシフト)によって、クラウドネイティブを指向したビジネスニーズに即したアプリケーションを迅速に立ち上げ、継続的に改善を続ける「DevOps」へ近づくことができます。
DXを効果的に進めるためには、変化するビジネス環境へ迅速に対応できるアジリティを獲得し、スピーディな価値提供を実践していくことが不可欠です。企業には、そのためのテクノロジが持つ意味と恩恵を理解し、使いこなしていく姿勢が求められるでしょう。
著者:藤井 崇志
Ridgelinez株式会社 アーキテクチャ&インテグレーション
T ベンダーにてミッションクリティカル領域のプロダクト開発に従事。 米国駐在を経て、国内外システムの現状分析・構想策定・システム構築/運用をサポートし、グローバル企業のDXプロジェクト推進に貢献している。 AWS / Azure / Google Cloudの各アーキテクト認定(エキスパート/プロフェッショナル)を保有し、主にクラウドネイティブおよびマルチクラウド利活用の知見をベースとしたテクノロジーコンサルを行う。