Models Need Daily Validation, but a 30 GB Image Takes Three Hours to Pull — How Subaru Cut It to Three Minutes
Table of Contents
KubeCon Japan 2026 just wrapped, and CNCF announced that Subaru won the End User Case Study contest — not a “car company moves to the cloud” story, but how Subaru unblocked the AI platform behind next-gen EyeSight (ADAS)
The number that sticks: 30 GB+ ML/CUDA images, pull time from about 3 hours down to about 3 minutes — officially 60×. They also manage 25 application definitions with GitOps and automate the ML pipeline end to end
Full architecture and outcomes: CNCF Case Study
Why this matters now
AI training/inference teams hit the same infra pain, whether or not they build cars:
- Images keep growing — CUDA base images start around 30 GB; Pods won’t start, and engineers can’t tell “still pulling” from “already broken”
- Deployments are still hand-run scripts — Helm from a shell; mixing up dev/prod is a real ops risk
- ML pipelines have many stages and messy deps — preprocess, validate, train, convert, store artifacts, downstream work — without unified orchestration, reproducibility is hard
Subaru’s setting is an on-prem GPU cluster for the data → train → infer loop on next-gen EyeSight models. The bottleneck isn’t “do we have Kubernetes,” it’s how to pull huge images fast, deliver apps declaratively, and wire ML workflows in-cluster
The value of this case isn’t pitching a cloud vendor. It’s how a CNCF project mix solves real AI platform pain — Envoy Gateway, Gateway API, MetalLB, Harbor, Argo CD, Helmfile, Argo Workflows each covering a slice
Three holes they filled
Hole 1: Huge image pulls kill iteration speed
Symptom: CUDA images over 30 GB; 3+ hours of pull before a Pod starts; train/infer cycles become unpredictable. In their words — when it takes more than three hours, it’s hard to tell if the system is still working or already failed
The fix isn’t a bigger disk. It’s shortening the network path from Harbor to the node:
- Harbor as the container registry
- Envoy Gateway + Gateway API for registry traffic routing
- Envoy Gateway on hostNetwork to cut path overhead
- Prefer scheduling communicating workloads on the same node so traffic stays local
- MetalLB for LoadBalancer so the path and bandwidth are real
Result: same 30 GB+ images, pull about 3 minutes. Pods come up faster; less GPU idle time and less “waiting in uncertainty”
Hole 2: Hand scripts, no GitOps
Symptom: deploy by manually running shell + Helm — it works, but hard to standardize or keep declarative; dev/prod drift lives in people’s heads; mis-deploys are an ops challenge
Fix: Argo CD + Helmfile on top of existing Helm charts — app definitions in Git, Argo CD syncs. They manage 25 application definitions; deploys become reproducible and environments more consistent
Hole 3: No unified ML pipeline orchestration
Symptom: data prep, preprocess, validate, train, model convert, artifact store, downstream — many stages, clear deps, but no Kubernetes-native way to chain them
Fix: Argo Workflows — define the whole ML pipeline as a K8s-native workflow, declare stage deps, parallelize where possible, cut handoffs, and ground reproducible model iteration
The 60× pull: network intuition worth unpacking
It’s easy to write “Subaru optimized Kubernetes.” Plainly: the core is wasted hops and bandwidth on the path from registry to kubelet
Concrete levers (from the case study, not guesses):
| Lever | Role |
|---|---|
| Harbor | Store large ML/CUDA images |
| Envoy Gateway + Gateway API | Registry ingress and routing |
| hostNetwork | Skip a layer of overlay / iptables pain for Envoy |
| Same-node scheduling | Keep pull traffic on-node when possible |
| MetalLB LoadBalancer | A stable LB face for that path |
If your team also pulls 10–tens of GB training images on an on-prem GPU cluster, don’t rush to buy more bandwidth — ask first: is registry traffic taking a detour? Is the gateway sitting on overlay for free cost? Can pull and workers share a node?
Subaru’s stack is ADAS vision + stereo cameras; iteration is “change a model today, validate tomorrow.” A three-hour pull burns several useful experiment windows in a day — the business feels it
Checklist
Images
- Is the ML base image monolithic? Should runtime and code layers split? (case doesn’t say they split images; 30 GB itself is a signal)
- When pull is slow, can monitoring tell
ImagePullBackOff, registry timeout, or node disk IO apart?
Delivery
- Still Helm over SSH, or is Git the single source of truth?
- Are dev/staging/prod values differences codified with Helmfile (or similar)?
Pipeline
- Train → ONNX/TensorRT → push artifact → trigger downstream: cron + scripts, or a workflow CRD?
- Fail/retry, dependency passing, parallel stages — platform answers or tribal knowledge?
Boundary
- This case is on-prem GPU, not “public cloud fixes it automatically”
- Future plans mention multi-node distributed training (high-bandwidth secondary network) and edge deploy automation — current work focuses on single-cluster delivery and pull; distributed training is the next chapter
Should this enter your toolbox?
Split by pain, don’t lift the whole CNCF trophy stack:
| If you… | Worth following |
|---|---|
| Huge image pull is #1 pain; registry in-cluster / on-prem | Harbor + Envoy Gateway + Gateway API + MetalLB; focus on hostNetwork and same-node scheduling |
| Still hand-Helm; GitOps talked about for years | Argo CD + Helmfile; pilot 5–10 apps (Subaru has 25 definitions) |
| Many ML stages, scripts everywhere | Argo Workflows (or similar); workflow-ize one data→train→artifact path first |
| Occasional small models, images <5 GB | Deprioritize this network work; sort GitOps and pipeline reproducibility first |
Don’t worship the 60× — your image size, registry topology, CNI/overlay may differ. What’s worth copying is the problem order: quantify pull time, then fix the network path, then GitOps, then workflow — not a pile of project names up front
Official stack list: Kubernetes, Argo CD, Argo Workflows, Envoy Gateway, Gateway API, MetalLB, Helm, Harbor. Details in the case study
How this ties to what I’m building
I’m building the open-source cluster console CiliKube, plus AI investigation and terminal collaboration — once agents and training jobs must actually run in-cluster, you land on the same questions: how fast is the environment ready, can deploys reproduce, can pipelines re-run?
Subaru didn’t invent a new framework. They used existing CNCF pieces to peel ops friction off an ADAS AI platform. For platform engineers, that’s more useful than another Fortune 500 “we run Kubernetes” story — especially the combo on-prem GPU + huge images + GitOps + ML workflow
Glossary
| Term | Meaning |
|---|---|
| CNCF | Cloud Native Computing Foundation |
| ML | Machine Learning — here mostly train/infer and the surrounding pipeline |
| ADAS | Advanced Driver Assistance Systems; EyeSight is Subaru’s ADAS |
| CUDA | NVIDIA’s GPU compute stack; often baked into base images |
| declarative | Describe desired state; the system converges — vs imperative step-by-step ops |
| GitOps | Git as the single source of truth for delivery and sync |
| K8s / Pod | Kubernetes; Pod is the smallest schedulable unit |
| Gateway API | Next-gen Kubernetes north-south traffic API (cleaner than classic Ingress) |
| hostNetwork | Pod uses the host network namespace — fewer container-network hops |
| CRD | Custom Resource Definition — extend the Kubernetes API |
| CNI | Container Network Interface |
| ONNX / TensorRT | Model interchange format / NVIDIA inference runtime — common post-train convert step |
Tool links
| Tool | Site |
|---|---|
| Kubernetes | https://kubernetes.io/ |
| Harbor | https://goharbor.io/ |
| Envoy Gateway | https://gateway.envoyproxy.io/ |
| Gateway API | https://gateway-api.sigs.k8s.io/ |
| MetalLB | https://metallb.io/ |
| Helm | https://helm.sh/ |
| Helmfile | https://helmfile.readthedocs.io/ |
| Argo CD | https://argo-cd.readthedocs.io/ |
| Argo Workflows | https://argo-workflows.readthedocs.io/ |
| CNCF | https://www.cncf.io/ |