配置 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}定义。
要定义您的镜像链接
-
将镜像推送到以下镜像标签
部署 容器 Docker 镜像 eventing-controllereventing-controllerdocker.io/knative-images/eventing-controller:latesteventing-webhookdocker.io/knative-images/eventing-webhook:latestbroker-controllereventing-controllerdocker.io/knative-images/broker-eventing-controller:latestcontrollerdocker.io/knative-images/controller:latest调度器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.
无需 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 来覆盖配置。目前支持 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
覆盖 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 覆盖配置。目前支持 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 中断预算 (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%