特別企画

コンテナ技術やNano Serverが実装されるWindows Server 2016

 5月の頭にダウンロードが可能になったWindows Server 2016 Technical Preview 2(以下、Technical Preview 2)は、Windows Server 2016のすべての機能が実装されたわけではないが、ある程度の概要を知ることができる。

 そこで今回は、Technical Preview 2の機能を、5月に米国シカゴで開催されたイベントの資料と、実際にインストールしたTechnical Preview 2から解説していく。

Windows Server 2016のコンテナ技術

 さまざまな機能強化が行われているWindows Server 2016だが、最も注目されているのが、Dockerなどで話題のコンテナ技術に対応したことだろう。

 コンテナ技術は、OSとアプリケーションを分離(コンテナ化)して動かす仮想技術の一種だ。

 仮想化といえばハイパーバイザーを用いる手法を思い浮かべる人が多いだろう。こちらの手法では、仮想マシンそれぞれの中にOSを用意してアプリケーションを動かしている。つまり、それぞれの仮想マシンには必ずOSが必要となる。

 それに対してコンテナ化では、OSはサーバーにインストールされているものが利用され、アプリケーションやミドルウェアなどが、1つのパッケージとしてコンテナ化される。例えば、複数のミドルウェアやアプリケーションが環境変数などを書き換えてしまう場合、相互に影響を受けてあるミドルウェアやアプリケーションは動作しなくなるだろう。しかしコンテナ技術では、ベースとなるOS部分は共通のものを利用しつつ、書き換えが起こる環境変数部分などについては、コンテナ内部に仮想化したものを用意する。これにより、1つのOS上で、異なる環境変数の値を参照するミドルウェアやアプリケーションを動かすことができるわけだ。

 従ってコンテナ技術を使えば、仮想マシンごとにOSをインストールする必要がないため、システムの負荷も小さくなる。開発に関しても、環境が異なる開発機でシステムを開発しても、コンテナ化して運用機に持っていくだけで、きちんと動作する。Linuxなどでは、コンテナ化したパッケージをコピーするだけで、インストールが終了してしまうほど、デプロイメントが簡単になる。

 しかしコンテナ化は、OSの内部を深く知っていないと実現できない。このため、オープンソースのLinux OSでコンテナ技術の採用が先行していたが、Microsoftでも、Windows OSをコンテナ技術に対応させるという表明を2014年秋に行い、今回のBuild 2015やIgniteである程度の情報を公開した。

 Windows Server 2016では、2つのコンテナ技術が用意された。Windows Server Container(以下、WSコンテナ)とHyper-V Container(以下、Hyper-Vコンテナ)だ。

 WSコンテナは、ハイパーバイザー技術は用いずに、Windows Server上で動作するコンテナだ。一方のHyper-Vコンテナは、コンテナの下に新たにコンテナ技術に対応したHyper-V(ハイパーバイザー)を用意することで、コンテナ自体を、完全にプロセスが分離した仮想環境で動作できるようになる。

Windows Server 2016では、Windows ServerコンテナとHyper-Vコンテナという2つのコンテナ技術が用意された
WSコンテナは、OSの上にコンテナ化されたミドルウェアとアプリケーションを置いて動かす。Hyper-Vコンテナは、OS上にハイパーバイザーをおいて、アイソレーションしたコンテナを動かす

 Microsoftが2つの方式を採用するのには、もちろん理由がある。コンテナ技術の問題点として、各コンテナが使用するハードウェアリソースをうまく管理できないということがあった。例えば、あるコンテナが異常にハードウェアリソースを消費すると、ほかのコンテナの動作にもしわ寄せが来てしまっていた。

 これを解決するため、Linuxなどでは、いくつかの管理ツールがオープンオープンソースで開発されているし、コンテナ技術の代表といえるDockerでも、コンテナな使用しているリソースをチェックできるようになってきている。

 これに対してHyper-Vコンテナでは、軽量のハイパーバイザーを使うことで、コンテナが使用するリソースを管理し、ほかのコンテナに悪影響ができないようにしようとしている。ただ、Hyper-V上にOSをインストールしてコンテナ化するのでは、ハイパーバイザーによる仮想化と変わらない。今回、詳細までは明らかにされていないが、新しいHyper-Vにコンテナ化に対応した機能が用意され、現在のHyper-Vよりも軽いハイパーバイザーが提供されるのかもしれない(この場合、OS部分がどうなるかなどはまだわからない)。

 またHyper-Vコンテナは、仮想環境においてネスティングされる。つまり、仮想マシンの上にHyper-Vのハイパーバイザーを動作させ、その上でHyper-Vコンテナを動かすことができる。このため、ハイパーバイザーが2段重ねて動くことになる(下図参照)。

 この場合、別の仮想マシンでは、LinuxなどのほかのOSが動作したり、WSコンテナが動作している仮想マシンがあったりする。自由度が高くなるので、パブリッククラウドなどや大規模なプライベートクラウドでは、大きなメリットになるだろう。

 ただし、ハイパーバイザーが2段重ねになるため、パフォーマンスの問題や下層のハイパーバイザーがハイパーバイザーのネスティングをサポートしているかなどが問題になる。このため、Hyper-V環境でしかサポートされないだろう。また、パフォーマンスを向上させるために、サーバープロセッサが持つ最新の仮想化支援機能が必要になると予測している。

 WSコンテナに関しては、今年の夏ごろにプレビュー版が用意される。Hyper-Vコンテナに関しては、現在のプランでは年内ぎりぎりにはプレビュー版が登場するだろう。実際にプレビュー版がリリースされることには、内部の詳細もわかってくると思われる。

