AKSノードのスケーリング / AKSの基礎を理解するシリーズ Part. 12
この記事の内容
- AKSノードプールの手動スケーリングで、ノード数を2台から1台に減らす方法を確認します
- リソース不足によりPodが
Pending状態になる仕組みを実際に体験します - Azure CLIを使ってクラスターオートスケーラーを有効化し、ノードを自動的にスケールアウトさせます
- ノードが増えることでPendingだったPodが起動する流れを観察します
- ハンズオン後の後片付けとして、オートスケーラーの無効化とノード数の固定手順を確認します
ノードプールのスケーリング設定を確認する
AzureポータルでAKSクラスターを開き、設定 > ノードプール から「agentpool」を選択します。現在はノード数2で稼働しています。
ノードプールの設定画面には「スケーリング」セクションがあり、ここで手動または自動のスケーリングを選択できます。
手動スケーリングでノード数を1に減らす
まず手動スケーリングを選択してノード数を1に設定し、動作を確認します。設定を変更すると、プロビジョニングの状態が「スケーリング」となります。完了までおよそ5分ほどかかります。
スケーリングが完了すると、1ノードが「準備完了」の状態になります。
1ノードの状態でアプリケーションをデプロイする
ノードが1台になったところで、ゲストブックアプリケーションをデプロイして動作を確認します。Cloud Shellを起動し、ハンズオン用のディレクトリに移動します。
cd handson/azure/chapter04
kubectl create -f guestbook-all-in-one.yaml
リソース不足でPodをPending状態にする
デプロイ後、バックエンドのRedisレプリカ数を増やして、1台のノードではリソースが足りない状態を意図的に作ります。
kubectl scale deployment redis-replica --replicas=5
スケール後にPodの状態を確認します。
kubectl get pods
5台では問題なく動いてしまったため、さらにレプリカ数を増やします。
kubectl scale deployment redis-replica --replicas=10
再度状態を確認すると、一部のPodが Pending になっています。
kubectl get pods
Pending はリソースが不足していて起動できない状態を意味します。単純に待っても解消されるものではなく、ノードを増やしてリソースを確保する必要があります。
Azure CLIでオートスケーラーを有効化する
スケールアウトの方法は2つあります。
- ポータルからノードプールのスケーリング設定を変更する
- Azure CLIを使用する
今回はCLIで実施します。az aks nodepool update コマンドを使ってクラスターオートスケーラーを有効化します。
az aks nodepool update \
--enable-cluster-autoscaler \
--resource-group RG-HANDSON-AKS \
--cluster-name handson-aks \
--name agentpool \
--min-count 1 \
--max-count 2
このコマンドで、最小1台・最大2台のオートスケーリングが有効になります。設定完了後、ノードの状態を監視します。
kubectl get nodes --watch
オートスケーラーの設定が有効になってから実際にノードが増えるまでには、しばらく時間がかかります。
ノードが2台に増え、Podが起動する
しばらく待つと、ノードが2台に増えているのが確認できます。
kubectl get nodes
ノードが増えてリソースに余裕ができると、Pending だったPodが起動し始めます。
kubectl get pods
Podが終了・再作成されている様子が確認できます。これはVMのライブマイグレーションとは異なり、コンテナは一度終了させて新しく作り直す動作となります。
どのノードでPodが動いているかを確認するには、-o wide オプションを使います。
kubectl get pods -o wide
2台のノードのうち、一方に偏ってPodが配置されている場合もあります。
後片付け:オートスケーラーの無効化とノード数の固定
ハンズオンが完了したら、アプリケーションを削除し、次のハンズオンに備えてオートスケーラーを無効化します。
まずアプリケーションを削除します。
kubectl delete -f guestbook-all-in-one.yaml
次にオートスケーラーを無効化します。
az aks nodepool update \
--disable-cluster-autoscaler \
--resource-group RG-HANDSON-AKS \
--cluster-name handson-aks \
--name agentpool
最後にノード数を2で固定します。
az aks nodepool scale \
--resource-group RG-HANDSON-AKS \
--cluster-name handson-aks \
--name agentpool \
--node-count 2
なお、すでに2ノードの状態でこのコマンドを実行すると the new node count is the same as the current node count というエラーが表示されますが、これは既に目的の状態になっているため無視して問題ありません。
まとめ
この記事では、AKSノードプールのスケーリングについてハンズオン形式で確認しました。
- ノードプールのスケーリングは、ポータルのGUIまたはAzure CLIのどちらからでも設定できます
- リソースが不足するとPodが
Pending状態になり、ノードを増やすことで解消されます az aks nodepool update --enable-cluster-autoscalerでオートスケーラーを有効化でき、--min-countと--max-countで台数の範囲を指定します- ノードが増えると、Pendingだったコンテナは終了・再作成される形で新しいノードに展開されます(ライブマイグレーションとは異なる動作です)