一、认识Strimzi
Strimzi是一款用于在Kubernetes集群上管理Apache Kafka的开源项目。它使得在Kubernetes上部署、管理和监控Kafka成为可能,提供了一种高度可扩展和可靠的解决方案。Strimzi支持自动缩放、配置灵活、内置监控和告警等功能。通过使用Strimzi,用户可以将Kafka集成到Kubernetes和OpenShift中,并享受到自动化、简单部署和可靠性的好处。
二、Strimzi的核心知识点
Kafka在Kubernetes中的部署和管理:Strimzi提供了一种足够简单且可扩展的方法来在Kubernetes中部署和管理Apache Kafka集群。
操作Kafka集群:Strimzi可用于对Kafka集群进行管理和操作,包括创建和删除Kafka Topic、更改Kafka Broker配置、动态增加和减少Broker数量等。
与Kubernetes的集成:Strimzi与Kubernetes集成得非常紧密,使得Kafka集群可以受益于Kubernetes为应用程序提供的优点,如自动化、弹性、伸缩等。
自动缩放和容错:Strimzi支持Kafka自动扩容和容错,可以根据负载自动增加或减少Kafka Broker数量,同时还能够自动平衡partition分布,从而提高Kafka的可靠性和可用性。
监控和告警:Strimzi内置了监控和告警功能,可以监控Kafka集群的健康状况和性能数据,提供对Kafka集群的可视化监控和警报功能。
灵活的配置:Strimzi提供了灵活的配置选项,可以灵活地配置Kafka Broker和Topic的属性、日志级别、安全性和认证等。
扩展和定制:Strimzi是一个扩展性强、可定制的开源项目,用户可以根据自己的需求进行定制和扩展,从而满足特定的业务要求。
三、Kafka集群、Topic Operator、User Operator
为了能够使用 Cluster Operator 管理 Kafka 集群,您必须将其部署为 Kafka 资源。 Strimzi 提供了示例部署文件来执行此操作。您可以使用这些文件同时部署 Topic Operator 和 User Operator。
部署 Cluster Operator 后,使用 Kafka 资源部署以下组件:
- Kafka集群
- Topic Operator
- User Operator
在安装 Kafka 时,Strimzi 还安装了 ZooKeeper 集群,并添加了连接 Kafka 和 ZooKeeper 所需的配置。
如果您尚未将 Kafka 集群部署为 Kafka 资源,则无法使用 Cluster Operator 对其进行管理。例如,这适用于在 Kubernetes 外部运行的 Kafka 集群。但是,您可以将 Topic Operator 和 User Operator 与不受 Strimzi 管理的 Kafka 集群一起使用,方法是将它们部署为独立组件。您还可以在非 Strimzi 管理的 Kafka 集群中部署和使用其他 Kafka 组件。
四、部署Kafka集群
此过程演示如何使用 Cluster Operator 将 Kafka 集群部署到 Kubernetes 集群。
该部署使用 YAML 文件来提供创建 Kafka 资源的规范。
Strimzi 提供了以下示例文件,可用于创建 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 数据。 PersistentVolume 是使用 PersistentVolumeClaim 获取的,以使其独立于 PersistentVolume 的实际类型。 PersistentVolumeClaim 可以使用 StorageClass 来触发自动卷配置。当没有指定StorageClass时,Kubernetes将尝试使用默认的StorageClass。
以下示例显示了一些常见类型的持久卷:
- 如果您的 Kubernetes 集群在 Amazon AWS 上运行,Kubernetes 可以配置 Amazon EBS 卷
- 如果您的 Kubernetes 集群在 Microsoft Azure 上运行,Kubernetes 可以配置 Azure 磁盘存储卷
- 如果您的 Kubernetes 集群在 Google Cloud 上运行,Kubernetes 可以配置持久磁盘卷
- 如果您的 Kubernetes 集群在裸机上运行,Kubernetes 可以配置本地持久卷
示例 YAML 文件指定最新支持的 Kafka 版本,以及其支持的日志消息格式版本和代理间协议版本的配置。 Kafka 配置的 inter.broker.protocol.version 属性必须是指定 Kafka 版本 (spec.kafka.version) 支持的版本。该属性表示 Kafka 集群中使用的 Kafka 协议的版本。
从Kafka 3.0.0开始,当inter.broker.protocol.version设置为3.0或更高版本时,log.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.4.0
#...
config:
#...
log.message.format.version: "3.4"
inter.broker.protocol.version: "3.4"
# ...
先决条件
- 必须部署 Cluster Operator。
部署 Cluster Operator的详细步骤可以参考博主下面这篇技术博客:
- Strimzi从入门到精通系列之一:部署Cluster Operator
创建并部署临时或持久集群。
创建并部署临时集群:
kubectl apply -f examples/kafka/kafka-ephemeral.yaml
创建和部署持久集群:
kubectl apply -f examples/kafka/kafka-persistent.yaml
2.检查部署状态
kubectl get pods -n <my_cluster_operator_namespace>
输出显示 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
my-cluster 是 Kafka 集群的名称。
以 0 开头的连续索引号标识创建的每个 Kafka 和 ZooKeeper Pod。
使用默认部署,您将创建一个 Entity Operator 集群、3 个 Kafka Pod 和 3 个 ZooKeeper Pod。
READY 显示已准备好/预期的副本数量。当状态显示为正在运行时,部署成功。文章来源地址https://www.toymoban.com/news/detail-504103.html
五、使用 Cluster Operator 部署 Topic Operator
此过程描述如何使用 Cluster Operator 部署 Topic Operator。
您配置 Kafka 资源的entityOperator 属性以包含topicOperator。默认情况下,Topic Operator 会监视 Cluster Operator 部署的 Kafka 集群的命名空间中的 KafkaTopic 资源。您还可以使用主题运算符规范中的 WatchNamespace 指定命名空间。单个主题操作员可以监视单个名称空间。一个命名空间只能由一个主题操作员监视。
如果您使用 Strimzi 将多个 Kafka 集群部署到同一命名空间,请仅为一个 Kafka 集群启用 Topic Operator,或使用 WatchedNamespace 属性配置 Topic Operator 来监视其他命名空间。
如果要将 Topic Operator 与不受 Strimzi 管理的 Kafka 集群一起使用,则必须将 Topic Operator 部署为独立组件。
先决条件
- 必须部署 Cluster Operator。
程序
1.编辑 Kafka 资源的entityOperator 属性以包含 topicOperator:
apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
name: my-cluster
spec:
#...
entityOperator:
topicOperator: {}
userOperator: {}
2.使用 EntityTopicOperatorSpec 架构参考中描述的属性配置主题运算符规范。
如果您希望所有属性都使用其默认值,请使用空对象 ({})。
3.创建或更新资源:
kubectl apply -f <kafka_configuration_file>
4.检查部署状态:
kubectl get pods -n <my_cluster_operator_namespace>
输出显示 Pod 名称和就绪情况
NAME READY STATUS RESTARTS
my-cluster-entity-operator 3/3 Running 0
# ...
my-cluster 是 Kafka 集群的名称。
READY 显示已准备好/预期的副本数量。当状态显示为正在运行时,部署成功。
六、使用 Cluster Operator 部署 User Operator
此过程描述如何使用 Cluster Operator 部署 User Operator。
您配置 Kafka 资源的entityOperator 属性以包含userOperator。默认情况下,User Operator 会监视 Kafka 集群部署的命名空间中的 KafkaUser 资源。您还可以使用 User Operator 规范中的 WatchedNamespace 指定命名空间。单个用户操作员可以监视单个命名空间。一个命名空间只能由一名用户操作员监视。
如果要将 User Operator 与不受 Strimzi 管理的 Kafka 集群一起使用,则必须将 User Operator 作为独立组件部署。
先决条件
- 必须部署 Cluster Operator。
程序
1.编辑 Kafka 资源的entityOperator 属性以包含 userOperator:
apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
name: my-cluster
spec:
#...
entityOperator:
topicOperator: {}
userOperator: {}
2.使用 EntityUserOperatorSpec 架构参考中描述的属性配置 User Operator 规范。
如果您希望所有属性都使用其默认值,请使用空对象 ({})。
3.创建或更新资源:
kubectl apply -f <kafka_configuration_file>
4.检查部署状态:
kubectl get pods -n <my_cluster_operator_namespace>
输出显示 Pod 名称和就绪情况
NAME READY STATUS RESTARTS
my-cluster-entity-operator 3/3 Running 0
# ...
my-cluster 是 Kafka 集群的名称。文章来源:https://www.toymoban.com/news/detail-504103.html
READY 显示已准备好/预期的副本数量。当状态显示为正在运行时,部署成功。
到了这里,关于Strimzi从入门到精通系列之二:部署Kafka的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!