跳至内容

配置 Eventing 运算符自定义资源

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

设置默认通道

如果您使用不同的通道实现,例如 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 运算符 CR 的配置方式与 Knative Serving 运算符 CR 相同。请参阅有关 私有存储库和私有密钥 的文档。

Knative Eventing 还仅在每个部署资源中指定一个容器。但是,容器不使用与其父部署相同的名称,这意味着 Knative Eventing 中的容器名称与 Knative Serving 中的名称不同。

每个部署资源中的容器列表

组件 部署名称 容器名称
核心事件 eventing-controller eventing-controller
核心事件 eventing-webhook eventing-webhook
Eventing Broker broker-controller eventing-controller
内存中通道 imc-controller controller
内存中通道 imc-dispatcher dispatcher

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

一些图像通过在 Knative Eventing 中使用环境变量进行定义。可以通过利用 override 字段来替换它们。

以预定义的格式下载没有密钥的图像

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

在此示例中

  • 自定义标签 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
    dispatcher 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.

从不同的存储库下载没有密钥的图像

如果您的自定义图像链接未以统一格式定义,则需要在 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
dispatcher 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。例如,如果您想替换环境变量 DISPATCHER_IMAGEimc-controller 部署的 controller 容器中定义的图像,并且目标图像为 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

使用密钥下载图像

如果您的图像存储库需要私有密钥才能访问,则必须将 imagePullSecrets 属性附加到 KnativeEventing CR。

此示例使用名为 regcred 的密钥。请参考 Kubernetes 文档 创建您自己的私有密钥。

创建密钥后,编辑 KnativeEventing CR

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

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

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 类:ChannelBasedBroker 和 MTChannelBasedBroker。

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

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

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

覆盖系统部署

如果您想覆盖特定部署的一些配置,您可以通过在 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

覆盖容忍度

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

覆盖亲和性

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 Disruption Budget (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 共享,用于该目的。了解更多。