全4989文字
PR

コンテナ活用には、「Kubernetes」などの管理ツールが欠かせない。パッケージやクラウドサービスを利用すればセットアップの手間を省ける。コンテナと仮想マシンを容易に一元管理できる製品も現れた。

 コンテナはOSのプロセスを名前空間(ネームスペース)の技術を使って分離、独立させた仮想環境だ。利点は幾つもあるが、コンテナに詳しい日本IBMの高良真穂クラウド&コグニティブ・ソフトウェア事業部ハイブリッドクラウドCTOは「イミュータブル(Immutable、不変)」を強調する。「オープンソースソフト(OSS)を活用しコード量を減らす開発スタイルがはやっている。しかしOSSの機能拡張やパラメーター変更に追随していくのは大変だ。そこでOSSのある時点のスナップショットをコンテナにしてアプリとその実行環境を不変なものとして運用することにより、安定性を確保できる」。

 例えば米ドッカーの仕様にのっとったDockerコンテナなら、アプリの実行に必要なコード、ランタイム、ツールやライブラリー、設定情報などを「Dockerイメージ」としてまとめて管理できる。このイメージを開発環境からテスト環境、本番環境に素早く展開することで、アプリの改変スピードを上げられる。

 ただし本番環境でアプリを安定運用するには、性能や拡張性、セキュリティーといった非機能要件を的確に満たす必要がある。その役割を担うのが、複数のコンテナをまとめて管理するコンテナオーケストレーターだ。代表格はOSSの「Kubernetes」である。

図 オーケストレーター「Kubernetes」の構成
図 オーケストレーター「Kubernetes」の構成
複数のコンテナを一元管理
[画像のクリックで拡大表示]

 Kubernetesの基となったのは、米グーグルが自社サービスの基盤向けに開発した「Borg」だ。同社がBorgをベースにしたKubernetesをOSSとして公開した後、非営利団体のCNCF(Cloud Native Computing Foundation)の下で開発が進められている。

 Kubernetesは「Pod」という単位でコンテナを管理する。Podには1つ以上のコンテナが含まれる。日本IBMの高良ハイブリッドクラウドCTOは「個々のコンテナは単機能のアプリを動かすとしても、Podに含まれる複数のコンテナを組み合わせて動かすことで、容易に多機能なアプリを実現できる」と活用法を説明する。

 Kubernetesでは、ユーザーが初期や最小・最大のPod数を設定し、CPUやメモリーのしきい値をトリガーにしておけば、処理負荷に応じて自動でPodの数を増減させる。Podのリソース管理や通信、永続ストレージの管理などの機能も提供する。

 日本マイクロソフトの樽澤広亨シニア・クラウド・ソリューション・アーキテクトは「これまでOSが担っていた役割をKubernetesが果たすようになった。しかも最近は安定性が増してきた」と現状を話す。

 安定性向上の要因の1つとして挙げるのが、標準の確立である。「コンテナイメージやコンテナエンジン向けのAPIであるOCI(Open Container Initiative)や、Kubernetesとコンテナとの間のインターフェースであるCRI(Container Runtime Interface)の標準化が進んできた。OCIとCRIに準拠したコンテナなら、Kubernetesで問題なく動く」(樽澤シニア・クラウド・ソリューション・アーキテクト)。