Kubernetes Operators Cheat Sheet
Kubernetes Operator pattern covering CRDs, controller reconcile loops, Kubebuilder/Operator SDK scaffolding, and status subresources.
3 PagesAdvancedMay 6, 2026
Custom Resource Definition
Defining a CRD that an operator will watch and reconcile.
yaml
apiVersion: apiextensions.k8s.io/v1kind: CustomResourceDefinitionmetadata: name: postgresclusters.db.example.comspec: group: db.example.com names: kind: PostgresCluster plural: postgresclusters singular: postgrescluster shortNames: [pgc] scope: Namespaced versions: - name: v1 served: true storage: true subresources: status: {} schema: openAPIV3Schema: type: object properties: spec: type: object properties: replicas: type: integer version: type: string
Reconcile Loop (Kubebuilder / controller-runtime, Go)
The core Reconcile function every operator implements.
go
func (r *PostgresClusterReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) { var cluster dbv1.PostgresCluster if err := r.Get(ctx, req.NamespacedName, &cluster); err != nil { return ctrl.Result{}, client.IgnoreNotFound(err) } // Desired state sts := desiredStatefulSet(&cluster) if err := ctrl.SetControllerReference(&cluster, sts, r.Scheme); err != nil { return ctrl.Result{}, err } // Create or update to converge actual -> desired if err := r.Patch(ctx, sts, client.Apply, client.ForceOwnership, client.FieldOwner("pgc-operator")); err != nil { return ctrl.Result{}, err } cluster.Status.ReadyReplicas = sts.Status.ReadyReplicas if err := r.Status().Update(ctx, &cluster); err != nil { return ctrl.Result{}, err } return ctrl.Result{RequeueAfter: 30 * time.Second}, nil}
Kubebuilder Scaffolding Commands
Bootstrap an operator project and add API types/controllers.
bash
# Initialize a new operator projectkubebuilder init --domain example.com --repo github.com/acme/pgc-operator# Scaffold a new API (CRD + controller)kubebuilder create api --group db --version v1 --kind PostgresCluster# Generate CRD manifests and DeepCopy methods after editing typesmake manifests generate# Run the controller locally against your current kube contextmake install run# Build and push the operator image, then deploymake docker-build docker-push IMG=acme/pgc-operator:v0.1.0make deploy IMG=acme/pgc-operator:v0.1.0
Operator Pattern Concepts
Terminology central to writing and running Kubernetes operators.
- CRD (Custom Resource Definition)- registers a new kind with the Kubernetes API server
- CR (Custom Resource)- an instance of a CRD, e.g. a specific PostgresCluster object
- Controller / reconciler- watches CRs and drives actual cluster state toward the spec
- Level-triggered reconciliation- reconcile logic reads full current state each time, not just the diff, for resilience
- Owner references- link child resources (StatefulSets, Services) to the CR for garbage collection
- Status subresource- separate write path for status so spec updates don't clobber observed state
- Finalizers- block deletion of a CR until the operator cleans up external resources
Pro Tip
Always requeue with a bounded RequeueAfter (or watch dependent resources) instead of relying purely on event-driven triggers — external state (like a cloud database being deleted out-of-band) can drift without generating a Kubernetes watch event, and only periodic reconciliation catches it.
Was this cheat sheet helpful?
Explore Topics
#KubernetesOperators#KubernetesOperatorsCheatSheet#DevOps#Advanced#CustomResourceDefinition#Reconcile#Loop#Kubebuilder#Kubernetes#CheatSheet#SkillVeris
Advertisement
Sri Hayavadhana Info-Tech
Professional Web Designing Services
- Responsive Websites
- E-commerce Solutions
- SEO Friendly Design
- Fast & Secure
- Support & Maintenance