跳到内容

配置 Eventing Operator 自定义资源

您可以通过修改 KnativeEventing 自定义资源 (CR) 中的设置来配置 Knative Eventing Operator。

设置默认通道

如果您正在使用不同的通道实现,例如 KafkaChannel,或者您希望将 InMemoryChannel 的特定配置作为默认配置,您可以通过更新 default-ch-webhook ConfigMap 来更改默认行为。

您可以通过修改 KnativeEventing CR 来完成此操作

apiVersion: operator.knative.dev/v1beta1
kind: KnativeEventing
metadata:
  name: knative-eventing
  namespace: knative-eventing
spec:
  config:
    default-ch-webhook:
      default-ch-config: |
        clusterDefault:
          apiVersion: messaging.knative.dev/v1beta1
          kind: KafkaChannel
          spec:
            numPartitions: 10
            replicationFactor: 1
        namespaceDefaults:
          my-namespace:
            apiVersion: messaging.knative.dev/v1
            kind: InMemoryChannel
            spec:
              delivery:
                backoffDelay: PT0.5S
                backoffPolicy: exponential
                retry: 5

注意

clusterDefault 设置决定了全局的、集群范围的默认通道类型。您可以通过使用 namespaceDefaults 设置来配置各个命名空间的通道默认值。

为 Broker 设置默认通道

如果您正在使用基于通道的 Broker,您可以通过更新 config-br-default-channel ConfigMap,将 Broker 的默认通道类型从 InMemoryChannel 更改为 KafkaChannel。

您可以通过修改 KnativeEventing CR 来完成此操作

apiVersion: operator.knative.dev/v1beta1
kind: KnativeEventing
metadata:
  name: knative-eventing
  namespace: knative-eventing
spec:
  config:
    config-br-default-channel:
      channel-template-spec: |
        apiVersion: messaging.knative.dev/v1beta1
        kind: KafkaChannel
        spec:
          numPartitions: 6
          replicationFactor: 1

私有仓库和私有秘钥

Knative Eventing Operator CR 的配置方式与 Knative Serving Operator CR 相同。请参阅有关私有仓库和私有 secret 的文档。

Knative Eventing 还在每个 Deployment 资源中只指定了一个容器。然而,该容器不使用与其父 Deployment 相同的名称,这意味着 Knative Eventing 中的容器名称与 Knative Serving 中的唯一标识符不同。

每个 Deployment 资源中的容器列表

组件 Deployment 名称 容器名称
核心事件 eventing-controller eventing-controller
核心事件 eventing-webhook eventing-webhook
Eventing Broker broker-controller eventing-controller
内存通道 imc-controller controller
内存通道 imc-dispatcher 调度器

default 字段仍然可以用于替换预定义格式的镜像。但是,如果容器名称不是唯一标识符,例如 eventing-controller,您必须使用 override 字段来替换它,通过将 deployment/container 指定为唯一键。

Knative Eventing 中有些镜像是通过环境变量定义的。它们可以通过利用 override 字段来替换。

在没有秘钥的情况下,以预定义格式下载镜像

此示例展示了如何使用简化格式 docker.io/knative-images/${NAME}:{CUSTOM-TAG} 在 KnativeEventing CR 中定义自定义镜像链接。

在此示例中

  • 所有镜像都使用自定义标签 latest
  • 所有镜像链接都无需使用秘钥即可访问。
  • 镜像以接受的格式 docker.io/knative-images/${NAME}:{CUSTOM-TAG} 定义。

要定义您的镜像链接

  1. 将镜像推送到以下镜像标签

    部署 容器 Docker 镜像
    eventing-controller eventing-controller docker.io/knative-images/eventing-controller:latest
    eventing-webhook docker.io/knative-images/eventing-webhook:latest
    broker-controller eventing-controller docker.io/knative-images/broker-eventing-controller:latest
    controller docker.io/knative-images/controller:latest
    调度器 docker.io/knative-images/dispatcher:latest
  2. 使用以下内容定义您的 KnativeEventing CR

    apiVersion: operator.knative.dev/v1beta1
    kind: KnativeEventing
    metadata:
      name: knative-eventing
      namespace: knative-eventing
    spec:
      registry:
        default: docker.io/knative-images/${NAME}:latest
        override:
          broker-controller/eventing-controller: docker.io/knative-images-repo1/broker-eventing-controller:latest
    

您还可以运行以下命令进行等效更改

```bash
kn operator configure images --component eventing --imageKey default --imageURL docker.io/knative-images/${NAME}:latest -n knative-eventing
kn operator configure images --component eventing --deployName broker-controller --imageKey eventing-controller --imageURL docker.io/knative-images-repo1/broker-eventing-controller:latest -n knative-eventing
```

