Configure Broker defaults

Knative Eventing provides a config-br-defaults ConfigMap that contains the configuration settings that govern default Broker creation.

The default config-br-defaults ConfigMap is as follows:

  1. apiVersion: v1
  2. kind: ConfigMap
  3. metadata:
  4. name: config-br-defaults
  5. namespace: knative-eventing
  6. labels:
  7. eventing.knative.dev/release: devel
  8. data:
  9. # Configures the default for any Broker that does not specify a spec.config or Broker class.
  10. default-br-config: |
  11. clusterDefault:
  12. brokerClass: MTChannelBasedBroker
  13. apiVersion: v1
  14. kind: ConfigMap
  15. name: config-br-default-channel
  16. namespace: knative-eventing

Channel implementation options

The following example shows a Broker object where the spec.config configuration is specified in a config-br-default-channel ConfigMap:

  1. apiVersion: eventing.knative.dev/v1
  2. kind: Broker
  3. metadata:
  4. annotations:
  5. eventing.knative.dev/broker.class: MTChannelBasedBroker
  6. name: default
  7. spec:
  8. # Configuration specific to this broker.
  9. config:
  10. apiVersion: v1
  11. kind: ConfigMap
  12. name: config-br-default-channel
  13. namespace: knative-eventing

A Broker object that does not have a spec.config specified uses the config-br-default-channel ConfigMap dy default because this is specified in the config-br-defaults ConfigMap.

However, if you have installed a different Channel implementation, for example, Kafka, and would like this to be used as the default Channel implementation for any Broker that is created, you can change the config-br-defaults ConfigMap to look as follows:

  1. apiVersion: v1
  2. kind: ConfigMap
  3. metadata:
  4. name: config-br-defaults
  5. namespace: knative-eventing
  6. labels:
  7. eventing.knative.dev/release: devel
  8. data:
  9. # Configures the default for any Broker that does not specify a spec.config or Broker class.
  10. default-br-config: |
  11. clusterDefault:
  12. brokerClass: MTChannelBasedBroker
  13. apiVersion: v1
  14. kind: ConfigMap
  15. name: kafka-channel
  16. namespace: knative-eventing

Now every Broker created in the cluster that does not have a spec.config will be configured to use the kafka-channel ConfigMap.

For more information about creating a kafka-channel ConfigMap to use with your Broker, see the Kafka Channel ConfigMap documentation.

Changing the default Channel implementation for a namespace

You can modify the default Broker creation behavior for one or more namespaces.

For example, if you wanted to use the kafka-channel ConfigMap for all other Brokers created, but wanted to use config-br-default-channel ConfigMap for namespace-1 and namespace-2, you would use the following ConfigMap settings:

  1. apiVersion: v1
  2. kind: ConfigMap
  3. metadata:
  4. name: config-br-defaults
  5. namespace: knative-eventing
  6. labels:
  7. eventing.knative.dev/release: devel
  8. data:
  9. # Configures the default for any Broker that does not specify a spec.config or Broker class.
  10. default-br-config: |
  11. clusterDefault:
  12. brokerClass: MTChannelBasedBroker
  13. apiVersion: v1
  14. kind: ConfigMap
  15. name: config-kafka-channel
  16. namespace: knative-eventing
  17. namespaceDefaults:
  18. namespace-1:
  19. apiVersion: v1
  20. kind: ConfigMap
  21. name: config-br-default-channel
  22. namespace: knative-eventing
  23. namespace-2:
  24. apiVersion: v1
  25. kind: ConfigMap
  26. name: config-br-default-channel
  27. namespace: knative-eventing

Configuring delivery spec defaults

You can configure default event delivery parameters for Brokers that are applied in cases where an event fails to be delivered:

  1. apiVersion: v1
  2. kind: ConfigMap
  3. metadata:
  4. name: config-br-defaults
  5. namespace: knative-eventing
  6. labels:
  7. eventing.knative.dev/release: devel
  8. data:
  9. # Configures the default for any Broker that does not specify a spec.config or Broker class.
  10. default-br-config: |
  11. clusterDefault:
  12. brokerClass: MTChannelBasedBroker
  13. apiVersion: v1
  14. kind: ConfigMap
  15. name: config-kafka-channel
  16. namespace: knative-eventing
  17. delivery:
  18. retry: 10
  19. backoffDelay: PT0.2S
  20. backoffPolicy: exponential
  21. namespaceDefaults:
  22. namespace-1:
  23. apiVersion: v1
  24. kind: ConfigMap
  25. name: config-br-default-channel
  26. namespace: knative-eventing
  27. delivery:
  28. deadLetterSink:
  29. ref:
  30. kind: Service
  31. namespace: example-namespace
  32. name: example-service
  33. apiVersion: v1
  34. uri: example-uri
  35. retry: 10
  36. backoffPolicy: exponential
  37. backoffDelay: "PT0.2S"

