この記事では、 Azure Kubernetes Service (AKS) クラスターをアップグレードしようとしたときに発生する可能性がある "UnsatisfiablePDB" エラーを特定して解決する方法について説明します。
[前提条件]
この記事では、Azure CLI バージョン 2.53.0 以降が必要です。
az --version を実行して、インストールされているバージョンを見つけます。 Azure CLI をインストールまたはアップグレードする必要がある場合は、「Azure CLI をインストールする方法」を参照してください。
症状
AKS クラスターのアップグレード操作が失敗し、次のエラー メッセージが表示されます。
Code: UnsatisfiablePDB
メッセージ: 1 エラーが発生しました:
* PDB <pdb-namespace>/<pdb-name> の maxunavailble == 0 は put 操作を続行できません
原因
アップグレード操作を開始する前に、AKS は、 パラメーターが 0 に設定されている既存のmaxUnavailable がないかクラスターをチェックします。 このような PDB は、ノードのドレイン操作をブロックする可能性があります。 ノードのドレイン操作がブロックされている場合、クラスターのアップグレード操作は正常に完了できません。 これにより、クラスターが失敗状態になる可能性があります。
"UnsatisfiablePDB" エラーが発生した後、次のコマンドを実行して PDB の状態を確認できます。
$ kubectl get pdb <pdb-name> -n <pdb-namespace>
このコマンドの出力は、次のようになります。
NAME MIN AVAILABLE MAX UNAVAILABLE ALLOWED DISRUPTIONS AGE
<pdb-name> N/A 0 0 49s
MAX UNAVAILABLEの値が 0 の場合、ノードのドレインはアップグレード プロセス中に失敗します。
この問題を解決するには、次の解決策のいずれかを使用します。
解決策 1: PDB の "maxUnavailable" パラメーターを調整する
注
PDB リソースを直接編集できる場合は、このソリューションを使用します。
- PDB の
maxUnavailableパラメーターを1以上の値に設定します。 詳細については、「 PodDisruptionBudget の指定」を参照してください。 - AKS クラスターのアップグレード操作を再試行します。
解決策 2: PDB のバックアップ、削除、再デプロイ
注
PDB リソースを直接編集できない場合は、このソリューションを使用します。
次のコマンドを使用して PDB をバックアップします。
$ kubectl get pdb <pdb-name> -n <pdb-namespace> -o yaml > pdb_backup.yaml次のコマンドを使用して PDB を削除します。
$ kubectl delete pdb <pdb-name> -n <pdb-namespace>AKS クラスターのアップグレード操作を再試行します。
AKS クラスターのアップグレード操作が成功した場合は、次のコマンドを使用して PDB を再デプロイします。
$ kubectl apply -f pdb_backup.yaml
お問い合わせはこちらから
ご質問がある場合は、 Azure コミュニティサポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。