より速く、より小さく、より軽く、 新基盤 Nano Server(後編)

次期Windows Serverとなる予定の「Windows Server 2016」には注目されるべき新しいテクノロジーがいくつか実装される予定となっています。前回までにご紹介したコンテナ技術はそのうちの1つです。そして、さらにもう1つ注目すべきテクノロジーとして、「Nano Server」が提供される予定です。「Nano Server」とはいったいどういうものなのか、その役割、構築方法など、Windows Server 2016 Technical Preview 3がリリースされた現在までに明らかになっている範囲でご紹介していきます。
後編では、Nano Serverの操作、設定、機能の追加について解説します。
※本記事はWindows Server 2016 Technical Preview 3を元に作成されています。今後のリリース内容により仕様等が変更される場合があります。
Nano Serverの操作
Nano Serverへは、まずはPowerShellからリモートで接続して、設定変更などを行います。TP3のHyper-V上のNano Serverであれば、ネットワーク設定をすることなしにPowerShell Directの機能を使って、“Enter-PSSession”や“Invoke-Command”を使って、直接Hyper-Vホスト上から操作することが可能です。ですが、今回はWindows Server 2012 R2のHyper-V上でNano Serverをインストールしているため、ネットワーク設定を行い、リモートからPowerShellで操作することになります。今回はHyper-VホストからPowerShellでリモート接続するので以下の設定を行います。
- Nano Server IPアドレス:192.168.0.1
 - Hyper-Vホスト:192.168.0.2
 
