1. Windows Server 2019 における、
Windows Server コンテナーと
Windows Subsystem for Linux の進化
山本 美穂
日本マイクロソフト株式会社
パートナー事業本部 パートナー技術統括本部
パートナー ソリューション プロフェッショナル
(Data & AI)
CI13
SlideShare: https://www.slideshare.net/mihochannel1
47. 2
0
0
8
Windows Server 2019
Windows Server イベント詳細&参加登録
https://atnd.org/events/101324
Day3 18:00-20:00
メロディーライン
Windows Server
Community Night
要参加登録
ハイブリッドクラウド
パブリッククラウドサービスである Microsoft Azure と対をなすように、ハイブリッドクラウドソリューションとして Microsoft Azure Stack があります。Microsoft Azure Stack はこれまでの Hyper-V を活用したプライベートクラウドとしての仮想基盤とは異なり、ユーザーインターフェースもその足回りのテクノロジーも含めてすべて Microsoft Azure と同一です。しかし、既存環境のリソースをすべてパブリッククラウドや準ずる環境に移行することは、お客様の環境によってはかなり大変なことだったりします。オンプレミスなプライベートクラウド環境が必要なケースももちろん存在します。Windows Server 2019 には、Microsoft Azure のパブリッククラウドの基盤として培われた Software Defined Network (SDN) や Software Defined Storage (SDS)の最新技術の恩恵をオンプレミスなプライベートクラウドで利用可能なように実装されています。
セキュリティ
セキュリティのアプローチは、Protect(保護)、 Detect(検出)、 Respond(対応)の3つで構成されており、Windows Server 2019 にはそのすべてが搭載されています。 Protect (保護) については、Windows Server 2016 で初めて搭載された、Host Guardian Services と Shielded VM という機能では Hyper-V の仮想マシンを保護する機能で、仮想ハードディスクイメージ(VHDX) の署名つき暗号化や起動・停止、アクセスに際して保護対象のクラウド基盤とは別の認証情報を使用するための Active Directory をもちます。この機能を使うことで、悪意のある管理者やマルウェア被害を受けた管理者から仮想マシンを保護する機能です。Windows Server 2019 では保護対象の仮想マシン OS に Linux が追加されました。また、 仮想ネットワークセグメントを暗号化する Encrypted Networks が追加されています。
Detect (検出) 及び Respond (対応) については、Windows Defender Advanced Threat Protection (ATP) の機能が拡張され、予防的保護、攻撃やゼロデイ攻撃の検出といった機能が追加されました。
アプリケーションプラットフォーム
アプリケーションプラットフォームのアプローチは、開発者からのリクエストの中でも多かった Windows Server Container と Windows Subsystem for Linux (WSL) の2機能の改善です。
ハイパーコンバージド インフラストラクチャ
コンバージド インフラストラクチャと比較して、共有ストレージを持たないというのがハイパーコンバージドインフラストラクチャの大きな特徴です。Windows Server では、Windows Server 2012 R2 でStorage Spaces、やScale Out File Serverといった機能でストレージの仮想化を軸としたコンバージドインフラを、更にWindows Server 2016 でハイパーコンバージドインフラストラクチャソリューションとして実装された Storage Spaces Direct (S2D)の機能があります。Windows Server 2019 では更に S2D のスケーリング性、パフォーマンス、信頼性を強化し、柔軟な構成がとれるように改良されます。そして、その運用管理に前述の Windows Admin Center を使用することを想定しています。
(DevOps)
Windows Server 2019 は、コンテナーと Linux のサポート強化により、迅速なイノベーションをサポートしたいと考える開発者と IT 運用チームのニーズに対応します。
コンテナーのサポートにより、一段と迅速にアプリを最新化。Windows Server 2019 はより小さなサーバー コアのコンテナー イメージを提供することでダウンロードを高速化し、Kubernetes クラスターと Red Hat OpenShift Container Platform のコンピューティング、ストレージ、およびネットワーキングの拡張サポートを提供します。
Linux オペレーションの向上。Linux と Windows のコンテナーをサイド バイ サイドで実行できる以前のサポートの上に構築された Windows Server 2019 では、開発者は Open SSH、Curl、および Tar といった標準ツールを使用できるため、複雑さが軽減されます。
Windows Server 2019 は、コンテナーと Linux のサポート強化により、迅速なイノベーションをサポートしたいと考える開発者と IT 運用チームのニーズに対応します。
コンテナーのサポートにより、一段と迅速にアプリを最新化。Windows Server 2019 はより小さなサーバー コアのコンテナー イメージを提供することでダウンロードを高速化し、Kubernetes クラスターと Red Hat OpenShift Container Platform のコンピューティング、ストレージ、およびネットワーキングの拡張サポートを提供します。
Linux オペレーションの向上。Linux と Windows のコンテナーをサイド バイ サイドで実行できる以前のサポートの上に構築された Windows Server 2019 では、開発者は Open SSH、Curl、および Tar といった標準ツールを使用できるため、複雑さが軽減されます。
レジストリやネットワークが分離された形でWindows Server Containerのプロセスができたら
Host Compute Service の子プロセスとしてコンテナーは生成されます。
・リソースは親プロセスから受け継ぎますし
Windows コンテナーに限った話ではないのですが、コンテナーは基本的に層になった複数のものをひとつに固めたような構成になっています。
一番下がベースとなるOSのレイヤー
次にカスタマイズのレイヤー(アプリが動作するために必要な設定やミドルウェアがここにはいります。)
最後にアプリケーションのレイヤー
Windows コンテナーに限った話ではないのですが、コンテナーは基本的に層になった複数のものをひとつに固めたような構成になっています。
一番下がベースとなるOSのレイヤー
次にカスタマイズのレイヤー(アプリが動作するために必要な設定やミドルウェアがここにはいります。)
最後にアプリケーションのレイヤー
例えば、Linuxのコンテナイメージとしてよく使われているCoreOSが294MB と300MB無いくらいなので、Nano Server 以外のコンテナイメージは遙かに大きい
Reflects latest WS2019 offerings
WS2016 5GB
Linux コンテナと Windows コンテナの共存も可能です。
Windows Serverコンテナーのオーケストレーションとして、Kubernetes がベータ版としてサポートされています。
Windows コンテナーを選ぶ理由ってなに?
Image size
Group related actions
Remove excess files
Build speed
Multiple lines
Ordering of instructions
Cosmetic optimizations
15:15とかだったら説明する
Windows コンテナーに限った話ではないのですが、コンテナーは基本的に層になった複数のものをひとつに固めたような構成になっています。
一番下がベースとなるOSのレイヤー
次にカスタマイズのレイヤー(アプリが動作するために必要な設定やミドルウェアがここにはいります。)
最後にアプリケーションのレイヤー
15:15とかだったら説明する
Containers get temporary storage
Throw away storage when container goes away
15:15とかだったら説明する
Each container gets their own network isolation
Uses Windows Hosts’ Firewall
Bind container to host ports.
15:20
ごり押ししない。
目的が一番重要。手段である技術は目的を達成するためにある!
15:20
楽しい時間だー!
超絶たのしいぞ!
Ability to run unmodified ELF64 Linux binaries, expand toolkit and capabilities
Online tutorials are written in bash script
WSL Provides choice and flexibility
The ability to invoke Linux binaries from Windows
The ability to invoke Windows executables from Linux
Your choice to use a Linux, or Windows
Ubuntu 14.04.4 LTS が最初
Windows Subsystem for Linux (WSL)とは、2016年4月にリリースされた、Windows 10 の Insider Preview build 14316 で初めて実装され(注釈1)、2016 年8月にリリースされた Anniversary Update (version 1607, Build 14393)でベータ版として追加された機能です。実装の当初は開発者モードにする必要があり、機能そのものもベータの扱いでした。この段階では、Ubuntu 14.04.4 LTS ベースのモジュールが動作するというものでした。
この連載でご紹介させていただいていたように、WSL は仮想マシンによる実装ではありません。Microsoft Research の Drawbridge (注釈2)というエミュレーションの技術を元に開発されているため、比較的フットプリントが軽く、非力なマシンでも動作するようにつくられています。同じ技術で実装されている製品として、SQL Server の Linux 版及びコンテナ版が挙げられます。余談になりますが、Windows 10 の Windows Container は仮想マシンによる実装となっており、Hyper-V がストレスなく動作するスペックのマシンや OS のエディションに制約があるため WSL に比べると利用可能なシーンが幾分か制限されています(注釈3)。
やがて、Windows Insider Preview の Build 14936 から、ベースとなる Ubuntu のバージョンが 16.04.1 LTS へとバージョンアップしました。(注釈4)このとき、244番目の syscall として、chroot をサポートしました。この段階ではまだ、サポートしているディストリビューションは Ubuntu のみでした。この段階では、まだ開発者モードが必須でした。
次に大きな変更が入ったのは、2017年4月にリリースされた Creators Update (version 1703, Build 15043)でした。一番大きな特徴は Windows との連携がよりシームレスになったことが挙げられます。具体的には、 WSL のコマンドラインから Windows のアプリケーションを直接呼び出したり、逆に WSL のコマンドを -c オプションで Windows のコマンドプロンプトからコールすることもできるようになりました。ここのことによって、よりシームレスに Windows の環境と WSL の環境を併用して利用することが可能になり利便性が格段に向上しました。
少し、昔話をしましょう。20年以上前の技術のことなのですが、Windows NTの頃 NT Subsystem
NT3.51までの当初の
マルチサブシステムをサポート
サブシステムのコンポーネントは一つのサブシステムのプロセスと、プロセス内のサブシステムのDLLという構成です。
すべてユーザーモードだったため、BSODとは無縁の安定したOSだったそうです。
Windows NT時代のPOSIXについて少しおさらいしてみましょう。Windows NTでは数のようにSubsystemという概念が実装されていました。当初、OS/2やPOSIXとの互換性を確保するためにそれぞれサブシステムを実装していました。余談ですが、NT3.51以前ではサブシステムはすべてユーザーモードで実装されていたため、非常に安定したOSでしたが、NT4でWin32サービスやドライバの一部がカーネルモードで実装されているため、BSOD(Blue Screen of Death)などの予期せぬエラーが発生するようになってしまいました。
Windows Subsystem for Linux とは、遥か昔のWindows NT の頃にサポートしていたPOSIX(Portable Operating System Interface for UNIX)やその後継としてWindows Vistaで搭載されたものの、Windows 8で非搭載になったSubsystem for UNIX-based Application(SUA)のサブシステムとは異なり、新しく実装されたテクノロジーです。
WSLはカーネルドライバであるLXCoreとユーザーモードヘルパーのセット。
Minimal Process(ミニマルプロセス)原始的なタイプのプロセス。ミニマルプロセスとしてマークされたプロセスはホストから管理しないようにホストOSに伝達します。Windows カーネルからはからのユーザーモードアドレス空間として扱われます。
Pico プロセス:ミニマルプロセスと紐づいた空のユーザーモードアドレス空間を管理するPicoプロバイダカーネルモードドライバーのセット(後述のlxss/lxcore)
これまでのNTプロセスとは異なり、ミニマルプロセスを作成するときにはユーザーモードアドレス空間はプロセス内で実行するスレッド等がない状態で確保されます。Pico プロセスには下記のような特徴があります。
ユーザーモードのバイナリーであるntdll.dllとデフォルトではマッピングされない。
PEB(Process Environment Block)が生成されない
Picoプロセスのためにスレッドが作成されたとしても、イニシャルスレッドが自動的に作成されないため、TEB(Thread Environment Brock)も生成されない。
Shared User Data セクションはプロセスにマッピングされない。
46
Linux application (i.e., ELF binary) running in a Linux Subsystem pico process
System call trap handler forwards system calls from Linux application to Linux Subsystem driver
Part of Pico support
Kernel forwards syscall for Pico process to its managing Pico driver
Linux subsystem driver (lxcore) implements system call
300+ system calls
16203のWindows SDKにwslapi.hが含まれている
We will be adding support for using Docker securely between WSL and Windows or remote Docker hosts in the next week or two.
lxrun.exe は1803以降では利用できないそう。
15:35なら語る
15:30であればdocker demo
AF_UNIXとは、プロセス間通信を
15:40
62
BRK1097 How Microsoft builds software and services like Windows, Office, Bing, Minecraft, and others powered by Azure DevOps