- `${NAME}` maps to the container name in each `Deployment` resource.
- `default` is used to define the image format for all containers, except the container `eventing-controller` in the deployment `broker-controller`. To replace the image for this container, use the `override`
field to specify individually, by using `broker-controller/eventing-controller` as the key.

无需 secret 即可从不同仓库下载镜像

如果您的自定义镜像链接没有以统一格式定义,您将需要单独将每个链接包含在 KnativeEventing CR 中。

例如,给定以下镜像列表

部署 容器 Docker 镜像
eventing-controller eventing-controller docker.io/knative-images-repo1/eventing-controller:latest
eventing-webhook docker.io/knative-images-repo2/eventing-webhook:latest
controller docker.io/knative-images-repo3/imc-controller:latest
调度器 docker.io/knative-images-repo4/imc-dispatcher:latest
broker-controller eventing-controller docker.io/knative-images-repo5/broker-eventing-controller:latest

您必须修改 KnativeEventing CR 以包含完整列表。例如

apiVersion: operator.knative.dev/v1beta1
kind: KnativeEventing
metadata:
  name: knative-eventing
  namespace: knative-eventing
spec:
  registry:
    override:
      eventing-controller/eventing-controller: docker.io/knative-images-repo1/eventing-controller:latest
      eventing-webhook/eventing-webhook: docker.io/knative-images-repo2/eventing-webhook:latest
      imc-controller/controller: docker.io/knative-images-repo3/imc-controller:latest
      imc-dispatcher/dispatcher: docker.io/knative-images-repo4/imc-dispatcher:latest
      broker-controller/eventing-controller: docker.io/knative-images-repo5/broker-eventing-controller:latest

您还可以运行以下命令进行等效更改

kn operator configure images --component eventing --deployName eventing-controller --imageKey eventing-controller --imageURL docker.io/knative-images-repo1/eventing-controller:latest -n knative-eventing
kn operator configure images --component eventing --deployName eventing-webhook --imageKey eventing-webhook --imageURL docker.io/knative-images-repo2/eventing-webhook:latest -n knative-eventing
kn operator configure images --component eventing --deployName imc-controller --imageKey controller --imageURL docker.io/knative-images-repo3/imc-controller:latest -n knative-eventing
kn operator configure images --component eventing --deployName imc-dispatcher --imageKey dispatcher --imageURL docker.io/knative-images-repo4/imc-dispatcher:latest -n knative-eventing
kn operator configure images --component eventing --deployName broker-controller --imageKey eventing-controller --imageURL docker.io/knative-images-repo5/broker-eventing-controller:latest -n knative-eventing

如果您想替换由环境变量定义的镜像,您必须修改 KnativeEventing CR。例如,如果您想替换部署 imc-controller 中容器 controller 中由环境变量 DISPATCHER_IMAGE 定义的镜像,并且目标镜像是 docker.io/knative-images-repo5/DISPATCHER_IMAGE:latest,则 KnativeEventing CR 将如下所示

apiVersion: operator.knative.dev/v1beta1
kind: KnativeEventing
metadata:
  name: knative-eventing
  namespace: knative-eventing
spec:
  registry:
    override:
      eventing-controller/eventing-controller: docker.io/knative-images-repo1/eventing-controller:latest
      eventing-webhook/eventing-webhook: docker.io/knative-images-repo2/eventing-webhook:latest
      imc-controller/controller: docker.io/knative-images-repo3/imc-controller:latest
      imc-dispatcher/dispatcher: docker.io/knative-images-repo4/imc-dispatcher:latest
      broker-controller/eventing-controller: docker.io/knative-images-repo5/broker-eventing-controller:latest
      DISPATCHER_IMAGE: docker.io/knative-images-repo5/DISPATCHER_IMAGE:latest

您还可以运行以下命令进行等效更改

kn operator configure images --component eventing --deployName eventing-controller --imageKey eventing-controller --imageURL docker.io/knative-images-repo1/eventing-controller:latest -n knative-eventing
kn operator configure images --component eventing --deployName eventing-webhook --imageKey eventing-webhook --imageURL docker.io/knative-images-repo2/eventing-webhook:latest -n knative-eventing
kn operator configure images --component eventing --deployName imc-controller --imageKey controller --imageURL docker.io/knative-images-repo3/imc-controller:latest -n knative-eventing
kn operator configure images --component eventing --deployName imc-dispatcher --imageKey dispatcher --imageURL docker.io/knative-images-repo4/imc-dispatcher:latest -n knative-eventing
kn operator configure images --component eventing --deployName broker-controller --imageKey eventing-controller --imageURL docker.io/knative-images-repo5/broker-eventing-controller:latest -n knative-eventing
kn operator configure images --component eventing --imageKey DISPATCHER_IMAGE -controller --imageURL docker.io/knative-images-repo5/DISPATCHER_IMAGE:latest -n knative-eventing