事前に、Nano Serverの仮想マシンの設定にて「ゲストサービス」を有効にします。
PowerShellを管理者権限で起動して、以下のスクリプトでNano ServerにIPアドレスを設定します(DHCPサーバーからIPアドレスを取得している場合は必要ありません)。
$VMName = "Nano01"
$IP = "192.168.0.1"
$Subnet = "255.255.255.0"
$Gateway = "192.168.0.254"
$DNS = ("192.168.0.10", "192.168.0.11")
$Msvm_VirtualSystemManagementService = Get-WmiObject -Namespace root\virtualization\v2 -Class Msvm_VirtualSystemManagementService
$Msvm_ComputerSystem = Get-WmiObject -Namespace root\virtualization\v2 -Class Msvm_ComputerSystem -Filter "ElementName = '$VMName'"
$Msvm_VirtualSystemSettingData = ($Msvm_ComputerSystem.GetRelated("Msvm_VirtualSystemSettingData", "Msvm_SettingsDefineState", $null, $null, "SettingData", "ManagedElement", $false, $null) | % {$_})
$Msvm_SyntheticEthernetPortSettingData = $Msvm_VirtualSystemSettingData.GetRelated("Msvm_SyntheticEthernetPortSettingData")
$Msvm_GuestNetworkAdapterConfiguration = ($Msvm_SyntheticEthernetPortSettingData.GetRelated("Msvm_GuestNetworkAdapterConfiguration", "Msvm_SettingDataComponent", $null, $null, "PartComponent", "GroupComponent", $false, $null) | % {$_})
$Msvm_GuestNetworkAdapterConfiguration.DHCPEnabled = $False
$Msvm_GuestNetworkAdapterConfiguration.IPAddresses = $IP
a
$Msvm_GuestNetworkAdapterConfiguration.Subnets = $Subnet
$Msvm_GuestNetworkAdapterConfiguration.DefaultGateways = $Gateway
$Msvm_GuestNetworkAdapterConfiguration.DNSServers = $DNS
$Msvm_VirtualSystemManagementService.SetGuestNetworkAdapterConfiguration($Msvm_ComputerSystem.Path, $Msvm_GuestNetworkAdapterConfiguration.GetText(1))
参照:http://windowsitpro.com/hyper-v/modify-ip-configuration-vm-hyper-v-host
IPアドレスの設定後、コマンドでNano ServerにPowerShellのセッションを接続します。
Set-Item WSMan:\localhost\Client\TrustedHosts "192.168.0.1" Enter-PSSession -ComputerName "192.168.0.1" -Credential "192.168.0.1\Administrator"
PowerShellセッション接続後、実行するコマンドはすべてローカルで実行されているものと同じなので、様々な操作を行うことができるようになります。PowerShell以外でも、GUIベースの管理ツールからNano Serverへリモートで接続して管理することも可能です。Nano Serverではこのようにリモートからの操作が基本となっています。
役割・機能の追加
“New-NanoServerImage”コマンドで作成されたNano Serverは、Hyper-V上で稼働するだけの最低限の機能しかインストールされていません。そこで、この仮想マシンに目的に応じて追加機能をインストールしていきます。dism.exeツールを使用してWIMファイルやVHD ファイル内の Windowsの機能をオフライン、オフラインで有効または無効にしたりすることができます。“C:\NanoServer\Base\Packages”には、次に示すようなNano Server用の追加機能のパッケージファイルが用意されています。
Microsoft-NanoServer-Compute-Package.cab:Hyper-V Microsoft-NanoServer-Containers-Package.cab:Nano Server Microsoft-NanoServer-Defender-Package.cab:Windows Defender Microsoft-NanoServer-FailoverCluster-Package.cab:フェールオーバークラスタリングMicrosoft-NanoServer-Guest-Package.cab:Hyper-V仮想マシン Microsoft-NanoServer-OEM-Drivers-Package.cab:物理サーバー用ドライバー Microsoft-NanoServer-Storage-Package.cab:ファイルサーバー Microsoft-OneCore-ReverseForwarders-Package.cab:Webアプリ向けリバースフォワーダー
今回は、ファイルサーバーの役割を追加してみましょう。作成したNano Serverのvhdファイルをdismツールでマウントして2つの「Microsoft-NanoServer-Storage-Package.cab」パッケージファイルを追加していきます。
※以下の操作はNano Serverのvhdファイルを作成したTP3の仮想マシン上で行っています。
まずは下準備です。dismツール用に作業フォルダを作成して、必要なファイルをisoイメージからコピーしておきます。
cd C:\NanoServer mkdir dism copy C:\ISO\sources\api*downlevel*.dll C:\NanoServer\dism\ copy C:\ISO\sources\dism* C:\NanoServer\dism\ copy C:\ISO\sources\*provider* C:\NanoServer\dism\ mkdir mountdir
先ほど作成した「Nano01.vhd」イメージを、dismツールでマウントします。そのあとで、マウントしたイメージの機能の追加状況を確認します。
dism /Mount-Image /ImageFile:C:\NanoServer\VHD\Nano01\Nano01.vhd /Index:1 /MountDir:C:\NanoServer\mountdir dism /Image:C:\NanoServer\mountdir /Get-Features
ファイルサーバーの役割を追加します。ファイルサーバーの機能「File-Services」と、リモート管理を有効にするための機能「ServerManager-Core~」を有効にします。最後に忘れずにイメージをアンマウントして完了です。
dism /Add-Package /PackagePath:C:\ISO\NanoServer\Packages\Microsoft-NanoServer-Storage-Package.cab /Image:.\mountdir dism /Add-Package /PackagePath:C:\ISO\NanoServer\Packages\ja-jp\Microsoft-NanoServer-Storage-Package.cab /Image:C:\NanoServer\mountdir dism /Image:C:\NanoServer\mountdir /Enable-Feature /FeatureName:File-Services /FeatureName:ServerManager-Core-RSAT /FeatureName:ServerManager-Core-RSAT-Role-Tools /FeatureName:ServerManager-Core-RSAT-Feature-Tools dism /Unmount-Image /MountDir:C:\NanoServer\mountdir /Commit
ファイルサーバーとして利用できる機能が増えました。
| Feature Name : ServerManager-Core-RSAT State : Disabled  | Feature Name : ServerManager-Core-RSAT State : Enabled  | 
| Feature Name : ServerManager-Core-RSAT-Role-Tools State : Disabled  | Feature Name : ServerManager-Core-RSAT-Role-Tools State : Enabled  | 
| Feature Name : ServerManager-Core-RSAT-Feature-Tools State : Disabled  | Feature Name : ServerManager-Core-RSAT-Feature-Tools State : Enabled  | 
| Feature Name : FileAndStorage-Services State : Enabled  | Feature Name : FileAndStorage-Services State : Enabled  | 
| Feature Name : Storage-Services State : Enabled  | Feature Name : Storage-Services State : Enabled  | 
| Feature Name : File-Services State : Disabled  | Feature Name : File-Services State : Enabled  | 
| Feature Name : CoreFileServer State : Disabled  | Feature Name : CoreFileServer State : Enabled  | 
| Feature Name : File-Services-Search-Service State : Disabled  | Feature Name : File-Services-Search-Service State : Disabled  | 
| Feature Name : MicrosoftWindowsOneCorePowerShellRoot State : Enabled  | Feature Name : Dedup-Core State : Disabled  | 
| Feature Name : MicrosoftWindowsOneCorePowerShell State : Enabled  | Feature Name : iSCSITargetServer State : Disabled  | 
| Feature Name : SmbDirect State : Enabled  | Feature Name : MicrosoftWindowsOneCorePowerShellRoot State : Enabled  | 
| Feature Name : MicrosoftWindowsOneCorePowerShell State : Enabled  | |
| Feature Name : SmbDirect State : Enabled  | |
| Feature Name : Storage-Replica State : Disabled  | |
| Feature Name : SmbWitness State : Disabled  | 
作成されたvhdファイルをHyper-V上にコピーをして、仮想マシンとしてNano Serverを作成します。上記の「Nano Serverの操作」と同様に、IPアドレスを割り当てて、PowerShellのセッションを接続します。リモートからの操作を有効にするためファイアウォールの設定を無効にします。さらに、リモート操作する側のコマンドプロンプトで、次のコマンドを実行します。
winrm set winrm/config/client @{TrustedHosts="192.168.0.1"}
これによって、Nano ServerにGUIのリモートツールでの接続が可能となります。また、Pingの疎通もできるようになっています。
Nano ServerのPowerShellセッションにて実行
Get-NetFirewallProfile | Set-NetFirewallProfile -Enabled false
リモート操作をする側のコマンドプロンプトで実行
winrm set winrm/config/client @{TrustedHosts="192.168.0.1"}
まとめ
マイクロソフトは、コンテナとNano Serverで実現するマイクロサービスを目指しています。これまでもよりも、柔軟にアップデートが可能となり、より速く、より小さく、より安全なサービス提供が可能となります。TP3ではまだまだ評価段階ということもあり、Nano Serverの構築は少々手間のかかるものとなっていますが、そのポテンシャルは十分に体感することがきました。最終的には、Nano Serverにコンテナホストの役割が実装され、その上でHyper-Vコンテナが動く、完全に隔離された環境でマイクロサービスを実現できるようになる予定です。これからさらに進化し、どのようなWindows Serverが完成するのか待ち遠しい限りです。
