During a Kubernetes upgrade, the HorizontalPodAutoscaler (HPA) continues adjusting workload replicas from metrics; it does not upgrade nodes or reserve capacity for evicted Pods. Node autoscaling is a separate loop that may add capacity for unschedulable Pods, but it cannot guarantee that capacity will appear. Plan the upgrade using your cluster provider’s procedure, check PodDisruptionBudgets (PDBs) and application health before draining, follow version-skew rules for the exact release, and monitor pending Pods throughout.
What HPA and node autoscaling do during an upgrade
HPA scales workload replicas
An HPA periodically adjusts a workload’s replica count based on observed resource utilization or other configured metrics. When it targets a Deployment, the Deployment controller manages ReplicaSets during a rolling update while the HPA remains attached to the Deployment. A StatefulSet manages its Pods directly.
As an Amazon Associate I earn from qualifying purchases.
HPA behavior depends on metrics and readiness as well as replica targets. Kubernetes documents a default five-minute CPU initialization period and a 30-second initial readiness delay for relevant HPA startup handling. These are controller defaults, not universal settings for every cluster; check the target release and controller flags before relying on them. If a rollout changes autoscaled container names or metric configuration, follow the HPA guide’s ordering guidance.
Windows Errors? Fix Them Before They Spread
Repair common Windows errors and clear accumulated junk for a smoother, more stable PC - no reinstall needed.Free scan · no reinstallCrashes, No Sound, or Screen Glitches?
Random freezes, missing sound and display glitches usually trace back to one bad driver. Find and replace yours safely.Free scan · under a minuteNode autoscaling responds to scheduling needs
Node autoscalers can attempt to provision nodes when Pods cannot be scheduled on existing capacity, and can consolidate nodes that are no longer needed. Cluster Autoscaler works with preconfigured node groups; Karpenter provisions according to NodePool constraints and also handles aspects of node lifecycle. Their scope and upgrade behavior differ by configuration and provider integration, so neither is universally safer for upgrades.
#1 Best Overall
When a node is drained, its Pods may be rescheduled elsewhere, remain pending until capacity is available, or wait because a disruption budget blocks eviction. An autoscaler may react to unschedulable Pods, but provisioning is not assured: configured limits, scheduling constraints, provider integration, and cloud capacity can all prevent a suitable node from appearing.
Choose the upgrade sequence for your cluster
The correct procedure depends on how the cluster was deployed. Kubernetes’ general upgrade guidance separates control-plane and node upgrades, then addresses clients and manifest changes for API updates. Its manual sequence does not cover every third-party network or storage extension, so check compatibility of those components as well.
For kubeadm, the documented order is one primary control-plane node, additional control-plane nodes, then worker nodes. A minor-version kubelet upgrade requires draining the node first. These instructions are not a replacement for a managed Kubernetes provider’s upgrade workflow.
Free tools Windows power users keep installed
One-click scans. No signup required.
Version skew rules are specific to the source and target Kubernetes releases and component versions. Consult the policy for the exact versions you are running; examples on living documentation pages are release-specific, not timeless instructions.
Rank #3
Check disruption budgets and health before draining
kubectl drain marks a node unschedulable and evicts eligible Pods through the Eviction API. A PDB can limit or block voluntary evictions, so inspect its allowed disruptions and verify actual application health before maintenance. A PDB is an eviction constraint, not proof that the application can meet its availability goal.
The PDB policy IfHealthyBudget, the default, can block removal of running but unhealthy Pods when the application is already disrupted. AlwaysAllow permits eviction of unhealthy running Pods even when budget criteria are not met. Kubernetes’ disruption guidance suggests considering AlwaysAllow to help drain misbehaving applications; changing the policy also changes which Pods can be evicted, so assess the availability tradeoff for that workload.
Quick Recap
Best Value
Operational checklist
- Identify the supported path. Confirm the cluster provisioning method, current and target Kubernetes versions, and the provider’s upgrade procedure.
- Check workload readiness and disruption. Review replica counts, readiness behavior, PDB status, and application health before starting node maintenance.
- Drain and upgrade in the required order. Use the sequence supported by your deployment method, and make sure each node returns to service before proceeding according to your runbook.
- Track scheduling and capacity. Watch pending Pods, requested-resource shortfalls, affinity or storage constraints, and node-autoscaler limits while nodes are unavailable.
- Monitor workload scaling. Compare HPA recommendations with actual ready replicas through the rollout, and check metric configuration if autoscaled containers or metric names change.
- Verify extensions and integrations. Check add-ons, device plugins, storage and network integrations, and API compatibility against the target release where applicable.
References
- Kubernetes: Horizontal Pod Autoscaling
- Kubernetes: Node Autoscaling
- Kubernetes: Upgrade a Cluster
- Kubernetes: Upgrading kubeadm clusters
- Kubernetes: Safely Drain a Node
- Kubernetes: Configure a PodDisruptionBudget
- Kubernetes: Pod disruptions
- Kubernetes: Version Skew Policy
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.




