第 6 章 使用安装工件部署 AMQ Streams


为 AMQ Streams 部署准备了您的环境,您可以将 AMQ Streams 部署到 OpenShift 集群。您可以使用随发行工件提供的部署文件。

使用部署文件创建 Kafka 集群

另外,您可以根据要求部署以下 Kafka 组件:

AMQ Streams 基于 Strimzi 0.29.x。您可以将 AMQ Streams 2.2 部署到 OpenShift 4.8 到 4.11。

注意

要运行本指南中的命令,您的集群用户必须具有管理基于角色的访问控制(RBAC)和 CRD 的权限。

6.1. 创建 Kafka 集群

要使用 Cluster Operator 管理 Kafka 集群,您必须将其部署为 Kafka 资源。AMQ Streams 提供示例部署文件来执行此操作。您可以使用这些文件同时部署主题 Operator 和 User Operator。

如果您还没有将 Kafka 集群部署为 Kafka 资源,则无法使用 Cluster Operator 来管理它。这适用于在 OpenShift 外部运行的 Kafka 集群。但是,您可以部署和使用主题 Operator 和用户 Operator 作为独立组件。

注意

Cluster Operator 可以监控 OpenShift 集群中的一个、多个或所有命名空间。Topic Operator 和 User Operator 会监视单一命名空间中的 KafkaTopicKafkaUser 资源。如需更多信息,请参阅 使用 AMQ Streams operator 观察命名空间

如果要使用由 AMQ Streams 管理的 Kafka 集群的 Topic Operator 和 User Operator,请执行这些部署步骤。

6.1.2. 部署独立主题 Operator 和用户 Operator

如果要使用不由 AMQ Streams 管理的 Kafka 集群的 Topic Operator 和 User Operator,请执行 这些部署步骤。

6.1.3. 部署 Cluster Operator

Cluster Operator 负责在 OpenShift 集群中部署和管理 Apache Kafka 集群。

本节中的步骤描述了如何部署 Cluster Operator 来监控以下之一:

6.1.3.1. 观察 Cluster Operator 部署的选项

当 Cluster Operator 运行时,它会开始 监视 Kafka 资源更新。

您可以选择部署 Cluster Operator 来监控 Kafka 资源:

  • 单个命名空间(包含 Cluster Operator 的命名空间)
  • 多个命名空间
  • 所有命名空间
注意

AMQ Streams 提供了示例 YAML 文件,以简化部署过程。

Cluster Operator 监视以下资源的更改:

  • Kafka 集群的 Kafka。
  • Kafka Connect 集群的 KafkaConnect。
  • 用于在 Kafka Connect 集群中创建和管理连接器的 KafkaConnector
  • Kafka MirrorMaker 实例的 KafkaMirrorMaker。
  • KafkaMirrorMaker2 用于 Kafka MirrorMaker 2.0 实例。
  • Kafka Bridge 实例的 KafkaBridge。
  • KafkaRebalance 用于 Cruise Control 优化请求。

当在 OpenShift 集群中创建这些资源时,Operator 会从资源获取集群描述,并通过创建必要的 OpenShift 资源(如 StatefulSets、Service 和 ConfigMap)来开始为资源创建新集群。

每次更新 Kafka 资源时,Operator 都会对组成资源的 OpenShift 资源执行对应的更新。

资源可以修补或删除,然后重新创建资源以便让该资源显示集群状态。此操作可能会导致滚动更新造成服务中断。

删除资源时,操作器会取消部署集群并删除所有相关的 OpenShift 资源。

此流程演示了如何部署 Cluster Operator 来监控 OpenShift 集群中的单个命名空间中的 AMQ Streams 资源。

先决条件

  • 此流程需要使用 OpenShift 用户帐户来创建 CustomResourceDefinitionsClusterRolesClusterRoleBindings。在 OpenShift 集群中使用 Role Base Access Control (RBAC)通常意味着创建、编辑和删除这些资源的权限仅限于 OpenShift 集群管理员,如 system:admin