Dead letter sink

You can configure the deadLetterSink delivery parameter so that if an event fails to be delivered it is sent to the specified event sink.

Retries

You can set a minimum number of times that the delivery must be retried before the event is sent to the dead letter sink, by configuring the retry delivery parameter with an integer value.

Back off delay

You can set the backoffDelay delivery parameter to specify the time delay before an event delivery retry is attempted after a failure. The duration of the backoffDelay parameter is specified using the ISO 8601 format.

Back off policy

The backoffPolicy delivery parameter can be used to specify the retry back off policy. The policy can be specified as either linear or exponential. When using the linear back off policy, the back off delay is the time interval specified between retries. When using the exponential backoff policy, the back off delay is equal to backoffDelay*2^<numberOfRetries>.

Broker class options

When a Broker is created without a specified BrokerClass annotation, the default MTChannelBasedBroker Broker class is used, as specified in the config-br-defaults ConfigMap.

The following example creates a Broker called default in the default namespace, and uses MTChannelBasedBroker as the implementation:

  1. Create a YAML file for your Broker using the following example:

    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.

Configuring the Broker class

To configure a Broker class, you can modify the eventing.knative.dev/broker.class annotation and spec.config for the Broker object. MTChannelBasedBroker is the Broker class default.

  1. Modify the eventing.knative.dev/broker.class annotation. Replace MTChannelBasedBroker with the class type you want to use:

    1. apiVersion: eventing.knative.dev/v1
    2. kind: Broker
    3. metadata:
    4. annotations:
    5. eventing.knative.dev/broker.class: MTChannelBasedBroker
    6. name: default
    7. namespace: default
  2. Configure the spec.config with the details of the ConfigMap that defines the backing Channel for the Broker class:

    1. apiVersion: eventing.knative.dev/v1
    2. kind: Broker
    3. metadata:
    4. annotations:
    5. eventing.knative.dev/broker.class: MTChannelBasedBroker
    6. name: default
    7. namespace: default
    8. spec:
    9. config:
    10. apiVersion: v1
    11. kind: ConfigMap
    12. name: config-br-default-channel
    13. namespace: knative-eventing

Configuring the default BrokerClass for the cluster

You can configure the clusterDefault Broker class so that any Broker created in the cluster that does not have a BrokerClass annotation uses this default class.

Example

  1. apiVersion: v1
  2. kind: ConfigMap
  3. metadata:
  4. name: config-br-defaults
  5. namespace: knative-eventing
  6. labels:
  7. eventing.knative.dev/release: devel
  8. data:
  9. # Configures the default for any Broker that does not specify a spec.config or Broker class.
  10. default-br-config: |
  11. clusterDefault:
  12. brokerClass: MTChannelBasedBroker

Configuring the default BrokerClass for namespaces

You can modify the default Broker class for one or more namespaces.

For example, if you want to use a KafkaBroker class for all other Brokers created on the cluster, but you want to use the MTChannelBasedBroker class for Brokers created in namespace-1 and namespace-2, you would use the following ConfigMap settings:

  1. apiVersion: v1
  2. kind: ConfigMap
  3. metadata:
  4. name: config-br-defaults
  5. namespace: knative-eventing
  6. labels:
  7. eventing.knative.dev/release: devel
  8. data:
  9. # Configures the default for any Broker that does not specify a spec.config or Broker class.
  10. default-br-config: |
  11. clusterDefault:
  12. brokerClass: KafkaBroker
  13. namespaceDefaults:
  14. namespace1:
  15. brokerClass: MTChannelBasedBroker
  16. namespace2:
  17. brokerClass: MTChannelBasedBroker