
在 Kubernetes 集群上部署 Kafka
最近在测试日志采集的时候,发现日志数据量稍微大一点,Elasticsearch 就有点抗不住了,对于 ES 的优化可能不是一朝一夕能够完成的,所以打算加一个中间层,将日志输出到 Kafka,然后通过 Logstash 从 Kafka 里面去消费日志存入 Elasticsearch。在测试环境现在并没有一套 Kafka 集群,所以我们来先在测试环境搭建一套 Kafka 集群。
本文使用到的相关环境版本如下:
同样为了简单起见,我们这里使用 Helm3 来安装 Kafka,首先我们需要添加一个 incubator 的仓库地址,因为 stable 的仓库里面并没有合适的 Kafka 的 Chart 包:
将 Kafka 的 Helm Chart 包下载到本地,这有助于我们了解 Chart 包的使用方法,当然也可以省去这一步:
然后新建一个名为 kafka-test.yaml 的文件,内容如下所示:
由于 kafka 初次启动的时候比较慢,所以尽量将健康检查的初始化时间设置长一点,我们这里设置成 livenessProbe.initialDelaySeconds=60,资源声明可以根据我们集群的实际情况进行声明,最后如果需要持久化 kafka 的数据,还需要提供一个 StorageClass,我们也知道 kafka 对磁盘的 IO 要求本身也是非常高的,所以最好是用 Local PV,我们这里使用的是 ceph rbd 的一个 StorageClass 资源对象:(storageclass.yaml)
具体的存储方案需要根据我们自己的实际情况进行选择,我这里使用的 Rook 搭建的 Ceph,使用相对简单很多,感兴趣的也可以查看前面的文章 使用 Rook 快速搭建 Ceph 集群 了解相关信息。
定制的 values 文件准备好过后就可以直接使用 Helm 来进行安装了:
安装成功后可以查看下 Release 的状态:
正常情况下隔一会儿就会部署上3个实例的 kafka 和 zookeeper 的集群:
部署完成后创建一个测试的客户端来测试下 kafka 集群是否正常了:(testclient.yaml)
同样直接部署上面的资源对象即可:
测试的客户端创建完成后,通过如下命令创建一个新的 topic:
可以看到 test1 这个 topic 创建成功了。然后可以运行如下命令来监听 test1 这个 topic 的消息:
然后开启一个新的命令行终端生成一条消息:
这个时候在 test1 这个 topic 这边的监听器里面可以看到对应的消息记录了:
到这里就表明我们部署的 kafka 已经成功运行在了 Kubernetes 集群上面。当然我们这里只是在测试环境上使用,对于在生产环境上是否可以将 kafka 部署在 Kubernetes 集群上需要考虑的情况就非常多了,对于有状态的应用都更加推荐使用 Operator 去使用,比如 Confluent 的 Kafka Operator(https://www.confluent.io/confluent-operator/),总之,你能 hold 住就无所谓,随便用🤣
本文转载自微信公众号「k8s技术圈」
原文链接:https://mp.weixin.qq.com/s/EYkciSbTQw8c_zPHd9Ss9w.
