6.2. 使用 Cluster Operator
Cluster Operator 用于部署 Kafka 集群和其他 Kafka 组件。
如需有关部署 Cluster Operator 的信息,请参阅 部署 Cluster Operator。
6.2.1. Cluster Operator 配置 复制链接链接已复制到粘贴板!
您可以使用支持的环境变量以及日志记录配置来配置 Cluster Operator。
环境变量与部署 Cluster Operator 镜像的容器配置相关。有关 镜像
配置的详情请参考 第 12.1.6 节 “image
”。
STRIMZI_NAMESPACE
Operator 应该操作的、以逗号分隔的命名空间列表。如果没有设置,则 Cluster Operator 将在所有命名空间中运行空字符串,或设置为
*
。Cluster Operator 部署可能会使用 OpenShift Downward API 自动将其设置为 Cluster Operator 部署的命名空间。Cluster Operator 命名空间配置示例
env: - name: STRIMZI_NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace
env: - name: STRIMZI_NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
STRIMZI_FULL_RECONCILIATION_INTERVAL_MS
- 可选,默认为 120000 ms。定期协调之间的间隔(以毫秒为单位)。
STRIMZI_OPERATION_TIMEOUT_MS
- 可选,默认为 300000 ms。内部操作的超时时间,以毫秒为单位。使用常规 OpenShift 操作的时间比平等时间使用 AMQ Streams 时,应该增加这个值(例如,下载 Docker 镜像会较慢)。
STRIMZI_ZOOKEEPER_ADMIN_SESSION_TIMEOUT_MS
- 可选,默认为 10000 ms。
Cluster Operator 的 ZooKeeper 管理客户端的会话超时(以毫秒为单位)。如果来自 Cluster Operator 的 ZooKeeper 请求会因为超时问题而定期失败,则该值应该提高。通过 maxSessionTimeout
配置,ZooKeeper 服务器端设置最大允许的会话时间。默认情况下,此会话最大值是默认 tickTime
(默认为 2000)的 20 倍,因此 40000 ms。如果您需要更高的超时,则需要更改 maxSessionTimeout
ZooKeeper 服务器配置值。
STRIMZI_OPERATIONS_THREAD_POOL_SIZE
- 可选,默认 10 个 worker 线程池大小,用于集群操作器运行的各种异步和阻塞操作。
STRIMZI_OPERATOR_NAMESPACE
运行 AMQ Streams Cluster Operator 的命名空间的名称。不要手动配置此变量。使用 OpenShift Downward API。
env: - name: STRIMZI_OPERATOR_NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace
env: - name: STRIMZI_OPERATOR_NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace
Copy to Clipboard Copied! Toggle word wrap Toggle overflow STRIMZI_OPERATOR_NAMESPACE_LABELS
可选。运行 AMQ Streams Cluster Operator 的命名空间的标签。命名空间标签用于在网络策略中配置命名空间选择器,以允许 AMQ Streams Cluster Operator 只能使用这些标签从命名空间中访问操作对象。如果没有设置,网络策略中的命名空间选择器配置为允许从 OpenShift 集群中的任何命名空间中访问 AMQ Streams Cluster Operator。
env: - name: STRIMZI_OPERATOR_NAMESPACE_LABELS value: label1=value1,label2=value2
env: - name: STRIMZI_OPERATOR_NAMESPACE_LABELS value: label1=value1,label2=value2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow STRIMZI_LABELS_EXCLUSION_PATTERN
可选,默认的 regex 模式是
^app.kubernetes.io/(?!part-of)*
。指定用于过滤主自定义资源的标签的 regex 排除模式到其子资源。labels exclusion 过滤器不适用于 template 部分中的标签,如spec.kafka.template.pod.metadata.labels
。env: - name: STRIMZI_LABELS_EXCLUSION_PATTERN value: "^key1.*"
env: - name: STRIMZI_LABELS_EXCLUSION_PATTERN value: "^key1.*"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow STRIMZI_CUSTOM_{COMPONENT_NAME}_LABELS
可选。一个或多个自定义标签应用到由
{COMPONENT_NAME}
自定义资源创建的所有 pod。当创建自定义资源或进行下一个协调时,Cluster Operator 会标记 pod。以下组件存在环境变量:
-
KAFKA
-
KAFKA_CONNECT
-
KAFKA_CONNECT_BUILD
-
ZOOKEEPER
-
ENTITY_OPERATOR
-
KAFKA_MIRROR_MAKER2
-
KAFKA_MIRROR_MAKER
-
CRUISE_CONTROL
-
KAFKA_BRIDGE
-
KAFKA_EXPORTER
-
STRIMZI_CUSTOM_RESOURCE_SELECTOR
可选。指定用于过滤 Operator 处理的自定义资源的标签选择器。Operator 只会针对那些设置指定标签的自定义资源进行操作。没有这些标签的资源不会被操作员查看。标签选择器适用于
Kafka
,KafkaConnect
,KafkaBridge
,KafkaMirrorMaker
, 和KafkaMirrorMaker2
资源。仅当对应的 Kafka 和 Kafka Connect 集群有匹配的标签时,才会执行KafkaRebalance
和KafkaConnector
资源。env: - name: STRIMZI_CUSTOM_RESOURCE_SELECTOR value: label1=value1,label2=value2
env: - name: STRIMZI_CUSTOM_RESOURCE_SELECTOR value: label1=value1,label2=value2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow STRIMZI_KAFKA_IMAGES
-
必需。这可让您从 Kafka 版本映射到包含该版本的 Kafka 代理的对应 Docker 镜像。所需语法是空格或逗号分隔 <
version> = <image>
对。例如3.1.0=registry.redhat.io/amq7/amq-streams-kafka-31-rhel8:2.2.2, 3.2.3=registry.redhat.io/amq7/amq-streams-kafka-32-rhel8:2.2.2
。当指定了属性Kafka.spec.kafka.version
但没有在Kafka
资源的Kafka.spec.kafka.image
时使用这个。 STRIMZI_DEFAULT_KAFKA_INIT_IMAGE
-
可选,默认
registry.redhat.io/amq7/amq-streams-rhel8-operator:2.2.2
。在进行初始配置正常工作的代理之前(即机架支持)用作 init 容器的默认镜像名称(如果没有将镜像指定为Kafka
资源中的kafka-init-image
)。 STRIMZI_KAFKA_CONNECT_IMAGES
-
必需。这可让您将 Kafka 版本映射到包含该版本的 Kafka 连接对应的 Docker 镜像。所需语法是空格或逗号分隔 <
version> = <image>
对。例如3.1.0=registry.redhat.io/amq7/amq-streams-kafka-31-rhel8:2.2.2, 3.2.3=registry.redhat.io/amq7/amq-streams-kafka-32-rhel8:2.2.2
。当指定了KafkaConnect.spec.version
属性但未指定KafkaConnect.spec.image
时,会使用此设置。 STRIMZI_KAFKA_MIRROR_MAKER_IMAGES
-
必需。这可让您将 Kafka 版本映射到包含该版本的 Kafka 镜像制作器的对应 Docker 镜像。所需语法是空格或逗号分隔 <
version> = <image>
对。例如3.1.0=registry.redhat.io/amq7/amq-streams-kafka-31-rhel8:2.2.2, 3.2.3=registry.redhat.io/amq7/amq-streams-kafka-32-rhel8:2.2.2
。当指定KafkaMirrorMaker.spec.version
属性,但没有KafkaMirrorMaker.spec.image
时会使用这个属性。 STRIMZI_DEFAULT_TOPIC_OPERATOR_IMAGE
-
可选,默认
registry.redhat.io/amq7/amq-streams-rhel8-operator:2.2.2
。如果没有在 Kafka 资源中将Kafka.spec.entityOperator.topicOperator.image
指定在部署主题 operator 时用作默认镜像名称
。 STRIMZI_DEFAULT_USER_OPERATOR_IMAGE
-
可选,默认
registry.redhat.io/amq7/amq-streams-rhel8-operator:2.2.2
。如果没有将镜像指定为Kafka.spec.entityOperator.userOperator.image
,则部署用户 operator 时用作默认镜像名称
。 STRIMZI_DEFAULT_TLS_SIDECAR_ENTITY_OPERATOR_IMAGE
-
可选,默认
registry.redhat.io/amq7/amq-streams-kafka-32-rhel8:2.2.2
。如果没有将镜像指定为Kafka.spec.entityOperator.tlsSidecar.image
,在 Kafka 资源中为 Entity Operator 提供 TLS 支持时要使用的镜像名称
。 STRIMZI_IMAGE_PULL_POLICY
-
可选。
ImagePullPolicy
将应用到由 AMQ Streams Cluster Operator 管理的所有 pod 中的容器。有效值为Always
,IfNotPresent
,Never
。如果未指定,则使用 OpenShift 默认值。更改策略将导致所有 Kafka、Kafka Connect 和 Kafka MirrorMaker 集群滚动更新。 STRIMZI_IMAGE_PULL_SECRETS
-
可选。以逗号分隔的
Secret
名称列表。此处引用的 secret 包含从中拉取容器镜像的容器 registry 的凭证。secret 在imagePullSecrets
字段中用于 Cluster Operator 创建的所有Pod
。更改此列表会导致所有 Kafka、Kafka Connect 和 Kafka MirrorMaker 集群的滚动更新。 STRIMZI_KUBERNETES_VERSION
可选。覆盖从 API 服务器检测到的 OpenShift 版本信息。
OpenShift 版本覆盖配置示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow KUBERNETES_SERVICE_DNS_DOMAIN
可选。覆盖默认的 OpenShift DNS 域名后缀。
默认情况下,OpenShift 集群中分配的服务具有使用默认后缀
cluster.local
的 DNS 域名。例如,对于 broker kafka-0:
<cluster-name>-kafka-0.<cluster-name>-kafka-brokers.<namespace>.svc.cluster.local
<cluster-name>-kafka-0.<cluster-name>-kafka-brokers.<namespace>.svc.cluster.local
Copy to Clipboard Copied! Toggle word wrap Toggle overflow DNS 域名添加到用于主机名验证的 Kafka 代理证书中。
如果您在集群中使用不同的 DNS 域名后缀,请将
KUBERNETES_SERVICE_DNS_DOMAIN
环境变量从默认环境变量改为您要用来与 Kafka 代理建立连接。STRIMZI_CONNECT_BUILD_TIMEOUT_MS
- 可选,默认为 300000 ms。以毫秒为单位构建新 Kafka Connect 镜像的超时时间。使用 AMQ Streams 构建包含许多连接器或使用较慢的容器 registry 的容器镜像时,应提高这个值。
STRIMZI_NETWORK_POLICY_GENERATION
-
可选,默认
true
。控制 AMQ Streams 是否生成网络策略资源。网络策略允许 Kafka 组件间的连接。
将此环境变量设置为 false
可禁用网络策略生成。例如,您可能想要使用自定义网络策略。自定义网络策略可让更多地控制组件间的连接。
STRIMZI_DNS_CACHE_TTL
-
可选,默认
30
。本地 DNS 解析器中缓存成功名称查找的秒数。任何负值都意味着每次缓存。零表示不要缓存。由于应用了较长的缓存策略,这可用于避免连接错误。 STRIMZI_POD_SET_RECONCILIATION_ONLY
-
可选,默认
false
。当设置为true
时,Cluster Operator 只协调StrimziPodSet
资源,以及对其他自定义资源(Kafka
、KafkaConnect
等等)的任何更改。这个模式有助于确保根据需要重新创建 Pod,但不会对集群进行其他更改。 STRIMZI_FEATURE_GATES
- 可选。启用或禁用由 功能门 控制的功能和功能。
6.2.1.1. ConfigMap 的日志记录配置 复制链接链接已复制到粘贴板!
Cluster Operator 的日志记录由 strimzi-cluster-operator
ConfigMap
配置。
安装 Cluster Operator 时会创建包含日志记录配置的 ConfigMap
。此 ConfigMap
在 install/cluster-operator/050-ConfigMap-strimzi-cluster-operator.yaml
文件中描述。您可以通过更改此 ConfigMap
中的数据字段 log4j2.properties
来配置 Cluster Operator 日志记录。
要更新日志记录配置,您可以编辑 050-ConfigMap-strimzi-cluster-operator.yaml
文件,然后运行以下命令:
oc create -f install/cluster-operator/050-ConfigMap-strimzi-cluster-operator.yaml
oc create -f install/cluster-operator/050-ConfigMap-strimzi-cluster-operator.yaml
或者,直接编辑 ConfigMap
:
oc edit configmap strimzi-cluster-operator
oc edit configmap strimzi-cluster-operator
要更改重新加载间隔的频率,请在所创建 ConfigMap
的 monitorInterval
选项中设置一个时间(以秒为单位)。
如果部署 Cluster Operator 时缺少 ConfigMap
,则会使用默认的日志记录值。
如果在部署 Cluster Operator 后意外删除 ConfigMap
,则会使用最近加载的日志配置。创建新的 ConfigMap
来加载新的日志记录配置。
不要从 ConfigMap 中删除 monitorInterval
选项。
6.2.1.2. 使用网络策略限制 Cluster Operator 访问 复制链接链接已复制到粘贴板!
Cluster Operator 可以在与它管理的资源相同的命名空间中运行,或者在单独的命名空间中运行。默认情况下,STRIMZI_OPERATOR_NAMESPACE
环境变量被配置为使用 OpenShift Downward API 来查找 Cluster Operator 在其中运行的命名空间。如果 Cluster Operator 与资源在同一命名空间中运行,则只需要本地访问,并且AMQ Streams 允许。
如果 Cluster Operator 在单独的命名空间中运行到其管理的资源,则 OpenShift 集群中的任何命名空间都可以访问 Cluster Operator,除非配置了网络策略。使用可选的 STRIMZI_OPERATOR_NAMESPACE_LABELS
环境变量使用命名空间标签为 Cluster Operator 建立网络策略。通过添加命名空间标签,对 Cluster Operator 的访问仅限于指定的命名空间。
为 Cluster Operator 部署配置的网络策略
6.2.1.3. 定期协调 复制链接链接已复制到粘贴板!
虽然 Cluster Operator 会响应有关从 OpenShift 集群接收的所需集群资源的所有通知,但如果操作器没有运行,或者因为任何原因未收到通知,则所需的资源将不与正在运行的 OpenShift 集群的状态同步。
为了正确处理故障转移,Cluster Operator 会执行定期协调过程,以便它可以将所需资源的状态与当前集群部署进行比较,以便在所有节点上具有一致状态。您可以使用 [STRIMZI_FULL_RECONCILIATION_INTERVAL_MS] 变量为定期协调设置时间间隔。
6.2.1.4. 基于角色的访问控制(RBAC) 复制链接链接已复制到粘贴板!
要使 Cluster Operator 正常工作,需要 OpenShift 集群中的权限,以便与 Kafka
、KafkaConnect
等资源交互,以及受管资源,如 ConfigMap
、Pod
、Deployment
、StatefulSet
和服务
。这些权限包括在 OpenShift 基于角色的访问控制(RBAC)资源中:
-
ServiceAccount
、 -
角色和
ClusterRole
, -
Rolebinding
和ClusterRoleBinding
。
除了在带有 ClusterRoleBinding
的 ServiceAccount
下运行,Cluster Operator 还为需要访问 OpenShift 资源的组件管理一些 RBAC 资源。
OpenShift 还包括特权升级保护,防止一个 ServiceAccount
下运行的组件授予授予 ServiceAccount
不具有的其他 ServiceAccount
权限。因为 Cluster Operator 必须能够创建 ClusterRoleBindings
和它管理的资源所需的 RoleBindings
,所以 Cluster Operator 还必须具有同样的权限。
6.2.1.5. 委派的权限 复制链接链接已复制到粘贴板!
当 Cluster Operator 为所需的 Kafka
资源部署资源时,它还会创建 ServiceAccounts
、RoleBindings
和 ClusterRoleBindings
,如下所示:
Kafka 代理 pod 使用一个名为
cluster-name-kafka
的ServiceAccount
-
当使用 rack 功能时,会使用
strimzi-cluster-name-kafka-init
ClusterRoleBinding
通过名为strimzi-kafka-broker
的ClusterRole
授予这个ServiceAccount
访问权限 - 如果不使用机架功能,且集群不会通过 nodeport 公开,则不会创建绑定
-
当使用 rack 功能时,会使用
-
ZooKeeper pod 使用一个名为
cluster-name-zookeeper
的ServiceAccount
Entity Operator pod 使用一个名为
cluster-name-entity-operator
的ServiceAccount
-
Topic Operator 生成带有状态信息的 OpenShift 事件,因此
ServiceAccount
绑定到一个名为strimzi-entity-operator
的ClusterRole
,它通过strimzi-entity-operator
RoleBinding
授予此访问权限
-
Topic Operator 生成带有状态信息的 OpenShift 事件,因此
-
KafkaConnect
资源的 pod 使用一个名为cluster-name-cluster-connect
的ServiceAccount
-
KafkaMirrorMaker
的 pod 使用一个名为cluster-name-mirror-maker
的ServiceAccount
-
KafkaMirrorMaker2
的 pod 使用一个名为cluster-name-mirrormaker2
的ServiceAccount
-
KafkaBridge
的 pod 使用一个名为cluster-name-bridge
的ServiceAccount
6.2.1.6. ServiceAccount 复制链接链接已复制到粘贴板!
Cluster Operator 最好使用 ServiceAccount
运行:
Cluster Operator 的 ServiceAccount
示例
然后,Operator 的 Deployment
需要在其 spec.template.spec.serviceAccountName
中指定:
Cluster Operator 的 Deployment
的部分示例
注意第 12 行,其中 strimzi-cluster-operator
ServiceAccount
被指定为 serviceAccountName
。
6.2.1.7. ClusterRoles 复制链接链接已复制到粘贴板!
Cluster Operator 需要使用允许访问所需资源的 ClusterRole
来运行。根据 OpenShift 集群设置,集群管理员可能需要创建 ClusterRole
。
只有创建 ClusterRoles
时需要集群管理员权限。Cluster Operator 不会在集群管理员帐户下运行。
ClusterRole
遵循最小权限 原则,并只包含 Cluster Operator 运行 Kafka、Kafka Connect 和 ZooKeeper 集群所需的权限。分配的第一个权限允许 Cluster Operator 管理 OpenShift 资源,如 StatefulSets
、Deployment
、Pod
和 ConfigMap
。
Cluster Operator 使用 ClusterRole 在命名空间范围的资源级别和集群范围资源级别授予权限:
具有 Cluster Operator 的命名空间资源的 ClusterRole
第二个包含集群范围的资源所需的权限。
Cluster Operator 的带有集群范围资源的 ClusterRole
strimzi-kafka-broker
ClusterRole
代表 Kafka pod 中 init 容器用于机架功能所需的访问。如 委派的特权 部分中所述,Cluster Operator 还需要此角色,以便能委派此访问权限。
Cluster Operator 的 ClusterRole
允许您将访问权限委派给 Kafka 代理 pod
strimzi-topic-operator
ClusterRole
代表主题 Operator 所需的访问。如 委派的特权 部分中所述,Cluster Operator 还需要此角色,以便能委派此访问权限。
Cluster Operator 的 ClusterRole
,允许它将访问权限委派给主题 Operator
strimzi-kafka-client
ClusterRole
代表组件基于使用客户端 rack-awareness 的 Kafka 客户端所需的访问。如 委派的特权 部分中所述,Cluster Operator 还需要此角色,以便能委派此访问权限。
Cluster Operator 的 ClusterRole
允许您将访问权限委派给基于 Kafka 客户端的 pod
6.2.1.8. ClusterRoleBindings 复制链接链接已复制到粘贴板!
Operator 需要 ClusterRoleBindings
和 RoleBindings
,它将其 ClusterRole
与 ServiceAccount
相关联:包含集群范围资源的 ClusterRole
需要ClusterRoleBinding
。
Cluster Operator 的 ClusterRoleBinding
示例
ClusterRoleBindings
也需要,ClusterRoles
需要用于委托。
Kafka 代理机架-awareness Cluster Operator 的 ClusterRoleBinding
示例
和
Kafka 客户端的 Cluster Operator 的 ClusterRoleBinding
示例
仅包含
命名空间资源的 ClusterRole 仅使用 RoleBindings
进行绑定。
6.2.2. 使用默认代理设置配置 Cluster Operator 复制链接链接已复制到粘贴板!
如果您在 HTTP 代理后运行 Kafka 集群,您仍然可以在集群内和移出数据。例如,您可以使用连接器运行 Kafka Connect,从代理外推送和拉取数据。或者,您可以使用代理与授权服务器连接。
配置 Cluster Operator 部署以指定代理环境变量。Cluster Operator 接受标准代理配置(HTTP_PROXY
、HTTPS_PROXY
和 NO_PROXY
)作为环境变量。代理设置适用于所有 AMQ Streams 容器。
代理地址的格式是 http://IP-ADDRESS:PORT-NUMBER。要使用名称和密码设置代理,格式为 http://USERNAME:PASSWORD@IP-ADDRESS:PORT-NUMBER。
先决条件
此流程需要使用 OpenShift 用户帐户来创建 CustomResourceDefinitions
、ClusterRoles
和 ClusterRoleBindings
。在 OpenShift 集群中使用 Role Base Access Control (RBAC)通常意味着创建、编辑和删除这些资源的权限仅限于 OpenShift 集群管理员,如 system:admin
。
流程
要在 Cluster Operator 中添加代理环境变量,请更新其
Deployment
配置(install/cluster-operator/060-Deployment-strimzi-cluster-operator.yaml
)。Cluster Operator 的代理配置示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 或者,直接编辑
Deployment
:oc edit deployment strimzi-cluster-operator
oc edit deployment strimzi-cluster-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您更新了 YAML 文件而不是直接编辑
Deployment
,请应用更改:oc create -f install/cluster-operator/060-Deployment-strimzi-cluster-operator.yaml
oc create -f install/cluster-operator/060-Deployment-strimzi-cluster-operator.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.2.3. 在 Cluster Operator 中配置 FIPS 模式 复制链接链接已复制到粘贴板!
联邦信息处理标准(FIPS)是计算机安全性和互操作性的标准。当在启用了 FIPS 的 OpenShift 集群上运行 AMQ Streams 时,AMQ Streams 容器镜像中使用的 OpenJDK 会自动切换到 FIPS 模式。这可防止 AMQ Streams 在集群中运行。将 AMQ Streams 部署到集群时,您会看到类似如下的错误:
如果要在启用了 FIPS 的集群中运行 AMQ Streams,您可以通过将 Cluster Operator 部署配置中禁用 FIPS_MODE
环境变量 来禁用
OpenJDK FIPS 模式。AMQ Streams 部署不兼容 FIPS,但 AMQ Streams 操作器及其操作对象都可以在启用了 FIPS 的 OpenShift 集群上运行。
流程
要在 Cluster Operator 中禁用 FIPS 模式,请更新其
Deployment
配置(install/cluster-operator/060-Deployment-strimzi-cluster-operator.yaml
)并添加FIPS_MODE
环境变量。Cluster Operator 的 FIPS 配置示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 禁用 FIPS 模式。
或者,直接编辑
Deployment
:oc edit deployment strimzi-cluster-operator
oc edit deployment strimzi-cluster-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您更新了 YAML 文件而不是直接编辑
Deployment
,请应用更改:oc apply -f install/cluster-operator/060-Deployment-strimzi-cluster-operator.yaml
oc apply -f install/cluster-operator/060-Deployment-strimzi-cluster-operator.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow