Documentation
¶
Overview ¶
Package controllerruntime alias' common functions and types to improve discoverability and reduce the number of imports for simple Controllers.
Example ¶
This example creates a simple application Controller that is configured for ReplicaSets and Pods.
* Create a new application for ReplicaSets that manages Pods owned by the ReplicaSet and calls into ReplicaSetReconciler.
* Start the application. TODO(pwittrock): Update this example when we have better dependency injection support
package main
import (
"context"
"fmt"
"os"
appsv1 "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1"
controllers "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/client"
)
// This example creates a simple application Controller that is configured for ReplicaSets and Pods.
//
// * Create a new application for ReplicaSets that manages Pods owned by the ReplicaSet and calls into
// ReplicaSetReconciler.
//
// * Start the application.
// TODO(pwittrock): Update this example when we have better dependency injection support
func main() {
var log = controllers.Log.WithName("builder-examples")
manager, err := controllers.NewManager(controllers.GetConfigOrDie(), controllers.Options{})
if err != nil {
log.Error(err, "could not create manager")
os.Exit(1)
}
err = controllers.
NewControllerManagedBy(manager). // Create the Controller
For(&appsv1.ReplicaSet{}). // ReplicaSet is the Application API
Owns(&corev1.Pod{}). // ReplicaSet owns Pods created by it
Complete(&ReplicaSetReconciler{Client: manager.GetClient()})
if err != nil {
log.Error(err, "could not create controller")
os.Exit(1)
}
if err := manager.Start(controllers.SetupSignalHandler()); err != nil {
log.Error(err, "could not start manager")
os.Exit(1)
}
}
// ReplicaSetReconciler is a simple Controller example implementation.
type ReplicaSetReconciler struct {
client.Client
}
// Implement the business logic:
// This function will be called when there is a change to a ReplicaSet or a Pod with an OwnerReference
// to a ReplicaSet.
//
// * Read the ReplicaSet
// * Read the Pods
// * Set a Label on the ReplicaSet with the Pod count
func (a *ReplicaSetReconciler) Reconcile(req controllers.Request) (controllers.Result, error) {
// Read the ReplicaSet
rs := &appsv1.ReplicaSet{}
err := a.Get(context.TODO(), req.NamespacedName, rs)
if err != nil {
return controllers.Result{}, err
}
// List the Pods matching the PodTemplate Labels
pods := &corev1.PodList{}
err = a.List(context.TODO(), client.InNamespace(req.Namespace).MatchingLabels(rs.Spec.Template.Labels), pods)
if err != nil {
return controllers.Result{}, err
}
// Update the ReplicaSet
rs.Labels["pod-count"] = fmt.Sprintf("%v", len(pods.Items))
err = a.Update(context.TODO(), rs)
if err != nil {
return controllers.Result{}, err
}
return controllers.Result{}, nil
}
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
var ( // GetConfigOrDie creates a *rest.Config for talking to a Kubernetes apiserver. // If --kubeconfig is set, will use the kubeconfig file at that location. Otherwise will assume running // in cluster and use the cluster provided kubeconfig. // // Will log an error and exit if there is an error creating the rest.Config. GetConfigOrDie = config.GetConfigOrDie // GetConfig creates a *rest.Config for talking to a Kubernetes apiserver. // If --kubeconfig is set, will use the kubeconfig file at that location. Otherwise will assume running // in cluster and use the cluster provided kubeconfig. // // Config precedence // // * --kubeconfig flag pointing at a file // // * KUBECONFIG environment variable pointing at a file // // * In-cluster config if running in cluster // // * $HOME/.kube/config if exists GetConfig = config.GetConfig // NewControllerManagedBy returns a new controller builder that will be started by the provided Manager NewControllerManagedBy = builder.ControllerManagedBy // NewManager returns a new Manager for creating Controllers. NewManager = manager.New // CreateOrUpdate creates or updates the given object obj in the Kubernetes // cluster. The object's desired state should be reconciled with the existing // state using the passed in ReconcileFn. obj must be a struct pointer so that // obj can be updated with the content returned by the Server. // // It returns the executed operation and an error. CreateOrUpdate = controllerutil.CreateOrUpdate // SetControllerReference sets owner as a Controller OwnerReference on owned. // This is used for garbage collection of the owned object and for // reconciling the owner object on changes to owned (with a Watch + EnqueueRequestForOwner). // Since only one OwnerReference can be a controller, it returns an error if // there is another OwnerReference with Controller flag set. SetControllerReference = controllerutil.SetControllerReference // SetupSignalHandler registered for SIGTERM and SIGINT. A stop channel is returned // which is closed on one of these signals. If a second signal is caught, the program // is terminated with exit code 1. SetupSignalHandler = signals.SetupSignalHandler // Log is the base logger used by controller-runtime. It delegates // to another logr.Logger. You *must* call SetLogger to // get any actual logging. Log = log.Log // SetLogger sets a concrete logging implementation for all deferred Loggers. SetLogger = log.SetLogger // ZapLogger is a Logger implementation. // If development is true, a Zap development config will be used // (stacktraces on warnings, no sampling), otherwise a Zap production // config will be used (stacktraces on errors, sampling). ZapLogger = log.ZapLogger )
Functions ¶
This section is empty.
Types ¶
type Builder ¶
Builder builds an Application ControllerManagedBy (e.g. Operator) and returns a manager.Manager to start it.
type GroupResource ¶
type GroupResource = schema.GroupResource
GroupResource specifies a Group and a Resource, but does not force a version. This is useful for identifying concepts during lookup stages without having partially valid types
type GroupVersion ¶
type GroupVersion = schema.GroupVersion
GroupVersion contains the "group" and the "version", which uniquely identifies the API.
type Manager ¶
Manager initializes shared dependencies such as Caches and Clients, and provides them to Runnables. A Manager is required to create Controllers.
type ObjectMeta ¶
type ObjectMeta = metav1.ObjectMeta
ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.
type Request ¶
Request contains the information necessary to reconcile a Kubernetes object. This includes the information to uniquely identify the object - its Name and Namespace. It does NOT contain information about any specific Event or the object contents itself.
type SchemeBuilder ¶
Builder builds a new Scheme for mapping go types to Kubernetes GroupVersionKinds.
Directories
¶
| Path | Synopsis |
|---|---|
|
Package pkg provides libraries for building Controllers.
|
Package pkg provides libraries for building Controllers. |
|
builder
Package builder provides wraps other controller-runtime libraries and exposes simple patterns for building common Controllers.
|
Package builder provides wraps other controller-runtime libraries and exposes simple patterns for building common Controllers. |
|
client/config
Package config contains libraries for initializing rest configs for talking to the Kubernetes API
|
Package config contains libraries for initializing rest configs for talking to the Kubernetes API |
|
client/fake
Package fake provides a fake client for testing.
|
Package fake provides a fake client for testing. |
|
controller
Package controller provides types and functions for building Controllers.
|
Package controller provides types and functions for building Controllers. |
|
controller/controllertest
Package controllertest contains fake informers for testing controllers
|
Package controllertest contains fake informers for testing controllers |
|
controller/controllerutil
Package controllerutil contains utility functions for working with and implementing Controllers.
|
Package controllerutil contains utility functions for working with and implementing Controllers. |
|
envtest
Package envtest provides libraries for integration testing by starting a local control plane
|
Package envtest provides libraries for integration testing by starting a local control plane |
|
event
Package event contains the definitions for the Event types produced by source.Sources and transformed into reconcile.Requests by handler.EventHandler.
|
Package event contains the definitions for the Event types produced by source.Sources and transformed into reconcile.Requests by handler.EventHandler. |
|
handler
Package handler defines EventHandlers that enqueue reconcile.Requests in response to Create, Update, Deletion Events observed from Watching Kubernetes APIs.
|
Package handler defines EventHandlers that enqueue reconcile.Requests in response to Create, Update, Deletion Events observed from Watching Kubernetes APIs. |
|
internal/admission
Package admission provides libraries for creating admission webhooks.
|
Package admission provides libraries for creating admission webhooks. |
|
leaderelection
Package leaderelection contains a constructors for a leader election resource lock
|
Package leaderelection contains a constructors for a leader election resource lock |
|
leaderelection/fake
Package fake mocks a resource lock for testing purposes.
|
Package fake mocks a resource lock for testing purposes. |
|
manager
Package manager is required to create Controllers and provides shared dependencies such as clients, caches, schemes, etc.
|
Package manager is required to create Controllers and provides shared dependencies such as clients, caches, schemes, etc. |
|
metrics
Package metrics contains controller related metrics utilities
|
Package metrics contains controller related metrics utilities |
|
patch
Package patch provides method to calculate JSON patch between 2 k8s objects.
|
Package patch provides method to calculate JSON patch between 2 k8s objects. |
|
patterns/application
Package application documents patterns for building Controllers to manage specific applications.
|
Package application documents patterns for building Controllers to manage specific applications. |
|
patterns/operator
Package operator serves to redirect users to the application package.
|
Package operator serves to redirect users to the application package. |
|
predicate
Package predicate defines Predicates used by Controllers to filter Events before they are provided to EventHandlers.
|
Package predicate defines Predicates used by Controllers to filter Events before they are provided to EventHandlers. |
|
reconcile
Package reconcile defines the Reconciler interface to implement Kubernetes APIs.
|
Package reconcile defines the Reconciler interface to implement Kubernetes APIs. |
|
runtime/inject
Package inject defines interfaces and functions for propagating dependencies from a ControllerManager to the components registered with it.
|
Package inject defines interfaces and functions for propagating dependencies from a ControllerManager to the components registered with it. |
|
runtime/log
Package log contains utilities for fetching a new logger when one is not already available.
|
Package log contains utilities for fetching a new logger when one is not already available. |
|
runtime/signals
Package signals contains libraries for handling signals to shutdown the system.
|
Package signals contains libraries for handling signals to shutdown the system. |
|
source
Package source provides event streams provided to Controllers through Controller.Watch.
|
Package source provides event streams provided to Controllers through Controller.Watch. |
|
webhook
Package webhook provides methods to build and bootstrap a webhook server.
|
Package webhook provides methods to build and bootstrap a webhook server. |
|
webhook/admission
Package admission provides implementation for admission webhook and methods to implement admission webhook handlers.
|
Package admission provides implementation for admission webhook and methods to implement admission webhook handlers. |
|
webhook/admission/builder
Package builder provides methods to build admission webhooks.
|
Package builder provides methods to build admission webhooks. |
|
webhook/internal/cert
Package cert provides functions to manage certificates for webhookClientConfiguration.
|
Package cert provides functions to manage certificates for webhookClientConfiguration. |
|
webhook/internal/cert/generator
Package generator provides an interface and implementation to provision certificates.
|
Package generator provides an interface and implementation to provision certificates. |
|
webhook/internal/cert/writer
Package writer provides method to provision and persist the certificates.
|
Package writer provides method to provision and persist the certificates. |