この記事は Microsoft Azure Advent Calendar 2018 の 10 日目の記事です。
qiita.com
virtual nodes とは
12/4 に 発表されたばかりの Azure Kubernetes Service(AKS) 向けの機能です。
azure.microsoft.com
名前の通り仮想ノードです。Kubernetes ではノードを常に立ち上げておく必要がありますが、virtual nodes では必要なときのみノードを立ち上げることで、バーストの対応や料金の節約が期待できます。
ザックリいうと、「Kubernetesノードのサーバーレス化」です。
virtual nodes と virtual kubelet との違いは?
Azure には従来から virtual kubelet というものが用意されています。
github.com
両者の違いは、自動で追加するか、手動で追加するかの違いです。
virtual nodes の実装は virtual kubelet です。従来の通り、 virtual nodes を使用せず、 virtual kubelet を手動で使用することもできますが、今後は virtual nodes を使用して、 AKS でマネージドしてもらうほうが手間いらずで便利なのではと思います。
なお、余談ですが、virtual kubelet は CNCF プロジェクトになり、Azure 以外にも AWS Fargate などでも使用できます。
www.atmarkit.co.jp
virtual nodes を試してみる
こちらの手順に沿って実行していきます。Azure CLI とポータルを使用するパターンがあります。ポータルから作成しました。
docs.microsoft.com
AKS を作成する
virtual nodes (preview) オプションを有効にして、 AKS を作成します。1点注意として、virtual nodes をサポートしているリージョンは複数あるのですが、US系は一部問題が発生しているらしく、 West Europe を選択しました。
AKSクラスタの作成
デプロイを行うとおよそ8分くらいで AKS が出来上がります。
デプロイの結果
ポータルから Monitoring - Insight(preview) にて確認すると virtual Node らしきものが表示されています。
virtual Node の確認
virtual nodes にサンプルアプリをデプロイする
次の yaml を デプロイします。
apiVersion : apps/v1
kind : Deployment
metadata :
name : aci-helloworld
spec :
replicas : 1
selector :
matchLabels :
app : aci-helloworld
template :
metadata :
labels :
app : aci-helloworld
spec :
containers :
- name : aci-helloworld
image : microsoft/aci-helloworld
ports :
- containerPort : 80
nodeSelector :
kubernetes.io/role : agent
beta.kubernetes.io/os : linux
type : virtual-kubelet
tolerations :
- key : virtual-kubelet.io/provider
operator : Exists
- key : azure.com/aci
effect : NoSchedule
ポイントは nodeSelector
と tolerations
で virtual-kubelet が指定されています。この点からも virtual-kubelet がベースであるということがわかります。
デプロイ方法は kubectl apply -f virtual-node.yaml
を実行します。
およそ2分くらいで Running になりました。Azure Container Instances(ACI) の立ち上がる速度に依存します。早いときは30秒前後ということもありました。
デプロイの様子
デプロイ後の動作確認
デプロイしたインスタンスは AKS の内部IPなので、外部からアクセスできません。チュートリアルに沿って、 AKS 上にもう一つインスタンスを動かして curl で確認します。
インスタンス作成
kubectl run -it --rm virtual-node-test --image=debian
curl で動作確認
apt-get update && apt-get install -y curl
curl -L http://10.241.0.4
curl の実行結果に HTML が表示されているのが確認できました。
curl で動作確認結果
ノードの管理
AKS の Monitoring - Insight(preview) にて実際に動作している ACI を確認できます。こちらも便利な機能ですね。
Monitoring - Insight(preview) でのACI表示
リソースグループには ACI インスタンスが表示されていました。
ACI のインスタンス
使ったインスタンスの削除
後始末をしてみます。
kubectl delete -f virtual-node.yaml
で deployment を削除します。
pod は即消える。(ここに表示されているのは動作確認時にcurlで使用したpod)
削除後の pod 一覧
ACI も即消える。
ACI が削除されている様子
Monitoring - Insight(preview) にはまだ残っていました。こちらはタイムラグがあるようです。
Monitoring - Insight(preview) の様子
まとめ
virtual nodes は手軽に利用可能で、利便性が高そうです。まだ preview 段階ですが、積極的に使用していきたいと考えています。スピンアップがミリ秒単位になれば KNative などと組み合わせて、サーバーレス環境を構築するのも面白そうですね。