設定 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}
定義。
若要定義您的映像檔連結
-
將映像檔推送至以下映像檔標籤
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
-
使用以下內容定義您的 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
來覆寫組態。目前支援 resources
、replicas
、labels
、annotations
和 nodeSelector
。
覆寫資源¶
KnativeEventing 自訂資源能夠根據部署,為 Knative 系統容器設定系統資源。可以為部署中所有可用的容器設定請求和限制,例如 eventing-controller
、eventing-webhook
、imc-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
來覆寫組態。目前支援 labels
、annotations
和 selector
。
覆寫標籤、註解和選擇器¶
以下 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%