流程

  1. 编辑 AMQ Streams 安装文件,以使用 Cluster Operator 将要安装到的命名空间。

    例如,在此流程中,Cluster Operator 安装到命名空间 < my_cluster_operator_namespace > 中。

    在 Linux 上,使用:

    sed -i 's/namespace: .*/namespace: <my_cluster_operator_namespace>/' install/cluster-operator/*RoleBinding*.yaml
    Copy to Clipboard Toggle word wrap

    在 MacOS 上,使用:

    sed -i '' 's/namespace: .*/namespace: <my_cluster_operator_namespace>/' install/cluster-operator/*RoleBinding*.yaml
    Copy to Clipboard Toggle word wrap
  2. 部署 Cluster Operator:

    oc create -f install/cluster-operator -n <my_cluster_operator_namespace>
    Copy to Clipboard Toggle word wrap
  3. 检查部署的状态:

    oc get deployments -n <my_cluster_operator_namespace>
    Copy to Clipboard Toggle word wrap

    输出显示了部署名称和就绪状态

    NAME                      READY  UP-TO-DATE  AVAILABLE
    strimzi-cluster-operator  1/1    1           1
    Copy to Clipboard Toggle word wrap

    READY 显示 ready/expected 的副本数量。当 AVAILABLE 输出显示为 1 时,部署成功。

此流程演示了如何部署 Cluster Operator 来监控 OpenShift 集群中的多个命名空间之间的 AMQ Streams 资源。

先决条件

  • 此流程需要使用 OpenShift 用户帐户来创建 CustomResourceDefinitionsClusterRolesClusterRoleBindings。在 OpenShift 集群中使用 Role Base Access Control (RBAC)通常意味着创建、编辑和删除这些资源的权限仅限于 OpenShift 集群管理员,如 system:admin

流程

  1. 编辑 AMQ Streams 安装文件,以使用 Cluster Operator 将要安装到的命名空间。

    例如,在此流程中,Cluster Operator 安装到命名空间 < my_cluster_operator_namespace > 中。

    在 Linux 上,使用:

    sed -i 's/namespace: .*/namespace: <my_cluster_operator_namespace>/' install/cluster-operator/*RoleBinding*.yaml
    Copy to Clipboard Toggle word wrap

    在 MacOS 上,使用:

    sed -i '' 's/namespace: .*/namespace: <my_cluster_operator_namespace>/' install/cluster-operator/*RoleBinding*.yaml
    Copy to Clipboard Toggle word wrap
  2. 编辑 install/cluster-operator/060-Deployment-strimzi-cluster-operator.yaml 文件,以添加 Cluster Operator 将监视到 STRIMZI_NAMESPACE 环境变量的所有命名空间列表。

    例如,在此流程中,Cluster Operator 将监控命名空间 watched-namespace-1watched-namespace-2watched-namespace-3

    apiVersion: apps/v1
    kind: Deployment
    spec:
      # ...
      template:
        spec:
          serviceAccountName: strimzi-cluster-operator
          containers:
          - name: strimzi-cluster-operator
            image: registry.redhat.io/amq7/amq-streams-rhel8-operator:2.2.2
            imagePullPolicy: IfNotPresent
            env:
            - name: STRIMZI_NAMESPACE
              value: watched-namespace-1,watched-namespace-2,watched-namespace-3
    Copy to Clipboard Toggle word wrap
  3. 对于每个命名空间,安装 RoleBindings

    在这个示例中,将这些命令的 watched-namespace 替换为在前一步中列出的命名空间,为 watched-namespace-1, watched-namespace-2, watched-namespace-3 重复这个操作:

    oc create -f install/cluster-operator/020-RoleBinding-strimzi-cluster-operator.yaml -n <watched_namespace>
    oc create -f install/cluster-operator/031-RoleBinding-strimzi-cluster-operator-entity-operator-delegation.yaml -n <watched_namespace>
    Copy to Clipboard Toggle word wrap
  4. 部署 Cluster Operator:

    oc create -f install/cluster-operator -n <my_cluster_operator_namespace>
    Copy to Clipboard Toggle word wrap
  5. 检查部署的状态:

    oc get deployments -n <my_cluster_operator_namespace>
    Copy to Clipboard Toggle word wrap

    输出显示了部署名称和就绪状态

    NAME                      READY  UP-TO-DATE  AVAILABLE
    strimzi-cluster-operator  1/1    1           1
    Copy to Clipboard Toggle word wrap

    READY 显示 ready/expected 的副本数量。当 AVAILABLE 输出显示为 1 时,部署成功。

此流程演示了如何部署 Cluster Operator,以便在 OpenShift 集群的所有命名空间中监视 AMQ Streams 资源。

在这种模式中运行时,Cluster Operator 会自动管理创建的任何新命名空间中的集群。

先决条件

  • 此流程需要使用 OpenShift 用户帐户来创建 CustomResourceDefinitionsClusterRolesClusterRoleBindings。在 OpenShift 集群中使用 Role Base Access Control (RBAC)通常意味着创建、编辑和删除这些资源的权限仅限于 OpenShift 集群管理员,如 system:admin

