Bird
Raised Fist0
Kubernetesdevops~10 mins

Operator SDK basics in Kubernetes - Step-by-Step Execution

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Process Flow - Operator SDK basics
Start: Create Operator Project
Define API & Controller
Build Operator Binary
Deploy Operator to Cluster
Operator Watches Resources
Reconcile Loop Executes
Update Cluster State
End
This flow shows the main steps in using Operator SDK: create project, define API, build, deploy, watch resources, reconcile, and update cluster.
Execution Sample
Kubernetes
operator-sdk init --domain=example.com --repo=github.com/example/memcached-operator
operator-sdk create api --group=cache --version=v1 --kind=Memcached
make install
make run
This sequence initializes an operator project, creates an API for Memcached, installs CRDs, and runs the operator locally.
Process Table
StepCommand/ActionEffectOutput/Result
1operator-sdk init --domain=example.com --repo=github.com/example/memcached-operatorCreates operator project structureProject scaffold created with Go modules and config files
2operator-sdk create api --group=cache --version=v1 --kind=MemcachedGenerates API and controller filesAPI types and controller skeleton generated
3make installInstalls CRDs to clusterCRDs installed, cluster ready to recognize Memcached resources
4make runRuns operator locallyOperator starts, watches Memcached resources, logs events
5Create Memcached CR in clusterTriggers reconcile loopOperator detects new resource and acts accordingly
6Operator updates cluster stateCreates/updates pods or servicesMemcached pods deployed or updated
7Operator continues watchingReconciles on changesCluster state stays in desired condition
8ExitStop operatorOperator process ends
💡 Operator stops when user interrupts or process ends
Status Tracker
VariableStartAfter Step 2After Step 4After Step 6Final
Project FilesNoneAPI and controller files createdOperator binary readyOperator running and watchingOperator stopped
Cluster StateNo CRDsCRDs installedNo Memcached resourcesMemcached pods createdPods running as expected
Operator StatusNot runningNot runningRunningReconcilingStopped
Key Moments - 3 Insights
Why do we run 'make install' before running the operator?
Because 'make install' installs the Custom Resource Definitions (CRDs) into the cluster, so the cluster knows about the new resource types the operator manages. Without this, the operator cannot watch or manage those resources (see execution_table step 3).
What happens when we create a Memcached custom resource in the cluster?
The operator detects the new resource and triggers the reconcile loop to create or update the necessary pods or services to match the desired state (see execution_table step 5 and 6).
Why does the operator keep running after deploying resources?
Because it continuously watches for changes in the resources it manages and reconciles the cluster state to keep it as desired (see execution_table step 7).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the effect of the 'operator-sdk create api' command at step 2?
AInstalls CRDs to cluster
BGenerates API and controller files
CRuns the operator locally
DCreates operator project structure
💡 Hint
Check the 'Effect' column in execution_table row 2
At which step does the operator start watching Memcached resources?
AStep 3
BStep 5
CStep 4
DStep 6
💡 Hint
Look at the 'Output/Result' column in execution_table step 4
If we skip 'make install', what will happen when we run the operator?
AOperator will fail to recognize custom resources
BOperator will run normally and manage resources
COperator will create CRDs automatically
DOperator will install CRDs during runtime
💡 Hint
Refer to key_moments explanation about 'make install' and execution_table step 3
Concept Snapshot
Operator SDK basics:
- Use 'operator-sdk init' to start a project
- 'operator-sdk create api' generates API and controller
- 'make install' installs CRDs to cluster
- 'make run' runs operator locally
- Operator watches custom resources and reconciles
- Keeps cluster state as desired continuously
Full Transcript
The Operator SDK basics start with creating a new operator project using 'operator-sdk init'. Then, you generate the API and controller code with 'operator-sdk create api'. Next, you install the Custom Resource Definitions (CRDs) into your Kubernetes cluster using 'make install' so the cluster understands your new resource types. After that, you run the operator locally with 'make run', which starts watching for your custom resources. When you create a custom resource like Memcached, the operator detects it and runs the reconcile loop to update the cluster state, such as creating pods. The operator keeps running to watch for changes and maintain the desired state. You stop the operator when you want to end the process.

Practice

