
Shared foundation: controller-runtime
controller-runtime provides the core building blocks used by both Kubebuilder and the Operator SDK:- Manager: runs your operator process, sets up shared caches, and starts controllers.
- Client: typed/untyped client used to read and write Kubernetes API objects.
- Reconciler: where your reconciliation logic (the control loop) lives.
- Webhook server: handles admission webhooks for validation and mutation.


Kubebuilder: minimal, upstream, SIG-owned
Kubebuilder is the upstream project maintained by the Kubernetes SIG that also owns controller-runtime. It intentionally keeps the CLI and scaffolding minimal:- A Go module and
go.mod. - A
PROJECTfile. api/for CRD type definitions.controllers/(orinternal/controller/) for reconcilers.- A
MakefileandDockerfile.

Operator SDK: a superset for multiple workflows
Maintained by Red Hat, the Operator SDK builds on top of Kubebuilder for Go projects (it uses Kubebuilder plugins under the hood) and adds first-class support for alternative operator implementations and distribution tooling:- Helm operator: wrap a Helm chart as an operator with minimal or no Go code.
- Ansible operator: run Ansible roles/playbooks as operator logic.
- OLM integration: tooling to produce bundles and ClusterServiceVersion metadata for Operator Lifecycle Manager (OLM) and OperatorHub.

Which should you choose?
The right choice depends on your goals and distribution needs.- Use Kubebuilder if your objective is to learn controller patterns: CRDs, reconcilers, webhooks, and finalizers. Its minimal scaffold surfaces controller-runtime concepts directly and reduces complexity. This makes Kubebuilder ideal for learning or building custom Go-based operators from scratch.

- Use Operator SDK in two common scenarios:
- You have an existing Helm chart and want to ship it as an operator with little or no Go code (Helm operator).
- You need OLM/OperatorHub bundle generation and metadata out-of-the-box — common for OpenShift or when publishing to OperatorHub.

Quick decision table
Skills and code transfer cleanly between the two: a reconciler written for Kubebuilder will generally drop into an Operator SDK project unchanged, because both target controller-runtime. Learn Kubebuilder first and you’ll already have covered most of what Operator SDK uses for Go-based operators.

If your goal is to understand the internals and controller patterns, start with Kubebuilder. If you need quick Helm/Ansible integration or automatic OLM bundle generation for distribution, choose Operator SDK.
Links and references
- controller-runtime: https://github.com/kubernetes-sigs/controller-runtime
- Operator SDK docs: https://sdk.operatorframework.io/docs/
- Kubebuilder docs: https://book.kubebuilder.io/
- Operator Lifecycle Manager (OLM): https://sdk.operatorframework.io/docs/olm-integration/
- OperatorHub: https://operatorhub.io/
- OpenShift: https://www.openshift.com/