流程

  1. 编辑 AMQ Streams 安装文件,以使用 Cluster Operator 将要安装到的命名空间。

    例如,在此流程中,Cluster Operator 安装到命名空间 < my_cluster_operator_namespace > 中。

    在 Linux 上,使用:

    sed -i 's/namespace: .*/namespace: <my_cluster_operator_namespace>/' install/cluster-operator/*RoleBinding*.yaml
    Copy to Clipboard Toggle word wrap

    在 MacOS 上,使用:

    sed -i '' 's/namespace: .*/namespace: <my_cluster_operator_namespace>/' install/cluster-operator/*RoleBinding*.yaml
    Copy to Clipboard Toggle word wrap
  2. 编辑 install/cluster-operator/060-Deployment-strimzi-cluster-operator.yaml 文件,将 STRIMZI_NAMESPACE 环境变量的值设置为 *

    apiVersion: apps/v1
    kind: Deployment
    spec:
      # ...
      template:
        spec:
          # ...
          serviceAccountName: strimzi-cluster-operator
          containers:
          - name: strimzi-cluster-operator
            image: registry.redhat.io/amq7/amq-streams-rhel8-operator:2.2.2
            imagePullPolicy: IfNotPresent
            env:
            - name: STRIMZI_NAMESPACE
              value: "*"
            # ...
    Copy to Clipboard Toggle word wrap
  3. 创建 ClusterRoleBindings,为 Cluster Operator 的所有命名空间授予集群范围的访问权限。

    oc create clusterrolebinding strimzi-cluster-operator-namespaced --clusterrole=strimzi-cluster-operator-namespaced --serviceaccount <my_cluster_operator_namespace>:strimzi-cluster-operator
    oc create clusterrolebinding strimzi-cluster-operator-entity-operator-delegation --clusterrole=strimzi-entity-operator --serviceaccount <my_cluster_operator_namespace>:strimzi-cluster-operator
    Copy to Clipboard Toggle word wrap

    <my_cluster_operator_namespace > 替换为您要安装 Cluster Operator 的命名空间。

  4. 将 Cluster Operator 部署到您的 OpenShift 集群。

    oc create -f install/cluster-operator -n <my_cluster_operator_namespace>
    Copy to Clipboard Toggle word wrap
  5. 检查部署的状态:

    oc get deployments -n <my_cluster_operator_namespace>
    Copy to Clipboard Toggle word wrap

    输出显示了部署名称和就绪状态

    NAME                      READY  UP-TO-DATE  AVAILABLE
    strimzi-cluster-operator  1/1    1           1
    Copy to Clipboard Toggle word wrap

    READY 显示 ready/expected 的副本数量。当 AVAILABLE 输出显示为 1 时,部署成功。

6.1.4. 部署 Kafka

Apache Kafka 是一个开源分布式发布订阅消息传递系统,用于容错实时数据源。

本节中的步骤描述以下内容:

安装 Kafka 时,AMQ Streams 还会安装 ZooKeeper 集群,并添加与 ZooKeeper 连接 Kafka 所需的配置。

6.1.4.1. 部署 Kafka 集群

此流程演示了如何使用 Cluster Operator 将 Kafka 集群部署到 OpenShift 集群。

部署使用 YAML 文件来提供创建 Kafka 资源的规格。

AMQ Streams 提供示例配置文件。对于 Kafka 部署,提供了以下示例:

kafka-persistent.yaml
使用三个 ZooKeeper 和三个 Kafka 节点部署持久集群。
kafka-jbod.yaml
使用三个 ZooKeeper 和三个 Kafka 节点(每个都使用多个持久性卷)部署持久集群。
kafka-persistent-single.yaml
使用单个 ZooKeeper 节点和单个 Kafka 节点部署持久集群。
kafka-ephemeral.yaml
使用三个 ZooKeeper 和三个 Kafka 节点部署临时集群。
kafka-ephemeral-single.yaml
使用三个 ZooKeeper 节点和一个 Kafka 节点部署临时集群。

在此过程中,我们使用示例进行 临时和 持久 Kafka 集群部署。

临时集群
通常,一个临时(或临时) Kafka 集群适合开发和测试目的,不适用于生产环境。此部署使用 emptyDir 卷来存储代理信息(对于 ZooKeeper)和主题或分区(用于 Kafka)。使用 emptyDir 卷意味着其内容严格与 pod 生命周期相关,并在 pod 发生故障时删除。
持久性集群

持久性 Kafka 集群使用持久性卷来存储 ZooKeeper 和 Kafka 数据。使用 PersistentVolumeClaim 来获取 PersistentVolume,使其独立于 PersistentVolume 的实际类型。PersistentVolumeClaim 可以使用 StorageClass 来触发自动卷置备。如果没有指定 StorageClass,OpenShift 将尝试使用默认的 StorageClass

