operator-sdk
SDK for building Kubernetes applications. Provides high level APIs, useful abstractions, and project scaffolding.
Top Related Projects
Kubebuilder - SDK for building Kubernetes APIs using CRDs
The Kubernetes Package Manager
Issue tracker and mirror of kubectl code
Declarative Continuous Deployment for Kubernetes
Open and extensible continuous delivery solution for Kubernetes. Powered by GitOps Toolkit.
Lightweight Kubernetes
Quick Overview
The Operator SDK is a framework that facilitates the development of Kubernetes operators, which are software extensions that manage applications and their components on a Kubernetes cluster. It provides a set of tools and libraries to simplify the process of building, testing, and deploying operators.
Pros
- Simplifies Operator Development: The Operator SDK abstracts away the complexities of interacting with the Kubernetes API, allowing developers to focus on the business logic of their operators.
- Supports Multiple Languages: The Operator SDK supports multiple programming languages, including Go, Ansible, and Helm, making it accessible to a wide range of developers.
- Comprehensive Tooling: The Operator SDK provides a suite of tools for generating boilerplate code, building and testing operators, and deploying them to a Kubernetes cluster.
- Active Community: The Operator SDK has a large and active community, with regular updates, bug fixes, and contributions from developers around the world.
Cons
- Steep Learning Curve: The Operator SDK can have a steep learning curve, especially for developers who are new to Kubernetes and operator development.
- Limited Flexibility: The Operator SDK's opinionated approach to operator development may not suit all use cases, and developers may need to deviate from the recommended practices to meet their specific requirements.
- Dependency on Kubernetes: The Operator SDK is tightly coupled with the Kubernetes ecosystem, which means that it may not be suitable for use in non-Kubernetes environments.
- Performance Overhead: The Operator SDK's abstraction layer and the additional components it introduces may result in some performance overhead, which could be a concern for highly-demanding applications.
Getting Started
To get started with the Operator SDK, follow these steps:
- Install the Operator SDK CLI:
curl -LO https://github.com/operator-framework/operator-sdk/releases/download/v1.24.0/operator-sdk_linux_amd64
chmod +x operator-sdk_linux_amd64
sudo mv operator-sdk_linux_amd64 /usr/local/bin/operator-sdk
- Create a new operator project:
operator-sdk init --domain example.com --repo github.com/example/my-operator
- Create a new API:
operator-sdk create api --group app --version v1 --kind MyCustomResource
- Implement the controller logic in the generated files:
// controllers/mycustomresource_controller.go
func (r *MyCustomResourceReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
// Implement your custom reconciliation logic here
return ctrl.Result{}, nil
}
- Build and deploy the operator:
make docker-build docker-push
make deploy
This will build a Docker image for your operator and deploy it to your Kubernetes cluster.
Competitor Comparisons
Kubebuilder - SDK for building Kubernetes APIs using CRDs
Pros of Kubebuilder
- Simpler and more lightweight framework for building Kubernetes operators
- Closer integration with core Kubernetes APIs and concepts
- Faster development cycle for basic operators
Cons of Kubebuilder
- Less extensive scaffolding and code generation capabilities
- Fewer built-in features for advanced operator scenarios
- Smaller ecosystem and community compared to Operator SDK
Code Comparison
Kubebuilder:
type MyCustomResource struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec MyCustomResourceSpec `json:"spec,omitempty"`
Status MyCustomResourceStatus `json:"status,omitempty"`
}
Operator SDK:
type MyCustomResource struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec MyCustomResourceSpec `json:"spec"`
Status MyCustomResourceStatus `json:"status,omitempty"`
}
Both frameworks use similar structures for defining custom resources, with minor differences in field tags and organization. The main distinctions lie in the surrounding tooling and scaffolding provided by each framework.
Kubebuilder focuses on a more streamlined approach, while Operator SDK offers additional features and abstractions for complex operator development scenarios. The choice between the two depends on the specific requirements of your operator project and your familiarity with Kubernetes concepts.
The Kubernetes Package Manager
Pros of Helm
- Simpler learning curve and easier to get started
- Broader adoption and larger ecosystem of pre-built charts
- Better suited for straightforward application deployments
Cons of Helm
- Limited ability to handle complex, stateful applications
- Less flexibility for fine-grained control over Kubernetes resources
- Lacks native support for day-2 operations and continuous reconciliation
Code Comparison
Helm Chart (values.yaml):
replicaCount: 3
image:
repository: nginx
tag: latest
service:
type: ClusterIP
port: 80
Operator SDK (controller.go):
func (r *MyAppReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
// Custom logic for managing the application lifecycle
// Including creation, updates, and deletion of resources
// Continuous reconciliation and error handling
}
The Helm chart defines static configuration, while the Operator SDK allows for dynamic, programmatic control over resources. Helm is declarative and template-based, whereas Operator SDK enables imperative, Go-based logic for complex scenarios and ongoing management of applications in Kubernetes clusters.
Issue tracker and mirror of kubectl code
Pros of kubectl
- Widely adopted and well-established tool for interacting with Kubernetes clusters
- Provides direct access to all Kubernetes resources and operations
- Extensive documentation and community support
Cons of kubectl
- Limited in terms of creating and managing complex, stateful applications
- Requires more manual intervention for application lifecycle management
- Less suitable for building and deploying custom controllers or operators
Code Comparison
kubectl:
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=LoadBalancer
kubectl scale deployment nginx --replicas=3
operator-sdk:
type Nginx struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec NginxSpec `json:"spec,omitempty"`
Status NginxStatus `json:"status,omitempty"`
}
func (r *NginxReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) {
// Custom reconciliation logic for Nginx operator
}
Summary
While kubectl is a powerful tool for general Kubernetes management, operator-sdk is specifically designed for building and managing complex, stateful applications and custom controllers. operator-sdk provides a higher-level abstraction and automation for application-specific operations, making it more suitable for developing advanced Kubernetes operators. kubectl remains essential for day-to-day cluster management and simple deployments, but operator-sdk offers more sophisticated capabilities for application-specific automation and lifecycle management.
Declarative Continuous Deployment for Kubernetes
Pros of Argo CD
- Focuses on GitOps and continuous delivery, providing a more specialized solution for deployment automation
- Offers a user-friendly web UI for visualizing and managing application deployments
- Supports multi-cluster deployments and provides advanced sync strategies
Cons of Argo CD
- Limited to deployment and GitOps use cases, while Operator SDK offers broader Kubernetes extension capabilities
- Steeper learning curve for users not familiar with GitOps principles
- May require additional tools for full CI/CD pipeline integration
Code Comparison
Argo CD Application manifest:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: myapp
spec:
destination:
namespace: default
server: https://kubernetes.default.svc
project: default
source:
path: kustomize-guestbook
repoURL: https://github.com/argoproj/argocd-example-apps.git
targetRevision: HEAD
Operator SDK Go-based operator:
import (
"sigs.k8s.io/controller-runtime/pkg/builder"
"sigs.k8s.io/controller-runtime/pkg/manager"
)
func main() {
mgr, _ := manager.New(cfg, manager.Options{})
_ = builder.ControllerManagedBy(mgr).
For(&myv1.MyCustomResource{}).
Complete(r)
}
Both projects serve different purposes in the Kubernetes ecosystem. Argo CD excels in GitOps-based continuous delivery, while Operator SDK provides a framework for building Kubernetes operators to manage custom resources and extend cluster functionality.
Open and extensible continuous delivery solution for Kubernetes. Powered by GitOps Toolkit.
Pros of Flux2
- Native GitOps support with built-in source control management
- Multi-tenancy and RBAC capabilities out of the box
- Supports a wide range of Kubernetes resources and custom resources
Cons of Flux2
- Steeper learning curve for users new to GitOps concepts
- Less flexibility in custom resource creation compared to Operator SDK
- Limited support for non-Kubernetes workloads
Code Comparison
Flux2 (HelmRelease example):
apiVersion: helm.toolkit.fluxcd.io/v2beta1
kind: HelmRelease
metadata:
name: podinfo
spec:
interval: 5m
chart:
spec:
chart: podinfo
version: '>=4.0.0 <5.0.0'
sourceRef:
kind: HelmRepository
name: podinfo
Operator SDK (Operator example):
import (
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/reconcile"
)
func (r *MyReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
// Reconciliation logic here
}
Both Flux2 and Operator SDK are powerful tools for managing Kubernetes applications, but they serve different purposes. Flux2 focuses on GitOps and continuous delivery, while Operator SDK is designed for building Kubernetes operators. The choice between them depends on specific project requirements and team expertise.
Lightweight Kubernetes
Pros of k3s
- Lightweight and resource-efficient Kubernetes distribution
- Easy to install and manage, suitable for edge computing and IoT
- Includes built-in storage and load balancing solutions
Cons of k3s
- Limited to specific use cases, not as flexible as full Kubernetes
- May lack some advanced features available in standard Kubernetes
- Smaller community and ecosystem compared to mainstream Kubernetes
Code Comparison
k3s (main.go):
func main() {
if err := cmds.New().Execute(); err != nil {
logrus.Fatal(err)
}
}
operator-sdk (main.go):
func main() {
options := manager.Options{
Namespace: namespace,
}
mgr, err := manager.New(cfg, options)
if err != nil {
log.Error(err, "unable to set up manager")
os.Exit(1)
}
}
The k3s code focuses on executing commands, while the operator-sdk code sets up a manager for Kubernetes operators. This reflects their different purposes: k3s as a lightweight Kubernetes distribution and operator-sdk as a framework for building Kubernetes operators.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
â ï¸ IMPORTANT NOTICE: Images under
gcr.io/kubebuilder/
Will Be Unavailable SoonIf your project uses
gcr.io/kubebuilder/kube-rbac-proxy
it will be affected. Your project may fail to work if the image cannot be pulled. You must move as soon as possible, sometime from early 2025, the GCR will go away.The usage of the project kube-rbac-proxy was discontinued from Kubebuilder and Operator-SDK. It was replaced for similar protection using
authn/authz
via Controller-Runtime's feature WithAuthenticationAndAuthorization.For more information and guidance see the discussion https://github.com/kubernetes-sigs/kubebuilder/discussions/3907
Documentation
Docs can be found on the Operator SDK website.
Overview
This project is a component of the Operator Framework, an open source toolkit to manage Kubernetes native applications, called Operators, in an effective, automated, and scalable way. Read more in the introduction blog post.
Operators make it easy to manage complex stateful applications on top of Kubernetes. However writing an Operator today can be difficult because of challenges such as using low level APIs, writing boilerplate, and a lack of modularity which leads to duplication.
The Operator SDK is a framework that uses the controller-runtime library to make writing operators easier by providing:
- High level APIs and abstractions to write the operational logic more intuitively
- Tools for scaffolding and code generation to bootstrap a new project fast
- Extensions to cover common Operator use cases
Dependency and platform support
Go version
Release binaries will be built with the Go compiler version specified in the developer guide.
A Go Operator project's Go version can be found in its go.mod
file.
Kubernetes versions
Supported Kubernetes versions for your Operator project or relevant binary can be determined by following this compatibility guide.
Platforms
The set of supported platforms for all binaries and images can be found in these tables.
Community and how to get involved
How to contribute
Check out the contributor documentation.
License
Operator SDK is under Apache 2.0 license. See the LICENSE file for details.
Top Related Projects
Kubebuilder - SDK for building Kubernetes APIs using CRDs
The Kubernetes Package Manager
Issue tracker and mirror of kubectl code
Declarative Continuous Deployment for Kubernetes
Open and extensible continuous delivery solution for Kubernetes. Powered by GitOps Toolkit.
Lightweight Kubernetes
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot