Introduction
Operator SDK is part of the Operator Framework, a CNCF project for building Kubernetes-native applications. It provides the tools to scaffold, build, and publish operators that encode operational knowledge into software. Whether you prefer Go, Ansible, or Helm, Operator SDK gives you a structured path from idea to production operator.
What Operator SDK Does
- Scaffolds new operator projects with CRDs, controllers, and RBAC in seconds
- Supports three development models: Go (full control), Ansible (playbook-driven), and Helm (chart-driven)
- Generates CRD manifests and RBAC rules from Go types and markers automatically
- Integrates with OLM (Operator Lifecycle Manager) for packaging and distribution
- Provides scorecard testing to validate operator best practices and readiness
Architecture Overview
An operator built with the SDK follows the controller-runtime pattern. Custom Resource Definitions (CRDs) define the desired state, and reconciler functions watch for changes and drive the actual state to match. The SDK scaffolds this structure, generates deepcopy methods and CRD YAML from Go struct tags, and bundles everything into a container image. For Ansible operators, the SDK translates CR events into Ansible playbook runs. For Helm operators, it maps CR specs to Helm chart values and manages releases.
Self-Hosting & Configuration
- Install the CLI via
brew install operator-sdkor download the binary from GitHub releases - Initialize a project with
operator-sdk initspecifying your Go module and domain - Create APIs with
operator-sdk create apito scaffold CRDs and controllers - Build and push the operator image with
make docker-build docker-push - Deploy to a cluster with
make deploywhich applies CRDs, RBAC, and the controller deployment
Key Features
- Three operator types: Go for maximum flexibility, Ansible for existing playbooks, Helm for chart wrapping
- Automatic CRD generation from Go types with kubebuilder markers
- OLM integration for operator packaging, versioning, and catalog distribution
- Scorecard tests validate upgrade paths, CRD best practices, and bundle correctness
- Built on controller-runtime, the standard library for Kubernetes controllers
Comparison with Similar Tools
- Kubebuilder — Operator SDK embeds Kubebuilder for Go; adds Ansible, Helm, and OLM support on top
- KUDO — Declarative operator toolkit; less flexible than Operator SDK for custom logic
- Metacontroller — Webhook-based lightweight controllers; Operator SDK provides full in-process reconciliation
- Kopf — Python operator framework; Operator SDK focuses on Go, Ansible, and Helm ecosystems
- Shell-operator — Run shell scripts as operators; simpler but less structured than Operator SDK
FAQ
Q: Should I use the Go, Ansible, or Helm operator type? A: Use Helm if you already have a Helm chart and need basic lifecycle management. Use Ansible if your team knows Ansible well. Use Go for complex reconciliation logic and maximum performance.
Q: How does Operator SDK relate to Kubebuilder? A: Operator SDK uses Kubebuilder under the hood for Go-based operators. It adds Ansible and Helm support, OLM integration, and the scorecard testing framework.
Q: Can I publish my operator to OperatorHub?
A: Yes. Use operator-sdk bundle create to build an OLM bundle, then submit it to OperatorHub.io or your organization's private catalog.
Q: What Kubernetes versions are supported? A: Operator SDK follows controller-runtime compatibility, generally supporting the three most recent Kubernetes minor versions.