しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

ACS Engine を使って Dv3 インスタンスベースの Kubernetes クラスタを作成する

Azure Portal から Azure Container Service を作ろうとすると Dv2 までしかインスタンスが選べないので、新しい Nested Virtualization に対応した Dv3 を使ってクラスタを作ることは出来ませんが、ACS Engine を使うと作成することが出来ます。

ACS Engine は ARM Template を作成するだけなので、ACS の制限とは無縁です。

セットアップは README などに書いてある通りなので省略します。前までは Azure Cloud Shell にインストール出来ましたが、最近のバージョンでは Go 1.8 が必要らしく手間がかかりそうです。

基本的に Windows ベースの Kubernetes しか作る気がないので、ACS Engine のリポジトリに用意されている Windows 向けのサンプルを修正して、D2 v3 を使うようにします。

"agentPoolProfiles": [
  {
    "name": "windowspool",
    "count": 2,
    "vmSize": "Standard_D2_v3",
    "availabilityProfile": "AvailabilitySet",
    "osType": "Windows"
  }
]

修正したサンプルから ACS Engine を使って ARM Template を作成し、リソースグループにデプロイを行うだけで Dv3 ベースの Kubernetes が完成します。

あまり関係ないですが、Managed Disk を使って VM が作成されていました。課金に注意ですね。

f:id:shiba-yan:20170817230128p:plain

作成された VM を確認すると、指定通り D2 v3 なインスタンスとなっています。Hyper Threading なインスタンスなので、コンテナを多く立ち上げる場合には少し不安があります。

f:id:shiba-yan:20170817225611p:plain

これで Hyper-V Containers が利用可能な Windows Server と Kubernetes な環境が手に入りました。

既に Kubernetes は Windows Server Containers と Hyper-V Containers に対応していると発表されています。

Support for Both Windows Server Containers and Hyper-V Containers - There are two types of containers in Windows Server 2016. Windows Containers is similar to Docker containers on Linux, and uses kernel sharing. The other, called Hyper-V Containers, is more lightweight than a virtual machine while at the same time offering greater isolation, its own copy of the kernel, and direct memory assignment. Kubernetes can orchestrate both these types of containers. 

対応していると発表されてはいますが、軽く調べた限りでは Hyper-V Containers を利用する方法は分かりませんでした。まともに Windows Containers を使う場合には Hyper-V が必要なので、何とかしたいところです。

Hyper-V Containers で実行する方法が分かれば続きを書く予定です。