仮想化されたサーバーにネスティングしてハイパーバイザーを置き、Hyper-Vコンテナを動かすことも可能
WSコンテナは夏にプレビュー、Hyper-Vコンテナは年内にプレビューがリリースされる予定

Windows SeverをコンパクトにするNano Server

 Windows Server 2016では、Windows Serverを根本的に作り直したNano Serverが用意されている。

 これまでのWindows Serverでも、OSのフットプリントをコンパクト化するため、Server Coreなどが用意されてきた。デスクトップUIを削除し、GUIベースのサーバーマネジャーさえ使用しないServer Coreは、Windows Updateなどで必要とするパッチの数も、フルWindows Serverの1/2以下になるなど、コンパクトなServer OSになっていた。

 しかし、クラウド時代を考えるとServer Coreよりももっとコンパクトで軽いサーバーOSが必要とされてきている。最近では、Docker Engineに特化したCoreOS、Xen Projectで開発されているMirage OS、OSvなど、いくつかのOSがリリースされている。そうしたものに対抗するためにMicrosoftが用意したものが、Nano Serverだ。

 Nano Serverは、ディスクのフットプリントが0.4GB(Server Coreは約5GB)、カーネルが使用するメモリは61MB(Server Coreは139MB)と、Server Coreに比べるとかなり小さなOSになっている。

Nano Serverは、Server Coreよりもコンパクト
カーネルが使用するメモリ量もServerコアの半分以下
ディスクのフットプリントは、0.4GB(約400MB)と信じられないほどコンパクト

 もっとも、Windows Serverを徹底的にリファクタリングして、コンパクト化を図っているため、Server Coreなどと比べると機能が大きく削減されている。

 例えば、Nano Serverでは、Win32APIのサブセットがサポートされている。さらに、動作アプリケーションの基本としては、CoreCLR、ASP.NET5が前提となる。つまり、Nano Serverは、Windows Serverといっても.NETベースのアプリケーションの動作が中心となる。

 また、Hyper-Vなどのハイパーバイザーの機能、サーバーのロール、各機能などは用意されていない(インボックスドライバもない)。このため、Hyper-Vの仮想マシン上で動作するOS、WSコンテナ、Hyper-VコンテナのOSとして利用される。

 面白いのは、Nano Serverにはコンソールさえも搭載されていないことだ。このため、サーバーにインストールしても、Nano Serverは画面に表示もでないし、キーボード入力も受け付けない。

 現状では、Nano Serverを管理するためには、WinRS(Windowsリモートシェル)/WinRM(Windowsリモート管理)、WMIによるリモート管理、Power Shellのリモート版など使用することになる。

 Windows Server 2016のリリース時には、新しいHyper-VマネージャでNano Server用の管理ツールが用意される。また、Visual Studioからの操作できるようになる(Nano Server向けのソフトを開発し、Nano Server自体をパッケージ化するため)。

 現在、Technical Preview 2にもNano Serverは用意されている。しかし、インストールオプションではインストールできない。ユーザー自身の手でISOファイルの中に入っているNano Server(Windows Imaging形式)を、DISM(Deployment Imaging Servicing and Management Tool)でインストール可能な形に構成する必要がある。例えば、ドライバなどもユーザーが明示的にセットアップする必要がある。

 結構DISMで構成するには面倒なステップを踏む必要がある。できれば、簡単に構成できるようになるツールなどがあると便利だ。Visual Studioでサポートされるのも、このあたりが理由かもしれない。

 なお、インストールに関する詳細は前回の記事で説明しているので参考にされたい。

サーバーロールやオプションフューチャーは、Nano Serverを作るときに構成する。Nano Server自体では機能追加はできない
Nano Serverは、リブートの回数、致命的なエラーなどの数もフルスタックのWindows Serverに比べると小さい
Technical Preview 2では、ISOのディレクトリにNano Serverが入っている。インストールオプションには表示されない
DISMでドライバーのインストールや構成を行う必要がある

