次の方法で共有


AKS クラスターのアップグレード時に "UnsatisfiablePDB" エラーが発生しました

この記事では、 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 リソースを直接編集できる場合は、このソリューションを使用します。

  1. PDB の maxUnavailable パラメーターを 1 以上の値に設定します。 詳細については、「 PodDisruptionBudget の指定」を参照してください。
  2. AKS クラスターのアップグレード操作を再試行します。

解決策 2: PDB のバックアップ、削除、再デプロイ

PDB リソースを直接編集できない場合は、このソリューションを使用します。

  1. 次のコマンドを使用して PDB をバックアップします。

    $ kubectl get pdb <pdb-name> -n <pdb-namespace> -o yaml > pdb_backup.yaml
    
  2. 次のコマンドを使用して PDB を削除します。

    $ kubectl delete pdb <pdb-name> -n <pdb-namespace>
    
  3. AKS クラスターのアップグレード操作を再試行します。

  4. AKS クラスターのアップグレード操作が成功した場合は、次のコマンドを使用して PDB を再デプロイします。

    $ kubectl apply -f pdb_backup.yaml
    

お問い合わせはこちらから

ご質問がある場合は、 Azure コミュニティサポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。