Documentation ¶
Overview ¶
Package controller provides types and functions for building Controllers. Controllers implement Kubernetes APIs.
Creation ¶
To create a new Controller, first create a manager.Manager and pass it to the controller.New function. The Controller MUST be started by calling Manager.Start.
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Controller ¶
type Controller interface { // Reconciler is called to Reconciler an object by Namespace/Name reconcile.Reconciler // Watch takes events provided by a Source and uses the EventHandler to // enqueue reconcile.Requests in response to the events. // // Watch may be provided one or more Predicates to filter events before // they are given to the EventHandler. Events will be passed to the // EventHandler iff all provided Predicates evaluate to true. Watch(src source.Source, eventhandler handler.EventHandler, predicates ...predicate.Predicate) error // Start starts the controller. Start blocks until stop is closed or a // controller has an error starting. Start(stop <-chan struct{}) error }
Controller implements a Kubernetes API. A Controller manages a work queue fed reconcile.Requests from source.Sources. Work is performed through the reconcile.Reconciler for each enqueued item. Work typically is reads and writes Kubernetes objects to make the system state match the state specified in the object Spec.
Example ¶
This example starts a new Controller named "pod-controller" to Watch Pods and call a no-op Reconciler.
package main import ( "os" corev1 "k8s.io/api/core/v1" "sigs.k8s.io/controller-runtime/pkg/controller" "sigs.k8s.io/controller-runtime/pkg/handler" logf "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/manager" "sigs.k8s.io/controller-runtime/pkg/manager/signals" "sigs.k8s.io/controller-runtime/pkg/reconcile" "sigs.k8s.io/controller-runtime/pkg/source" ) var ( mgr manager.Manager log = logf.Log.WithName("controller-examples") ) func main() { // mgr is a manager.Manager // Create a new Controller that will call the provided Reconciler function in response // to events. c, err := controller.New("pod-controller", mgr, controller.Options{ Reconciler: reconcile.Func(func(o reconcile.Request) (reconcile.Result, error) { // Your business logic to implement the API by creating, updating, deleting objects goes here. return reconcile.Result{}, nil }), }) if err != nil { log.Error(err, "unable to create pod-controller") os.Exit(1) } // Watch for Pod create / update / delete events and call Reconcile err = c.Watch(&source.Kind{Type: &corev1.Pod{}}, &handler.EnqueueRequestForObject{}) if err != nil { log.Error(err, "unable to watch pods") os.Exit(1) } // Start the Controller through the manager. mgr.Start(signals.SetupSignalHandler()) }
Output:
Example (Unstructured) ¶
This example starts a new Controller named "pod-controller" to Watch Pods with the unstructured object and call a no-op Reconciler.
package main import ( "os" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime/schema" "sigs.k8s.io/controller-runtime/pkg/controller" "sigs.k8s.io/controller-runtime/pkg/handler" logf "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/manager" "sigs.k8s.io/controller-runtime/pkg/manager/signals" "sigs.k8s.io/controller-runtime/pkg/reconcile" "sigs.k8s.io/controller-runtime/pkg/source" ) var ( mgr manager.Manager log = logf.Log.WithName("controller-examples") ) func main() { // mgr is a manager.Manager // Create a new Controller that will call the provided Reconciler function in response // to events. c, err := controller.New("pod-controller", mgr, controller.Options{ Reconciler: reconcile.Func(func(o reconcile.Request) (reconcile.Result, error) { // Your business logic to implement the API by creating, updating, deleting objects goes here. return reconcile.Result{}, nil }), }) if err != nil { log.Error(err, "unable to create pod-controller") os.Exit(1) } u := &unstructured.Unstructured{} u.SetGroupVersionKind(schema.GroupVersionKind{ Kind: "Pod", Group: "", Version: "v1", }) // Watch for Pod create / update / delete events and call Reconcile err = c.Watch(&source.Kind{Type: u}, &handler.EnqueueRequestForObject{}) if err != nil { log.Error(err, "unable to watch pods") os.Exit(1) } // Start the Controller through the manager. mgr.Start(signals.SetupSignalHandler()) }
Output:
func New ¶
New returns a new Controller registered with the Manager. The Manager will ensure that shared Caches have been synced before the Controller is Started.
Example ¶
This example creates a new Controller named "pod-controller" with a no-op reconcile function. The manager.Manager will be used to Start the Controller, and will provide it a shared Cache and Client.
package main import ( "os" "sigs.k8s.io/controller-runtime/pkg/controller" logf "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/manager" "sigs.k8s.io/controller-runtime/pkg/reconcile" ) var ( mgr manager.Manager log = logf.Log.WithName("controller-examples") ) func main() { _, err := controller.New("pod-controller", mgr, controller.Options{ Reconciler: reconcile.Func(func(o reconcile.Request) (reconcile.Result, error) { // Your business logic to implement the API by creating, updating, deleting objects goes here. return reconcile.Result{}, nil }), }) if err != nil { log.Error(err, "unable to create pod-controller") os.Exit(1) } }
Output:
type Options ¶
type Options struct { // MaxConcurrentReconciles is the maximum number of concurrent Reconciles which can be run. Defaults to 1. MaxConcurrentReconciles int // Reconciler reconciles an object Reconciler reconcile.Reconciler }
Options are the arguments for creating a new Controller
Directories ¶
Path | Synopsis |
---|---|
Package controllertest contains fake informers for testing controllers When in doubt, it's almost always better to test against a real API server using envtest.Environment.
|
Package controllertest contains fake informers for testing controllers When in doubt, it's almost always better to test against a real API server using envtest.Environment. |
Package controllerutil contains utility functions for working with and implementing Controllers.
|
Package controllerutil contains utility functions for working with and implementing Controllers. |