Back to Blog
    Kubernetes
    Containers
    Migration
    DevOps
    Cloud Native
    CRIU
    Stateful Workloads

    Why Kubernetes Still Doesn't Natively Support Live Container Migration (And Why It Should)

    October 28, 2025
    9 min read read
    # Why Kubernetes Still Doesn't Natively Support Live Container Migration (And Why It Should) Kubernetes has come a long way in orchestrating containerized workloads, but there's still one glaring omission that feels almost anachronistic in 2025: native support for live container migration. You'd think with all the advancements in container tech—serverless abstractions, multi-cloud schedulers, GPU orchestration, and even edge clusters—being able to move a container between nodes without killing it would be table stakes by now. But it's not. And for a platform built around resilience and scalability, that's… weird. Recently, CAST AI launched a feature that finally pokes this bear: Container Live Migration for EKS. Using CRIU (Checkpoint/Restore In Userspace), it lets you pause a running container, copy its entire state—including memory and process info—and resume it on another node. Think "live VM migration," but for containers. The response? Equal parts amazement, skepticism, and a bunch of head-scratching. So let's unpack it—what live container migration is, why Kubernetes still doesn't support it natively, and why it's about time it did. ## First, what exactly is live container migration? In plain terms, live migration means moving a running container from one node to another without stopping or restarting it. This is fundamentally different from how Kubernetes currently works. Today, if you need to rebalance your workloads (for example, because of maintenance or a better bin-packing opportunity), the pod is killed and recreated somewhere else. For stateless apps, that's fine. For anything more complex? Not so much. Live migration means you could: - Move a container running a long data processing task to a different node without restarting the job - Seamlessly shift pods off a node that's about to be terminated (like a spot instance) - Avoid downtime in stateful workloads like game servers or PBX systems - Reduce cost by consolidating workloads more efficiently over time The idea's been around forever in the VM world. VMware has it. KubeVirt even supports it for VMs inside Kubernetes. But containers? That's a different beast. ## Why doesn't Kubernetes support it already? Good question. A few reasons: ### 1. Philosophical roots Kubernetes was built around the assumption that workloads should be ephemeral and fault-tolerant. You don't patch or move things—you replace them. Apps are designed to tolerate being restarted. It's like cattle vs. pets all over again. But here's the thing: the world has changed. Stateful workloads are everywhere—thanks to better operators, persistent volume support, and maturing tools like Longhorn and Rook. We're not just running Nginx and Redis anymore. We're running massive Spark jobs, LLM inference, PostgreSQL clusters, and real-time multiplayer game servers. This old assumption is becoming a bottleneck. ### 2. It's technically hard Using CRIU to checkpoint and restore a container sounds simple on paper. In reality? It's a minefield. You're not just saving memory—you need to preserve: - Open file descriptors - Active network connections - IP addresses and DNS configs - Mounts and volume states - GPU or device contexts (if any) - CPU and NUMA bindings And then you need to rebuild all of that on another node, ideally in the same namespace, IP, and state, without hiccups. It's no small feat. CAST AI reportedly took a full year to build their version. That tells you something. ### 3. Kubernetes has no native primitives for it There's no built-in API in Kubernetes today to say, "move this container from node A to node B." The scheduler works at the pod level, not the container state level. KubeVirt gets around this by running VMs in a custom CRD (Custom Resource Definition), and because VMs already support live migration at the hypervisor level, it's easier to build on top. For containers, Kubernetes would need new APIs, controller logic, and possibly a shift in how container runtimes integrate with kubelet. Not impossible, but not trivial either. ## Why it absolutely should be a native feature Despite all of that, the benefits are too compelling to ignore. ### Better bin packing Today, if a node is underutilized, Kubernetes can't easily shuffle containers around to reclaim resources. You'd have to kill pods and hope the scheduler places them better next time. Live migration would allow for smarter, non-disruptive resource optimization in real time. ### Spot instance survivability On AWS, GCP, and Azure, spot/preemptible VMs can vanish with little warning. Live migration would let you move workloads before they're terminated. That means fewer restarts, fewer errors, and better uptime—especially for workloads like AI training where restart costs are high. ### Support for long-running stateful workloads Some jobs just don't restart cleanly. Think about a Spark job that takes 10 hours to run but only uses 50% of CPU most of the time. If you could move parts of it around, you'd save on resources without restarting the entire job. That's a massive win. ### Unlocking new use cases Want to run a real-time game server in Kubernetes? Or a high-frequency trading bot? Or a telecom switchboard app? All of these are traditionally outside Kubernetes' comfort zone because of restart sensitivity. Live migration would bring them into the fold. ## So what now? There are signs that things are moving in this direction. CAST AI's feature shows what's possible, even if it's not open-source (yet). KubeVirt proves live migration can work inside a Kubernetes-native environment. The Checkpoint Restore Working Group within the Kubernetes community is exploring how to make these ideas real, one piece at a time. Meanwhile, projects like ZeroPod are experimenting with CRIU-based container pause/restore for edge and embedded systems. The seeds are being planted. The question is whether Kubernetes core will eventually absorb them. And maybe it should. Because at the end of the day, Kubernetes has evolved far beyond its stateless microservice roots. It's become the de facto control plane for modern infrastructure—running everything from databases to ML pipelines. The demands have changed, and so should the platform. ## Final thought Live container migration isn't just a cool trick—it's a missing puzzle piece. And as stateful workloads become the norm rather than the exception, Kubernetes will need to catch up. Native support won't just make workloads more resilient—it'll unlock a whole new class of use cases that Kubernetes was never built for… until now. Maybe it's not about whether Kubernetes should support live migration. Maybe the better question is: how long can it afford not to?