Day 1: Go fundamentals and creating your first Kubernetes Custom Resources
5 topics, Tap to openTap to close
10:00–11:00Go Crash Course for Kubernetes Developers
Operator development relies on Go; this module introduces the language and concurrency concepts needed for the rest of the three-day workshop. You apply structs*, interfaces, and *error handling in small examples, explore goroutines and channels, and trace how the client-go SDK uses these patterns. In the lab, you modify examples and discuss how to read code and isolate errors.
11:00–12:00Why Operators? Distinction from Helm and Controllers
When is it worth writing an operator, and when does a Helm chart or a simple controller suffice? This module clarifies the terms, introduces the Operator Pattern and the Operator Maturity Model, and gives you a decision framework for your own projects. You analyze two real-world examples from the CNCF ecosystem and classify them.
13:00–14:00Custom Resource Definitions and the Kubernetes API
Custom Resource Definitions extend the Kubernetes API with resource types of your own. You model a CRD with group, version, kind, spec, status, and subresources and register it in the cluster. In the lab environment, you create and inspect instances with kubectl and examine how schemas and API conventions constrain the following controller tasks.
14:00–15:00Kubebuilder: Scaffold an Operator and Understand its Structure
Kubebuilder creates the base structure for the API, controller, configuration, and program entry point. You scaffold a project, trace the registration of its scheme, manager, and reconciler, and distinguish generated code from your own. In the DevNinjas Dojo, our cloud learning environment, you add API fields and inspect how controller-runtime connects the controller to the Kubernetes API.
15:00–16:00The Reconciliation Loop: Architecture and First Logic
Reconciliation repeatedly moves the observed cluster state towards the desired state. You implement a Reconcile function, read custom resources through the cached client, and trigger appropriate changes. In the lab environment, you trace events, requests, and repeated runs and examine why controller logic must never assume that it is called only once.

