A technical overview of the Strimzi 1.0.0 CRD migration path, including CRD versioning, conversion tooling, storage updates, and operational considerations for ArgoCD-managed GitOps Kubernetes environments.

Managing operators within production Kubernetes environments involves much more than simply rolling out a new release. For those leveraging GitOps-driven platforms, handling CRD and API updates necessitates a high level of coordination between the operator, the live cluster state, and the deployment tooling. This complexity makes major milestones, such as the Strimzi 1.0 release, particularly significant from an operational standpoint.
CustomResourceDefinitions (CRDs) combined with ArgoCD in Kubernetes can be tricky, especially when adding a new apiVersion. The owner and creator of CRDs has to take several things into account while building an upgrade path for their users.
Strimzi has recently released their version 1.0.0 of the Strimzi Operator for Kafka. And with this release, an updated set of CRDs in which all Fold versions have been removed with the recently introduced v1 remaining.
v1 was introduced several releases before 1.0.0, not marked as the storage version yet of course. This allows users to already configure their resources using the v1 schema.
With the 1.0.0 release, the new set of CRDs actually does two things: set storage=true for v1 and remove all old apiVersions at the same time.
A conversion tool was shipped with the prior releases that can be used to update several Custom Resources as well as the CRDs. One of its most important features is the modification of currently existing CRDs in your Kubernetes cluster. It sets storage=true for v1, performs a no-op update of existing CRs so they are persisted with apiVersion v1 in etcd, and finally removes the old apiVersions from the storedVersions array in the CRD status subresource.
Now combine what Strimzi provides with a GitOps operations environment using ArgoCD, where everything is managed, including CRDs. It is quite clear that ArgoCD will start complaining about things being out of sync the moment that the Strimzi conversion tool has run.
All things considered, the following is a short plan we have at Axual to properly upgrade our Strimzi Operator to 1.0.0.
So, this is our plan to upgrade the Strimzi deployment to version 1.0.0. Curious to hear other approaches!
Questions, feedback, or interested in discussing Strimzi operations and upgrades in Kubernetes environments?
Connect with our Strimzi experts at Axual.