以下示例显示了一些常见持久性卷类型:

  • 如果您的 OpenShift 集群在 Amazon AWS 上运行,OpenShift 可以置备 Amazon EBS 卷
  • 如果 OpenShift 集群在 Microsoft Azure 上运行,OpenShift 可以置备 Azure Disk Storage 卷
  • 如果 OpenShift 集群在 Google Cloud 上运行,OpenShift 可以置备 Persistent Disk 卷
  • 如果 OpenShift 集群在裸机上运行,OpenShift 可以置备本地持久性卷

示例 YAML 文件指定支持的最新 Kafka 版本,以及其支持的日志消息格式版本和 inter-broker 协议版本的配置。Kafka configinter.broker.protocol.version 属性必须是指定的 Kafka 版本 (spec.kafka.version) 支持的版本。属性表示 Kafka 集群中使用的 Kafka 协议版本。

从 Kafka 3.0.0,当 inter.broker.protocol.version 设置为 3.0 或更高版本时,logging.message.format.version 选项会被忽略,不需要设置。

升级 Kafka 时需要对 inter.broker.protocol.version 的更新。

示例集群默认命名为 my-cluster。集群名称由资源名称定义,在部署集群后无法更改。要在部署集群前更改集群名称,请编辑相关 YAML 文件中的 Kafka 资源的 Kafka.metadata.name 属性。

默认集群名称和指定的 Kafka 版本

apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
  name: my-cluster
spec:
  kafka:
    version: 3.2.3
    #...
    config:
      #...
      log.message.format.version: "3.2"
      inter.broker.protocol.version: "3.2"
  # ...
Copy to Clipboard Toggle word wrap

流程

  1. 创建和部署 临时或 持久的 集群。

    对于开发或测试,您可能需要使用临时集群。您可以随时使用持久的集群。

    • 创建和部署 临时 集群:

      oc apply -f examples/kafka/kafka-ephemeral.yaml
      Copy to Clipboard Toggle word wrap
    • 创建和部署 持久 集群:

      oc apply -f examples/kafka/kafka-persistent.yaml
      Copy to Clipboard Toggle word wrap
  2. 检查部署的状态:

    oc get pods -n <my_cluster_operator_namespace>
    Copy to Clipboard Toggle word wrap

    输出显示了 pod 名称和就绪度

    NAME                        READY   STATUS    RESTARTS
    my-cluster-entity-operator  3/3     Running   0
    my-cluster-kafka-0          1/1     Running   0
    my-cluster-kafka-1          1/1     Running   0
    my-cluster-kafka-2          1/1     Running   0
    my-cluster-zookeeper-0      1/1     Running   0
    my-cluster-zookeeper-1      1/1     Running   0
    my-cluster-zookeeper-2      1/1     Running   0
    Copy to Clipboard Toggle word wrap

    my-cluster 是 Kafka 集群的名称。

    使用默认部署,您要安装一个 Entity Operator 集群、3 Kafka pod 和 3 ZooKeeper pod。

    READY 显示 ready/expected 的副本数量。当 STATUS 显示为 Running 时,部署成功。

6.1.4.2. 使用 Cluster Operator 部署 Topic Operator

此流程描述了如何使用 Cluster Operator 部署主题 Operator。

您可以配置 Kafka 资源的 entityOperator 属性,使其包含 topicOperator。默认情况下,Topic Operator 会监视 Cluster Operator 部署的 Kafka 集群命名空间中的 KafkaTopic 资源。您还可以使用 Topic Operator spec 中的 watchedNamespace 指定一个命名空间。单个主题 Operator 可以监视单个命名空间。只应一个命名空间监视一个主题 Operator。

如果您使用 AMQ Streams 将多个 Kafka 集群部署到同一命名空间中,请只将一个 Kafka 集群启用 Topic Operator,或使用 watchedNamespace 属性来配置主题 Operator 以观察其他命名空间。

如果要将 topics Operator 与由 AMQ Streams 管理的 Kafka 集群一起使用,则必须将 Topic Operator 部署为独立组件

有关配置 entityOperatortopicOperator 属性的更多信息,请参阅配置 Entity Operator

