Summary Introduction Quick Start Architecture Tutorial: Building CronJob What's in a basic project? Every journey needs a start, every program a main Groups and Versions and Kinds, oh my! Adding a new API Designing an API A Brief Aside: What's the rest of this stuff? What's in a controller? Implementing a controller You said something about main? Implementing defaulting/validating webhooks Running and deploying the controller Deploying the cert manager Deploying webhooks Writing tests Epilogue Tutorial: Multi-Version API Changing things up Hubs, spokes, and other wheel metaphors Implementing conversion and setting up the webhooks Deployment and Testing Tutorial: Component Config Changing things up Defining your Config Using a custom type Adding a new Config Type Updating main Defining your Custom Config Migrations Kubebuilder v1 vs v2 Migration Guide Kubebuilder v2 vs v3 Migration Guide Migration by updating the files Single Group to Multi-Group Reference Generating CRDs Using Finalizers Watching Resources Resources Managed by the Operator Externally Managed Resources Kind cluster What's a webhook? Admission webhook Webhooks for Core Types Markers for Config/Code Generation CRD Generation CRD Validation CRD Processing Webhook Object/DeepCopy RBAC controller-gen CLI completion Artifacts Configuring EnvTest Metrics Reference Makefile Helpers Project config Plugins Extending the CLI Creating your own plugins Available Plugins go/v3 plugin go/v2 plugin Declarative V1 Kustomize V1 Plugins Versioning Appendix: The TODO Landing Page