下载带秘钥的镜像

如果您的镜像仓库需要私有 secret 才能访问,您必须将 imagePullSecrets 属性附加到 KnativeEventing CR。

此示例使用名为 regcred 的 secret。请参阅 Kubernetes 文档 以创建您自己的私有 secret。

创建 secret 后,编辑 KnativeEventing CR

apiVersion: operator.knative.dev/v1beta1
kind: KnativeEventing
metadata:
  name: knative-eventing
  namespace: knative-eventing
spec:
  registry:
    ...
    imagePullSecrets:
      - name: regcred

imagePullSecrets 字段需要一个 secret 列表。您可以添加多个 secret 来访问镜像

apiVersion: operator.knative.dev/v1beta1
kind: KnativeEventing
metadata:
  name: knative-eventing
  namespace: knative-eventing
spec:
  registry:
    ...
    imagePullSecrets:
      - name: regcred
      - name: regcred-2
      ...

配置默认 Broker 类

Knative Eventing 允许您在用户未指定 Broker 类时定义默认 Broker 类。Operator 默认提供两种 Broker 类:ChannelBasedBroker 和 MTChannelBasedBroker。

defaultBrokerClass 字段指示要使用的类;如果为空,则使用 ChannelBasedBroker。

以下示例 CR 将 MTChannelBasedBroker 指定为默认值

apiVersion: operator.knative.dev/v1beta1
kind: KnativeEventing
metadata:
  name: knative-eventing
  namespace: knative-eventing
spec:
  defaultBrokerClass: MTChannelBasedBroker

高可用性

默认情况下,Knative Eventing 运行每个部署的一个实例。spec.high-availability 字段允许您为 Operator 管理的所有部署配置副本数量。

以下配置为工作负载指定了 3 个副本

apiVersion: operator.knative.dev/v1beta1
kind: KnativeEventing
metadata:
  name: knative-eventing
  namespace: knative-eventing
spec:
  high-availability:
    replicas: 3

replicas 字段还根据 spec.high-availability 配置 HorizontalPodAutoscaler 资源。假设 operator 包含以下 HorizontalPodAutoscaler

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  ...
spec:
  minReplicas: 3
  maxReplicas: 5

如果您配置 replicas: 2,小于 minReplicas,则 operator 将 minReplicas 转换为 1

如果您配置 replicas: 6,大于 maxReplicas,则 operator 将 maxReplicas 转换为 maxReplicas + (replicas - minReplicas),即 8

覆盖系统部署

如果您想覆盖特定部署的某些配置,您可以使用 CR 中的 spec.deployments 来覆盖配置。目前支持 resourcesreplicaslabelsannotationsnodeSelector

覆盖资源

KnativeEventing 自定义资源能够根据部署为 Knative 系统容器配置系统资源。可以为部署中所有可用的容器配置请求和限制,例如 eventing-controllereventing-webhookimc-controller 等。

例如,以下 KnativeEventing 资源将部署 eventing-controller 中的容器 eventing-controller 配置为请求 0.3 CPU 和 100MB RAM,并设置 1 CPU 和 250MB RAM 的硬限制

apiVersion: operator.knative.dev/v1beta1
kind: KnativeEventing
metadata:
  name: knative-eventing
  namespace: knative-eventing
spec:
  workloads:
  - name: eventing-controller
    resources:
    - container: eventing-controller
      requests:
        cpu: 300m
        memory: 100M
      limits:
        cpu: 1000m
        memory: 250M

您还可以运行以下命令进行等效更改

kn operator configure resources --component eventing --deployName eventing-controller --container eventing-controller --requestCPU 300m --requestMemory 100M --limitCPU 1000m --limitMemory 250M -n knative-eventing

覆盖 nodeSelector

KnativeEventing 资源能够覆盖 Knative Eventing 部署资源的 nodeSelector。例如,如果您想添加以下容忍度

nodeSelector:
  disktype: hdd

到部署 eventing-controller 中,您需要将您的 KnativeEventing CR 更改如下

apiVersion: operator.knative.dev/v1beta1
kind: KnativeEventing
metadata:
  name: knative-eventing
  namespace: knative-eventing
spec:
  workloads:
  - name: eventing-controller
    nodeSelector:
      disktype: hdd

您还可以运行以下命令进行等效更改

kn operator configure nodeSelector --component eventing --deployName eventing-controller --key disktype --value hdd -n knative-eventing

