第 4 章 部署 AMQ 流
为 部署 AMQ Streams 准备了环境,本节显示:
- 如何创建 Kafka 集群
根据您的要求部署其他 Kafka 组件的可选步骤:
流程假定 OpenShift 集群可用并在运行。
AMQ Streams 基于 AMQ Streams Strimzi 0.20.x。本节介绍在 OpenShift 3.11 及之后的版本中部署 AMQ Streams 的步骤。
要运行本指南中的命令,您的集群用户必须有权管理基于角色的访问控制(RBAC)和 CRD。
4.1. 创建 Kafka 集群
要创建 Kafka 集群,您需要部署 Cluster Operator 以管理 Kafka 集群,然后部署 Kafka 集群。
当使用 Kafka 资源部署 Kafka 集群时,您可以同时部署 Topic Operator 和 User Operator。另外,如果您使用非 AMQ Streams Kafka 集群,您可以将 Topic Operator 和 User Operator 部署为独立组件。
使用 Topic Operator 和 User Operator 部署 Kafka 集群
如果要将 Topic Operator 和 User Operator 与由 AMQ Streams 管理的 Kafka 集群搭配使用,请执行这些部署步骤。
- 部署 Cluster Operator
使用 Cluster Operator 部署:
部署独立主题 Operator 和 User Operator
如果要将 Topic Operator 和 User Operator 与 不由 AMQ Streams 管理的 Kafka 集群搭配使用,请执行这些部署步骤。
4.1.1. 部署 Cluster Operator
Cluster Operator 负责在 OpenShift 集群中部署和管理 Apache Kafka 集群。
本节中的步骤显示:
如何部署 Cluster Operator 以 监视 :
备选部署选项:
4.1.1.1. 监视 Cluster Operator 部署的选项
当 Cluster Operator 运行时,它开始 监视 Kafka 资源的更新。
您可以选择部署 Cluster Operator 来监视 Kafka 资源:
- 单个命名空间(包含 Cluster Operator 的同一命名空间)
- 多个命名空间
- 所有命名空间
AMQ Streams 提供示例 YAML 文件,以简化部署过程。
Cluster Operator 会监视以下资源的变化:
-
Kafka集群的 Kafka。 -
Kafka Connect 集群的 KafkaConnect。 -
用于
Kafka Connect 集群的 KafkaConnectS2I,支持 Source2Image。 -
用于在 Kafka Connect 集群中创建和管理连接器的 KafkaConnector。 -
Kafka MirrorMaker 实例的 KafkaMirrorMaker。 -
Kafka Bridge 实例的KafkaBridge
在 OpenShift 集群中创建其中一个资源时,操作器从该资源获取集群描述,并通过创建必要的 OpenShift 资源(如 StatefulSets、Service 和 ConfigMap)来开始为资源创建新集群。
每次更新 Kafka 资源时,操作器都会对构成该资源的 OpenShift 资源执行相应的更新。
资源可以修补或删除,然后重新创建以便集群反映集群所需的状态。此操作可能会导致滚动更新,可能会导致服务中断。
删除资源时,操作器将取消部署集群并删除所有相关 OpenShift 资源。
4.1.1.2. 部署 Cluster Operator 以监控单个命名空间
此流程演示了如何部署 Cluster Operator 以监控 OpenShift 集群中单一命名空间中的 AMQ Streams 资源。
先决条件
-
此流程需要使用 OpenShift 用户帐户,该帐户可以创建自定义
ResourceDefinition、ClusterRole 和ClusterRoleBinding。在 OpenShift 集群中使用 Role Base Access Control(RBAC)通常意味着只有system:admin等 OpenShift 集群管理员才有创建、编辑和删除这些资源的权限。
步骤
编辑 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在 MacOS 中,使用:
sed -i '' 's/namespace: .*/namespace: my-cluster-operator-namespace/' install/cluster-operator/*RoleBinding*.yaml部署 Cluster Operator:
oc apply -f install/cluster-operator -n my-cluster-operator-namespace验证 Cluster Operator 是否已成功部署:
oc get deployments
4.1.1.3. 部署 Cluster Operator 以监控多个命名空间
此流程演示了如何部署 Cluster Operator 以在 OpenShift 集群的多个命名空间中监控 AMQ Streams 资源。
先决条件
-
此流程需要使用 OpenShift 用户帐户,该帐户可以创建自定义
ResourceDefinition、ClusterRole 和ClusterRoleBinding。在 OpenShift 集群中使用 Role Base Access Control(RBAC)通常意味着只有system:admin等 OpenShift 集群管理员才有创建、编辑和删除这些资源的权限。
步骤
编辑 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在 MacOS 中,使用:
sed -i '' 's/namespace: .*/namespace: my-cluster-operator-namespace/' install/cluster-operator/*RoleBinding*.yaml编辑
install/cluster-operator/060-Deployment-strimzi-cluster-operator.yaml文件,将 Cluster Operator 将监视的所有命名空间的列表添加到STRIMZI_NAMESPACE环境变量。例如,在此流程中,Cluster Operator 将监视命名空间
watched-namespace-1、watched-namespace-2、watched-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-rhel7-operator:1.6.7 imagePullPolicy: IfNotPresent env: - name: STRIMZI_NAMESPACE value: watched-namespace-1,watched-namespace-2,watched-namespace-3对于列出的每个命名空间,安装
RoleBindings。在本例中,我们将这些命令中的
watched-namespace替换为上一步中列出的命名空间,为watched-namespace-1、watched-namespace-2、重复它们:watched-namespace-3oc apply -f install/cluster-operator/020-RoleBinding-strimzi-cluster-operator.yaml -n watched-namespace oc apply -f install/cluster-operator/031-RoleBinding-strimzi-cluster-operator-entity-operator-delegation.yaml -n watched-namespace oc apply -f install/cluster-operator/032-RoleBinding-strimzi-cluster-operator-topic-operator-delegation.yaml -n watched-namespace
部署 Cluster Operator:
oc apply -f install/cluster-operator -n my-cluster-operator-namespace验证 Cluster Operator 是否已成功部署:
oc get deployments
4.1.1.4. 部署 Cluster Operator 以监视所有命名空间
此流程演示了如何部署 Cluster Operator 以监控 OpenShift 集群中所有命名空间中的 AMQ Streams 资源。
在这个模式下运行时,Cluster Operator 会在创建的任何新命名空间中自动管理集群。
先决条件
-
此流程需要使用 OpenShift 用户帐户,该帐户可以创建自定义
ResourceDefinition、ClusterRole 和ClusterRoleBinding。在 OpenShift 集群中使用 Role Base Access Control(RBAC)通常意味着只有system:admin等 OpenShift 集群管理员才有创建、编辑和删除这些资源的权限。
步骤
编辑 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在 MacOS 中,使用:
sed -i '' 's/namespace: .*/namespace: my-cluster-operator-namespace/' install/cluster-operator/*RoleBinding*.yaml编辑
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-rhel7-operator:1.6.7 imagePullPolicy: IfNotPresent env: - name: STRIMZI_NAMESPACE value: "*" # ...创建
ClusterRoleBinding,将所有命名空间的集群范围访问权限授予 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 oc create clusterrolebinding strimzi-cluster-operator-topic-operator-delegation --clusterrole=strimzi-topic-operator --serviceaccount my-cluster-operator-namespace:strimzi-cluster-operator
将
my-cluster-operator-namespace替换为您要将 Cluster Operator 安装到的命名空间。将 Cluster Operator 部署到 OpenShift 集群。
oc apply -f install/cluster-operator -n my-cluster-operator-namespace验证 Cluster Operator 是否已成功部署:
oc get deployments
4.1.1.5. 从 OperatorHub 部署 Cluster Operator
您可以通过从 OperatorHub 安装 AMQ Streams Operator,将 Cluster Operator 部署到 OpenShift 集群。OperatorHub 仅适用于 OpenShift 4。
先决条件
-
OpenShift 集群中启用了 Red Hat Operator
OperatorSource。如果您在 OperatorHub 中看到 Red Hat Operator,则会启用正确的OperatorSource。如需更多信息,请参阅 Operators 指南。 - 安装需要具有足够特权的用户来安装来自 OperatorHub 的 Operator。
步骤
- 在 OpenShift 4 Web 控制台中,点 Operators > OperatorHub。
在流和 消息传递 类别中搜索或浏览 AMQ Streams Operator。

- 单击 AMQ Streams 标题,然后在右侧的侧边栏中点 Install。
在 Create Operator Subscription 屏幕上,从以下安装和更新选项中进行选择:
- 安装模式 :选择将 AMQ Streams Operator 安装到集群中的所有(项目)命名空间(默认选项)或特定(项目)命名空间。最好使用命名空间来分隔函数。建议您将特定命名空间专用于 Kafka 集群和其他 AMQ Streams 组件。
- 批准策略 :默认情况下,Operator Lifecycle Manager(OLM)自动将 AMQ Streams Operator 升级到最新的 AMQ Streams 版本。(可选)如果您想要手动批准以后的升级,请选择 Manual。如需更多信息,请参阅 OpenShift 文档中的 Operator 指南。
点 Subscribe; AMQ Streams Operator 已安装到 OpenShift 集群。
AMQ Streams Operator 将 Cluster Operator、CRD 和基于角色的访问控制(RBAC)资源部署到所选命名空间或所有命名空间中。
在 Installed Operators 屏幕上,检查安装的进度。当 AMQ Streams Operator 的状态变为 InstallSucceeded 时,就可以使用它。

接下来,您可以使用 YAML 示例文件部署 AMQ Streams 其他组件(从 Kafka 集群开始)。
4.1.2. 部署 Kafka
Apache Kafka 是一个开源分布式发布-订阅消息传递系统,用于容错实时数据源。
本节中的步骤显示:
如何使用 Cluster Operator 部署:
- 临时或 持久的 Kafka 集群
配置
Kafka自定义资源的 Topic Operator 和 User Operator:
Topic Operator 和 User Operator 的替代独立部署步骤:
安装 Kafka 时,AMQ Streams 还会安装 ZooKeeper 集群,并添加必要的配置以将 Kafka 与 ZooKeeper 连接。
4.1.2.1. 部署 Kafka 集群
此流程演示了如何使用 Cluster Operator 将 Kafka 集群部署到 OpenShift 中。
部署使用 YAML 文件提供规格来创建 Kafka 资源。
AMQ Streams 提供了在 example /kafka/ 中部署所需的 YAML 文件示例 :
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 集群使用
PersistentVolume 来存储ZooKeeper 和 Kafka 数据。该PersistentVolume使用PersistentVolumeClaim来获取,使它独立于实际的PersistentVolume类型。例如,它可以在 Amazon AWS 部署中使用 Amazon EBS 卷,而不更改 YAML 文件。PersistentVolumeClaim可以使用StorageClass来触发自动卷置备。
示例集群默认命名为 my-cluster。集群名称通过资源名称定义,在部署集群后无法更改。要在部署集群前更改集群名称,请在相关 YAML 文件中编辑 Kafka 资源的 属性。
Kafka.metadata.name
apiVersion: kafka.strimzi.io/v1beta1 kind: Kafka metadata: name: my-cluster # ...
有关配置 Kafka 资源的更多信息,请参阅 OpenShift 中使用 AMQ Streams 中的 Kafka 集群配置。
步骤
创建和部署 临时或 持久 集群。
对于开发或测试,您可能更喜欢使用临时集群。您可以随时使用持久性存储。
创建和部署 临时 集群:
oc apply -f examples/kafka/kafka-ephemeral.yaml
创建和部署 持久 集群:
oc apply -f examples/kafka/kafka-persistent.yaml
验证 Kafka 集群是否已成功部署:
oc get deployments
4.1.2.2. 使用 Cluster Operator 部署主题 Operator
此流程描述了如何使用 Cluster Operator 部署 Topic Operator。
您可以将 Kafka 资源的 principal Operator 属性配置为包含 topicOperator。
如果要将 Topic Operator 与不由 AMQ Streams 管理的 Kafka 集群搭配使用,则必须将 Topic Operator 部署为独立组件。
有关配置 实体Operator 和 属性的更多信息,请参阅 OpenShift 指南的使用 AMQ Streams 中的 Entity Operator。
topicOperator
步骤
编辑
Kafka资源的 principalOperator属性,使其包含topicOperator:apiVersion: kafka.strimzi.io/v1beta1 kind: Kafka metadata: name: my-cluster spec: #... entityOperator: topicOperator: {} userOperator: {}使用
EntityTopicOperatorSpec模式参考 中所述的属性配置 Topic Operatorspec。如果您希望所有属性都使用其默认值,请使用空对象(
{})。创建或更新资源:
使用
oc apply:oc apply -f <your-file>
4.1.2.3. 使用 Cluster Operator 部署 User Operator
此流程描述了如何使用 Cluster Operator 部署 User Operator。
您可以将 Kafka 资源的 principal Operator 属性配置为包含 userOperator。
如果要将 User Operator 与不由 AMQ Streams 管理的 Kafka 集群搭配使用,您必须将 User Operator 部署为独立组件。
有关配置 实体Operator 和 属性的更多信息,请参阅 OpenShift 指南的使用 AMQ Streams 中的 Entity Operator。
userOperator
步骤
编辑
Kafka资源的 principalOperator属性,使其包含userOperator:apiVersion: kafka.strimzi.io/v1beta1 kind: Kafka metadata: name: my-cluster spec: #... entityOperator: topicOperator: {} userOperator: {}使用 OpenShift 指南的使用 AMQ Streams 中的
EntityUserOperatorSpecschema 参考 中描述的属性配置 User Operatorspec。如果您希望所有属性都使用其默认值,请使用空对象(
{})。创建或更新资源:
oc apply -f <your-file>
4.1.3. AMQ Streams Operator 的替代独立部署选项
当使用 Cluster Operator 部署 Kafka 集群时,您还可以部署 Topic Operator 和 User Operator。或者,您也可以执行独立部署。
独立部署意味着 Topic Operator 和 User Operator 可以在不由 AMQ Streams 管理的 Kafka 集群中运行。
4.1.3.1. 部署独立主题 Operator
此流程演示了如何将 Topic Operator 部署为独立组件。
独立部署需要配置环境变量,比 使用 Cluster Operator 部署 Topic Operator 复杂。但是,独立部署更为灵活,因为 Topic Operator 可在任何 Kafka 集群下运行,而不必由 Cluster Operator 部署。
先决条件
- 您需要一个现有的 Kafka 集群供 Topic Operator 连接到。
步骤
通过设置,编辑
install/topic-operator/05-Deployment-strimzi-topic-operator属性:.yaml 文件中的 Deployment.spec.template.spec.containers[0].env-
STRIMZI_KAFKA_BOOTSTRAP_SERVERS,用于列出 Kafka 集群中的 bootstrap 代理,以逗号分隔的主机名 :\{0\}端口对列表形式指定。 -
用于列出 ZooKeeper 节点的
STRIMZI_ZOOKEEPER_CONNECT节点,以逗号分隔的主机名 :\{0\}端口对列表形式提供。这应该与 Kafka 集群使用的 ZooKeeper 集群相同。 -
STRIMZI_NAMESPACE到您希望操作员监视KafkaTopic资源的 OpenShift 命名空间。 -
STRIMZI_RESOURCE_LABELS到标签选择器,用于标识由操作器管理的KafkaTopic资源。 -
STRIMZI_FULL_RECONCILIATION_INTERVAL_MS,以毫秒为单位指定定期协调之间的间隔。 -
STRIMZI_TOPIC_METADATA_MAX_ATTEMPTS,以指定从 Kafka 获取主题元数据的尝试次数。每次尝试之间的时间都定义为指数回退。考虑在因为分区或副本数量而创建主题需要更多时间时增加这个值。默认6. -
STRIMZI_ZOOKEEPER_SESSION_TIMEOUT_MS到 ZooKeeper 会话超时,以毫秒为单位。例如,10000。Default20000(20 秒)。 -
STRIMZI_TOPICS_PATH到 Topic Operator 存储其元数据的 Zookeeper 节点路径。默认/strimzi/topics. -
STRIMZI_TLS_ENABLED启用 TLS 支持以加密与 Kafka 代理的通信。默认为true。 -
STRIMZI_TRUSTSTORE_LOCATION,指向包含用于启用基于 TLS 的通信的证书的信任存储的路径。只有在通过STRIMZI_TLS_ENABLED 启用 TLS 时才必需。 -
STRIMZI_TRUSTSTORE_PASSWORD到用于访问STRIMZI_TRUSTSTORE_LOCATION定义的信任存储的密码。只有在通过STRIMZI_TLS_ENABLED 启用 TLS 时才必需。 -
STRIMZI_KEYSTORE_LOCATION到含有私钥的密钥存储的路径,以启用基于 TLS 的通信。只有在通过STRIMZI_TLS_ENABLED 启用 TLS 时才必需。 -
STRIMZI_KEYSTORE_PASSWORD到用于访问STRIMZI_KEYSTORE_LOCATION定义的密钥存储的密码.只有在通过STRIMZI_TLS_ENABLED 启用 TLS 时才必需。 -
STRIMZI_LOG_LEVEL到打印日志记录消息的级别。该值可设置为:ERROR、WARNING、INFO、DEBUG和TRACE.默认INFO. -
STRIMZI_JAVA_OPTS(可选),用于运行主题 Operator 的 JVM。例如-Xmx=512M -Xms=256M。 -
STRIMZI_JAVA_SYSTEM_PROPERTIES(可选) 列出设置为 Topic Operator 的-D选项。An example is-Djavax.net.debug=verbose -DpropertyName=value.
-
部署主题 Operator:
oc apply -f install/topic-operator
验证 Topic Operator 是否已成功部署:
oc describe deployment strimzi-topic-operator
当
Replicas:条目显示1 可用时,Tpic Operator 会被部署。注意如果您与 OpenShift 集群的连接较慢并且之前没有下载镜像,则部署可能会遇到延迟。
4.1.3.2. 部署 standalone User Operator
此流程演示了如何将 User Operator 部署为独立组件。
独立部署需要配置环境变量,比 使用 Cluster Operator 部署 User Operator 复杂。但是,独立的部署更灵活,因为 User Operator 可以操作 任何 Kafka 集群,而不必由 Cluster Operator 部署。
先决条件
- 您需要一个现有的 Kafka 集群供 User Operator 连接到。
步骤
通过设置,编辑
install/user-operator/05-Deployment-strimzi-user-operator属性:.yaml 文件中的以下 Deployment.spec.template.spec.containers[0].env-
STRIMZI_KAFKA_BOOTSTRAP_SERVERS来列出 Kafka 代理,以逗号分隔的主机名 :\{0\}端口对列表形式指定。 -
用于列出 ZooKeeper 节点的
STRIMZI_ZOOKEEPER_CONNECT节点,以逗号分隔的主机名 :\{0\}端口对列表形式提供。这必须与您的 Kafka 集群使用的 ZooKeeper 集群相同。不支持使用 TLS 加密连接到 ZooKeeper 节点。 -
STRIMZI_NAMESPACE到 OpenShift 命名空间,您希望操作员在该命名空间中监视KafkaUser资源。 -
STRIMZI_LABELS到用于标识由操作器管理的KafkaUser资源标签选择器。 -
STRIMZI_FULL_RECONCILIATION_INTERVAL_MS,以毫秒为单位指定定期协调之间的间隔。 -
STRIMZI_ZOOKEEPER_SESSION_TIMEOUT_MS到 ZooKeeper 会话超时,以毫秒为单位。例如,10000。Default20000(20 秒)。 -
STRIMZI_CA_CERT_NAME以指向包含证书颁发机构公钥的 OpenShiftSecret,用于为 TLS 客户端身份验证签名新用户证书。Secret必须包含密钥ca.crt下的证书颁发机构的公钥。 -
STRIMZI_CA_KEY_NAME以指向包含证书颁发机构私钥的 OpenShiftSecret,用于为 TLS 客户端身份验证签名新用户证书。Secret必须包含密钥ca.key下的证书颁发机构的私钥。 -
STRIMZI_CLUSTER_CA_CERT_SECRET_NAME以指向包含用于签署 Kafka 代理证书以启用基于 TLS 的通信的 OpenShiftSecret。Secret必须包含密钥ca.crt下的证书颁发机构的公钥。这个环境变量是可选的,只有在与 Kafka 集群的通信基于 TLS 时才应设置。 -
STRIMZI_EO_KEY_SECRET_NAME以指向包含对 Kafka 集群进行 TLS 客户端身份验证的私钥和相关证书的 OpenShiftSecret。Secret必须包含密钥存储,其私钥和证书位于 key entity-operator.p12下,以及 key entity-operator.password下的相关密码。这个环境变量是可选的,只有在与 Kafka 集群的通信基于 TLS 时需要 TLS 客户端身份验证时才应设置。 -
STRIMZI_CA_VALIDITY证书颁发机构的有效期限.默认值为365天。 -
STRIMZI_CA_RENEWAL认证机构的续订期限. -
STRIMZI_LOG_LEVEL到打印日志记录消息的级别。该值可设置为:ERROR、WARNING、INFO、DEBUG和TRACE.默认INFO. -
STRIMZI_GC_LOG_ENABLED,以启用垃圾收集(GC)日志。默认为true。默认为在旧证书过期前启动证书续订的30天。 -
STRIMZI_JAVA_OPTS(可选) 用于运行用户的 JVM 的 Java 选项。例如-Xmx=512M -Xms=256M。 -
STRIMZI_JAVA_SYSTEM_PROPERTIES(可选) 列出设置为 User Operator 的-D选项。An example is-Djavax.net.debug=verbose -DpropertyName=value.
-
部署 User Operator:
oc apply -f install/user-operator
验证 User Operator 是否已成功部署:
oc describe deployment strimzi-user-operator
当
Replicas:条目显示1 available时,会部署 User Operator。注意如果您与 OpenShift 集群的连接较慢并且之前没有下载镜像,则部署可能会遇到延迟。