8.5. 配置 Cluster Operator


使用环境变量配置 Cluster Operator。在 Deployment 配置文件中,指定 Cluster Operator 的容器镜像的环境变量。

注意

AMQ Streams 发行工件提供的 Deployment 配置文件为 install/cluster-operator/060-Deployment-strimzi-cluster-operator.yaml

您可以使用以下环境变量来配置 Cluster Operator。如果您以待机模式运行 Cluster Operator 副本,则需要额外的 环境变量来启用领导选举机制

STRIMZI_NAMESPACE

以逗号分隔的 Operator 运行的命名空间列表。如果没有设置,则为空字符串,或设置为 *,Cluster Operator 在所有命名空间中运行。

Cluster Operator 部署可能会使用 Downward API 把它自动设置为 Cluster Operator 部署的命名空间。

Cluster Operator 命名空间的配置示例

env:
  - name: STRIMZI_NAMESPACE
    valueFrom:
      fieldRef:
        fieldPath: metadata.namespace

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 admin 客户端的会话超时,以毫秒为单位。如果 Cluster Operator 的 ZooKeeper 请求因为超时问题而定期失败,则增加这个值。通过 maxSessionTimeout 配置在 ZooKeeper 服务器端设置了最大允许的会话时间。默认情况下,最大会话超时值为 20 倍,默认的 tickTime (默认值为 2000)为 40000 ms。如果您需要更高的超时,请更改 maxSessionTimeout ZooKeeper 服务器配置值。
STRIMZI_OPERATIONS_THREAD_POOL_SIZE
可选,默认为 10。worker 线程池大小,用于各种异步和阻止由 Cluster Operator 运行的操作。
STRIMZI_OPERATOR_NAME
可选,默认为 pod 的主机名。在发出 OpenShift 事件时,Operator 名称标识 AMQ Streams 实例。
STRIMZI_OPERATOR_NAMESPACE

运行 Cluster Operator 的命名空间的名称。不要手动配置此变量。使用 Downward API。

env:
  - name: STRIMZI_OPERATOR_NAMESPACE
    valueFrom:
      fieldRef:
        fieldPath: metadata.namespace
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=value2
STRIMZI_LABELS_EXCLUSION_PATTERN

可选,默认的正则表达式为 ^app.kubernetes.io/(?!part-of).*。用于过滤从主自定义资源传播到其子资源的正则表达式排除模式。标签排除过滤器不适用于 template 部分中的标签,如 spec.kafka.template.pod.metadata.labels

env:
  - name: STRIMZI_LABELS_EXCLUSION_PATTERN
    value: "^key1.*"
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 仅在设置了指定标签的自定义资源上运行。Operator 不会看到没有这些标签的资源。标签选择器适用于 Kafka, KafkaConnect, KafkaBridge, KafkaMirrorMaker, 和 KafkaMirrorMaker2 资源。只有在对应的 Kafka 和 Kafka Connect 集群具有匹配的标签时,才会操作 KafkaRebalanceKafkaConnector 资源。

env:
  - name: STRIMZI_CUSTOM_RESOURCE_SELECTOR
    value: label1=value1,label2=value2
