Estimate total time to upgrade a Kubernetes cluster across control plane and nodes.
Upgrading a cluster node-by-node (whether OS patching, kubelet version bumps, or full node replacement) involves three phases per node — draining existing pods off, performing the upgrade itself, and uncordoning plus warming back up — and only a limited number of nodes can be mid-upgrade simultaneously without violating PodDisruptionBudgets or surge capacity limits. Total time is the per-node phase sum multiplied by node count, divided by how many nodes upgrade in parallel.
totalTime = (nodes × (drainTime + upgradeTime + uncordonTime)) / parallelism
PodDisruptionBudgets on critical workloads (which cap how many replicas can be unavailable at once), available surge/spare capacity to absorb drained pods, and the managed Kubernetes provider's own node-group upgrade concurrency settings.
Nodes running pods with long terminationGracePeriodSeconds, StatefulSet pods requiring ordered shutdown, or PodDisruptionBudget conflicts that force retries all extend drain time — a node hosting mostly stateless Deployment pods drains much faster.
Only as far as your PDBs and spare capacity safely allow — pushing parallelism too high risks violating availability guarantees or exhausting cluster capacity mid-upgrade if drained pods can't be rescheduled fast enough.