These two examples represent the usage of controller-runtime
libraries for built-in Kubernetes resources as well as custom resources.
This example implements a custom controller and webhooks for the existing ReplicaSet resource.
controller.go
: implements a reconciler for ReplicaSetsmutatingwebhook.go
: implements a mutating webhook that adds an annotation to every incoming Pod ("example-mutating-admission-webhook" = "foo")validatingwebhook.go
: implements a validating webhook that checks to see if a Pod has the aforementioned annotationmain.go
- Creates a new manager
- Creates a new controller that watches both ReplicaSets and Pods and reconciles the objects with the implemented reconciler
- Registers the mutating and validating webhooks with the manager
- Starts the manager
This example implements a new Kubernetes resource, ChaosPod, and creates a custom controller that watches it and webhooks that mutate and validate.
pkg/
resource.go
: defines the schema for the ChaosPod API and implements validate and mutate webhooksgroupversion_info.go
: specifies the Group and Version for the ChaosPod APIzz_generated.deepcopy.go
: deep copy functions generated by kubebuilder
main.go
- Creates a new manager
- Adds ChaosPod resource to the manager's schema
- Implements a reconciler to execute the desired behavior of the ChaosPod API
- Creates a new controller that watches ChaosPods and reconciles the objects with the implemented reconciler
- Adds ChaosPod webhooks to manager
- Starts the manager
To install and run the provided examples, see the Kubebuilder Quick Start.