配置 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}
定义。
要定义您的图像链接
-
将图像推送到以下图像标签
部署 容器 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 中单独包含每个链接。
例如,给定以下图像列表
部署 | 容器 | 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
部署的 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
来覆盖配置。目前支持 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%