7.2. 使用 Cluster Operator
Cluster Operator 用于部署 Kafka 集群和其他 Kafka 组件。
如需有关部署 Cluster Operator 的信息,请参阅 部署 Cluster Operator。
7.2.1. 基于角色的访问控制(RBAC)资源 复制链接链接已复制到粘贴板!
Cluster Operator 为需要访问 OpenShift 资源的 AMQ Streams 组件创建和管理 RBAC 资源。
要使 Cluster Operator 正常工作,OpenShift 集群中的权限需要与 Kafka 资源交互,如 Kafka 和 KafkaConnect,以及 ConfigMap、Pod、Deployment、StatefulSet 和 Service 等受管资源。
通过 OpenShift 基于角色的访问控制(RBAC)资源指定权限:
-
ServiceAccount -
角色和ClusterRole -
Rolebinding和ClusterRoleBinding
7.2.1.1. 委派权限到 AMQ Streams 组件 复制链接链接已复制到粘贴板!
Cluster Operator 在名为 strimzi-cluster-operator 的服务帐户下运行。它会分配集群角色,授予它为 AMQ Streams 组件创建 RBAC 资源。角色绑定将集群角色与服务帐户关联。
OpenShift 可防止在一个 ServiceAccount 下运行的组件授予授予 ServiceAccount 不具有的另一个 ServiceAccount 权限。因为 Cluster Operator 创建它管理的资源所需的 RoleBinding 和 ClusterRoleBinding RBAC 资源,因此它需要赋予它相同的特权的角色。
下表描述了 Cluster Operator 创建的 RBAC 资源。
| 名称 | 使用的 |
|---|---|
|
| Kafka 代理 pod |
|
| zookeeper pod |
|
| Kafka Connect pod |
|
| MirrorMaker pod |
|
| MirrorMaker 2.0 pod |
|
| Kafka Bridge pod |
|
| Entity Operator |
| 名称 | 使用的 |
|---|---|
|
| Cluster Operator |
|
| Cluster Operator |
|
| Cluster Operator |
|
| Cluster Operator、机架功能(使用时) |
|
| Cluster Operator、主题 Operator、用户 Operator |
|
| Cluster Operator、用于机架意识的 Kafka 客户端 |
| 名称 | 使用的 |
|---|---|
|
| Cluster Operator |
|
| Cluster Operator、用于机架意识的 Kafka 代理 |
|
| Cluster Operator、用于机架意识的 Kafka 客户端 |
| 名称 | 使用的 |
|---|---|
|
| Cluster Operator |
|
| Cluster Operator、用于机架意识的 Kafka 代理 |
7.2.1.2. 使用一个 ServiceAccount 运行 Cluster Operator 复制链接链接已复制到粘贴板!
Cluster Operator 最好使用 ServiceAccount 运行:
Cluster Operator 的 ServiceAccount 示例
然后,Operator 的 Deployment 需要在其 spec.template.spec.serviceAccountName 中指定:
Cluster Operator 的 Deployment 的部分示例
注意第 12 行,其中 strimzi-cluster-operator 指定为 serviceAccountName。
7.2.1.3. ClusterRole 资源 复制链接链接已复制到粘贴板!
Cluster Operator 使用 ClusterRole 资源来提供对资源的必要访问权限。根据 OpenShift 集群设置,可能需要集群管理员来创建集群角色。
只有创建 ClusterRole 资源时需要集群管理员权限。Cluster Operator 不会在集群管理员帐户下运行。
ClusterRole 资源遵循 最小特权原则,并只包含 Cluster Operator 运行 Kafka 组件集群所需的权限。分配的第一个权限允许 Cluster Operator 管理 OpenShift 资源,如 StatefulSet、Deployment、Pod 和 ConfigMap。
Cluster Operator 需要所有集群角色,以便委派权限。
Cluster Operator 使用 strimzi-cluster-operator-namespaced 和 strimzi-cluster-operator-global 集群角色在命名空间范围的资源级别和集群范围的资源级别授予权限。
具有 Cluster Operator 的命名空间资源的 ClusterRole
Cluster Operator 的带有集群范围资源的 ClusterRole
strimzi-cluster-operator-leader-election 集群角色代表领导选举机制所需的权限。
带有领导选举权限的 ClusterRole
strimzi-kafka-broker 集群角色代表了使用机架意识的 Kafka pod 中 init 容器所需的访问权限。
名为 strimzi-<cluster_name>-kafka-init 的角色绑定会为 <cluster_name>-kafka 服务账户分配访问集群内使用 strimzi-kafka-broker 角色的节点。如果没有使用机架功能,且集群不会通过 nodeport 公开,则不会创建绑定。
Cluster Operator 的 ClusterRole 允许您将访问权限委派给 Kafka 代理 pod
strimzi-entity-operator 集群角色代表主题 Operator 和 User Operator 所需的访问权限。
Topic Operator 使用状态信息生成 OpenShift 事件,因此 < cluster_name> -entity-operator 服务帐户被绑定到 strimzi-entity-operator 角色,它通过 strimzi-entity-operator 角色绑定授予这个访问权限。
Cluster Operator 的 ClusterRole,允许它将访问权限委派给主题和用户 Operator
strimzi-kafka-client 集群角色代表使用机架意识的 Kafka 客户端所需的访问权限。
Cluster Operator 的 ClusterRole 允许您将访问权限委派给基于 Kafka 客户端的 pod
7.2.1.4. ClusterRoleBinding 资源 复制链接链接已复制到粘贴板!
Cluster Operator 使用 ClusterRoleBinding 和 RoleBinding 资源将其 ClusterRole 与 ServiceAccount 相关联:包含集群范围资源的集群角色需要集群角色绑定。
Cluster Operator 的 ClusterRoleBinding 示例
委派权限中使用的集群角色需要集群角色绑定:
Cluster Operator 和 Kafka 代理机架意识的 ClusterRoleBinding 示例
Cluster Operator 和 Kafka 客户端的 ClusterRoleBinding 示例
仅包含命名空间资源的集群角色仅使用角色绑定进行绑定。
Cluster Operator 的 RoleBinding 示例
Cluster Operator 和 Kafka 代理机架意识的 RoleBinding 示例
7.2.2. Cluster Operator 日志记录的 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 选项。
7.2.3. 使用环境变量配置 Cluster Operator 复制链接链接已复制到粘贴板!
您可以使用环境变量配置 Cluster Operator。此处列出了支持的环境变量。
环境变量与 Cluster Operator 镜像部署的容器配置相关。有关 镜像 配置的详情请参考 第 12.1.6 节 “image”。
STRIMZI_NAMESPACEOperator 操作的、以逗号分隔的命名空间列表。如果没有设置,则 Cluster Operator 会在所有命名空间中运行空字符串,或设置为
*。Cluster Operator 部署可能会使用 Downward API 自动将其设置为 Cluster Operator 部署的命名空间。
Cluster Operator 命名空间配置示例
env: - name: STRIMZI_NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespaceenv: - name: STRIMZI_NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespaceCopy 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 服务器端设置最大允许的会话时间。默认情况下,最多会话超时值为 20 倍,默认的tickTime(默认为 2000)为 40000 ms。如果需要更高的超时,请更改maxSessionTimeoutZooKeeper 服务器配置值。 STRIMZI_OPERATIONS_THREAD_POOL_SIZE- 可选,默认 10。worker 线程池大小,用于各种异步和阻止由 Cluster Operator 运行的操作。
STRIMZI_OPERATOR_NAME- 可选,默认为 pod 的主机名。在发出 OpenShift 事件时,操作器名称标识 AMQ Streams 实例。
STRIMZI_OPERATOR_NAMESPACE运行 Cluster Operator 的命名空间的名称。不要手动配置此变量。使用 Downward API。
env: - name: STRIMZI_OPERATOR_NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespaceenv: - name: STRIMZI_OPERATOR_NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespaceCopy to Clipboard Copied! Toggle word wrap Toggle overflow STRIMZI_OPERATOR_NAMESPACE_LABELS可选。运行 AMQ Streams Cluster Operator 的命名空间的标签。使用命名空间标签 在 网络策略 中配置命名空间选择器。网络策略允许 AMQ Streams Cluster Operator 只访问带有这些标签的命名空间中的操作对象。如果没有设置,网络策略中的命名空间选择器配置为允许从 OpenShift 集群中的任何命名空间中访问 Cluster Operator。
env: - name: STRIMZI_OPERATOR_NAMESPACE_LABELS value: label1=value1,label2=value2env: - name: STRIMZI_OPERATOR_NAMESPACE_LABELS value: label1=value1,label2=value2Copy to Clipboard Copied! Toggle word wrap Toggle overflow STRIMZI_LABELS_EXCLUSION_PATTERN可选,默认的 regex 模式是
^app.kubernetes.io/(?!part-of)*。正则表达式排除模式用于从主自定义资源过滤标签传播到其子资源。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可选。用于过滤 Cluster Operator 处理的自定义资源的标签选择器。Operator 只会针对那些设置了指定标签的自定义资源进行操作。没有这些标签的资源不会被操作员查看。标签选择器适用于
Kafka,KafkaConnect,KafkaBridge,KafkaMirrorMaker, 和KafkaMirrorMaker2资源。KafkaRebalance和KafkaConnector资源仅在对应的 Kafka 和 Kafka Connect 集群有匹配的标签时才会执行。env: - name: STRIMZI_CUSTOM_RESOURCE_SELECTOR value: label1=value1,label2=value2env: - name: STRIMZI_CUSTOM_RESOURCE_SELECTOR value: label1=value1,label2=value2Copy to Clipboard Copied! Toggle word wrap Toggle overflow STRIMZI_KAFKA_IMAGES-
必需。从 Kafka 版本映射到包含该版本的 Kafka 代理的对应 Docker 镜像的映射。所需语法为空格或用逗号分开的 <
version> = <image>对。例如3.2.3=registry.redhat.io/amq7/amq-streams-kafka-32-rhel8:2.3.0, 3.3.1=registry.redhat.io/amq7/amq-streams-kafka-33-rhel8:2.3.0。当指定了属性Kafka.spec.kafka.version但没有在Kafka资源的Kafka.spec.kafka.image时使用这个。 STRIMZI_DEFAULT_KAFKA_INIT_IMAGE-
可选,默认的
registry.redhat.io/amq7/amq-streams-rhel8-operator:2.3.0。如果没有将镜像指定为Kafka资源中的kafka-init-image,则用作 init 容器的镜像名称。init 容器在代理进行初始配置前启动,如机架支持。 STRIMZI_KAFKA_CONNECT_IMAGES-
必需。从 Kafka 版本映射到特定版本的 Kafka Connect 的对应 Docker 镜像的映射。所需语法为空格或用逗号分开的 <
version> = <image>对。例如3.2.3=registry.redhat.io/amq7/amq-streams-kafka-32-rhel8:2.3.0, 3.3.1=registry.redhat.io/amq7/amq-streams-kafka-33-rhel8:2.3.0。当指定了KafkaConnect.spec.version属性但未指定KafkaConnect.spec.image时,会使用此设置。 STRIMZI_KAFKA_MIRROR_MAKER_IMAGES-
必需。从 Kafka 版本映射到该版本的 mirrorMaker 的对应 Docker 镜像的映射。所需语法为空格或用逗号分开的 <
version> = <image>对。例如3.2.3=registry.redhat.io/amq7/amq-streams-kafka-32-rhel8:2.3.0, 3.3.1=registry.redhat.io/amq7/amq-streams-kafka-33-rhel8:2.3.0。当指定KafkaMirrorMaker.spec.version属性,但没有KafkaMirrorMaker.spec.image时会使用这个属性。 STRIMZI_DEFAULT_TOPIC_OPERATOR_IMAGE-
可选,默认的
registry.redhat.io/amq7/amq-streams-rhel8-operator:2.3.0。如果没有在Kafka资源中指定为Kafka.spec.entityOperator.topicOperator.image镜像时,用于部署主题 Operator 时用作默认镜像名称。 STRIMZI_DEFAULT_USER_OPERATOR_IMAGE-
可选,默认的
registry.redhat.io/amq7/amq-streams-rhel8-operator:2.3.0。如果没有在 Kafka 资源中指定为Kafka.spec.entityOperator.userOperator.image,则部署 User Operator 时用作默认镜像名称。 STRIMZI_DEFAULT_TLS_SIDECAR_ENTITY_OPERATOR_IMAGE-
可选,默认的
registry.redhat.io/amq7/amq-streams-kafka-33-rhel8:2.3.0。如果没有将镜像指定为Kafka.spec.entityOperator.tls.tlsSidecar.image,在 Kafka 资源中为 Entity Operator部署 sidecar 时使用镜像名称。sidecar 提供 TLS 支持。 STRIMZI_IMAGE_PULL_POLICY-
可选。应用到由 Cluster Operator 管理的所有 pod 中的容器的
ImagePullPolicy。有效值为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.localCopy 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。资源的网络策略。网络策略允许 Kafka 组件间的连接。将此环境变量设置为
false可禁用网络策略生成。例如,您可能想要使用自定义网络策略。自定义网络策略可让更多地控制组件间的连接。STRIMZI_DNS_CACHE_TTL-
可选,默认
30。本地 DNS 解析器中缓存成功名称查找的秒数。任何负值都意味着每次缓存。零表示不缓存,由于应用了较长的缓存策略,避免连接错误会很有用。 STRIMZI_POD_SET_RECONCILIATION_ONLY-
可选,默认
false。当设置为true时,Cluster Operator 只协调StrimziPodSet资源,以及对其他自定义资源(Kafka、KafkaConnect等等)的任何更改。此模式可用于确保根据需要重新创建您的 pod,但集群没有其他更改。 STRIMZI_FEATURE_GATES- 可选。启用或禁用由 功能门 控制的功能和功能。
STRIMZI_POD_SECURITY_PROVIDER_CLASS-
可选。可插拔
PodSecurityProvider类的配置,可用于为 Pod 和容器提供安全性上下文配置。
7.2.3.1. 领导选举环境变量 复制链接链接已复制到粘贴板!
在运行额外的 Cluster Operator 副本时,请使用领导选举环境变量。您可以运行额外的副本来防出现主要故障造成的中断。
STRIMZI_LEADER_ELECTION_ENABLED-
可选,默认为禁用(
false)。启用或禁用领导选举机制,允许其他 Cluster Operator 副本在待机上运行。
默认禁用领导选举机制。仅在安装时应用此环境变量时启用。
STRIMZI_LEADER_ELECTION_LEASE_NAME-
启用领导选举时是必需的。用于领导选举机制的 OpenShift
Lease资源的名称。 STRIMZI_LEADER_ELECTION_LEASE_NAMESPACE启用领导选举时是必需的。创建用于领导选举 OpenShift
Lease资源的命名空间。您可以使用 Downward API 将其配置为部署 Cluster Operator 的命名空间。env: - name: STRIMZI_LEADER_ELECTION_LEASE_NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespaceenv: - name: STRIMZI_LEADER_ELECTION_LEASE_NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespaceCopy to Clipboard Copied! Toggle word wrap Toggle overflow STRIMZI_LEADER_ELECTION_IDENTITY启用领导选举时是必需的。配置在领导选举过程中使用的给定 Cluster Operator 实例的身份。身份必须为每个 operator 实例唯一。您可以使用 Downward API 将其配置为部署 Cluster Operator 的 pod 的名称。
env: - name: STRIMZI_LEADER_ELECTION_IDENTITY valueFrom: fieldRef: fieldPath: metadata.nameenv: - name: STRIMZI_LEADER_ELECTION_IDENTITY valueFrom: fieldRef: fieldPath: metadata.nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow STRIMZI_LEADER_ELECTION_LEASE_DURATION_MS- 可选,默认为 15000 ms。指定获取租期有效的持续时间。
STRIMZI_LEADER_ELECTION_RENEW_DEADLINE_MS- 可选,默认为 10000 ms。指定领导机应尽力维护领导的期限。
STRIMZI_LEADER_ELECTION_RETRY_PERIOD_MS- 可选,默认为 2000 ms。指定领导领导对租期锁定的更新频率。
7.2.3.2. 使用网络策略限制 Cluster Operator 访问 复制链接链接已复制到粘贴板!
使用 STRIMZI_OPERATOR_NAMESPACE_LABELS 环境变量使用命名空间标签为 Cluster Operator 建立网络策略。
Cluster Operator 可以在与它管理的资源相同的命名空间中运行,或者在单独的命名空间中运行。默认情况下,STRIMZI_OPERATOR_NAMESPACE 环境变量被配置为使用 Downward API 找到 Cluster Operator 在其中运行的命名空间。如果 Cluster Operator 与资源在同一命名空间中运行,则只有本地访问权限才需要并在 AMQ Streams 中允许。
如果 Cluster Operator 在单独的命名空间中运行到其管理的资源,则 OpenShift 集群中的任何命名空间都可以访问 Cluster Operator,除非配置了网络策略。通过添加命名空间标签,对 Cluster Operator 的访问仅限于指定的命名空间。
为 Cluster Operator 部署配置的网络策略
7.2.3.3. 为定期协调设置时间间隔 复制链接链接已复制到粘贴板!
使用 STRIMZI_FULL_RECONCILIATION_INTERVAL_MS 变量设置定期协调的时间间隔。
Cluster Operator 会响应所有从 OpenShift 集群收到的适用集群资源的通知。如果操作器没有运行,或者因为某种原因没有收到通知,资源将不与正在运行的 OpenShift 集群的状态同步。为了正确处理故障转移,Cluster Operator 会执行定期协调过程,以便它可以将资源的状态与当前集群部署进行比较,以便在所有节点上具有一致状态。
7.2.4. 使用默认代理设置配置 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。
先决条件
-
您需要具有权限的帐户来创建和管理
CustomResourceDefinition和 RBAC (ClusterRole、RoleBinding)资源。
流程
要在 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-operatorCopy 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.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.2.5. 使用领导选举机制运行多个 Cluster Operator 副本 复制链接链接已复制到粘贴板!
默认 Cluster Operator 配置启用 领导选举机制。使用领导选举机制运行 Cluster Operator 的多个并行副本。一个副本被选为活跃领导值,并运行部署的资源。其他副本以待机模式运行。当领导机停止或失败时,其中一个备用副本被选为新的领导机,并开始操作部署的资源。
默认情况下,AMQ Streams 使用单个 Cluster Operator 副本运行,该副本始终是领导副本。当单个 Cluster Operator 副本停止或失败时,OpenShift 会启动新的副本。
使用多个副本运行 Cluster Operator 并不重要。但是,在出现大规模中断时,将副本处于待机位置上非常有用。例如,假设多个 worker 节点或整个可用区失败。故障可能会导致 Cluster Operator pod 和许多 Kafka pod 同时停机。如果后续 pod 调度会导致出现缺少资源的情况,这可以在运行单个 Cluster Operator 时延迟操作。
7.2.5.1. 配置 Cluster Operator 副本 复制链接链接已复制到粘贴板!
要以待机模式运行额外的 Cluster Operator 副本,您需要增加副本数并启用领导选举机制。要配置领导选举机制,请使用领导选举环境变量。
要进行必要的更改,请配置位于 install/cluster-operator/ 中的以下 Cluster Operator 安装文件:
- 060-Deployment-strimzi-cluster-operator.yaml
- 022-ClusterRole-strimzi-cluster-operator-role.yaml
- 022-RoleBinding-strimzi-cluster-operator.yaml
领导选举具有自己的 ClusterRole 和 RoleBinding RBAC 资源,以针对 Cluster Operator 运行的命名空间,而不是对其进行监视的命名空间。
默认部署配置在与 Cluster Operator 相同的命名空间中创建一个名为 strimzi-cluster-operator 的 Lease 资源。Cluster Operator 使用租期来管理领导选举机制。RBAC 资源提供使用 Lease 资源的权限。如果您使用不同的 Lease 名称或命名空间,请相应地更新 ClusterRole 和 RoleBinding 文件。
先决条件
-
您需要具有权限的帐户来创建和管理
CustomResourceDefinition和 RBAC (ClusterRole、RoleBinding)资源。
流程
编辑用于部署 Cluster Operator 的 Deployment 资源,该 Operator 在 060-Deployment-strimzi-cluster-operator.yaml 文件中定义。
将
replicas属性从默认的(1)更改为与所需副本数匹配的值。增加 Cluster Operator 副本数量
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查是否设置了领导选举
env属性。如果没有设置,请配置它们。
要启用领导选举机制,
STRIMZI_LEADER_ELECTION_ENABLED必须设置为true(默认)。在本例中,租期的名称被改为
my-strimzi-cluster-operator。为 Cluster Operator 配置领导选举环境变量
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有关可用环境变量的描述,请参阅 第 7.2.3.1 节 “领导选举环境变量”。
如果您为领导选举机制中使用的
Lease资源指定不同的名称或命名空间,请更新 RBAC 资源。(可选)在
022-ClusterRole-strimzi-cluster-operator-role.yaml文件中编辑ClusterRole资源。使用
Lease资源名称更新resourceName。更新对租期的 ClusterRole 引用
Copy to Clipboard Copied! Toggle word wrap Toggle overflow (可选)在
022-RoleBinding-strimzi-cluster-operator.yaml文件中编辑RoleBinding资源。更新
subjects.name和subjects.namespace,其名称为Leaseresource,以及创建它的命名空间。更新对租期的 RoleBinding 引用
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 部署 Cluster Operator:
oc create -f install/cluster-operator -n myproject
oc create -f install/cluster-operator -n myprojectCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检查部署的状态:
oc get deployments -n myproject
oc get deployments -n myprojectCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出显示了部署名称和就绪状态
NAME READY UP-TO-DATE AVAILABLE strimzi-cluster-operator 3/3 3 3
NAME READY UP-TO-DATE AVAILABLE strimzi-cluster-operator 3/3 3 3Copy to Clipboard Copied! Toggle word wrap Toggle overflow READY显示 ready/expected 的副本数量。当AVAILABLE输出显示正确的副本数时,部署可以成功。
7.2.6. 在 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-operatorCopy 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.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow