Hejdaの見る夢

一人前のエンジニアを目指して頑張ったこととかをつらつら書くブログ

Azure の deallocate をちゃんと調べる part.1

発端

先日、第27回 SQL Server 2019勉強会(オンライン) に参加した際に deallocate という機能があり、これが開発環境の Azure Kubernetes Service (AKS) においてコスト削減に繋がるとの情報を頂きました。

ただこのツイートは情報を正確に表現出来ていなく、誤認識を生んでしまう可能性があるのでちゃんと調べることにしました。

  • 第27回 SQL Server 2019勉強会(オンライン)

sqlserver.connpass.com

  • 問題の自分のツイート

結論

個人的な見解

Azure における Deallocate 機能 は、virtual machine (及び、virtual machine scale sets (vmss)) の機能であり、AKS ひいて は Kubernetes (K8s) の機能ではありません。

メリット・デメリットをしっかり把握した上で、自己責任で使用してください。

何故か

AKS の cluster autoscaler は vmss で用いて実現しています。

cluster autoscaler は K8s の機能であり、vmss は Azure の機能です。

マネージド K8s である AKS が cluster autoscaler を実現するために、node pools のリソースを確保する際に vmss の機能を用いて実行しているようです。

注意点

Deallocate は virtual machine (vm) をシャットダウンし、かつリソースを解放する機能です。そのため deallocate 中の vm の維持に掛かる課金は停止します。

しかし、ディスクや 静的 IP アドレスなどのリソースは引き続き課金が継続されるため、完全に課金が発生しなくなるわけではありません。

AKS から cluster autoscaler を使用する場合は --enable-cluster-autoscaler を使用します。

### refs: https://docs.microsoft.com/en-us/azure/aks/cluster-autoscaler#create-an-aks-cluster-and-enable-the-cluster-autoscaler

# First create a resource group
az group create --name myResourceGroup --location eastus

# Now create the AKS cluster and enable the cluster autoscaler
az aks create \
  --resource-group myResourceGroup \
  --name myAKSCluster \
  --node-count 1 \
  --vm-set-type VirtualMachineScaleSets \
  --load-balancer-sku standard \
  --enable-cluster-autoscaler \
  --min-count 1 \
  --max-count 3

この設定をした際は、vmss 自体を操作することは出来なくなり、 az aks コマンド経由で操作を行うようになるようです。

これは誤操作を防ぐためにも必要な処置のように思います。

# Note

Manual scaling is disabled when you use the cluster autoscaler. 
Let the cluster autoscaler determine the required number of nodes. 
If you want to manually scale your cluster, disable the cluster autoscaler.

しかし、cluster autoscaler の設定せずに AKS を構築すると、vmss の deallocate 機能を使えてしまえるかのようにドキュメントからは読めます。

次回はそこを検証してみようと思います。

参考ドキュメント

  • Virtual Machines - Deallocate

  • Automatically scale a cluster to meet application demands on Azure Kubernetes Service (AKS)

  • What are virtual machine scale sets?

まとめ

というわけで、この回は切りが良いのでここまで。

検証は次回に続きます :)