STRIMZI_KAFKA_IMAGES
必需。从 Kafka 版本到包含该版本的 Kafka 代理的对应 Docker 镜像的映射。所需的语法为空格或用逗号分开的 < version> = &lt;image> 对。例如 3.5.0=registry.redhat.io/amq-streams/kafka-35-rhel8:2.6.0, 3.6.0=registry.redhat.io/amq-streams/kafka-36-rhel8:2.6.0。当指定了属性 Kafka.spec.kafka.version 但没有在 Kafka 资源的 Kafka.spec.kafka.image 时使用这个。
STRIMZI_DEFAULT_KAFKA_INIT_IMAGE
可选,默认 registry.redhat.io/amq-streams/strimzi-rhel8-operator:2.6.0。如果没有将镜像指定为 Kafka 资源中的 kafka-init-image,则用作 init 容器的镜像名称。init 容器在代理进行初始配置工作之前启动,如机架支持。
STRIMZI_KAFKA_CONNECT_IMAGES
必需。从 Kafka 版本到该版本的 Kafka Connect 的对应 Docker 镜像的映射。所需的语法为空格或用逗号分开的 < version> = &lt;image> 对。例如 3.5.0=registry.redhat.io/amq-streams/kafka-35-rhel8:2.6.0, 3.6.0=registry.redhat.io/amq-streams/kafka-36-rhel8:2.6.0。当指定 KafkaConnect.spec.version 属性而不是 KafkaConnect.spec.image 时,这会被使用。
STRIMZI_KAFKA_MIRROR_MAKER_IMAGES
必需。从 Kafka 版本到该版本的 MirrorMaker 的对应 Docker 镜像的映射。所需的语法为空格或用逗号分开的 < version> = &lt;image> 对。例如 3.5.0=registry.redhat.io/amq-streams/kafka-35-rhel8:2.6.0, 3.6.0=registry.redhat.io/amq-streams/kafka-36-rhel8:2.6.0。当指定 KafkaMirrorMaker.spec.version 属性而不是 KafkaMirrorMaker.spec.image 时,这会被使用。
STRIMZI_DEFAULT_TOPIC_OPERATOR_IMAGE
可选,默认 registry.redhat.io/amq-streams/strimzi-rhel8-operator:2.6.0。如果没有将镜像指定为 Kafka.spec.entityOperator.topicOperator.image 中的 Kafka.spec.entityOperator.image,则部署主题 Operator 时 用作默认 镜像名称。
STRIMZI_DEFAULT_USER_OPERATOR_IMAGE
可选,默认 registry.redhat.io/amq-streams/strimzi-rhel8-operator:2.6.0。如果没有将镜像指定为 Kafka.spec.entityOperator.userOperator.image 中的 Kafka.spec.entityOperator.image,则部署 User Operator 时要使用的 镜像名称。
STRIMZI_DEFAULT_TLS_SIDECAR_ENTITY_OPERATOR_IMAGE
可选,默认 registry.redhat.io/amq-streams/kafka-36-rhel8:2.6.0。如果没有将镜像指定为 Kafka.spec.entityOperator.tlsSidecar.image 中的 Kafka.spec.entityOperator.tlsSidecar.image 时,用作实体 Operator 的 sidecar 容器的默认值。sidecar 提供 TLS 支持。
STRIMZI_IMAGE_PULL_POLICY
可选。应用到由 Cluster Operator 管理的所有 pod 中的容器的 ImagePullPolicy。有效值为 Always、ifNotP resent 和 Never。如果未指定,则使用 OpenShift 默认值。更改策略将导致对所有 Kafka、Kafka Connect 和 Kafka MirrorMaker 集群进行滚动更新。
STRIMZI_IMAGE_PULL_SECRETS
可选。以逗号分隔的 Secret 名称列表。此处引用的 secret 包含拉取容器镜像的容器 registry 的凭证。secret 在 Cluster Operator 创建的所有 pod 的 imagePullSecrets 属性中指定。更改此列表会导致所有 Kafka、Kafka Connect 和 Kafka MirrorMaker 集群进行滚动更新。
STRIMZI_KUBERNETES_VERSION

可选。覆盖从 API 服务器检测到的 OpenShift 版本信息。

OpenShift 版本覆盖配置示例

env:
  - name: STRIMZI_KUBERNETES_VERSION
    value: |
           major=1
           minor=16
           gitVersion=v1.16.2
           gitCommit=c97fe5036ef3df2967d086711e6c0c405941e14b
           gitTreeState=clean
           buildDate=2019-10-15T19:09:08Z
           goVersion=go1.12.10
           compiler=gc
           platform=linux/amd64

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

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 资源,并忽略其他自定义资源(KafkaKafkaConnect 等)的更改。此模式可用于确保在需要时重新创建 pod,但不会对集群进行其他更改。
STRIMZI_FEATURE_GATES
可选。启用或禁用由 功能门控制的功能。
STRIMZI_POD_SECURITY_PROVIDER_CLASS
可选。可插拔的 PodSecurityProvider 类配置,可用于为 Pod 和容器提供安全上下文配置。

8.5.1. 使用网络策略限制对 Cluster Operator 的访问

使用 STRIMZI_OPERATOR_NAMESPACE_LABELS 环境变量,使用命名空间标签为 Cluster Operator 建立网络策略。

Cluster Operator 可以在与它管理的资源或单独的命名空间中运行。默认情况下,STRIMZI_OPERATOR_NAMESPACE 环境变量配置为使用 Downward API 来查找 Cluster Operator 运行的命名空间。如果 Cluster Operator 在与资源相同的命名空间中运行,则 AMQ Streams 只需要本地访问并被 AMQ Streams 允许。

如果 Cluster Operator 在一个独立的命名空间中运行,则 OpenShift 集群中的所有命名空间都可以访问 Cluster Operator,除非配置了网络策略。通过添加命名空间标签,对 Cluster Operator 的访问仅限于指定的命名空间。

为 Cluster Operator 部署配置的网络策略

#...
env:
  # ...
  - name: STRIMZI_OPERATOR_NAMESPACE_LABELS
    value: label1=value1,label2=value2
  #...

8.5.2. 配置 Cluster Operator 的定期协调

使用 STRIMZI_FULL_RECONCILIATION_INTERVAL_MS 变量设置 Cluster Operator 定期协调的时间间隔。将其值替换为所需间隔(以毫秒为单位)。

为 Cluster Operator 部署配置的协调周期

#...
env:
  # ...
  - name: STRIMZI_FULL_RECONCILIATION_INTERVAL_MS
    value: "120000"
  #...

Cluster Operator 对从 OpenShift 集群接收的适用集群资源的所有通知做出反应。如果 Operator 没有运行,或者因为某种原因没有收到通知,资源将与正在运行的 OpenShift 集群的状态不同步。为了正确处理故障转移,Cluster Operator 会执行定期协调过程,以便它可以将资源的状态与当前集群部署进行比较,以便在所有环境中具有一致的状态。

其他资源

8.5.3. 使用领导选举机制运行多个 Cluster Operator 副本

默认 Cluster Operator 配置可让领导选举机制运行 Cluster Operator 的多个并行副本。一个副本被选为活跃领导值,并运行部署的资源。其他副本以待机模式运行。当领导机停止或失败时,其中一个备用副本被选为新的领导,并开始操作部署的资源。

默认情况下,AMQ Streams 使用单个 Cluster Operator 副本运行,该副本始终是领导副本。当单个 Cluster Operator 副本停止或失败时,OpenShift 会启动新的副本。

运行具有多个副本的 Cluster Operator 并不是必须的。但是,在出现重大故障导致的大规模中断时,在待机时具有副本非常有用。例如,假设多个 worker 节点或整个可用区失败。故障可能会导致 Cluster Operator pod 和许多 Kafka pod 同时停机。如果后续 pod 调度会导致缺少资源,这可能会在运行单个 Cluster Operator 时延迟操作。

8.5.3.1. 为 Cluster Operator 副本启用领导选举机制

在运行额外的 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.namespace
STRIMZI_LEADER_ELECTION_IDENTITY

启用领导选举机制时需要。配置在领导选举过程中使用的给定 Cluster Operator 实例的身份。每个 operator 实例的身份必须是唯一的。您可以使用 Downward API 将其配置为部署 Cluster Operator 的 pod 的名称。

env:
  - name: STRIMZI_LEADER_ELECTION_IDENTITY
    valueFrom:
      fieldRef:
        fieldPath: metadata.name
STRIMZI_LEADER_ELECTION_LEASE_DURATION_MS
可选,默认为 15000 ms。指定获取租期的有效持续时间。
STRIMZI_LEADER_ELECTION_RENEW_DEADLINE_MS
可选,默认为 10000 ms。指定领导机应尝试保持领导状态的期间。
STRIMZI_LEADER_ELECTION_RETRY_PERIOD_MS
可选,默认为 2000 ms。指定领导对租期锁定的更新频率。

8.5.3.2. 配置 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

领导选举机制具有自己的 ClusterRoleRoleBinding RBAC 资源,这些资源以 Cluster Operator 运行的命名空间为目标,而不是其监视的命名空间。

默认部署配置在与 Cluster Operator 相同的命名空间中创建一个名为 strimzi-cluster-operatorLease 资源。Cluster Operator 使用租期来管理领导选举机制。RBAC 资源提供使用 Lease 资源的权限。如果您使用不同的 Lease 名称或命名空间,请相应地更新 ClusterRoleRoleBinding 文件。

先决条件

  • 您需要具有创建和管理 CustomResourceDefinition 和 RBAC (ClusterRoleRoleBinding和 RoleBinding )资源的权限的帐户。

流程

编辑用于部署 Cluster Operator 的 Deployment 资源,该资源在 060-Deployment-strimzi-cluster-operator.yaml 文件中定义。

  1. replicas 属性从默认值(1)更改为与所需副本数匹配的值。

    增加 Cluster Operator 副本数

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: strimzi-cluster-operator
      labels:
        app: strimzi
    spec:
      replicas: 3

  2. 检查领导选举 env 属性是否已设置。

    如果没有设置,请配置它们。

    要启用领导选举机制,STRIMZI_LEADER_ELECTION_ENABLED 必须设置为 true (默认)。

    在本例中,租期的名称被改为 my-strimzi-cluster-operator

    为 Cluster Operator 配置领导选举环境变量

    # ...
    spec
      containers:
        - name: strimzi-cluster-operator
          # ...
          env:
            - name: STRIMZI_LEADER_ELECTION_ENABLED
              value: "true"
            - name: STRIMZI_LEADER_ELECTION_LEASE_NAME
              value: "my-strimzi-cluster-operator"
            - name: STRIMZI_LEADER_ELECTION_LEASE_NAMESPACE
                valueFrom:
                  fieldRef:
                    fieldPath: metadata.namespace
            - name: STRIMZI_LEADER_ELECTION_IDENTITY
                valueFrom:
                  fieldRef:
                    fieldPath: metadata.name

    有关可用环境变量的描述,请参阅 第 8.5.3.1 节 “为 Cluster Operator 副本启用领导选举机制”

    如果您为领导选举机制中使用的 Lease 资源指定了不同的名称或命名空间,请更新 RBAC 资源。

  3. (可选)在 022-ClusterRole-strimzi-cluster-operator-role.yaml 文件中编辑 ClusterRole 资源。

    使用 Lease 资源的名称更新 resourceNames

    更新对租期的 ClusterRole 引用

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: strimzi-cluster-operator-leader-election
      labels:
        app: strimzi
    rules:
      - apiGroups:
          - coordination.k8s.io
        resourceNames:
          - my-strimzi-cluster-operator
    # ...

  4. (可选)在 022-RoleBinding-strimzi-cluster-operator.yaml 文件中编辑 RoleBinding 资源。

    使用 Lease 资源的名称以及创建的命名空间更新 subjects.namesubjects.namespace

    更新对租期的 RoleBinding 引用

    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: strimzi-cluster-operator-leader-election
      labels:
        app: strimzi
    subjects:
      - kind: ServiceAccount
        name: my-strimzi-cluster-operator
        namespace: myproject
    # ...

  5. 部署 Cluster Operator:

    oc create -f install/cluster-operator -n myproject
  6. 检查部署的状态:

    oc get deployments -n myproject

    输出显示部署名称和就绪

    NAME                      READY  UP-TO-DATE  AVAILABLE
    strimzi-cluster-operator  3/3    3           3

    READY 显示就绪/预期的副本数。当 AVAILABLE 输出显示正确的副本数时,部署可以成功。