(1/5)
1. What is the primary purpose of the Operator SDK in Kubernetes?
easy
A. To monitor network traffic in Kubernetes
B. To replace Kubernetes API server
C. To help automate application management on Kubernetes clusters
D. To create Kubernetes clusters automatically

Solution

  1. Step 1: Understand Operator SDK's role

    The Operator SDK is designed to simplify building and managing Kubernetes operators, which automate app lifecycle tasks.
  2. Step 2: Compare options

    Options A, B, and C describe unrelated Kubernetes functions, while D correctly states the SDK's purpose.
  3. Final Answer:

    To help automate application management on Kubernetes clusters -> Option C
  4. Quick Check:

    Operator SDK automates app management = D [OK]
Hint: Remember: Operator SDK automates app tasks on Kubernetes [OK]
Common Mistakes:
  • Confusing Operator SDK with Kubernetes cluster creation tools
  • Thinking Operator SDK replaces core Kubernetes components
  • Assuming it monitors network traffic
2. Which command initializes a new Operator SDK project?
easy
A. operator-sdk create api
B. operator-sdk start
C. kubectl init operator
D. operator-sdk init

Solution

  1. Step 1: Identify the command to start a project

    The operator-sdk init command sets up a new operator project structure.
  2. Step 2: Eliminate incorrect commands

    create api adds resources, kubectl init operator is invalid, and start is not a recognized init command.
  3. Final Answer:

    operator-sdk init -> Option D
  4. Quick Check:

    Init command for project setup = B [OK]
Hint: Use 'init' to start your operator project [OK]
Common Mistakes:
  • Confusing 'create api' with project initialization
  • Using kubectl commands instead of operator-sdk
  • Trying 'start' instead of 'init'
3. What will happen if you run operator-sdk create api --group=app --version=v1 --kind=AppService?
medium
A. It creates a new API and resource type named AppService in group app/v1
B. It deletes the existing AppService resource
C. It initializes a new operator project
D. It runs the operator locally

Solution

  1. Step 1: Understand the create api command

    The command operator-sdk create api adds a new API resource to the operator project with specified group, version, and kind.
  2. Step 2: Analyze the command parameters

    Here, group is 'app', version is 'v1', and kind is 'AppService', so it creates that resource type.
  3. Final Answer:

    It creates a new API and resource type named AppService in group app/v1 -> Option A
  4. Quick Check:

    Create API command adds resource = A [OK]
Hint: Create API adds resource with group, version, kind [OK]
Common Mistakes:
  • Thinking it deletes resources
  • Confusing create api with init
  • Assuming it runs the operator
4. You ran operator-sdk init --domain=example.com app-operator but got an error. What is a common cause?
medium
A. Missing Go module initialization before running init
B. Using an invalid domain format
C. Not having Kubernetes cluster running
D. Running create api before init

Solution

  1. Step 1: Check prerequisites for operator-sdk init

    The Operator SDK requires a Go module initialized (via go mod init) before running init.
  2. Step 2: Evaluate other options

    Domain format is usually flexible, Kubernetes cluster is not needed for init, and create api must come after init, not before.
  3. Final Answer:

    Missing Go module initialization before running init -> Option A
  4. Quick Check:

    Go module must be ready before init = C [OK]
Hint: Always run 'go mod init' before 'operator-sdk init' [OK]
Common Mistakes:
  • Ignoring Go module setup
  • Assuming cluster must be running for init
  • Running create api before init
5. You want to test your operator locally before deploying. Which command should you run?
hard
A. operator-sdk deploy cluster
B. operator-sdk up local
C. kubectl apply -f deploy.yaml
D. operator-sdk create api

Solution

  1. Step 1: Identify command for local testing

    The operator-sdk up local command runs the operator locally on your machine for testing.
  2. Step 2: Compare other options

    deploy cluster deploys to cluster, kubectl apply applies manifests, and create api adds resources, none run locally.
  3. Final Answer:

    operator-sdk up local -> Option B
  4. Quick Check:

    Run local command tests operator locally = A [OK]
Hint: Use 'up local' to test operator on your machine [OK]
Common Mistakes:
  • Trying to deploy before local testing
  • Confusing create api with running operator
  • Using kubectl instead of operator-sdk for local run