覆盖 tolerations

KnativeEventing 资源能够覆盖 Knative Eventing 部署资源的容忍度。例如,如果您想添加以下容忍度

tolerations:
- key: "key1"
  operator: "Equal"
  value: "value1"
  effect: "NoSchedule"

到部署 eventing-controller 中,您需要将您的 KnativeEventing CR 更改如下

apiVersion: operator.knative.dev/v1beta1
kind: KnativeEventing
metadata:
  name: knative-eventing
  namespace: knative-eventing
spec:
  workloads:
  - name: eventing-controller
    tolerations:
    - key: "key1"
      operator: "Equal"
      value: "value1"
      effect: "NoSchedule"

您还可以运行以下命令进行等效更改

kn operator configure tolerations --component eventing --deployName eventing-controller --key key1 --operator Equal --value value1 --effect NoSchedule -n knative-eventing

覆盖 affinity

KnativeEventing 资源能够覆盖或添加 Knative Eventing 部署资源的亲和性,包括 nodeAffinity、podAffinity 和 podAntiAffinity。例如,如果您想添加以下 nodeAffinity

affinity:
  nodeAffinity:
    preferredDuringSchedulingIgnoredDuringExecution:
    - weight: 1
      preference:
        matchExpressions:
        - key: disktype
          operator: In
          values:
          - ssd

到部署 eventing-controller 中,您需要将您的 KnativeEventing CR 更改如下

apiVersion: operator.knative.dev/v1beta1
kind: KnativeEventing
metadata:
  name: knative-eventing
  namespace: knative-eventing
spec:
  workloads:
  - name: eventing-controller
    affinity:
      nodeAffinity:
        preferredDuringSchedulingIgnoredDuringExecution:
        - weight: 1
          preference:
            matchExpressions:
            - key: disktype
              operator: In
              values:
              - ssd

覆盖环境变量

KnativeEventing 资源能够覆盖或添加 Knative Eventing 部署资源中容器的环境变量。例如,如果您想将部署 eventing-controller 中容器 eventing-controller 的环境变量 METRICS_DOMAIN 的值更改为 "knative.dev/my-repo",您需要将您的 KnativeEventing CR 更改如下

apiVersion: operator.knative.dev/v1beta1
kind: KnativeEventing
metadata:
  name: knative-eventing
  namespace: knative-eventing
spec:
  workloads:
  - name: eventing-controller
    env:
    - container: eventing-controller
      envVars:
      - name: METRICS_DOMAIN
        value: "knative.dev/my-repo"

您还可以运行以下命令进行等效更改

kn operator configure envvars --component eventing --deployName eventing-controller --container eventing-controller --name METRICS_DOMAIN --value "knative.dev/my-repo" -n knative-eventing

覆盖系统服务

如果您想覆盖特定服务的一些配置,您可以使用 CR 中的 spec.services 覆盖配置。目前支持 labelsannotationsselector

覆盖标签、注解和选择器

以下 KnativeEventing 资源覆盖 eventing-webhook 服务,使其具有标签 mylabel: foo、注解 myannotations: bar、选择器 myselector: bar

apiVersion: operator.knative.dev/v1beta1
kind: KnativeEventing
metadata:
  name: knative-eventing
  namespace: knative-eventing
spec:
  services:
  - name: eventing-webhook
    labels:
      mylabel: foo
    annotations:
      myannotations: bar
    selector:
      myselector: bar

您还可以运行以下命令进行等效更改

kn operator configure labels --component eventing --serviceName eventing-webhook --key mylabel --value foo -n knative-eventing
kn operator configure annotations --component eventing --serviceName eventing-webhook --key myannotations --value bar -n knative-eventing
kn operator configure selectors --component eventing --serviceName eventing-webhook --key myselector --value bar -n knative-eventing

覆盖系统 podDisruptionBudgets

Pod 中断预算 (PDB) 允许您在 Pod 因维护原因需要重新调度时限制应用程序的中断。Knative Operator 允许您根据名称配置 Eventing 中特定 podDisruptionBudget 资源的 minAvailable。要了解有关 podDisruptionBudget 资源配置的更多信息,请单击此处。例如,如果您想将名为 eventing-webhook 的 podDisruptionBudget 的 minAvailable 更改为 70%,您需要将您的 KnativeEventing CR 更改如下

apiVersion: operator.knative.dev/v1beta1
kind: KnativeEventing
metadata:
  name: knative-eventing
  namespace: knative-eventing
spec:
  podDisruptionBudgets:
  - name: eventing-webhook
    minAvailable: 70%

我们使用分析和 cookie 来了解网站流量。有关您使用我们网站的信息会与 Google 共享以达到此目的。了解更多。