Azure Container Instances に sshd を有効化したイメージをデプロイすると、当然ながら ssh で接続出来るのでコンテナに関するいろいろな情報を収集できます。
とりあえず気になるインスタンスの情報について調べます。まずは CPU 周りから。
Intel(R) Xeon(R) CPU E5-2673 v3 @ 2.40GHz が使われています。Haswell 世代のようです。ちなみに CPU コアのリクエスト数を 1 つにしても 4 つのコアが見えていました。
この時点ではまだ Dv3 なのか Dv2 の判別は付かないので、ぶちぞう RD に聞いてみました。
中からメタデータにアクセスしてみたらいいんちゃう https://t.co/CpaKOAgqfM
— こすもす.えび (@kosmosebi) 2017年7月31日
てっきりインスタンスメタデータはまだプレビューかと思っていたら、普通に使えるようになっていました。流石世界のぶちぞう RD、レドモンド行き待ったなし。
コンテナから実際にメタデータを取得してみると、いろんなことが分かりました。最初に分かることは、少なくとも Linux の場合は Hyper-V Containers を使った分離は行われていないということです。*1
インスタンスも予想された Dv3 / Ev3 ではなく Standard_D3_v2 でした。
{ "compute": { "location": "westus", "name": "k8s-agentpool3-a02wus0l-4", "offer": "UbuntuServer", "osType": "Linux", "platformFaultDomain": "0", "platformUpdateDomain": "2", "publisher": "Canonical", "sku": "16.04-LTS", "version": "16.04.201706191", "vmId": "1901479c-26b8-42ac-92d8-81015daa970b", "vmSize": "Standard_D3_v2" }, "network": { "interface": [ { "ipv4": { "ipAddress": [ { "privateIpAddress": "10.240.0.234", "publicIpAddress": "" } ], "subnet": [ { "address": "10.240.0.0", "prefix": "16" } ] }, "ipv6": { "ipAddress": [] }, "macAddress": "000D3A33B315" } ] } }
ホスト OS が Linux になっているので、普通に Linux と Docker の組み合わせで ACI は作られているようです。そして実際に裏側でコンテナのオーケストレーションを行っているのは Kubernetes のようです。
3 行でまとめると以下のようになりました。
- ACI の裏側は Ubuntu + Kubernetes が使われている
- インスタンスは Nested Virtualization に非対応の Dv2
- Hyper-V Containers は当然ながら使われていない
Cloud Native Computing Foundation にプラチナメンバーとして参加した理由もわかる結果となりました。Windows に関してはイメージを作る手間がかかるので、また今度試してみることにします。
*1:Hypervisor レベルでの分離というのが嘘っぽく感じる気が…