Kubernetes 部署 Kafka 最难解决的问题就是外部暴露,本文将提供 NodePort
和 LoadBalancer
部署方案。另外,拥抱 KRaft 去 ZooKeeper 能够简化部署并提升性能,这也是挺有意思的探索。
Prerequisites
- Kubernetes 1.18+
- Helm 3.3.0+
部署案例
git clone https://github.com/sir5kong/kafka-docker.git
cd kafka-docker
# kubectl create namespace your-namespace
## 部署单节点集群, 仅启动一个 Pod
helm install kafka -n your-namespace -f ./examples/values-combined.yml ./charts/kafka
## 部署生产集群, 3 个 controller 实例, 3 个 broker 实例
helm install kafka -n your-namespace -f ./examples/values-production.yml ./charts/kafka
###### 组合使用 values 文件 ######
## 部署生产集群,并开启 kafka-ui 和 kafka exporter
helm install kafka -n your-namespace
-f ./examples/values-exporter.yml
-f ./examples/values-ui.yml
-f ./examples/values-production.yml
./charts/kafka
## 以 NodePort 对集群外暴露
helm install kafka -n your-namespace -f ./examples/values-nodeport.yml ./charts/kafka
## 以 LoadBalancer 对集群外暴露
helm install kafka -n your-namespace -f ./examples/values-loadbalancer.yml ./charts/kafka
## 开启 kafka-ui
helm install kafka -n your-namespace -f ./examples/values-ui.yml ./charts/kafka
混部模式 combined mode
process.roles
可以设置为 broker
controller
broker,controller
, 设为 broker,controller
即混部模式。
混部的服务器部署和运维管理都更加方便,缺点是不方便扩容。例如部署一个高可用集群 3 个 controller 和 3 个 broker,后续如果需要扩容 broker 可以在线操作,不影响业务。如果是混部模式扩容操作会相对复杂,而且会造成业务中断。
Chart Values
Key |
类型 |
默认值 |
描述 |
---|---|---|---|
broker.combinedMode.enabled |
bool |
|
是否开启混部模式 |
## 混部案例
broker:
combinedMode:
enabled: true
replicaCount: 1
heapOpts: "-Xms1024m -Xmx1024m"
persistence:
enabled: true
size: 20Gi
外部暴露
想要在集群外连接 Kafka 服务器,必须把每个 Broker 暴露出去,并且正确配置 advertised.listeners
。
这里支持 2 种暴露方式,NodePort
和 LoadBalancer
,有几个 broker 节点就需要对应数量的 NodePort
或 LoadBalancer
。
Chart Values
Key |
类型 |
默认值 |
描述 |
---|---|---|---|
broker.external.enabled |
bool |
|
是否开启外部暴露 |
broker.external.service.type |
string |
|
外部暴露类型,支持 |
broker.external.service.annotations |
object |
|
外部暴露的 service 注解 |
broker.external.nodePorts |
list |
|
|
broker.external.domainSuffix |
string |
|
使用 |
## NodePort 案例
broker:
replicaCount: 3
external:
enabled: true
service:
type: "NodePort"
annotations: {}
nodePorts:
- 31050
- 31051
- 31052
## LoadBalancer 案例
broker:
replicaCount: 3
external:
enabled: true
service:
type: "LoadBalancer"
annotations: {}
domainSuffix: "kafka.example.com"
项目介绍
因为 Kafka 官方不提供容器化部署方案,且目前网络上已有方案都不够简洁,所以这里完全从零开始构建容器镜像并开发 helm chart
项目特色:
- 全面兼容
KRaft
, 不依赖 ZooKeeper - 灵活使用环境变量进行配置覆盖
- 提供
helm chart
,支持 kubernetes 集群外访问
相关链接:
Docker 部署案例
## broker 默认端口 9092
docker run -d --name kafka-server
--network host
sir5kong/kafka:v3.5
自定义端口号:
## 自定义端口号
docker run -d --name kafka-server
--network host
--env KAFKA_CONTROLLER_LISTENER_PORT=29091
--env KAFKA_BROKER_LISTENER_PORT=29092
sir5kong/kafka:v3.5
文章来源于互联网:k8s 部署高可用 Kafka 集群 (支持集群外访问)
1、本站所有资源均从互联网上收集整理而来,仅供学习交流之用,因此不包含技术服务请大家谅解!
2、本站不提供任何实质性的付费和支付资源,所有需要积分下载的资源均为网站运营赞助费用或者线下劳务费用!
3、本站所有资源仅用于学习及研究使用,您必须在下载后的24小时内删除所下载资源,切勿用于商业用途,否则由此引发的法律纠纷及连带责任本站和发布者概不承担!
4、本站站内提供的所有可下载资源,本站保证未做任何负面改动(不包含修复bug和完善功能等正面优化或二次开发),但本站不保证资源的准确性、安全性和完整性,用户下载后自行斟酌,我们以交流学习为目的,并不是所有的源码都100%无错或无bug!如有链接无法下载、失效或广告,请联系客服处理!
5、本站资源除标明原创外均来自网络整理,版权归原作者或本站特约原创作者所有,如侵犯到您的合法权益,请立即告知本站,本站将及时予与删除并致以最深的歉意!
6、如果您也有好的资源或教程,您可以投稿发布,成功分享后有站币奖励和额外收入!
7、如果您喜欢该资源,请支持官方正版资源,以得到更好的正版服务!
8、请您认真阅读上述内容,注册本站用户或下载本站资源即您同意上述内容!
原文链接:https://www.shuli.cc/?p=14101,转载请注明出处。
评论0