Skip to content

rolling deployment

Rolling deployment is a release strategy that updates a running service by replacing its instances with the new version a few at a time, so the rest of the fleet keeps serving traffic while each batch is swapped out. Because only a slice of the instances change at once, the rollout reaches the whole fleet with no scheduled downtime and without the duplicate hardware a blue-green deployment keeps on standby.

Each batch advances only after it passes a health check:

A loop from a white "Fleet on v1" box to a teal "Swap batch" box to a yellow "Smoke test passes?" diamond. "pass" loops back, "fail" goes to a coral "Halt" box, a dotted arrow to a green "v2" box.
Each wave only advances past the smoke test, so a bad batch halts before it reaches the whole fleet.

The rollout advances in waves, and a deploy channel or a kubectl rollout status command reports the fleet converging on the new version one batch at a time:

Language: Shell
$ kubectl rollout status deployment/web
Waiting for deployment "web" rollout to finish: 2 out of 6 new replicas have been updated...
Waiting for deployment "web" rollout to finish: 4 out of 6 new replicas have been updated...
Waiting for deployment "web" rollout to finish: 5 of 6 updated replicas are available...
deployment "web" successfully rolled out

How It Shows Up in Practice

A Python developer usually meets rolling deployment as the default behavior of the platform a service runs on rather than as anything written into the application. Kubernetes ships it as the RollingUpdate strategy on a Deployment, where two knobs set the pace. maxUnavailable caps how many instances can be down at once, and maxSurge caps how many extra instances can run beyond the target count.

Both default to 25 percent, so a Deployment performs a rolling update on every image change. Managed platforms expose the same idea under their own names, such as the minimumHealthyPercent and maximumPercent settings on AWS Elastic Container Service.

The router in front of the fleet sends traffic only to instances that report healthy, which is what keeps the swap invisible to users. Teams gate each wave behind a smoke test and watch the rollout through their observability stack, so a bad batch can halt the rollout before it reaches every instance.

Common Pitfalls

The mixed-version window is the catch. For most of the rollout, old and new instances serve live traffic side by side, so both versions have to stay compatible with the same database schema, message formats, and shared caches. A schema change usually has to ship as a backward-compatible step applied before the rollout, the same discipline a blue-green cutover demands.

Rollback is also slower than the one-step traffic switch of blue-green. Reverting means rolling the previous version back out wave by wave, so the fleet spends a second mixed-version window on the way back down. Where a release changes risky behavior and the team wants to judge it on real traffic before committing, a canary deployment exposes the new version to a small slice of users first, then ramps up only if the signals stay healthy.

Tutorial

Securely Deploy a Django App With Gunicorn, Nginx, & HTTPS

Ready to take your Django app beyond development? Learn how to securely deploy your Django web app in production over HTTPS with Gunicorn and Nginx. Along the way, you'll explore how HTTP headers can fortify your app's security.

intermediate django

For additional information on related topics, take a look at the following resources:


By Martin Breuss • Updated June 5, 2026