その他の機能強化

 なお、Windows Server 2016は、コンテナ技術やNano Server以外に、以下の機能が搭載されている。

・Active Directory(AD)にクラウドAD(Azure AD)に対応した機能の追加
・ハイパーバイザーのHyper-Vの機能強化
・サーバー向けに作られるAnti Malwareの追加
・リモートデスクトップサービスの機能強化(Open GL、Open CLのサポート)
・ストレージのQoSをサポートするFile and Storageサービスの追加
・ローリングアップデートに対応したフェールオーバークラスターのサポート
・新しいWebアプリケーションプロキシ
・Windows Server 2016のほとんどの機能をコントロールできるPowerShell 5.0(PowerShell Desired State Configuration=DSCのサポート)
・DNSやDHCPの機能強化
・ネットワークの仮想化を行うGeneric Routing Encapsulation(GRE)のトンネリングをサポート

Windows Server 2016のADは、クラウドのAzure ADと密に連携するようになる。
Windows Server 2012 R2のADからWindows Server 2016のADへの移行は、非常に簡単。Windows Server 2016をドメインにジョインさせ、Windows Server 2012 R2のADデータをレプリケーションすればOK
Windows Server 2016のHyper-Vでは、FailOver Clusterのローリングアップデートが可能になる。クラスタを組んでいるうちの、あるサーバーをクラスタから外し、Windows Server 2016にアップデート後、再度クラスタに組み込む。後は、別サーバーで動作しているVMをWindows Server 2016に移動し、あいたサーバーを再度Windows Server 2016にアップデート。これを繰り返し、最終的にWindows Server 2016のクラスターにアップデートする
Windows Server 2016のHyper-Vでは、各レイヤでセキュリティに関する機能強化が行われている
Bitlockerを使って、VMをシールドするShielder VMなどが用意された。このために、仮想マシンに仮想化されたTPMをサポートした
セキュアブートは、仮想マシンのLinux上でサポートされた
Storage QoSも機能強化されている

*****

 Windows Server 2016を見ていると、今までのサーバーOSとは異なり、オンプレミスよりもクラウドなどでの動作にチューニングしたサーバーOSという印象を受けた。

 特に、コンテナ化やNano Serverは、現在クラウドで注目されているMicroservicesを実現するためのプラットフォームになるだろう。Microservicesは、SOAやWebサービスといった概念と同じようなもので、コンパクトな単機能のシステム(OSも含む)を多数組み合わせて、大きなシステムを作り上げようというモノだ。

 Microservices化することで、モノリシックなシステムよりも、機能の追加を行いやすくなるし、システムのデバッグもモジュール単位になるため、やりやすくなる。今後、クラウドが主流になるにつれ、モジュールをMicroservices化することで、スケールアップ/ダウンすることも容易に行えるようになる。

 また、新しいPowerShell 5.0の機能を見ていると、Windows Server自体をSystem Centerのオートメーション化機能に取り込もうとしているようだ。できるだけ、PowerShellベースのコマンドラインでの動作を可能にすることで、サーバーやクラウドをSystem Centerで管理しようとしているのだろう。こういったことも、Microsoftのクラウドファーストというコンセプトに従ったものだといえる。

 Windows Server 2016のリリース自体は、2016年になった。Windows 10は今年の夏にはリリースされるが、2016年の春もしくは夏ごろには、大規模なアップデートが計画されている。たぶんWindows Server 2016は、Windows 10の大規模アップデートを反映した形でリリースされるため、2016年の秋もしくは冬ごろのリリースになるだろう。

 クライアントOSのWindows 10に関しては、Igniteのセッションで最後のメジャーアップグレードになると明言している。今後は、Windows 10を数カ月ごとの小さなアップデート、半年、1年ごとに大規模アップデートを繰り返すことになる。

 Windows Serverに関しては、どうなるか明言はされていない。現場では年号がついたブランド名になっているため、将来的にメジャーアップデートが存在するのだろう。ただ企業においては、2~3年でのアップデートは負担が大きい。今後は、IT管理者が必要とする新機能をベースとなるWindows Serverに取り込むことで、新しいWindows Serverがリリースされるようになるのかもしれない。

 もしかすると、そのときにはブランド名として、Windows Serverと言われ、2019年版とか、2020年春版とか言われるようになるのかもしれない。

Windows Server 2016は、Azureと組み合わさって、Microservicesを構成するプラットフォームになる
Windows Server 2016は、全面的にリファクタリングして、Nano Server、コンテナ技術、Server Core、GUIを含むフルスタックのWindowsなどで構成されている
Windows Server 2016と同時にリリースされるOperations Management Suiteを使えば、オンプレミス、Azure、AWSなどのパブリック クラウドも一緒に管理できる

山本 雅史