This program uses kubernetes openapi swagger specs to help you understand what Resources and ApiVersions are supported by kubernetes versions.
This is a multidimensional calculation, across:
- Resources (example: Pod, Ingress)
- Api Versions (example: v1, batch/v1, apiextensions.k8s.io/v1beta1)
- Kubernetes versions
- Resource schema
Download the latest binary for your platform from https://github.com/mattfenwick/kubectl-schema/releases .
After downloading a kubectl-schema
binary, place it somewhere in your $PATH
.
It will now be usable as kubectl schema
.
See the kubectl docs for more information.
kubectl schema resources \
--resource=Ingress,CronJob,CustomResourceDefinition \
--kube-version=1.18.20,1.20.15,1.22.12,1.24.0,1.25.0-alpha.3
+--------------------------+------------------------------+------------------------------+-------------------------+-------------------------+-------------------------+
| RESOURCE | 1.18.20 | 1.20.15 | 1.22.12 | 1.24.0 | 1.25.0-ALPHA 3 |
+--------------------------+------------------------------+------------------------------+-------------------------+-------------------------+-------------------------+
| CronJob | batch.v1beta1 | batch.v1beta1 | batch.v1 | batch.v1 | batch.v1 |
| | batch.v2alpha1 | batch.v2alpha1 | batch.v1beta1 | batch.v1beta1 | |
+--------------------------+------------------------------+------------------------------+-------------------------+-------------------------+-------------------------+
| CustomResourceDefinition | apiextensions.k8s.io.v1 | apiextensions.k8s.io.v1 | apiextensions.k8s.io.v1 | apiextensions.k8s.io.v1 | apiextensions.k8s.io.v1 |
| | apiextensions.k8s.io.v1beta1 | apiextensions.k8s.io.v1beta1 | | | |
+--------------------------+------------------------------+------------------------------+-------------------------+-------------------------+-------------------------+
| Ingress | extensions.v1beta1 | extensions.v1beta1 | networking.k8s.io.v1 | networking.k8s.io.v1 | networking.k8s.io.v1 |
| | networking.k8s.io.v1beta1 | networking.k8s.io.v1 | | | |
| | | networking.k8s.io.v1beta1 | | | |
+--------------------------+------------------------------+------------------------------+-------------------------+-------------------------+-------------------------+
kubectl schema resources \
--resource=Ingress,CronJob,CustomResourceDefinition \
--kube-version=1.18.20,1.20.15,1.22.12,1.24.0,1.25.0-alpha.3 \
--group-by=api-version
+------------------------------+--------------------------+--------------------------+--------------------------+--------------------------+--------------------------+
| API VERSION | 1.18.20 | 1.20.15 | 1.22.12 | 1.24.0 | 1.25.0-ALPHA 3 |
+------------------------------+--------------------------+--------------------------+--------------------------+--------------------------+--------------------------+
| apiextensions.k8s.io.v1 | CustomResourceDefinition | CustomResourceDefinition | CustomResourceDefinition | CustomResourceDefinition | CustomResourceDefinition |
+------------------------------+ + +--------------------------+--------------------------+--------------------------+
| apiextensions.k8s.io.v1beta1 | | | | | |
+------------------------------+--------------------------+--------------------------+--------------------------+--------------------------+--------------------------+
| batch.v1 | | | CronJob | CronJob | CronJob |
+------------------------------+--------------------------+--------------------------+ + +--------------------------+
| batch.v1beta1 | CronJob | CronJob | | | |
+------------------------------+ + +--------------------------+--------------------------+--------------------------+
| batch.v2alpha1 | | | | | |
+------------------------------+--------------------------+--------------------------+--------------------------+--------------------------+--------------------------+
| extensions.v1beta1 | Ingress | Ingress | | | |
+------------------------------+--------------------------+ +--------------------------+--------------------------+--------------------------+
| networking.k8s.io.v1 | | | Ingress | Ingress | Ingress |
+------------------------------+--------------------------+ +--------------------------+--------------------------+--------------------------+
| networking.k8s.io.v1beta1 | Ingress | | | | |
+------------------------------+--------------------------+--------------------------+--------------------------+--------------------------+--------------------------+
kubectl schema resources \
--resource=Ingress,CronJob,CustomResourceDefinition \
--kube-version=1.18.20,1.20.15,1.22.12,1.24.0,1.25.0-alpha.3 \
--diff
+--------------------------+------------------------------+------------------------+--------------------------------+--------+-----------------+
| RESOURCE | 1.18.20 | 1.20.15 | 1.22.12 | 1.24.0 | 1.25.0-ALPHA 3 |
+--------------------------+------------------------------+------------------------+--------------------------------+--------+-----------------+
| CronJob | batch.v1beta1 | | remove: | | remove: |
| | batch.v2alpha1 | | batch.v2alpha1 | | batch.v1beta1 |
| | | | | | |
| | | | | | |
+--------------------------+------------------------------+------------------------+--------------------------------+--------+-----------------+
| CustomResourceDefinition | apiextensions.k8s.io.v1 | | remove: | | |
| | apiextensions.k8s.io.v1beta1 | | apiextensions.k8s.io.v1beta1 | | |
| | | | | | |
| | | | | | |
+--------------------------+------------------------------+------------------------+--------------------------------+--------+-----------------+
| Ingress | extensions.v1beta1 | add: | remove: | | |
| | networking.k8s.io.v1beta1 | networking.k8s.io.v1 | extensions.v1beta1 | | |
| | | | networking.k8s.io.v1beta1 | | |
| | | | | | |
| | | | | | |
+--------------------------+------------------------------+------------------------+--------------------------------+--------+-----------------+
kubectl schema resources \
--resource=Ingress,CronJob,CustomResourceDefinition \
--kube-version=1.18.20,1.20.15,1.22.12,1.24.0,1.25.0-alpha.3 \
--group-by=api-version \
--diff
+------------------------------+--------------------------+-----------+----------------------------+--------+----------------+
| API VERSION | 1.18.20 | 1.20.15 | 1.22.12 | 1.24.0 | 1.25.0-ALPHA 3 |
+------------------------------+--------------------------+-----------+----------------------------+--------+----------------+
| apiextensions.k8s.io.v1 | CustomResourceDefinition | | | | |
+------------------------------+ +-----------+----------------------------+--------+----------------+
| apiextensions.k8s.io.v1beta1 | | | remove: | | |
| | | | CustomResourceDefinition | | |
| | | | | | |
| | | | | | |
+------------------------------+--------------------------+-----------+----------------------------+--------+----------------+
| batch.v1 | | | add: | | |
| | | | CronJob | | |
| | | | | | |
| | | | | | |
+------------------------------+--------------------------+-----------+----------------------------+--------+----------------+
| batch.v1beta1 | CronJob | | | | remove: |
| | | | | | CronJob |
| | | | | | |
| | | | | | |
+------------------------------+ +-----------+----------------------------+--------+----------------+
| batch.v2alpha1 | | | remove: | | |
| | | | CronJob | | |
| | | | | | |
| | | | | | |
+------------------------------+--------------------------+-----------+----------------------------+--------+----------------+
| extensions.v1beta1 | Ingress | | remove: | | |
| | | | Ingress | | |
| | | | | | |
| | | | | | |
+------------------------------+--------------------------+-----------+----------------------------+--------+----------------+
| networking.k8s.io.v1 | | add: | | | |
| | | Ingress | | | |
| | | | | | |
| | | | | | |
+------------------------------+--------------------------+-----------+----------------------------+--------+----------------+
| networking.k8s.io.v1beta1 | Ingress | | remove: | | |
| | | | Ingress | | |
| | | | | | |
| | | | | | |
+------------------------------+--------------------------+-----------+----------------------------+--------+----------------+
kubectl schema explain \
--kube-version 1.24.0 \
--resource Ingress \
--format table \
--path spec.tls,status
1.24.0
io.k8s.api.networking.v1 Ingress:
+--------------------------------------------------+------------------------------------------------------------------------------------------------------+
| PATH | TYPE |
+--------------------------------------------------+------------------------------------------------------------------------------------------------------+
| spec.tls | array |
+--------------------------------------------------+------------------------------------------------------------------------------------------------------+
| spec.tls.[] | object |
+--------------------------------------------------+------------------------------------------------------------------------------------------------------+
| spec.tls.[].hosts | array |
+--------------------------------------------------+------------------------------------------------------------------------------------------------------+
| spec.tls.[].hosts.[] | string |
+--------------------------------------------------+ +
| spec.tls.[].secretName | |
+--------------------------------------------------+------------------------------------------------------------------------------------------------------+
| status | object |
+--------------------------------------------------+ +
| status.loadBalancer | |
+--------------------------------------------------+------------------------------------------------------------------------------------------------------+
| status.loadBalancer.ingress | array |
+--------------------------------------------------+------------------------------------------------------------------------------------------------------+
| status.loadBalancer.ingress.[] | object |
+--------------------------------------------------+------------------------------------------------------------------------------------------------------+
| status.loadBalancer.ingress.[].hostname | string |
+--------------------------------------------------+ +
| status.loadBalancer.ingress.[].ip | |
+--------------------------------------------------+------------------------------------------------------------------------------------------------------+
| status.loadBalancer.ingress.[].ports | array |
+--------------------------------------------------+------------------------------------------------------------------------------------------------------+
| status.loadBalancer.ingress.[].ports.[] | object |
+--------------------------------------------------+------------------------------------------------------------------------------------------------------+
| status.loadBalancer.ingress.[].ports.[].error | string |
+--------------------------------------------------+------------------------------------------------------------------------------------------------------+
| status.loadBalancer.ingress.[].ports.[].port | integer |
+--------------------------------------------------+------------------------------------------------------------------------------------------------------+
| status.loadBalancer.ingress.[].ports.[].protocol | string |
+--------------------------------------------------+------------------------------------------------------------------------------------------------------+
kubectl schema explain \
--kube-version 1.24.0 \
--resource Ingress \
--format table \
--depth 1
1.24.0
io.k8s.api.networking.v1 Ingress:
+------------+------------------------------------------------------------------------------------------------------+
| PATH | TYPE |
+------------+------------------------------------------------------------------------------------------------------+
| | object |
+------------+------------------------------------------------------------------------------------------------------+
| apiVersion | string |
+------------+ +
| kind | |
+------------+------------------------------------------------------------------------------------------------------+
| metadata | object |
+------------+ +
| spec | |
+------------+ +
| status | |
+------------+------------------------------------------------------------------------------------------------------+
Compare the schema for a type between multiple kubernetes versions.
kubectl schema compare \
--kube-version 1.18.0,1.24.2 \
--resource Ingress
comparing Ingress: 1.18.0@io.k8s.api.extensions.v1beta1 vs. 1.24.2@io.k8s.api.networking.v1
+ metadata.managedFields.[].subresource
- spec.backend
- spec.rules.[].http.paths.[].backend.serviceName
- spec.rules.[].http.paths.[].backend.servicePort
+ spec.rules.[].http.paths.[].backend.service
+ spec.defaultBackend
+ status.loadBalancer.ingress.[].ports
comparing Ingress: 1.18.0@io.k8s.api.networking.v1beta1 vs. 1.24.2@io.k8s.api.networking.v1
+ metadata.managedFields.[].subresource
- spec.backend
- spec.rules.[].http.paths.[].backend.serviceName
- spec.rules.[].http.paths.[].backend.servicePort
+ spec.rules.[].http.paths.[].backend.service
+ spec.defaultBackend
+ status.loadBalancer.ingress.[].ports
See goreleaser
's requirements here.
Get a GitHub Personal Access Token and add the repo
scope.
Set GITHUB_TOKEN
to this value:
export GITHUB_TOKEN=...
See here for more information on github tokens.
Choose a tag/release name, create and push a tag:
TAG=v0.0.1
git tag $TAG
git push origin $TAG
Cut a release:
goreleaser release --rm-dist
Make a test release:
goreleaser release --snapshot --rm-dist