跳至內容

設定 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 相同。請參閱關於私有儲存庫和私有密碼的文件。

Knative Eventing 也會在每個 Deployment 資源中指定一個容器。但是,容器不會使用與其父 Deployment 相同的名稱,這表示 Knative Eventing 中的容器名稱與 Knative Serving 中的唯一識別碼不同。

每個 Deployment 資源內的容器清單

元件 Deployment 名稱 容器名稱
核心事件 eventing-controller eventing-controller
核心事件 eventing-webhook eventing-webhook
Eventing Broker broker-controller eventing-controller
In-Memory 通道 imc-controller controller
In-Memory 通道 imc-dispatcher dispatcher

default 欄位仍然可以用於取代預定義格式的映像檔。但是,如果容器名稱不是唯一識別碼,例如 eventing-controller,您必須使用 override 欄位來取代它,方法是指定 deployment/container 作為唯一索引鍵。

某些映像檔是透過在 Knative Eventing 中使用環境變數來定義的。可以透過利用 override 欄位來取代它們。

以預定義格式下載映像檔,無需密碼

此範例示範如何定義可以在 KnativeEventing CR 中使用簡化格式 docker.io/knative-images/${NAME}:{CUSTOM-TAG} 定義的自訂映像檔連結。

在此範例中

  • 自訂標籤 latest 用於所有映像檔。
  • 所有映像檔連結都可以在不使用密碼的情況下存取。
  • 映像檔是以接受的格式 docker.io/knative-images/${NAME}:{CUSTOM-TAG} 定義。

若要定義您的映像檔連結

  1. 將映像檔推送至以下映像檔標籤

    Deployment 容器 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 中個別包含每個連結。

例如,假設有以下映像檔清單

Deployment 容器 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_IMAGE 所定義的映像檔,在 imc-controller Deployment 的 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 類別。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

覆寫系統 Deployment

如果您想針對特定部署覆寫某些組態,您可以使用 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 分享以達到此目的。了解更多。