Describes three zero downtime model rollout strategies, including rolling updates, blue green canaries, and LoRA adapter swaps, plus practical Kubernetes readiness and deployment guidance.
A serving fleet never stands still.Whether the model server ships a new binary, the base model is upgraded, or a team needs their fine‑tuned flavor deployed by Friday, changes must happen under live traffic — there is no maintenance window when users are mid‑conversation.
This article explains the three rollout strategies taught in the llm‑d: A Deep Dive course and shows which approach our standalone cluster will use for live updates. We’ll preserve the order of the technical diagrams and keep the practical commands and examples where they belong.Why model serving rollouts are different
Pods are heavy: model weights are gigabytes, and loading them takes minutes. You can’t churn instances casually.
Pods are effectively stateful: their in‑memory context contains user conversations; restarting a pod can force a conversation to be re-read.
Requests are long: individual decodes can take seconds, so restarting a pod can interrupt in‑flight answers.
Readiness probes are the core tool for zero‑downtime: they do more than check that a process started. A model‑server readiness probe must assert that the model and its dependencies are fully loaded and can serve inferences reliably. That allows Kubernetes to keep a new pod NotReady while it finishes the slow initial load.
Kubernetes’ rolling update plus readiness probes
Kubernetes replaces pods one (or a small batch) at a time by default.
A readiness probe that requires the model to be loaded prevents traffic from reaching pods that are not yet able to serve.
New pods can spend minutes loading weights while staying out of the service’s endpoint pool.
Here’s how Kubernetes shows a NotReady pod during the load phase:
$ kubectl get podsNAME READY STATUSvllm-v2-x7k2q 0/1 Running
Readiness probes should reflect the real serving state (model loaded, dependencies initialized). Do not equate readiness with merely “process started”; readiness must mean “can accept and complete inferences without dropping requests.”
The slow first minutes are therefore fenced off by design: the router (service or load‑balancer) only routes to Ready endpoints. The usual sequence during a rolling update is: bring up a new pod, wait for it to load and become Ready, add it to the pool, drain an old pod, and repeat.
Rolling update is the default strategy and the one our standalone cluster uses. It shrinks and swells the pool by one (or a configured small number) without blinking the service.Blue‑green for controlled exposure
Sometimes “one‑at‑a‑time” is still too coarse. If you want to observe a new base model under real traffic gradually, stand up a parallel pool (green) beside the production pool (blue) and split traffic at the front door: 1% → 10% → 100% while you monitor metrics. Blue remains an instant rollback during the test.
Blue‑green rollouts require gateway-level weighted traffic splitting. Standalone mode (without a central gateway) makes exact small‑percentage splits hard to achieve. Use a Gateway API or dedicated edge gateway when you need precise canary percentages.
Honest note for our cluster: weighted front‑door splitting belongs to gateway machinery (e.g., a Gateway API with an NGINX Fabric Gateway). Standalone mode deliberately runs without that centralized gateway, so precise 1% vs 99% weight control is not reliable from inside an Envoy instance in a pod.
Adapter swaps (LoRA) for quick, low‑risk updates
Many day‑to‑day changes are small: teams ship a new fine‑tuned flavor rather than swapping the giant base model. LoRA (Low‑Rank Adaptation) keeps adapters tiny — a small set of parameters that load alongside a frozen base model and steer its outputs. Because adapters are orders of magnitude smaller than the base, they can be swapped with minimal disruption.Example adapter weight snippets:
Because the base model stays warm in GPU memory, swapping adapters is fast and low risk. Different teams can independently deploy adapters (support on Tuesday, legal on Thursday) without reloading gigabytes of base weights. This makes adapter swaps an efficient default for frequent, small updates.Comparing the three strategies
Strategy
Use case
Risk / Rollback
Infrastructure needs
Rolling update
Binary or model version upgrades with readiness probes
Moderate — automated via Kubernetes; relies on probe correctness
Standard Kubernetes Deployment with proper readiness/liveness probes
Blue‑green (front‑door split)
Gradual exposure/canary testing of new base models
Low — instant rollback to blue if metrics degrade
Gateway/edge layer that supports weighted routing (Gateway API, NGINX, etc.)
Adapter swap (LoRA)
Frequent small fine‑tuned flavors or user profiles
Very low — adapters are tiny and can be swapped quickly
Model server that supports adapters / hot‑swap loading
One theme across all three strategies: keep the fleet answering while you change it. Our standalone cluster already uses the rolling‑update pattern with readiness probes, and that’s the demo we’ll run next: a rolling update under live traffic while we count any failures.References and further reading