8.5.4. 配置 Cluster Operator HTTP 代理设置

如果您在 HTTP 代理后运行 Kafka 集群,您仍然可以在集群内和移出数据。例如,您可以使用连接器运行 Kafka Connect,该连接器从代理外部推送和拉取镜像。或者,您可以使用代理与授权服务器连接。

配置 Cluster Operator 部署来指定代理环境变量。Cluster Operator 接受标准代理配置(HTTP_PROXYHTTPS_PROXYNO_PROXY)作为环境变量。代理设置应用到所有 AMQ Streams 容器。

代理地址的格式为 http://<ip_address>:<port_number>。要使用名称和密码设置代理,格式为 http://<username>:<password>@<ip-address>:<port_number>。

先决条件

  • 您需要具有创建和管理 CustomResourceDefinition 和 RBAC (ClusterRoleRoleBinding和 RoleBinding )资源的权限的帐户。

流程

  1. 要在 Cluster Operator 中添加代理环境变量,请更新其部署配置 (install/cluster-operator/060-Deployment-strimzi-cluster-operator.yaml)。

    Cluster Operator 的代理配置示例

    apiVersion: apps/v1
    kind: Deployment
    spec:
      # ...
      template:
        spec:
          serviceAccountName: strimzi-cluster-operator
          containers:
            # ...
            env:
            # ...
            - name: "HTTP_PROXY"
              value: "http://proxy.com" 1
            - name: "HTTPS_PROXY"
              value: "https://proxy.com" 2
            - name: "NO_PROXY"
              value: "internal.com, other.domain.com" 3
      # ...

    1
    代理服务器的地址。
    2
    代理服务器的安全地址。
    3
    直接作为代理服务器例外访问的服务器地址。URL 用逗号分开。

    或者,直接编辑 Deployment

    oc edit deployment strimzi-cluster-operator
  2. 如果您更新了 YAML 文件而不是直接编辑 Deployment,请应用更改:

    oc create -f install/cluster-operator/060-Deployment-strimzi-cluster-operator.yaml

8.5.5. 使用 Cluster Operator 配置禁用 FIPS 模式

在启用了 FIPS 的 OpenShift 集群中运行时,AMQ Streams 会自动切换到 FIPS 模式。通过在 Cluster Operator 的部署配置 中禁用 FIPS_MODE 环境变量来禁用 FIPS 模式。禁用 FIPS 模式后,AMQ Streams 会在 OpenJDK 中为所有组件自动禁用 FIPS。禁用 FIPS 模式后,AMQ Streams 不兼容 FIPS。AMQ Streams operator 以及所有操作对象都相同,就像在启用了 FIPS 的 OpenShift 集群中运行的一样。

流程

  1. 要在 Cluster Operator 中禁用 FIPS 模式,更新其部署配置install/cluster-operator/060-Deployment-strimzi-cluster-operator.yaml) 并增加 FIPS_MODE 环境变量。

    Cluster Operator 的 FIPS 配置示例

    apiVersion: apps/v1
    kind: Deployment
    spec:
      # ...
      template:
        spec:
          serviceAccountName: strimzi-cluster-operator
          containers:
            # ...
            env:
            # ...
            - name: "FIPS_MODE"
              value: "disabled" 1
      # ...

    1
    禁用 FIPS 模式。

    或者,直接编辑 Deployment

    oc edit deployment strimzi-cluster-operator
  2. 如果您更新了 YAML 文件而不是直接编辑 Deployment,请应用更改:

    oc apply -f install/cluster-operator/060-Deployment-strimzi-cluster-operator.yaml
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.