流程

  1. 编辑 Kafka 资源的 entityOperator 属性,使其包含 topicOperator

    apiVersion: kafka.strimzi.io/v1beta2
    kind: Kafka
    metadata:
      name: my-cluster
    spec:
      #...
      entityOperator:
        topicOperator: {}
        userOperator: {}
    Copy to Clipboard Toggle word wrap
  2. 根据 EntityTopicOperatorSpec schema reference 中介绍的属性配置 Topic Operator spec

    如果您希望所有属性使用它们的默认值,请使用空对象({})。

  3. 创建或更新资源:

    使用 oc apply:

    oc apply -f <kafka_configuration_file>
    Copy to Clipboard Toggle word wrap
  4. 检查部署的状态:

    oc get pods -n <my_cluster_operator_namespace>
    Copy to Clipboard Toggle word wrap

    输出显示了 pod 名称和就绪度

    NAME                        READY   STATUS    RESTARTS
    my-cluster-entity-operator  3/3     Running   0
    # ...
    Copy to Clipboard Toggle word wrap

    my-cluster 是 Kafka 集群的名称。

    READY 显示 ready/expected 的副本数量。当 STATUS 显示为 Running 时,部署成功。

6.1.4.3. 使用 Cluster Operator 部署 User Operator

此流程描述了如何使用 Cluster Operator 部署 User Operator。

您可以配置 Kafka 资源的 entityOperator 属性,使其包含 userOperator。默认情况下,User Operator 会监视 Kafka 集群部署命名空间中的 KafkaUser 资源。您还可以使用 User Operator spec 中的 watchedNamespace 指定命名空间。单个用户 Operator 可以监视单个命名空间。只应该只监视一个用户 Operator 的命名空间。

如果要将 User Operator 与 AMQ Streams 管理的 Kafka 集群一起使用,则必须将 User Operator 部署为独立组件

有关配置 entityOperatoruserOperator 属性的更多信息,请参阅配置 Entity Operator

流程

  1. 编辑 Kafka 资源的 entityOperator 属性,使其包含 userOperator

    apiVersion: kafka.strimzi.io/v1beta2
    kind: Kafka
    metadata:
      name: my-cluster
    spec:
      #...
      entityOperator:
        topicOperator: {}
        userOperator: {}
    Copy to Clipboard Toggle word wrap
  2. 根据 EntityUserOperatorSpec schema reference 中介绍的属性配置User Operator spec

    如果您希望所有属性使用它们的默认值,请使用空对象({})。

  3. 创建或更新资源:

    oc apply -f <kafka_configuration_file>
    Copy to Clipboard Toggle word wrap
  4. 检查部署的状态:

    oc get pods -n <my_cluster_operator_namespace>
    Copy to Clipboard Toggle word wrap

    输出显示了 pod 名称和就绪度

    NAME                        READY   STATUS    RESTARTS
    my-cluster-entity-operator  3/3     Running   0
    # ...
    Copy to Clipboard Toggle word wrap

    my-cluster 是 Kafka 集群的名称。

    READY 显示 ready/expected 的副本数量。当 STATUS 显示为 Running 时,部署成功。

6.1.5. AMQ Streams Operator 的替代独立部署选项

您可以对 Topic Operator 和 User Operator 执行独立部署。如果您使用不由 Cluster Operator 管理的 Kafka 集群,请考虑对这些 Operator 的独立部署。

您将操作器部署到 OpenShift。Kafka 可以在 OpenShift 外部运行。例如,您可以使用 Kafka 作为受管服务。您可以调整独立 Operator 的部署配置以匹配 Kafka 集群的地址。

6.1.5.1. 部署独立主题 Operator

此流程演示了如何将主题 Operator 部署为主题管理的独立组件。您可以将独立主题 Operator 与不由 Cluster Operator 管理的 Kafka 集群一起使用。

独立部署可以与任何 Kafka 集群操作。

独立部署文件随 AMQ Streams 提供。使用 05-Deployment-strimzi-topic-operator.yaml 部署文件来部署主题 Operator。添加或设置在 Kafka 集群建立连接所需的环境变量。

Topic Operator 会监视单个命名空间中的 KafkaTopic 资源。您可以在主题 Operator 配置中指定要监视的命名空间,以及到 Kafka 集群的连接。单个主题 Operator 可以监视单个命名空间。只应一个命名空间监视一个主题 Operator。如果要使用多个主题 Operator,请将每个主题配置为监视不同的命名空间。这样,您可以在多个 Kafka 集群中使用主题 Operator。

先决条件

  • 您正在运行一个 Kafka 集群,以便主题 Operator 要连接。

    只要独立主题 Operator 配置了连接,因此 Kafka 集群可以在裸机环境、虚拟机或受管云应用程序服务上运行。

