This is a very simple utility to help users find deprecated Kubernetes apiVersions in their code repositories and their helm releases.
Want to learn more? Reach out on the Slack channel, send an email to opensource@fairwinds.com
, or join us for office hours on Zoom
Kubernetes sometimes deprecates apiVersions. Most notably, a large number of deprecations happened in the 1.16 release. This is fine, and it's a fairly easy thing to deal with. However, it can be difficult to find all the places where you might have used a version that will be deprecated in your next upgrade.
You might think, "I'll just ask the api-server to tell me!", but this is fraught with danger. If you ask the api-server to give you deployments.v1.apps
, and the deployment was deployed as deployments.v1beta1.extensions
, the api-server will quite happily convert the api version and return a manifest with apps/v1
. This is fairly well outlined in the discussion in this issue.
So, long story short, finding the places where you have deployed a deprecated apiVersion can be challenging. This is where pluto
comes in. You can use pluto to check a couple different places where you might have placed a deprecated version:
- Infrastructure-as-Code repos: Pluto can check both static manifests and Helm charts for deprecated apiVersions
- Live Helm releases: Pluto can check both Helm 2 and Helm 3 releases running in your cluster for deprecated apiVersions
We have an asdf plugin here. You can install with:
asdf plugin-add pluto
asdf list-all pluto
asdf install pluto <latest version>
Install the binary from our releases page.
First, follow the install instructions to install pluto.
Run pluto detect-files -d <DIRECTORY YOU WANT TO SCAN>
You should see an output something like:
$ pluto detect-files -d pkg/finder/testdata
KIND VERSION DEPRECATED FILE
Deployment extensions/v1beta1 true pkg/finder/testdata/deployment-extensions-v1beta1.json
Deployment extensions/v1beta1 true pkg/finder/testdata/deployment-extensions-v1beta1.yaml
This indicates that we have two files in our directory that have deprecated apiVersions. This will need to be fixed prior to a 1.16 upgrade.
$ pluto detect-helm --helm-version 3
KIND VERSION DEPRECATED RESOURCE NAME
StatefulSet apps/v1beta1 true audit-dashboard-prod-rabbitmq-ha
This indicates that the StatefulSet audit-dashboard-prod-rabbitmq-ha was deployed with apps/v1beta1 which is deprecated in 1.16
You can also use Pluto with helm 2:
$ pluto detect-helm --helm-version=2 -A
KIND VERSION DEPRECATED RESOURCE NAME
Deployment extensions/v1beta1 true invincible-zebu-metrics-server
Deployment apps/v1 false lunging-bat-metrics-server
You can run helm template <chart-dir> | pluto detect --show-all -
This will output something like so:
KIND VERSION DEPRECATED RESOURCE NAME
Deployment apps/v1 false RELEASE-NAME-goldilocks-controller
Deployment apps/v1 false RELEASE-NAME-goldilocks-dashboard