サーバは使い捨ての消耗品になっていく

手厚く管理されたオンプレミス

企業向けのシステム開発では今もオンプレミスのシステムが多く使われているでしょう。オンプレミスのサーバは冗長化され、専任の担当者が手厚く保守を実施しています。

オンプレミスは維持するためにコストを要し、また性能が足りない場合には物理的にハードウェアを増強しなければならないので、迅速に対応するのが困難です。それでもミッション・クリティカルで、処理量が大きく変わらない用途であれば今後も有力な選択肢と言えるでしょう。

クラウドという選択肢

近年、クラウドの登場により迅速に計算資源を調達できるようになりました。

とはいえ、実際にはそれほど単純ではありません。クラウドで注文したサーバにはOSしか入っていないため、設定をしたりミドルウェアやアプリケーションを導入したりという作業が必要です。また、アプリケーションがサーバ内に何らかのデータを保管している場合、サーバを削除すればそのデータも一緒に消えてしまうので、バックアップしたり、他のサーバに引き継ぐ必要があります。

Dockerの登場

Dockerはコンテナ仮想化技術を用いてアプリケーションを稼動するためのプラットフォームです。Docker上のアプリケーションは、ネットワーク、ファイルシステム、ユーザ空間が分離された「コンテナ」内で動作するため、あたかも別のマシンで動いているかのような状態で稼動します。

一方でこのときLinuxカーネルは共有されるため効率が良く、仮想マシンに比べて起動も高速です。Dockerの特徴の1つがDockerfileです。ここにOSの設定やミドルウェア、アプリケーションのインストール手順を記述しておき、コンテナ・イメージとしてビルドしておくことで、同一の環境をいつでも再現できるようになります。

コンテナ化アプリケーション

コンテナ内でアプリケーションが動作するようにすることをコンテナ化といいます。コンテナ内の環境は再起動された時に全て元に戻ってしまうので、ファイルでアプリケーションデータを保管したり、ログを残したりしても全て消えてしまいます。

従ってデータはコンテナ外のDBなどの永続化層にのみに保存し、ログは適宜コンテナの外に転送するといった工夫が必要となります図1⁠。

図1
図1

OSの設定、ミドルウェア、アプリケーションの導入はコンテナ・イメージがあればいつでも復元でき、アプリケーションをコンテナ化することでもはやサーバ内に独自のデータを持つ必要がなくなりました。いよいよサーバを使い捨てにする準備が整ったのです。

Kubernetesの登場

Kubernetesはクラスターオーケストレーションシステムと呼ばれ、コンテナ化されたアプリケーションを複数のサーバ上で分散実行することができます。いわば使い捨てのサーバ資源を負荷に応じてアプリケーションに割り当てる役割を果たします図2⁠。

図2
図2

目で見て体験! Kubernetesのしくみでは、Raspberry Piのクラスタに自分でKubernetesを導入します。その上で動作を目で確認できるLチカWebサーバを導入してKubernetesの動作の詳細を確認していきます。動画も用意されていますので、Kubernetesの動作を確認してみてください。

花井志生(はないしせい)

C/C++を用いた組み込み機器(POS)用のアプリケーション開発に携わったのち,10年ほどでサーバサイド軸足を移し,主にJavaを使用したWebアプリケーション開発に従事。2015年夏からクラウドを用いたソリューションのテクニカルコンサルティング,PoCを生業としている。主な著書にJava,Ruby,C言語を用いたものがある。