Live
Self‑Hosted Void Platform Lets Teams Govern AI‑Built Apps on CloudflareRethinking Agent Evaluation: Practical Lessons from the Google Cloud Developer PluginTaming Semantic and Embedding Drift in Production Agentic SystemsLLM autonomous hacking exposes gaps in model sandboxing and credential handlingGitHub Actions GA Xcode 27 Runner on Apple SiliconSeparating Orchestration and Compute for GPU‑Intensive Biotech AgentsAgent Quality Evaluation at Scale with Amazon Bedrock AgentCoreAI agents on Kubernetes: handling 20‑fold request spikes and new runtime optionsSelf‑Hosted Void Platform Lets Teams Govern AI‑Built Apps on CloudflareRethinking Agent Evaluation: Practical Lessons from the Google Cloud Developer PluginTaming Semantic and Embedding Drift in Production Agentic SystemsLLM autonomous hacking exposes gaps in model sandboxing and credential handlingGitHub Actions GA Xcode 27 Runner on Apple SiliconSeparating Orchestration and Compute for GPU‑Intensive Biotech AgentsAgent Quality Evaluation at Scale with Amazon Bedrock AgentCoreAI agents on Kubernetes: handling 20‑fold request spikes and new runtime options
Kubernetes

Default Storage Version Migration in Kubernetes 1.37: What Engineers Need to Know

AI SummaryPowered by AI

Kubernetes v1.37 promotes the StorageVersionMigration API and its controller to GA and enables it by default on all clusters. This change removes the need for manual rewrite scripts, streamlines CRD version upgrades and encryption‑at‑rest key rotation, and gives operators a built‑in way to keep stored objects on the current storage schema.

Kubernetes v1.37 moves the StorageVersionMigration API ( storagemigration.k8s.io/v1 ) to General Availability and turns the built‑in controller on by default for every cluster. The shift eliminates the manual scripts and out‑of‑tree migrator that teams previously used to rewrite objects when storage schemas change, directly affecting CRD version upgrades, encryption‑at‑rest key rotation, and any workflow that depends on consistent storage versions.

What Changed: GA and Default Enablement

The StorageVersionMigration resource is now a stable, core part of the control plane. When a cluster runs v1.37, the controller watches for StorageVersionMigration objects and automatically updates stored representations to the API’s declared storage version without any extra components.

Why It Matters for Engineers

AI and cloud engineers often rely on custom resources that evolve rapidly; dropping an old version (e.g., v1alpha1) requires every persisted object to be rewritten, otherwise the API server will reject the removal. DevOps and SRE teams previously had to schedule kubectl get/replace jobs or run the external kube-storage-version-migrator pod, which added operational overhead and made progress hard to track. Security engineers see a direct benefit for encryption‑at‑rest scenarios: rotating keys or enabling encryption no longer leaves existing objects in clear text until a manual rewrite occurs. The default controller handles these rewrites automatically, reducing the attack surface of stale, unencrypted data.

Operational and Security Implications

From an architecture perspective, the migration logic now lives inside the API server’s control plane, meaning no extra deployment is required. Practically, operators create a declarative StorageVersionMigration manifest and let the controller drive the process. The controller updates the status field of the object, providing a built‑in progress view that can be queried with kubectl get. This visibility replaces ad‑hoc script logs and makes it easier to integrate migration status into existing monitoring dashboards.

Potential considerations include:

  • Increased API‑server write load while large numbers of objects are being rewritten; plan migrations during low‑traffic windows if possible.
  • Verification that the .status.storedVersions list on CRDs reflects the new version after migration completes.
  • Ensuring that any custom admission controllers or mutating webhooks are compatible with the temporary mix of storage versions during the migration window.
  • For encryption at rest, confirming that key‑rotation policies trigger a migration so that all objects are re‑encrypted under the new key.

Security posture improves because objects no longer linger in an older, potentially less‑protected schema, but teams should still audit the migration logs to confirm that no objects were skipped.

Next Steps and Evaluation Checklist

Before enabling the feature in production, consider the following actions:

  1. Deploy a test cluster on v1.37 and create a sample StorageVersionMigration for a non‑critical CRD.
  2. Observe the status updates and measure the time taken to rewrite a representative data set.
  3. Validate that the CRD’s .status.storedVersions field reflects only the new version after completion.
  4. Review any custom controllers for assumptions about object version stability during migration.
  5. Integrate the kubectl get storageversionmigration query into existing monitoring alerts to catch stalled migrations.

Related CloudNinjas coverage: Kubernetes.

What This Means For Practitioners

With storage version migration now default, teams can retire manual rewrite scripts, rely on a single declarative object to keep storage schemas current, and gain built‑in visibility into migration progress. The practical outcome is fewer operational steps during CRD upgrades and encryption key rotations, and a clearer path to removing legacy API versions without risking data inconsistency.

Originally published atKubernetes Blog