既にいろんな人が AKS を触っているみたいですが、個人的には Windows や ACI と組み合わせて使いたかったので、まずは Windows 向けクラスターが作成できるのか確認しました。
ACS Engine を使って作成していたクラスターの管理が面倒だったので、これを機に入れ替えます。
クラスターを作成する
サポートされているとは明記されてませんが、公式のドキュメントを見ると osType には Windows を指定できるみたいでしたし、ARM Template が ACS Engine とそっくりだったので試したらうまくいきました。
Windows と Linux で 2 つの Agent Pool が作成されていることが確認できますね。
最初は Windows のみでクラスターを作成してみましたが、ACS とは異なり AKS では Kubernetes Master 自身で Pod を稼働させることは出来ないみたいです。なので、Windows だけでは必要な Pod が動作しないので Kubernetes Dashboard は稼働しません。
正しく Kubernetes クラスターを動作させるには Windows と Linux のノードが必要です。
ARM Template を見ると、複数の Agent Pool を持つことができるのが一目でわかるので、Windows と Linux のハイブリッドなクラスターを用意することが容易です。
ちなみに ARM Template を使うと、ポータルでは対応していない Dv3 / Ev3 な VM を選べます。
Kubernetes Dashboard にアクセスする
AKS の Kubernetes Dashboard にアクセスするには az aks browse コマンドを使いますが、Azure CLI の不具合で Windows だとうまく動作しないので、互換のあるコマンドを使ってアクセスします。
az aks browse も内部的には kubectl を叩いてるだけなので、以下のコマンドで問題ないです。
# kubernetes dashboard の pod 名を取得 kubectl get pods --namespace kube-system --output name --selector k8s-app=kubernetes-dashboard # dashboard に対してポートフォワーディングを実行 kubectl --namespace kube-system port-forward kubernetes-dashboard-XXXX 8001:9090
ポートフォワーディングのコマンドは、覚えておいても損はないかもしれません。
これで 127.0.0.1:8001 というアドレスで Kubernetes Dashboard へのアクセスが可能となります。
ちゃんと Windows と Linux のノードが表示されていることが確認できます。Kubernetes Master のノードは表示されないようになっているので、Pod の実行も出来ないようになっています。
ASP.NET アプリケーションをデプロイする
クラスターが完成したので、例によって AppVeyor でビルドした ASP.NET アプリケーションのイメージをデプロイしたいところですが、なんと AKS で Windows ノードを作成すると、デフォルトで Version 1709 が使われるみたいです。
まだ扱いにくいので 1709 は使ってこないと思ってましたが、ノードの情報を見て驚きました。
Version 1709 が使われているということは、Windows Server Containers がデフォルトになっている環境では、1709 の Docker Image を利用したコンテナーしか動作しないことを意味します。
まだ CI SaaS は 1709 に対応したものが存在しないので、仕方なく開発環境に Docker for Windows をインストールして、Windows 10 FCU 上で Docker Image を作成しました。
あとはこれまでと同じようにデプロイすれば、Kubernetes 上で ASP.NET アプリケーションが動作します。Docker Image のサイズが 7GB から 3GB に削減されたので、コールドスタートにかかる時間はかなり短縮されました。実用にはまだかかりそうですが、これくらいなら工夫で何とかなりそうです。
Pod をデプロイすれば、あとは Service を追加すれば外部からアクセス可能になります。
地味ですが、普通の ASP.NET MVC アプリケーションが AKS 上でも動作しました。
これまでも ACS や ACS Engine を使うことで Windows Containers に対応した Kubernetes 環境を用意することは出来ましたが、AKS はなんて言ってもマネージドサービスなので、今後 GA に向けていろいろと改善されていくはずです。
最近は VMSS に対して Automatic OS Image Upgrade が提供されましたし、AKS も GA までにはアップデート含め面倒を見てくれるサービスになることを期待しています。