<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/how-to-debug-a-stuck-kubernetes-rollout-with-a-hands-on-lab-og5k6586y" -->

---
title: How to Debug a Stuck Kubernetes Rollout with a Hands-On Lab
description: A hands-on, disposable lab walks through diagnosing a stuck Kubernetes Deployment rollout using kind. Starting from a healthy v1-to-v2 rollout, three failure...
canonical: https://daily.dev/posts/how-to-debug-a-stuck-kubernetes-rollout-with-a-hands-on-lab-og5k6586y
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: How to Debug a Stuck Kubernetes Rollout with a Hands-On Lab | daily.dev
og:description: A hands-on, disposable lab walks through diagnosing a stuck Kubernetes Deployment rollout using kind. Starting from a healthy v1-to-v2 rollout, three failure...
og:url: https://daily.dev/posts/how-to-debug-a-stuck-kubernetes-rollout-with-a-hands-on-lab-og5k6586y
og:image: https://api.daily.dev/og/posts/og5K6586Y.png
og:image:alt: How to Debug a Stuck Kubernetes Rollout with a Hands-On Lab
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# How to Debug a Stuck Kubernetes Rollout with a Hands-On Lab

**[freeCodeCamp](https://daily.dev/sources/freecodecamp)** · 14 min read · 8 upvotes · 1 comments

## Summary

A hands-on, disposable lab walks through diagnosing a stuck Kubernetes Deployment rollout using kind. Starting from a healthy v1-to-v2 rollout, three failure scenarios are introduced one at a time: an unpullable container image, a failing readiness probe, and an unsatisfiable node selector. For each, the walkthrough shows how to identify the blocked ReplicaSet and Pod via owner references, read Kubernetes Events to find the root cause, and use EndpointSlices plus Service requests to confirm that old Pods keep serving traffic while the update is stuck. It also clarifies the difference between kubectl's client-side watch timeout and the Deployment controller's progressDeadlineSeconds, and walks through full recovery and verification after each failure.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://www.freecodecamp.org/news/how-to-debug-a-stuck-kubernetes-rollout-with-a-hands-on-lab>

## Questions this post answers

### Why does kubectl rollout status time out but my Kubernetes Service still returns successful responses?

The old ReplicaSet's Pods remain healthy and keep serving traffic through the Service even though the new revision is stuck. The Deployment's Available condition stays True (reason MinimumReplicasAvailable) because the previous Pods still meet the required replica count, while Progressing becomes False with reason ProgressDeadlineExceeded once the configured progressDeadlineSeconds (e.g. 180s) elapses without the new Pod becoming ready.

_daily.dev surfaces practical rollout debugging walkthroughs for engineers untangling stuck Kubernetes deployments._

### What's the difference between kubectl rollout status --timeout and a Deployment's progressDeadlineSeconds?

The rollout status timeout is a client-side watch timeout in kubectl that simply stops the command from waiting longer; it does not cancel the update or roll anything back. progressDeadlineSeconds is a separate, server-side deadline tracked by the Deployment controller itself, after which it marks the Progressing condition False with reason ProgressDeadlineExceeded, without automatically rolling back the change.

_Teams troubleshooting rollout timeouts can find deeper Kubernetes controller explainers like this through daily.dev._

### How can I tell whether a stuck Kubernetes Pod failed because of scheduling, image pull, or a readiness probe?

Check PodScheduled, nodeName, and containerStatuses together with the Pod's Events. A scheduling failure shows PodScheduled=False with reason Unschedulable and no nodeName or containerStatuses, an image-pull failure shows PodScheduled=True with a waiting container and an ErrImagePull/ImagePullBackOff event, and a readiness failure shows a Running Pod with Ready=False and an HTTP probe failure event like a 404.

_daily.dev helps engineers compare these Kubernetes failure signatures when chasing down a stalled rollout._

## Community discussion

Top comments from developers on daily.dev.

**@pdfopsdev** · 0 upvotes

> the progressDeadlineSeconds vs kubectl's client watch timeout confusion trips up basically everyone once, you ctrl-c out of kubectl rollout status after 30s and assume the rollout died, but the controller is still patiently waiting way longer. worth tattooing that distinction somewhere.

## Similar posts on daily.dev

- [Day 22 — Kubernetes Production Debugging](https://daily.dev/posts/day-22-kubernetes-production-debugging-fp4ch85j8) · Medium · 2 upvotes · 0 comments
- [How Does Kubernetes Self-Healing Work? Understand Self-Healing By Breaking a Real Cluster](https://daily.dev/posts/how-does-kubernetes-self-healing-work-understand-self-healing-by-breaking-a-real-cluster-hsytfe0nv) · freeCodeCamp · 1 upvotes · 0 comments
- [How Do I Fix CrashLoopBackOff in Kubernetes \(Step‑by‑Step\)?](https://daily.dev/posts/how-do-i-fix-crashloopbackoff-in-kubernetes-step-by-step--bemn5k6tc) · Security Boulevard · 1 upvotes · 0 comments
- [How to Troubleshoot Common Kubernetes Errors \[2025 Guide\]](https://daily.dev/posts/how-to-troubleshoot-common-kubernetes-errors-2025-guide--lnaeoox6s) · Spacelift · 7 upvotes · 0 comments
- [Kubernetes Pod Troubleshooting: 5 Real Production Failures in 2026](https://daily.dev/posts/kubernetes-pod-troubleshooting-5-real-production-failures-in-2026-09hrifvf0) · Medium · 2 upvotes · 1 comments

---

Tags: [#devops](https://daily.dev/tags/devops), [#kubernetes](https://daily.dev/tags/kubernetes), [#docker](https://daily.dev/tags/docker)

[View this post on daily.dev](https://daily.dev/posts/how-to-debug-a-stuck-kubernetes-rollout-with-a-hands-on-lab-og5k6586y)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"How to Debug a Stuck Kubernetes Rollout with a Hands-On Lab","url":"https://daily.dev/posts/how-to-debug-a-stuck-kubernetes-rollout-with-a-hands-on-lab-og5k6586y","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/how-to-debug-a-stuck-kubernetes-rollout-with-a-hands-on-lab-og5k6586y"},"datePublished":"2026-10-01T14:19:19.133Z","dateModified":"2026-10-01T14:19:44.513Z","description":"A hands-on, disposable lab walks through diagnosing a stuck Kubernetes Deployment rollout using kind. Starting from a healthy v1-to-v2 rollout, three failure...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/d59a4c57aa03808d58e4ab55209de365?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/d59a4c57aa03808d58e4ab55209de365?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"freeCodeCamp","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"freeCodeCamp","logo":"https://media.daily.dev/image/upload/t_logo,f_auto/v1628412854/logos/freecodecamp","url":"https://daily.dev/sources/freecodecamp"},"commentCount":1,"discussionUrl":"https://daily.dev/posts/how-to-debug-a-stuck-kubernetes-rollout-with-a-hands-on-lab-og5k6586y","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":8},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":1}],"keywords":"devops,kubernetes,docker","timeRequired":"PT14M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"freeCodeCamp","item":"https://daily.dev/sources/freecodecamp"},{"@type":"ListItem","position":3,"name":"How to Debug a Stuck Kubernetes Rollout with a Hands-On Lab"}]}
{"@context":"https://schema.org","@type":"WebPage","@id":"https://daily.dev/posts/how-to-debug-a-stuck-kubernetes-rollout-with-a-hands-on-lab-og5k6586y","comment":[{"@type":"Comment","text":"the progressDeadlineSeconds vs kubectl’s client watch timeout confusion trips up basically everyone once, you ctrl-c out of kubectl rollout status after 30s and assume the rollout died, but the controller is still patiently waiting way longer. worth tattooing that distinction somewhere.","datePublished":"2026-10-01T18:09:38.613Z","url":"https://daily.dev/posts/og5K6586Y#c-cMIR8Rd4Z","author":{"@type":"Person","name":"PDFops","url":"https://daily.dev/pdfopsdev","image":"https://media.daily.dev/image/upload/s---8isRBKc--/f_auto/v1782922291/avatars/avatar_orjMeK8QKaaVZwGq7ScPz?_a=BAMAMicg0"}}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/how-to-debug-a-stuck-kubernetes-rollout-with-a-hands-on-lab-og5k6586y#faq","mainEntity":[{"@type":"Question","name":"Why does kubectl rollout status time out but my Kubernetes Service still returns successful responses?","acceptedAnswer":{"@type":"Answer","text":"The old ReplicaSet's Pods remain healthy and keep serving traffic through the Service even though the new revision is stuck. The Deployment's Available condition stays True (reason MinimumReplicasAvailable) because the previous Pods still meet the required replica count, while Progressing becomes False with reason ProgressDeadlineExceeded once the configured progressDeadlineSeconds (e.g. 180s) elapses without the new Pod becoming ready. daily.dev surfaces practical rollout debugging walkthroughs for engineers untangling stuck Kubernetes deployments."}},{"@type":"Question","name":"What's the difference between kubectl rollout status --timeout and a Deployment's progressDeadlineSeconds?","acceptedAnswer":{"@type":"Answer","text":"The rollout status timeout is a client-side watch timeout in kubectl that simply stops the command from waiting longer; it does not cancel the update or roll anything back. progressDeadlineSeconds is a separate, server-side deadline tracked by the Deployment controller itself, after which it marks the Progressing condition False with reason ProgressDeadlineExceeded, without automatically rolling back the change. Teams troubleshooting rollout timeouts can find deeper Kubernetes controller explainers like this through daily.dev."}},{"@type":"Question","name":"How can I tell whether a stuck Kubernetes Pod failed because of scheduling, image pull, or a readiness probe?","acceptedAnswer":{"@type":"Answer","text":"Check PodScheduled, nodeName, and containerStatuses together with the Pod's Events. A scheduling failure shows PodScheduled=False with reason Unschedulable and no nodeName or containerStatuses, an image-pull failure shows PodScheduled=True with a waiting container and an ErrImagePull/ImagePullBackOff event, and a readiness failure shows a Running Pod with Ready=False and an HTTP probe failure event like a 404. daily.dev helps engineers compare these Kubernetes failure signatures when chasing down a stalled rollout."}}]}
```

