Kubebuilder v2 vs v3 (Legacy Kubebuilder v2.0.0+ layout to 3.0.0+)
This document covers all breaking changes when migrating from v2 to v3.
The details of all changes (breaking or otherwise) can be found in controller-runtime, controller-tools and kb-releases release notes.
Common changes
v3 projects use Go modules and request Go 1.18+. Dep is no longer supported for dependency management.
Kubebuilder
-
Preliminary support for plugins was added. For more info see the Extensible CLI and Scaffolding Plugins: phase 1, the Extensible CLI and Scaffolding Plugins: phase 1.5 and the Extensible CLI and Scaffolding Plugins - Phase 2 design docs. Also, you can check the Plugins section.
-
The
PROJECT
file now has a new layout. It stores more information about what resources are in use, to better enable plugins to make useful decisions when scaffolding.Furthermore, the PROJECT file itself is now versioned: the
version
field corresponds to the version of the PROJECT file itself, while thelayout
field indicates the scaffolding & primary plugin version in use. -
The version of the image
gcr.io/kubebuilder/kube-rbac-proxy
, which is an optional component enabled by default to secure the request made against the manager, was updated from0.5.0
to0.11.0
to address security concerns. The details of all changes can be found in kube-rbac-proxy.
TL;DR of the New go/v3
Plugin
More details on this can be found at here, but for the highlights, check below
-
Scaffolded/Generated API version changes:
- Use
apiextensions/v1
for generated CRDs (apiextensions/v1beta1
was deprecated in Kubernetes1.16
) - Use
admissionregistration.k8s.io/v1
for generated webhooks (admissionregistration.k8s.io/v1beta1
was deprecated in Kubernetes1.16
) - Use
cert-manager.io/v1
for the certificate manager when webhooks are used (cert-manager.io/v1alpha2
was deprecated inCert-Manager 0.14
. More info: CertManager v1.0 docs)
- Use
-
Code changes:
- The manager flags
--metrics-addr
andenable-leader-election
now are named--metrics-bind-address
and--leader-elect
to be more aligned with core Kubernetes Components. More info: #1839 - Liveness and Readiness probes are now added by default using
healthz.Ping
. - A new option to create the projects using ComponentConfig is introduced. For more info see its enhancement proposal and the Component config tutorial
- Manager manifests now use
SecurityContext
to address security concerns. More info: #1637
- The manager flags
-
Misc:
- Support for controller-tools
v0.9.0
(forgo/v2
it isv0.3.0
and previously it wasv0.2.5
) - Support for controller-runtime
v0.12.1
(forgo/v2
it isv0.6.4
and previously it wasv0.5.0
) - Support for kustomize
v3.8.7
(forgo/v2
it isv3.5.4
and previously it wasv3.1.0
) - Required Envtest binaries are automatically downloaded
- The minimum Go version is now
1.18
(previously it was1.13
).
- Support for controller-tools
Migrating to Kubebuilder v3
So you want to upgrade your scaffolding to use the latest and greatest features then, follow up the following guide which will cover the steps in the most straightforward way to allow you to upgrade your project to get all latest changes and improvements.
- Migration Guide v2 to V3 (Recommended)
By updating the files manually
So you want to use the latest version of Kubebuilder CLI without changing your scaffolding then, check the following guide which will describe the manually steps required for you to upgrade only your PROJECT version and starts to use the plugins versions.
This way is more complex, susceptible to errors, and success cannot be assured. Also, by following these steps you will not get the improvements and bug fixes in the default generated project files.
You will check that you can still using the previous layout by using the go/v2
plugin which will not upgrade the controller-runtime and controller-tools to the latest version used with go/v3
becuase of its breaking changes. By checking this guide you know also how to manually change the files to use the go/v3
plugin and its dependencies versions.