コンテナは仮想マシンを置き換えるものではない
Kubernetesは、Linuxコンテナの操作を自動化するためのオープンソース・ソフトウェアであり、コンテナ化したアプリケーションのデプロイ、スケーリング、管理が行えるコンテナオーケストレーションのシステムだ。コンテナオーケストレーションの仕組みとしては、実質的な業界標準のソフトウェアとなっている。
アプリケーションの開発、実行のためのプラットフォームとして、Dockerなどのコンテナが盛んに使われるようになった。背景には、企業が自社データセンターの利用を減らし、外部のクラウドサービスなどを利用するようになったことがある。さらにクラウドの利点を最大限に活かすクラウドネイティブなアプリケーションの開発、運用では、インフラも新しいものに変わらざるを得ず、そこでコンテナが選択肢になっているのだ。
これまでのアプリケーションのプラットフォームとしては、ハードウェアの上で直接OSを動かすものから、VMwareなどの仮想化サーバーを利用する仮想マシン環境に主力が変わっていた。これで、従来よりITシステム開発の迅速性は増した。とはいえ、仮想マシンを利用できるようにするには、数分から場合によっては数日かかることもある。一方、これがコンテナになると、ミリ秒から秒単位の時間で、環境をデプロイできる。さらに仮想マシンは基本的に立ち上げたまま利用するが、コンテナの場合は必要に応じ起動と停止を行い稼働を最適化しやすい特長もある。
このような違いから「仮想マシンとコンテナでは、ユーザーが異なると考えられています」と語るのは、ガートナージャパン リサーチ&アドバイザリ部門 テクノロジ&サービス・プロバイダー インフラストラクチャ ソフトウェア担当のシニア ディレクターでアナリストの桂島 航氏だ。ガートナーでは、仮想マシンをWave1の仮想技術とし、コンテナをWave2と位置づけている。Wave1では、IT部門の視点でインフラの信頼性や効率性を向上させるために仮想化技術を利用した。一方Wave2のコンテナは、開発のしやすさ、アジャイル開発のやりやすさなど、開発者に恩恵を与えるものだ。開発スピードを速め、そこからコストの最適化も行いやすい。
仮想マシンはIT部門がリードして導入されてきたが、コンテナの導入は開発者などからIT部門に依頼が来て動き出すことが多い。それを行ううちに、インフラを担当するIT部門においてもコンテナが軽くすぐに立ち上がり集約性も仮想マシンより高いことが理解され、さらに可搬性が高いこともメリットだと分かってくる。開発者にとってはコンテナであれば開発がやりやすく、ソフトウェアの開発サイクルをどんどん回せるようになる。これらから、コンテナ、そしてそれを効率的に管理するKubernetesに注目が集まっているわけだ。
コンテナに関してガートナーがクライアントなどから良く受ける質問としては、「コンテナは、エンタープライズ企業のメインストリームではまだ使われてないのでは」「コンテナは本番系に合わないのでは」「コンテナはマイクロサービスのための仮想化技術ですよね」「コンテナは仮想マシンを置き換えるものですか」などがある。
これらの質問に対する答えとしては、コンテナはグローバルで見れば既に本番系の運用環境でも利用され始めている。状態を保持しなければならないステートフルなアプリケーションの運用は難しい面もあるが、ステートレスのアプリケーションではコンテナが利用される。そしてマイクロサービスのためだけでなく、既に幅広いユースケースも出ている。さらにほとんどのコンテナが、仮想マシンの上で動いている現実もある。一方で、オンプレミスからクラウドへのシステムのリフトでは、コンテナより仮想マシンのほうが楽に移行できる場合も多いのだ。
コンテナを本番系で使っているかどうかに関する、ガートナーの2017年6月のグローバル調査の結果を見ると、2016年までに実装しているところが既に40%ほどある。「規模は小さくても、グローバルでは企業がコンテナを使い始めています。2017年中に使うと答えている企業も20%あり、日本もこの動きに追随して欲しいです」と桂島氏は言う。コンテナの実際の用途としては、新しいアプリケーションの開発の際に、マイクロサービスのためのプラットフォームとして利用される。これがコンテナではメインの使い方であり、クラウドネイティブな開発を行いたければ、PaaSよりもコンテナのほうがツールの選択肢が増え柔軟性も高くなる。
一方でDevOpsのためのプラットフォームとしては、グローバルで40%がコンテナを採用している。これら結果からは、コンテナやマイクロサービス利用の土壌が、グローバルでは整いつつあることが覗える。
「CI/CD(継続的インティグレーション/継続的デリバリー)が、コンテナ使う大きな動機になっています。クラウドへのリフト&シフトと同様で、まずはコンテナにとりあえず載せるだけといった使い方もあります。その上でリファクタリング (refactoring) し、アプリケーションをクラウドネイティブに作り替えるのです」(桂島氏)
アプリケーションをコンテナ化する際には、セキュリティとガバナンスの確保が1つのチャレンジとなる。仮想マシンでコンテナが立ち上がると、その上でどのようなアプリケーションが動くかまでは詳細に分からない。コンテナのイメージの中に脆弱性が含まれている可能性もある。そのため、アプリケーションの動きのモニタリング、ログをどう取得するか、問題が発生した際のトラブルシューティングなども十分に考えておく必要がある。コンテナを利用する際のデータ永続性の課題は、ベンダーでも良く話題にする。しかしながら実際に永続性が問題となるような使い方をしていないためか、現状では顧客の課題にはなっていないようだとも桂島氏は指摘する。