流程

  1. 编辑 install/topic-operator/05-Deployment-strimzi-topic-operator.yaml 独立部署文件中的 env 属性。

    独立主题 Operator 部署配置示例

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: strimzi-topic-operator
      labels:
        app: strimzi
    spec:
      # ...
      template:
        # ...
        spec:
          # ...
          containers:
            - name: strimzi-topic-operator
              # ...
              env:
                - name: STRIMZI_NAMESPACE 
    1
    
                  valueFrom:
                    fieldRef:
                      fieldPath: metadata.namespace
                - name: STRIMZI_KAFKA_BOOTSTRAP_SERVERS 
    2
    
                  value: my-kafka-bootstrap-address:9092
                - name: STRIMZI_RESOURCE_LABELS 
    3
    
                  value: "strimzi.io/cluster=my-cluster"
                - name: STRIMZI_ZOOKEEPER_CONNECT 
    4
    
                  value: my-cluster-zookeeper-client:2181
                - name: STRIMZI_ZOOKEEPER_SESSION_TIMEOUT_MS 
    5
    
                  value: "18000"
                - name: STRIMZI_FULL_RECONCILIATION_INTERVAL_MS 
    6
    
                  value: "120000"
                - name: STRIMZI_TOPIC_METADATA_MAX_ATTEMPTS 
    7
    
                  value: "6"
                - name: STRIMZI_LOG_LEVEL 
    8
    
                  value: INFO
                - name: STRIMZI_TLS_ENABLED 
    9
    
                  value: "false"
                - name: STRIMZI_JAVA_OPTS 
    10
    
                  value: "-Xmx=512M -Xms=256M"
                - name: STRIMZI_JAVA_SYSTEM_PROPERTIES 
    11
    
                  value: "-Djavax.net.debug=verbose -DpropertyName=value"
                - name: STRIMZI_PUBLIC_CA 
    12
    
                  value: "false"
                - name: STRIMZI_TLS_AUTH_ENABLED 
    13
    
                  value: "false"
                - name: STRIMZI_SASL_ENABLED 
    14
    
                  value: "false"
                - name: STRIMZI_SASL_USERNAME 
    15
    
                  value: "admin"
                - name: STRIMZI_SASL_PASSWORD 
    16
    
                  value: "password"
                - name: STRIMZI_SASL_MECHANISM 
    17
    
                  value: "scram-sha-512"
                - name: STRIMZI_SECURITY_PROTOCOL 
    18
    
                  value: "SSL"
    Copy to Clipboard Toggle word wrap

    1
    用于监视 KafkaTopic 资源的 topics Operator 的 OpenShift 命名空间。指定 Kafka 集群的命名空间。
    2
    用于发现并连接到 Kafka 集群中所有代理的 bootstrap 代理地址的主机和端口对。在服务器停机时,使用逗号分隔列表来指定两个或三个代理地址。
    3
    用于标识由 Topic Operator 管理的 KafkaTopic 资源的标签。这不一定是 Kafka 集群的名称。它可以是分配给 KafkaTopic 资源的标签。如果部署多个主题 Operator,则每个标签必须是唯一的。也就是说,操作员无法管理相同的资源。
    4
    连接到 ZooKeeper 集群的地址和端口对。这必须与 Kafka 集群使用的相同 ZooKeeper 集群。
    5
    ZooKeeper 会话超时,以毫秒为单位。默认值为 18000 (18 秒)。
    6
    定期协调之间的间隔(以毫秒为单位)。默认值为 120000 (2 分钟)。
    7
    从 Kafka 获取主题元数据时的尝试次数。每次尝试之间的时间都定义为 exponential backoff。由于分区或副本数,请考虑增加这个值。默认值为 6 次尝试。
    8
    打印日志记录消息的级别。您可以将级别设为 ERRORWARNINGINFODEBUGTRACE
    9
    启用 TLS 支持与 Kafka 代理的加密通信。
    10
    (可选)JVM 运行 Topic Operator 使用的 Java 选项。
    11
    (可选)为 Topic Operator 设置的调试(-D)选项。
    12
    (可选)如果通过 STRIMZI_TLS_ENABLED 启用 TLS,则跳过信任存储证书的生成。如果启用了此环境变量,代理必须使用公共可信证书颁发机构作为其 TLS 证书。默认值为 false
    13
    (可选)为 mutual TLS 身份验证生成密钥存储证书。把它设置为 false 会禁用使用 TLS 到 Kafka 代理的客户端验证。默认值是 true
    14
    (可选)连接到 Kafka 代理时支持客户端身份验证的 SASL。默认值为 false
    15
    (可选)用于客户端身份验证的 SASL 用户名。仅在通过 STRIMZI_SASL_ENABLED 启用 SASL 时强制强制。
    16
    (可选)客户端身份验证的 SASL 密码。仅在通过 STRIMZI_SASL_ENABLED 启用 SASL 时强制强制。
    17
    (可选)客户端身份验证的 SASL 机制。仅在通过 STRIMZI_SASL_ENABLED 启用 SASL 时强制强制。您可以将值设为 plainscram-sha-256scram-sha-512
    18
    (可选)用于与 Kafka 代理通信的安全协议。默认值为 "PLAINTEXT"。您可以将值设为 PLAINTEXTSSLSASL_PLAINTEXTSASL_SSL
  2. 如果要连接到使用公共证书颁发机构中的证书的 Kafka 代理,请将 STRIMZI_PUBLI_CA 设置为 true。将此属性设置为 true,例如,如果您使用 Amazon AWS MSK 服务。
  3. 如果您使用 STRIMZI_TLS_ENABLED 环境变量启用了 TLS,请指定用于验证到 Kafka 集群连接的密钥存储和信任存储。

    TLS 配置示例

    # ....
    env:
      - name: STRIMZI_TRUSTSTORE_LOCATION 
    1
    
        value: "/path/to/truststore.p12"
      - name: STRIMZI_TRUSTSTORE_PASSWORD 
    2
    
        value: "TRUSTSTORE-PASSWORD"
      - name: STRIMZI_KEYSTORE_LOCATION 
    3
    
        value: "/path/to/keystore.p12"
      - name: STRIMZI_KEYSTORE_PASSWORD 
    4
    
        value: "KEYSTORE-PASSWORD"
    # ...
    Copy to Clipboard Toggle word wrap

    1
    truststore 包含用来为 Kafka 和 ZooKeeper 服务器证书签名的证书颁发机构的公钥。
    2
    用于访问 truststore 的密码。
    3
    密钥存储包含 TLS 客户端身份验证的私钥。
    4
    用于访问密钥存储的密码。
  4. 部署主题 Operator。

    oc create -f install/topic-operator
    Copy to Clipboard Toggle word wrap
  5. 检查部署的状态:

    oc get deployments
    Copy to Clipboard Toggle word wrap

    输出显示了部署名称和就绪状态

    NAME                    READY  UP-TO-DATE  AVAILABLE
    strimzi-topic-operator  1/1    1           1
    Copy to Clipboard Toggle word wrap

    READY 显示 ready/expected 的副本数量。当 AVAILABLE 输出显示为 1 时,部署成功。

