この記事はFixer Advent Calendar 19 日目の記事です。
後程なむゆの個人ブログにもマルチポストします。
はじめに
Azure Kubernetes Service こと AKS を運用していて、スペック不足や運用費節約の目的で NodePool で使用する VM のサイズを変更したくなることが時たまあるかと思います。
その際のやり方には実はひと手間必要だったりするので、同じようなことで詰まった他の人向けに共有できればと思います。
1. まずは変更先の NodePool を作成する
まず前提知識として、一度作成した NodePool の VM サイズを変更することはできません。
なので、NodePool で使用する VM サイズを変更したい場合、新しい NodePool を作成して古いものを削除するという手順が必要になります。
「ノードプールの追加」から、新しい NodePool の追加画面に移ります。

追加画面では、まず「モード」をシステムにします。
この設定は NodePool に他にシステムモードが設定されているものがない場合は必要です。
AKS の NodePool には、「システムモード」と「ユーザーモード」があり、少なくとも一つの NodePool がシステムモードで稼働する必要があるためです。
システムモードの NodePool に含まれる Node は Kubernetes Cluster でいうところの「マスターノード」となり、Kubernetes Cluster の管理者的な役割を果たします。
そのため、少なくとも 1 台の Node がマスターノードである必要があり、AKS では NodePool 単位でマスターノードとする Node の集まりをシステムモードの NodePool として設定している形です。

余談は置いておいて、あとは VM のサイズとスケール範囲を指定して NodePool を作成します。
2. 変更元の NodePool を削除
新しい NodePool が作成できたら、NodePool の一覧画面に戻り、古い方の NodePool を選択します。

NodePool の概要画面に移動したら、その NodePool の削除を行います。

この時、もし他の NodePool が全部ユーザーモードだったりそもそも他の NodePool が存在しなかった場合はこの削除ボタンがクリックできません。
他に NodePool があるのに削除できない!という時は他の NodePool のモードが原因である可能性があるので、確認してみましょう。
また、余談として、ユーザーモードとシステムモードの違いとして、ノード数の範囲の最小数を 0 にできるかできないかという違いがあります。
システムモードの NodePool は、少なくとも 1 台は動いている必要があるので最小数を 0 にすることができませんが、ユーザーモードの NodePool は最低で 1 台も動いていなくても問題ないということなのですね。
という豆知識でした。
おわりに
今回は若干素直ではない AKS の NodePool の VM サイズの変え方について共有しました。
覚えておくこととしては、NodePool のうち一つはシステムモードである必要があること、NodePool の VM サイズそれ自体は変更できないというあたりでしょうか。
分かってしまえば難しいことではないので、同じことで困っている人が居たら助けになれば幸いです。