Detect Deprecated Kubernetes APIs Before Upgrading
Use Pluto to identify deprecated or removed Kubernetes APIs in your manifests and Helm charts before upgrading, ensuring smooth and predictable cluster upgrade.
Kubernetes moves fast, and it deprecates just as fast. One release you’re fine, the next you’re staring at a broken CI pipeline or a failed Helm upgrade wondering what changed.
If you’ve ever seen this and panicked:
You know what I’m talking about.
I faced this during an upgrade to Kubernetes v1.25. Our Helm deployment crashed because policy/v1beta1 was removed, not just deprecated. It had been deprecated for several releases, but because Kubernetes auto-converts deprecated resources when queried, we missed it entirely in our pre-upgrade checks. I documented the full breakdown here: Helm Upgrade Failed After v1.25 Due to PDB API.
That incident led me to Pluto, a utility that now sits at the front of all my upgrade workflows.
Pluto is a command-line tool developed by Fairwinds that scans your Kubernetes manifests, Helm charts, and live cluster resources to detect deprecated and removed apiVersions.
Think of it as a linter, but for your cluster’s long-term health. Instead of warning you about indentation or typos, it warns you about objects that will break silently once you cross a certain Kubernetes version.
The Kubernetes API server is designed to be backward-compatible. When you kubectl get or inspect objects, it quietly translates older APIs into their latest supported versions. That means even if you deployed a resource using extensions/v1beta1, you’ll likely see it returned as apps/v1.
That’s great for smooth operation, but it makes it extremely hard to audit for upcoming breakage.
Helm doesn’t throw warnings for deprecated APIs. If your template renders fine, it assumes it’s valid. But that rendered manifest might use an API that’s already been removed in your target version. The deploy will fail, and you’ll only find out after rollout starts.
Here’s the real value: Pluto isn’t just a manual tool. You can wire it into your CI/CD pipelines to block pull requests or Helm deployments that introduce deprecated APIs.
Cluster upgrades are risky not because of the upgrade itself, but because of the hidden deprecations that lie in wait.
Pluto is the upgrade audit tool Kubernetes never gave us.
Add it to your workflow if:
You deploy Helm charts regularly
You manage more than one cluster
You want to simulate upgrade readiness before touching kubeadm upgrade
I run it before every major version bump, and now I never go in blind.
FAQs
What problem does Pluto solve in Kubernetes upgrades?
Pluto detects deprecated or removed apiVersions in Kubernetes manifests, Helm charts, and live clusters, issues the API server masks by auto-converting versions.
Why can’t I rely on the Kubernetes API server to find deprecated resources?
Because the API server auto-converts older versions (e.g., extensions/v1beta1) to newer ones (e.g., apps/v1) on read, hiding deprecated usage during inspection.
How does Pluto help prevent Helm upgrade failures?
Pluto flags deprecated or removed APIs used in Helm charts before deployment, preventing runtime failures caused by missing or outdated apiVersions.
Can Pluto be used in CI/CD pipelines?
Yes. Pluto supports non-zero exit codes for deprecated or removed APIs, making it easy to fail CI jobs and enforce compatibility checks before merging or deploying.
What are the different ways Pluto can scan for deprecated APIs?
Pluto can scan static YAML files, rendered Helm charts, live Helm releases in clusters, and active API resources like PodDisruptionBudgets or Ingress objects.
Like what you read? Support my work so I can keep writing more for you.