第 2 章 将 Apache Kafka 控制台的 Streams 连接到 Kafka 集群
将 Apache Kafka 控制台的 Streams 部署到与 Apache Kafka 的 Streams 管理的 Kafka 集群相同的 OpenShift 集群。使用流为 Apache Kafka 控制台提供的安装文件。
对于每个 Kafka 集群,用于安装集群的 Kafka 资源的配置需要以下内容:
- 控制台连接集群所需的足够授权。
- 启用 Prometheus 并且能够从集群中提取指标。
-
指标配置(通过
ConfigMap)以适合 Prometheus 的格式导出指标。
Apache Kafka 控制台的 Streams 需要 Kafka 用户,配置为 KafkaUser 自定义资源,以便控制台以身份验证和授权的用户身份访问集群。
当您配置 KafkaUser 身份验证和授权机制时,请确保它们与对应的 Kafka 配置匹配。
-
KafkaUser.spec.authentication匹配Kafka.spec.kafka.listeners[*].authentication -
KafkaUser.spec.authorization匹配Kafka.spec.kafka.authorization
Prometheus 必须被安装并配置为从 Kubernetes 和 Kafka 集群提取指标,并在控制台中填充指标图形。
先决条件
-
安装需要具有
cluster-admin角色的 OpenShift 用户,如system:admin。 - OpenShift 4.12 到 4.15 集群。
- 由 Streams for Apache Kafka 管理的 Kafka 集群在 OpenShift 集群中运行的。
- Prometheus Operator,必须是与为 OpenShift 监控部署的独立 Operator。
-
oc命令行工具已安装并配置为连接到 OpenShift 集群。 在控制台中会话管理和身份验证的 secret 值。
您可以使用 OpenSSL TLS 管理工具生成值,如下所示:
SESSION_SECRET=$(LC_CTYPE=C openssl rand -base64 32) echo "Generated SESSION_SECRET: $SESSION_SECRET" NEXTAUTH_SECRET=$(LC_CTYPE=C openssl rand -base64 32) echo "Generated NEXTAUTH_SECRET: $NEXTAUTH_SECRET"
SESSION_SECRET=$(LC_CTYPE=C openssl rand -base64 32) echo "Generated SESSION_SECRET: $SESSION_SECRET" NEXTAUTH_SECRET=$(LC_CTYPE=C openssl rand -base64 32) echo "Generated NEXTAUTH_SECRET: $NEXTAUTH_SECRET"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
openssl help来获取所用的选项的命令行描述。
除了安装控制台的文件外,还需要预配置的文件来安装 Apache Kafka Operator 的 Streams,Prometheus Operator、Prometheus 实例和 Kafka 集群也包含在 Apache Kafka 控制台安装工件的 Streams 中。在此过程中,我们假定已安装了 operator。安装文件提供了设置和试用控制台的最快速方法,但您可以使用自己的 Apache Kafka 和 Prometheus 部署流。
流程
下载并提取 Apache Kafka 控制台安装工件的 Streams。
工件包含在安装以及 Apache Kafka 软件下载页面的 Streams 中提供的示例文件。
文件包含控制台、Kafka 集群和 Prometheus 所需的部署配置。
示例 Kafka 配置会创建一个路由监听程序,控制台用来连接到 Kafka 集群。由于控制台和 Kafka 集群部署在同一 OpenShift 集群中,您可以使用 Kafka 集群的内部 bootstrap 地址而不是路由。
通过应用 Prometheus 安装文件,使用控制台所需的配置创建 Prometheus 实例:
编辑
console-prometheus-server.clusterrolebinding.yaml文件中的${NAMESPACE},以使用 Prometheus 实例要安装到的命名空间:sed -i 's/${NAMESPACE}/'"my-project"'/g' <resource_path>/console-prometheus-server.clusterrolebinding.yamlsed -i 's/${NAMESPACE}/'"my-project"'/g' <resource_path>/console-prometheus-server.clusterrolebinding.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例如,在此流程中,我们将安装到
my-project命名空间。配置将 Prometheus 的角色与其服务帐户绑定。通过按照以下顺序应用安装文件来创建 Prometheus 实例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 实例名为
console-prometheus,用于连接控制台的服务的 URL 为http://prometheus-operated.my-project.svc.cluster.local:9090,并且my-project从命名空间名称中获取。注意没有为
console-prometheus实例部署路由,因为不需要从 OpenShift 集群外部访问它。
创建和部署 Kafka 集群。
如果您使用在 KRaft 模式下运行的 Kafka 集群的控制台,请在
console-kafka-metrics.configmap.yaml文件中更新集群的指标配置:- 取消注释 KRaft 相关指标配置。
- 注释掉 ZooKeeper 相关指标。
此文件包含控制台所需的指标配置。
通过添加 ACL 类型来为 Kafka 集群提供授权访问来编辑
console-kafka-user1.kafkauser.yaml文件中的KafkaUser自定义资源。Kafka 用户至少需要以下 ACL 规则:
-
描述集群资源的DescribeConfigs权限 -
所有
主题资源的读取、DescribeConfigs权限 所有
组资源的读取、描述权限用户授权设置示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
编辑
console-kafka.kafka.yaml文件以替换占位符:sed -i 's/type: ${LISTENER_TYPE}/type: route/g' console-kafka.kafka.yaml sed -i 's/\${CLUSTER_DOMAIN}/'"<my_router_base_domain>"'/g' console-kafka.kafka.yamlsed -i 's/type: ${LISTENER_TYPE}/type: route/g' console-kafka.kafka.yaml sed -i 's/\${CLUSTER_DOMAIN}/'"<my_router_base_domain>"'/g' console-kafka.kafka.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 此文件包含用于创建
Kafka集群的 Kafka 自定义资源配置。这些命令执行以下操作:
-
将
type: ${LISTENER_TYPE}替换为type: route。虽然本示例使用路由类型,但您可以将${LISTENER_TYPE}替换为部署的任何有效的监听程序类型。 -
将
${CLUSTER_DOMAIN}替换为指定 bootstrap 和 per-broker 服务使用的路由监听程序主机所需的基域值。默认情况下,路由监听程序主机由 OpenShift 自动分配。但是,您可以通过指定主机来覆盖分配的路由主机。
另外,您可以将 示例配置复制到您自己的 Kafka 部署 中。
-
将
通过按以下顺序应用安装文件来创建 Kafka 集群:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您使用自己的 Kafka 集群,请应用更新的
Kafka资源配置而不是console-kafka.kafka.yaml。安装文件会创建一个 Kafka 集群以及 Kafka 用户以及控制台所需的指标配置,用于连接到您要通过控制台监控的每个 Kafka 集群和指标配置。每个 Kafka 用户都需要一个唯一名称。
如果 Kafka 集群位于与 Prometheus 实例不同的命名空间中,请修改
kafka-resources.podmonitor.yaml文件使其包含namespaceSelector:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这样可确保 Prometheus 可以监控 Kafka pod。将
<kafka_namespace> 替换为部署 Kafka 集群的实际命名空间。
检查部署的状态:
oc get pods -n <my_console_namespace>
oc get pods -n <my_console_namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出显示 Operator 和集群就绪度
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在这里,
console-kafka是集群的名称。标识创建的 pod 的 pod ID。
在默认部署中,您要安装三个 pod。
READY 显示就绪/预期的副本数。当 STATUS 显示为 Running 时,部署成功。
安装 Apache Kafka 控制台的流。
编辑
console-server.clusterrolebinding.yaml文件,以使用控制台实例要安装到的命名空间:sed -i 's/${NAMESPACE}/'"my-project"'/g' /<resource_path>console-server.clusterrolebinding.yamlsed -i 's/${NAMESPACE}/'"my-project"'/g' /<resource_path>console-server.clusterrolebinding.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 配置将控制台的角色与其服务帐户绑定。
通过应用安装文件(按以下顺序)安装控制台用户界面并路由到接口:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 安装会创建运行控制台用户界面所需的角色、角色绑定、服务帐户、服务和路由。
为控制台中的会话管理和身份验证,创建一个名为
console-ui-secrets的Secret,其中包含两个 secret 值(如先决条件中所述):oc create secret generic console-ui-secrets -n my-project \ --from-literal=SESSION_SECRET="<session_secret_value>" \ --from-literal=NEXTAUTH_SECRET="<next_secret_value>"oc create secret generic console-ui-secrets -n my-project \ --from-literal=SESSION_SECRET="<session_secret_value>" \ --from-literal=NEXTAUTH_SECRET="<next_secret_value>"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 部署控制台时,secret 作为环境变量挂载。
获取为控制台用户界面创建的路由的主机名:
oc get route console-ui-route -n my-project -o jsonpath='{.spec.host}'oc get route console-ui-route -n my-project -o jsonpath='{.spec.host}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 访问控制台用户界面需要主机名。
编辑
console.deployment.yaml文件以替换占位符:sed -i 's/${CONSOLE_HOSTNAME}/'"<route_hostname>"'/g' console.deployment.yaml sed -i 's/${NAMESPACE}/'"my-project"'/g' console.deployment.yamlsed -i 's/${CONSOLE_HOSTNAME}/'"<route_hostname>"'/g' console.deployment.yaml sed -i 's/${NAMESPACE}/'"my-project"'/g' console.deployment.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 这些命令执行以下操作:
-
将
https://${CONSOLE_HOSTNAME}替换为https://<route_hostname>,这是用于访问控制台用户界面的路由。 -
将
${NAMESPACE}替换为http://prometheus-operated.${NAMESPACE}.svc.cluster.local:9090中的my-project命名空间名称,这是控制台使用的 Prometheus 实例的 URL。
如果您使用自己的 Kafka 集群,请确保使用正确的集群名称,并将其他环境变量 配置为正确的值。这些值可让控制台连接到集群并检索指标。
-
将
安装控制台:
oc apply -n my-project -f <resource_path>/console.deployment.yaml
oc apply -n my-project -f <resource_path>/console.deployment.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出显示控制台就绪
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
在您自己的 Kafka 集群中添加示例配置
如果您已经安装了 Kafka 集群,您可以使用所需的配置更新 Kafka 资源。在应用集群配置文件时,请使用更新的 Kafka 资源,而不是使用由 Apache Kafka Console 安装文件提供的 Kafka 资源。
Kafka 资源需要以下配置:
-
用于公开集群以进行控制台连接
的路由监听程序 - 为检索集群中的指标启用 Prometheus 指标。如果您使用 ZooKeeper 进行元数据管理,请为 ZooKeeper 添加相同的配置。
-
如果集群名称与控制台部署文件(
console-kafka)中使用的集群名称不匹配,请更新引用 Kafka 集群名称的部署文件,如console-kafka-user1.kafkauser.yaml。
Prometheus 指标配置必须引用 ConfigMap,该 ConfigMap 提供控制台所需的指标配置。指标配置在 console-cluster-metrics.configmap.yaml 资源配置文件中提供。
控制台连接的 Kafka 集群配置示例
检查控制台部署环境变量
如果使用自己的 Kafka 集群,请检查控制台的部署配置是否有所需的环境变量。
以下前缀决定了环境变量值的范围:
-
KAFKA代表所有 Kafka 集群的配置。 -
CONSOLE_KAFKA_<UNIQUE_NAME_ID_FOR_CLUSTER> 代表每个特定集群的配置。
控制台部署配置示例
- 1
- 用于与 Kafka 代理通信的安全协议。
- 2
- Kafka 代理的控制台(客户端)身份验证的 SASL 机制。
- 3
- 必须与
Kafka资源配置中为集群指定的命名空间和名称匹配。 - 4
- bootstrap 代理地址的主机和端口对,用于发现并连接到 Kafka 集群中的所有代理。在本例中,使用路由监听程序地址。侦听器在
Kafka资源中配置。 - 5
- Kafka 用户的身份验证凭证,代表作为
Secret挂载的控制台。当创建对应的用户时,console-kafka-user1secret 会自动创建。secret 中的sasl.jaas.config属性包含 SASL 身份验证的 JAAS 配置。 - 6
- 用于在控制台中进行身份验证的 secret。
- 7
- 在控制台中会话管理的 secret
- 8
- 连接到 Apache Kafka 用户界面和用户访问控制台的流的 URL。
- 9
- 控制台用户界面与 进行通信的后端服务器,以进行数据检索。
- 10
- 连接到 Prometheus 实例的 URL,其中包括
Kafka资源的命名空间(my-project)。