6.1.5.2. 部署独立用户 Operator

此流程演示了如何将 User Operator 部署为用户管理的独立组件。您可以将单机 User Operator 用于不由 Cluster Operator 管理的 Kafka 集群。

独立部署可以与任何 Kafka 集群操作。

独立部署文件随 AMQ Streams 提供。使用 05-Deployment-strimzi-user-operator.yaml 部署文件来部署 User Operator。添加或设置在 Kafka 集群建立连接所需的环境变量。

User Operator 会监视单一命名空间中的 KafkaUser 资源。您可以在 User Operator 配置中指定要监视的命名空间,以及到 Kafka 集群的连接。单个用户 Operator 可以监视单个命名空间。只应该只监视一个用户 Operator 的命名空间。如果要使用多个用户 Operator,请将每个用户配置为监视不同的命名空间。这样,您可以在多个 Kafka 集群中使用 User Operator。

先决条件

  • 您正在运行一个 Kafka 集群,供 User Operator 连接。

    只要为连接正确配置了独立用户 Operator,则 Kafka 集群可以在裸机环境、虚拟机或受管云应用程序服务上运行。

流程

  1. 编辑 install/user-operator/05-Deployment-strimzi-user-operator.yaml 独立部署文件中的以下 env 属性。

    独立用户 Operator 部署配置示例

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: strimzi-user-operator
      labels:
        app: strimzi
    spec:
      # ...
      template:
        # ...
        spec:
          # ...
          containers:
            - name: strimzi-user-operator
              # ...
              env:
                - name: STRIMZI_NAMESPACE 
    1
    
                  valueFrom:
                    fieldRef:
                      fieldPath: metadata.namespace
                - name: STRIMZI_KAFKA_BOOTSTRAP_SERVERS 
    2
    
                  value: my-kafka-bootstrap-address:9092
                - name: STRIMZI_CA_CERT_NAME 
    3
    
                  value: my-cluster-clients-ca-cert
                - name: STRIMZI_CA_KEY_NAME 
    4
    
                  value: my-cluster-clients-ca
                - name: STRIMZI_LABELS 
    5
    
                  value: "strimzi.io/cluster=my-cluster"
                - name: STRIMZI_FULL_RECONCILIATION_INTERVAL_MS 
    6
    
                  value: "120000"
                - name: STRIMZI_LOG_LEVEL 
    7
    
                  value: INFO
                - name: STRIMZI_GC_LOG_ENABLED 
    8
    
                  value: "true"
                - name: STRIMZI_CA_VALIDITY 
    9
    
                  value: "365"
                - name: STRIMZI_CA_RENEWAL 
    10
    
                  value: "30"
                - name: STRIMZI_JAVA_OPTS 
    11
    
                  value: "-Xmx=512M -Xms=256M"
                - name: STRIMZI_JAVA_SYSTEM_PROPERTIES 
    12
    
                  value: "-Djavax.net.debug=verbose -DpropertyName=value"
                - name: STRIMZI_SECRET_PREFIX 
    13
    
                  value: "kafka-"
                - name: STRIMZI_ACLS_ADMIN_API_SUPPORTED 
    14
    
                  value: "true"
                - name: STRIMZI_MAINTENANCE_TIME_WINDOWS 
    15
    
                  value: '* * 8-10 * * ?;* * 14-15 * * ?'
    Copy to Clipboard Toggle word wrap

    1
    用于监视 KafkaUser 资源的 User Operator 的 OpenShift 命名空间。只能指定一个命名空间。
    2
    用于发现并连接到 Kafka 集群中所有代理的 bootstrap 代理地址的主机和端口对。在服务器停机时,使用逗号分隔列表来指定两个或三个代理地址。
    3
    包含用于 TLS 客户端身份验证的新用户证书的证书颁发机构的公钥(ca.crt)值的 OpenShift Secret
    4
    包含用于 TLS 客户端身份验证的新用户证书的证书颁发机构(ca.key)值的 OpenShift Secret
    5
    用于标识由 User Operator 管理的 KafkaUser 资源的标签。这不一定是 Kafka 集群的名称。它可以是分配给 KafkaUser 资源的标签。如果部署多个用户 Operator,则每个标签必须是唯一的。也就是说,操作员无法管理相同的资源。
    6
    定期协调之间的间隔(以毫秒为单位)。默认值为 120000 (2 分钟)。
    7
    打印日志记录消息的级别。您可以将级别设为 ERRORWARNINGINFODEBUGTRACE
    8
    启用垃圾回收(GC)日志记录。默认值是 true
    9
    证书颁发机构的有效性周期。默认值为 365 天。
    10
    证书颁发机构的续订期。续订周期从当前证书的过期日期向后兼容。默认为 30 天,可在旧证书过期之前启动证书续订。
    11
    (可选)运行 User Operator 的 JVM 使用的 Java 选项
    12
    (可选)为 User Operator 设置的调试(-D)选项
    13
    (可选) 用于 User Operator 创建的 OpenShift secret 的名称的前缀。
    14
    (可选)指示 Kafka 集群是否支持使用 Kafka Admin API 管理授权 ACL 规则。当设置为 false 时,User Operator 将拒绝 具有简单 授权 ACL 规则的所有资源。这有助于避免 Kafka 集群日志中不必要的异常。默认值是 true
    15
    (可选)Semi-colon 分离的 Cron 表达式列表,用于定义过期用户证书的维护时间窗口。
  2. 如果使用 TLS 连接到 Kafka 集群,请指定用于验证连接的 secret。否则,转到下一步。

    TLS 配置示例

    # ....
    env:
      - name: STRIMZI_CLUSTER_CA_CERT_SECRET_NAME 
    1
    
        value: my-cluster-cluster-ca-cert
      - name: STRIMZI_EO_KEY_SECRET_NAME 
    2
    
        value: my-cluster-entity-operator-certs
    # ..."
    Copy to Clipboard Toggle word wrap

    1
    OpenShift Secret 包括为 TLS 客户端验证签发 Kafka 代理的 Certificate Authority 的共钥 (ca.crt) 值。
    2
    包含密钥存储(entity-operator.p12)的 OpenShift Secret,其私钥和证书用于针对 Kafka 集群进行 TLS 身份验证。Secret 还必须包含用于访问密钥存储的密码(entity-operator.password)。
  3. 部署 User Operator。

    oc create -f install/user-operator
    Copy to Clipboard Toggle word wrap
  4. 检查部署的状态:

    oc get deployments
    Copy to Clipboard Toggle word wrap

    输出显示了部署名称和就绪状态

    NAME                   READY  UP-TO-DATE  AVAILABLE
    strimzi-user-operator  1/1    1           1
    Copy to Clipboard Toggle word wrap

    READY 显示 ready/expected 的副本数量。当 AVAILABLE 输出显示为 1 时,部署成功。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat