Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
This article discusses how to identify and resolve the "UnsatisfiablePDB" error that might occur when you try to upgrade an Azure Kubernetes Service (AKS) cluster.
Prerequisites
This article requires Azure CLI version 2.53.0 or a later version. Run az --version
to find your installed version. If you need to install or upgrade the Azure CLI, see How to install the Azure CLI.
Symptoms
An AKS cluster upgrade operation fails with the following error message:
Code: UnsatisfiablePDB
Message: 1 error occurred:
* PDB <pdb-namespace>/<pdb-name> has maxunavailble == 0 can't proceed with put operation
Cause
Before starting an upgrade operation, AKS checks the cluster for any existing Pod Disruption Budgets (PDBs) that have the maxUnavailable
parameter set to 0. Such PDBs are likely to block node drain operations. If node drain operations are blocked, the cluster upgrade operation can't complete successfully. This might potentially cause the cluster to be in a failed state.
After receiving the "UnsatisfiablePDB" error, you can confirm the PDB's status by running the following command:
$ kubectl get pdb <pdb-name> -n <pdb-namespace>
The output of this command should be similar to the following one:
NAME MIN AVAILABLE MAX UNAVAILABLE ALLOWED DISRUPTIONS AGE
<pdb-name> N/A 0 0 49s
If the value of MAX UNAVAILABLE
is 0, the node drain fails during the upgrade process.
To resolve this issue, use one of the following solutions.
Solution 1: Adjust the PDB's "maxUnavailable" parameter
Note
Use this solution if you can edit the PDB resource directly.
- Set the PDB's
maxUnavailable
parameter to1
or a greater value. For more information, see Specifying a PodDisruptionBudget. - Retry the AKS cluster upgrade operation.
Solution 2: Back up, delete, and redeploy the PDB
Note
Use this solution if directly editing the PDB resource isn't viable.
Back up the PDB using the following command:
$ kubectl get pdb <pdb-name> -n <pdb-namespace> -o yaml > pdb_backup.yaml
Delete the PDB using the following command:
$ kubectl delete pdb <pdb-name> -n <pdb-namespace>
Retry the AKS cluster upgrade operation.
If the AKS cluster upgrade operation succeeds, redeploy the PDB using the following command:
$ kubectl apply -f pdb_backup.yaml
Contact us for help
If you have questions or need help, create a support request, or ask Azure community support. You can also submit product feedback to Azure feedback community.