Halloween DealsAmazon USHalloween week deals: useful picks before month-endAmazon US: current deals, useful picks and tech finds.Check DealsPC HealthRecommendedCrashes, freezes, slowdowns? Check your PC nowSpot repairable issues before they interrupt work.Check PCHalloween DealsAmazon USOctober picks are moving - compare before checkoutAmazon US: current deals, useful picks and tech finds.See Picks×
FREEDOM251

Freedom251 › Blog › Cluster Upgrades

Our Kubernetes Cluster Upgrade Waited Two Days for One Pod That Could Not Leave

By Freedom251 Team · · 4 min read

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

A Kubernetes node drain can wait on a pod when removing it would violate a PodDisruptionBudget (PDB), but that is only one possible cause—not a confirmed explanation for this two-day delay. Check the pod, its owner and readiness, and the matching PDB before changing anything; long shutdown periods, rescheduling constraints, storage handling, and managed-provider upgrade policies can also extend maintenance.

Why one pod can block a node drain

During maintenance, kubectl drain uses the Eviction API to remove eligible pods while allowing workloads to shut down gracefully. An eviction is blocked when it would reduce the number of healthy pods below the matching PDB’s permitted level. If the budget allows zero voluntary disruptions, a selected pod on the node can prevent the drain from completing. Kubernetes’ node-drain guide and PDB documentation explain these mechanics.

As an Amazon Associate I earn from qualifying purchases.

The title does not identify the cluster provider or include logs and configuration, so it cannot establish that a PDB caused this particular delay. Treat PDB denial as a strong hypothesis to verify, not a postmortem finding.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

How to diagnose the blocked pod

  1. Identify the pod and its workload. Record its namespace, owner, and readiness, then determine whether the owner can create a replacement pod. A replacement that cannot become Ready will not necessarily restore disruption headroom.
  2. Find the matching PDB and inspect its status. Run kubectl get pdb --all-namespaces to list budgets, then inspect the relevant one with kubectl get poddisruptionbudgets <name> -n <namespace> -o yaml. Check disruptionsAllowed, currentHealthy, and desiredHealthy. A value of zero for disruptionsAllowed means no voluntary disruption is currently permitted. See the Kubernetes PDB guide.
  3. Check the eviction result. An HTTP 429 response can indicate that an eviction would violate a PDB, but it can also reflect API rate limiting. Use the response details and relevant events or provider logs to distinguish the causes. Kubernetes’ Eviction API documentation describes both possibilities.
  4. Check what happens after eviction. Look for a long terminationGracePeriodSeconds, scheduling constraints such as restrictive node affinity, insufficient available capacity, or persistent-volume handling that could slow shutdown or rescheduling. Google Cloud’s GKE upgrade troubleshooting guide documents these as possible upgrade delays.

Choose a remedy that preserves workload safety

Do not change a budget or force-remove a pod until you understand the application’s availability requirements. A PDB governs voluntary disruptions; it does not protect a workload from every cause of unavailability. For replicated services, establish how many healthy replicas must remain. For quorum-based stateful systems, calculate the safe replica floor before changing scale or budget settings.

Option When it may help Trade-off or caution
Add or scale workload replicas When the application can safely run additional replicas and new replicas can become Ready, extra healthy capacity may permit eviction while respecting the PDB. Google Cloud recommends scaling a Deployment or HPA in relevant GKE cases; see its cluster upgrade guidance. Scaling does not help if replicas cannot schedule or become healthy. Confirm capacity and, for stateful workloads, quorum requirements.
Correct an over-restrictive PDB When the configured budget is stricter than the service’s real availability requirement. Kubernetes documents that minAvailable equal to the replica count, or maxUnavailable: 0, permits zero voluntary evictions. Relaxing the budget can allow more simultaneous disruption. Set it according to the workload’s actual failure tolerance, not merely to make an upgrade proceed.
Use unhealthyPodEvictionPolicy: AlwaysAllow When running but unhealthy pods are preventing maintenance and the policy is appropriate for the workload. Kubernetes documents this policy as stable starting with Kubernetes 1.31. An unhealthy pod may be evicted before it gets another chance to recover. Check the cluster version and application impact before applying it.
Pause automated maintenance and investigate When the eviction is stuck and the cause or service impact is not clear. Kubernetes advises pausing the automated operation and investigating. Direct pod deletion is a possible later step, but deletion is not the same as a PDB-respecting eviction; assess application safety before considering it. See the Eviction API guidance.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Separate Kubernetes behavior from provider timing

Kubernetes defines how eviction and PDB checks work, but a managed service controls additional upgrade behavior and timing. Do not assume that a GKE-specific window or policy applies to an unidentified cluster. For example, Microsoft’s AKS troubleshooting guide describes PDB-related UpgradeFailed errors and points to an upgrade readiness check. Consult the provider’s guidance and upgrade events for the cluster in question.

For GKE specifically, the troubleshooting guide gives the audit-log message “Cannot evict pod as it would violate the pod’s disruption budget” as an example of PDB denial. It also documents certain GKE short-lived upgrade cases that can take up to seven days, and GKE Autopilot extended-duration pods that may be protected from GKE-initiated eviction for up to seven days. Those are GKE-specific behaviors, not general Kubernetes drain limits or evidence about this incident. The guide also identifies long termination periods, restrictive node affinity, and persistent-volume lifecycle handling as potential contributors to delays.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Cluster UpgradesDevOpsKubernetesnode drainPodDisruptionBudget

Leave a Reply

Your email address will not be published. Required fields are marked *

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Recommended PC Tool
Recommended PC Tool
Windows Errors? Fix Them Before They SpreadFree repair scan
Outdated Drivers Are Slowing You DownFree scan - exact matches

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.