Skip to content

Abhinav0002/sample-operator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Sample App Operator (OpenShift / Kubernetes)

Overview

This repository contains a Go-based Kubernetes/OpenShift Operator built using Operator SDK. The operator introduces a custom resource called App and reconciles it into a Kubernetes Deployment.

The operator continuously ensures that the actual cluster state matches the desired state defined by the App custom resource.


What This Operator Does

  • Defines a Custom Resource Definition (CRD) called App

  • Watches App resources across namespaces

  • Creates and manages a Kubernetes Deployment

  • Reconciles changes to:

    • Replica count
    • Container image
  • Updates the status of the custom resource

  • Uses OwnerReferences for automatic cleanup

  • Runs as a cluster-scoped operator on OpenShift


Architecture

App Custom Resource
        |
        v
App Controller (Operator)
        |
        v
Kubernetes Deployment
        |
        v
Pods

The App custom resource is the source of truth. Users never manage Deployments directly.


Custom Resource Example

apiVersion: apps.github.com/v1
kind: App
metadata:
  name: example-app
  namespace: default
spec:
  replicas: 2
  image: quay.io/<your_quay_user>/nginx-demo:latest

Project Structure

.
├── api/                    # CRD Go types
├── internal/controller/    # Reconcile logic
├── config/                 # Generated manifests (CRD, RBAC, Deployment)
├── cmd/main.go             # Operator entrypoint
├── Dockerfile              # Operator image build
├── Makefile                # Build / deploy automation

How Reconciliation Works

  1. User creates or updates an App resource
  2. Controller Reconcile() is triggered
  3. Desired Deployment is computed from App.spec
  4. Deployment is created or updated
  5. Operator corrects any drift automatically
  6. App.status.availableReplicas is updated

Build and Deploy the Operator

Prerequisites

  • Go 1.21+
  • Operator SDK
  • OpenShift / Kubernetes cluster
  • Logged into cluster using oc

Build and Push Operator Image

export IMG=quay.io/<your_quay_user>/sample-operator:v0.1.0

make docker-build IMG=$IMG
make docker-push IMG=$IMG

Install CRD and Deploy Operator

make install
make deploy IMG=$IMG

Verify:

oc get pods -n controller-system

Create an App Resource

oc apply -f app.yaml

Verify:

oc get deployment example-app -n default
oc get pods -l app=example-app -n default

Verify Operator Logic

Scale via Custom Resource

oc patch app example-app -n default \
  --type=merge -p '{"spec":{"replicas":4}}'

Pods scale automatically.


Drift Correction

oc scale deployment example-app -n default --replicas=1

The operator restores the desired replica count.


Status Update

oc get app example-app -o yaml
status:
  availableReplicas: 4

Cleanup

oc delete app example-app -n default

Deployment and Pods are deleted automatically via OwnerReferences.


Key Learnings

  • Kubernetes Operators follow the desired-state reconciliation pattern
  • RBAC is critical, especially for cluster-scoped operators
  • OwnerReferences require finalizer permissions
  • The custom resource is the single source of truth

Future Improvements

  • Add Service and OpenShift Route
  • Add finalizers for custom deletion logic
  • Package using Operator Lifecycle Manager (OLM)
  • Add unit tests using envtest

Author

Abhinav OpenShift / Kubernetes Operator (Go)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors