Knative Eventing Sugar Controller

Knative Eventing Sugar Controller will react to special labels and annotations to produce or control eventing resources in a cluster or namespace. This allows cluster operators and developers to focus on creating fewer resources, and the underlying eventing infrastructure is created on-demand, and cleaned up when no longer needed.

Installing

The following command installs the Eventing Sugar Controller:

  1. kubectl apply --filename https://github.com/knative/eventing/releases/download/knative-v1.3.1/eventing-sugar-controller.yaml

Automatic Broker Creation

One way to create a Broker is to manually apply a resource to a cluster using the default settings:

  1. Copy the following YAML into a file:

    1. apiVersion: eventing.knative.dev/v1
    2. kind: Broker
    3. metadata:
    4. name: default
    5. namespace: default
  2. Apply the YAML file by running the command:

    1. kubectl apply -f <filename>.yaml

    Where <filename> is the name of the file you created in the previous step.

There might be cases where automated Broker creation is desirable, such as on namespace creation, or on Trigger creation. The Sugar controller enables those use-cases:

  • When a Namespace is labeled with eventing.knative.dev/injection=enabled, the sugar controller will create a default Broker named “default” in that namespace.
  • When a Trigger is annotated with eventing.knative.dev/injection=enabled, the controller will create a Broker named by that Trigger in the Trigger’s Namespace.

When a Broker is deleted and the mentioned labels or annotations are in use, the Sugar Controller will automatically recreate a default Broker.

Namespace Examples

Creating a “default” Broker when creating a Namespace:

  1. Copy the following YAML into a file:

    1. apiVersion: v1
    2. kind: Namespace
    3. metadata:
    4. name: example
    5. labels:
    6. eventing.knative.dev/injection: enabled
  2. Apply the YAML file by running the command:

    1. kubectl apply -f <filename>.yaml

    Where <filename> is the name of the file you created in the previous step.

To automatically create a Broker after a namespace exists, label the Namespace:

  1. kubectl label namespace default eventing.knative.dev/injection=enabled

If the Broker named “default” already exists in the Namespace, the Sugar Controller will do nothing.

Trigger Example

Create a “default” Broker in the Trigger’s Namespace when creating a Trigger:

  1. kubectl apply -f - << EOF
  2. apiVersion: eventing.knative.dev/v1
  3. kind: Trigger
  4. metadata:
  5. name: hello-sugar
  6. namespace: hello
  7. annotations:
  8. eventing.knative.dev/injection: enabled
  9. spec:
  10. broker: default
  11. subscriber:
  12. ref:
  13. apiVersion: v1
  14. kind: Service
  15. name: event-display
  16. EOF

This will make a Broker called “default” in the Namespace “hello”, and attempt to send events to the “event-display” service.

If the Broker named “default” already exists in the Namespace, the Sugar Controller will do nothing and the Trigger will not own the existing Broker.