仮想化道場
Dockerコンテナの実行環境に最適化されたRHEL Atomic Host
(2015/5/4 06:00)
Atomic HostはDockerにチューニングしたLinux
Atomic HostがRHEL 7と異なるのは、Linuxカーネルなど、必要最低限のシステムソフトしか搭載されていない点だ。RHEL 7が持つ6000以上のコンポーネントから、Docker環境に必要な300コンポーネントにダイエットしている。
その結果、使用するメモリとしては200MBほど、ディスク容量としては1GB程度と非常にコンパクトになっている(この数字はAtomic Hostを単にインストールするための容量で、もちろん、コンテナを動かすことで使用するリソースは増えていく)。
具体的には、RHEL 7のLinuxカーネル、セキュリティ関連のSELinux、systemd、tunedなどが入っている。逆に、追加された機能としては、Dockerを動かすためのインフラ、アップデートを行うrpm、複数のDockerコンテナを管理するオーケストレーションツールのKubernetesなどがある。
Kubernetesは、数百、数千のDockerコンテナを管理するためのオープンソースソフトウェアだ。Dockerは、アプリケーションや動作環境を一つ一つコンテナ化することはでき、個々のコンテナの起動のコントロールは行える。しかし最近のサービスは、複数のサーバーが組み合わさって出来上がっている。例えば、受発注システムなら、フロントエンドにWebサーバーが置かれ、データ処理を行うビジネスロジック部、バックエンドのデータベース、在庫システム、経理システムなどが連携することになる。
このようなサーバー間の依存関係を考えて、起動する順番をコントロールしたり、個々のコンテナがきちんと動作しているかどうかの死活管理を行ったりする必要があるし、システムがクラッシュした場合は、リカバリを行う必要もあるだろう。さらに、Webサーバーへのアクセスが増え、一定以上の負荷がかかった場合は、複数のサーバーを自動的に起動していくオートスケールの仕組みと連携することもある。
Kubernetesでは、こういったDockerコンテナの管理を行う役目を担っている。もともとは、Googleが自社のデータセンターの運用のために開発した管理フレームワークをオープンソース化したものだが、プロジェクトには、Microsoft、Red Hat、VMware、IBMなどが参加しており、Dockerの管理フレームワークとしてはスタンダードなソフトウェアと言っていいだろう(Kubernetesは、OpenStackで動作するようになっている)。
もう1つAtomic Hostでは、RHEL 6との互換性を保証している。つまり、RHEL 6上で動作しているアプリケーションをコンテナ化して、RHEL 7ベースのAtomic Host上で動かすことができる。ユーザーとしては、RHEL 6環境を簡単にRHEL 7上に移行することができる。
ただしRed Hatでは、RHEL 5以前のアプリケーションをAtomic Host(RHEL 7ベース)で動かすことは保証していない。古いバージョンのRHEL OSのアプリケーションは、コンテナ化しても、Atomic HostのベースOSがRHEL 7になっているため、互換性の問題で動作しないこともあるからだ。このあたりは、ハイパーバイザーによる仮想化を使って、古いRHELを仮想マシンで動かすべきだろう。
また、LinuxのディストリビューションのCentOSやUbuntu上で作られたコンテナをAtomic Hostで動作することも保証していない。テクノロジー的には、CentOSやUbuntu上で作られたコンテナはAtomic Hostで動く可能性が高いが、Red Hatがきちんと動作保証しているのかというのは別問題だ。