defaults-br-config

https://knative.dev/docs/eventing/broker/defaults-br-config/

默认br-config

Knative提供了一个ConfigMap,通过在创建Broker时提供默认值,使得创建Broker更加容易。你可以通过修改这个文件来控制使用哪些Broker实现以及如何配置它们。您可以灵活地控制集群级别(集群中创建的每个Broker)以及命名空间级别(覆盖某些命名空间的行为)的默认值。

文件的格式

让我们来看看安装发行版(本例中为v0.16.0)时开箱即用的ConfigMap。

apiVersion: v1
kind: ConfigMap
metadata:
  name: config-br-defaults
  namespace: knative-eventing
  labels:
    eventing.knative.dev/release: devel
data:
  # Configuration for defaulting channels that do not specify CRD implementations.
  default-br-config: |
    clusterDefault:
      brokerClass: MTChannelBasedBroker
      apiVersion: v1
      kind: ConfigMap
      name: config-br-default-channel
      namespace: knative-eventing

这意味着任何没有特定的BrokerClass注解或spec.config的Broker的创建都将使用MTChannelBasedBroker实现,并且该Broker的spec.config将像这样。

spec:
  config:
    apiVersion: v1
    kind: ConfigMap
    name: config-br-default-channel
    namespace: knative-eventing

更改默认的BrokerClass

更改集群的默认BrokerClass

如果您安装了一个或多个不同的broker,您可以在集群级别和命名空间更改默认的broker。例如,如果您安装了MT Channel Based Broker 如 YourBroker,并且希望在默认情况下创建的任何broker都使用YourBroker,您可以修改 configmap ,使其看起来像这样。

apiVersion: v1
kind: ConfigMap
metadata:
  name: config-br-defaults
  namespace: knative-eventing
  labels:
    eventing.knative.dev/release: devel
data:
  # Configuration for defaulting channels that do not specify CRD implementations.
  default-br-config: |
    clusterDefault:
      brokerClass: YourBroker

现在在集群中创建的每一个没有BrokerClass注解的Broker都将使用YourBroker作为Broker的实现。请注意,您可以在创建Broker时,通过明确指定BrokerClass注解来使用不同的实现。

更改命名空间的默认BrokerClass

如前所述,您还可以控制某些命名空间集的默认行为。因此,举例来说,如果你想为所有其他创建的Broker使用YourBroker,但想为以下命名空间使用MTChannelBasedBroker:namespace1和namespace2。你可以像这样修改configmap:

apiVersion: v1
kind: ConfigMap
metadata:
  name: config-br-defaults
  namespace: knative-eventing
  labels:
    eventing.knative.dev/release: devel
data:
  # Configuration for defaulting channels that do not specify CRD implementations.
  default-br-config: |
    clusterDefault:
      brokerClass: YourBroker
    namespaceDefaults:
      namespace1:
        brokerClass: MTChannelBasedBroker
      namespace2:
        brokerClass: MTChannelBasedBroker

更改Broker的默认配置

更改集群的默认配置

你也可以通过指定默认值到broker.spec.config中,如果创建时留空,来控制Broker配置的默认行为。

如果你已经安装了不同的通道实现(例如Kafka),并且默认情况下你想为任何创建的Broker使用该通道,你可以将ConfigMap改成这样。

apiVersion: v1
kind: ConfigMap
metadata:
  name: config-br-defaults
  namespace: knative-eventing
  labels:
    eventing.knative.dev/release: devel
data:
  # Configuration for defaulting channels that do not specify CRD implementations.
  default-br-config: |
    clusterDefault:
      brokerClass: MTChannelBasedBroker
      apiVersion: v1
      kind: ConfigMap
      name: config-kafka-channel
      namespace: knative-eventing

现在,在集群中创建的每一个没有spec.config的Broker将被配置为使用config-kafka-channel ConfigMap。请注意,你仍然可以通过在spec.config中明确地为任何给定的Broker指定不同的配置。

更改命名空间的默认配置

如前所述,你还可以控制一些命名空间集的默认行为。因此,例如,如果你想为所有其他创建的Broker使用config-kafka-channel,但想使用config-br-default-channel配置以下命名空间:namespace3和namespace4。你会像这样修改config map:

apiVersion: v1
kind: ConfigMap
metadata:
  name: config-br-defaults
  namespace: knative-eventing
  labels:
    eventing.knative.dev/release: devel
data:
  # Configuration for defaulting channels that do not specify CRD implementations.
  default-br-config: |
    clusterDefault:
      brokerClass: MTChannelBasedBroker
      apiVersion: v1
      kind: ConfigMap
      name: config-kafka-channel
      namespace: knative-eventing
    namespaceDefaults:
      namespace3:
        apiVersion: v1
        kind: ConfigMap
        name: config-br-default-channel
        namespace: knative-eventing
      namespace4:
        apiVersion: v1
        kind: ConfigMap
        name: config-br-default-channel
        namespace: knative-eventing

请注意,对于这些命名空间,我们不会覆盖brokerClass。brokerClass和config是可以独立配置的。