APC 技術ブログ

株式会社エーピーコミュニケーションズの技術ブログです。

株式会社 エーピーコミュニケーションズの技術ブログです。

AKSのnode pool 削除時に発生したエラーを解消した話

はじめに

こんにちは。エーピーコミュニケーションズ ACS事業部 亀崎です。

今AKSでデモ環境を稼働しています。 今回の話題はこのAKS環境のnode poolのVMサイズを変更した際の話です。

learn.microsoft.com

node poolの新規作成は問題なく完了し、(PodのDrainを含む)削除を行ったときに発生したエラーとその際に行った作業をお知らせしたいと思います。

発生したエラー

残念ながら発生した際のエラーメッセージは残していなのですが、概ね以下のようなメッセージでした。

This is often caused by a restrictive Pod Disruption Budget (PDB) policy. See http://aka.ms/aks/debugdrainfailures.

メッセージの内容からPDB(Pod Distrupton Budget)に関するものだということがわかりました。

対処内容

対処の内容は aka.ms に記載されてる内容に沿って行いました。

原因のPDBの特定

まず最初にどこで問題が発生するかを特定しました。

$ kubectl get pdb -A

NAMESPACE     NAME                                      MIN AVAILABLE   MAX UNAVAILABLE   ALLOWED DISRUPTIONS   AGE
dapr-system   dapr-operator-disruption-budget           N/A             25%               1                     59d
dapr-system   dapr-placement-server-disruption-budget   N/A             25%               0                     59d
dapr-system   dapr-sentry-budget                        N/A             25%               1                     59d
〜〜以下略〜〜

コマンドを実行すると上記のような結果が表示されました。ドキュメントに記載されてるとおり、ALLOW_ED_DISRUPTIONが0の場合ノードドレンが失敗します。これに該当しているようです。

解決

解決方法としては「ドレインを有効にする」「PDBをいったん削除して、問題解消後再登録」「ドレインできないPodを削除」の3通りあるようです。

今回は「PDBをいったん削除」を行います。まずは削除です。 最初にPDBの設定をBackupしておき、それからPDBを削除します。

kubectl get pdb -n dapr-system dapr-placement-server-disruption-budget -o yaml > pdb.yaml
kubectl delete pdb -n dapr-system dapr-placement-server-disruption-budget

削除後Node poolの削除処理を再度行います。すると今度は問題なく処理が継続されます。 正常終了したら、PDBを元に戻します。

kubectl apply -f pdb.yaml

これで完了です。

まとめ

無事Node PoolのVM Sizeの変更も完了しました。 これで次回同じことが発生しても慌てることなくことに対処できます。
「こんなことおきるんだ」ということを知っていたら少しは安心材料になるかなと思います。皆さんのお役に立てれば幸いです。