本文档将详细阐述如何利用 Helm 这一强大的工具,快速而高效地在 K8s 集群上安装并配置一个 Kafka 集群。
实战服务器配置(架构 1:1 复刻小规模生产环境,配置略有不同)
主机名 |
IP |
CPU |
内存 |
系统盘 |
数据盘 |
用途 |
ksp-registry |
192.168.9.90 |
4 |
8 |
40 |
200 |
Harbor 镜像仓库 |
ksp-control-1 |
192.168.9.91 |
4 |
8 |
40 |
100 |
KubeSphere/k8s-control-plane |
ksp-control-2 |
192.168.9.92 |
4 |
8 |
40 |
100 |
KubeSphere/k8s-control-plane |
ksp-control-3 |
192.168.9.93 |
4 |
8 |
40 |
100 |
KubeSphere/k8s-control-plane |
ksp-worker-1 |
192.168.9.94 |
8 |
16 |
40 |
100 |
k8s-worker/CI |
ksp-worker-2 |
192.168.9.95 |
8 |
16 |
40 |
100 |
k8s-worker |
ksp-worker-3 |
192.168.9.96 |
8 |
16 |
40 |
100 |
k8s-worker |
ksp-storage-1 |
192.168.9.97 |
4 |
8 |
40 |
400+ |
ElasticSearch/Longhorn/Ceph/NFS |
ksp-storage-2 |
192.168.9.98 |
4 |
8 |
40 |
300+ |
ElasticSearch/Longhorn/Ceph |
ksp-storage-3 |
192.168.9.99 |
4 |
8 |
40 |
300+ |
ElasticSearch/Longhorn/Ceph |
ksp-gpu-worker-1 |
192.168.9.101 |
4 |
16 |
40 |
100 |
k8s-worker(GPU NVIDIA Tesla M40 24G) |
ksp-gpu-worker-2 |
192.168.9.102 |
4 |
16 |
40 |
100 |
k8s-worker(GPU NVIDIA Tesla P100 16G) |
ksp-gateway-1 |
192.168.9.103 |
2 |
4 |
40 |
自建应用服务代理网关/VIP:192.168.9.100 |
|
ksp-gateway-2 |
192.168.9.104 |
2 |
4 |
40 |
自建应用服务代理网关/VIP:192.168.9.100 |
|
ksp-mid |
192.168.9.105 |
4 |
8 |
40 |
100 |
部署在 k8s 集群之外的服务节点(Gitlab 等) |
合计 |
15 |
68 |
152 |
600 |
2100+ |
实战环境涉及软件版本信息
- 操作系统:openEuler 22.03 LTS SP3 x86_64
- KubeSphere:v3.4.1
- Kubernetes:v1.28.8
- KubeKey: v3.1.1
- Bitnami Kafka Helm Charts:29.3.13
- Kafka: 3.7.1
1. 前提条件
目前在 K8s 集群部署 Kafka 的主流方案有以下几种:
- 手写资源配置清单(麻烦,涉及的组件、配置多)
- Kafka Helm chart (Bitnami 出品,简单可定制,但是需要花时间成本学习可配置参数)
经过细致的调研、思考,本文选择采用 Bitnami 的 Kafka Helm chart 进行部署。Bitnami 提供的 Helm chart 以其稳定性和易用性著称,是快速部署 Kafka 到 Kubernetes 集群的理想选择。
编写本文的目的是为了验证 Kafka Helm chart 的部署可行性,并评估其在实际应用中的表现。为了确保过程的顺利和提高成功几率,以下部署配置进行了适度简化,某些配置并不符合生产环境的标准。
- 外部访问安全协议,使用了
PLAINTEXT
,关闭了访问认证,默认值为SASL_PLAINTEXT
。生产环境务必开启认证。 - 外部访问使用了 NodePort 模式
- 默认 StorageClass 使用了 NFS
- 没有考虑数据持久化的配置
对于计划在生产环境部署的用户,我建议详细参考 Bitnami 官方文档,以获取更全面的配置指导和最佳实践。我认为生产环境应该考虑的几项配置如下:
- 外部访问安全协议,选择
PLAINTEXT
,SASL_PLAINTEXT
,SASL_SSL
和SSL
中的哪种方式加密认证方式, - 数据、日志持久化配置
- k8s 集群外部访问 Kafka 的方式,NodePort 是否合适?是否需要使用 LoadBalancer、Ingress
- 内否启用内置的监控
Metrics
- 是否利用 Helm 生成 Kubectl 可用的资源配置清单,离线部署
2. 使用 Helm 安装 Kafka 集群
2.1 安装 Kafka Helm Chart
- 添加 Kafka Helm repository
-
<