k8s 部署高可用 Kafka 集群 (支持集群外访问)

Kubernetes 部署 Kafka 最难解决的问题就是外部暴露,本文将提供 NodePortLoadBalancer 部署方案。另外,拥抱 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

false

是否开启混部模式

## 混部案例
broker:
  combinedMode:
    enabled: true
  replicaCount: 1
  heapOpts: "-Xms1024m -Xmx1024m"
  persistence:
    enabled: true
    size: 20Gi

 

外部暴露

想要在集群外连接 Kafka 服务器,必须把每个 Broker 暴露出去,并且正确配置 advertised.listeners

这里支持 2 种暴露方式,NodePortLoadBalancer,有几个 broker 节点就需要对应数量的 NodePortLoadBalancer

Chart Values

Key

类型

默认值

描述

broker.external.enabled

bool

false

是否开启外部暴露

broker.external.service.type

string

NodePort

外部暴露类型,支持 NodePortLoadBalancer

broker.external.service.annotations

object

{}

外部暴露的 service 注解

broker.external.nodePorts

list

[]

NodePort 端口号,至少提供一个端口号,如果端口数量少于 broker 节点数,则自动递增

broker.external.domainSuffix

string

kafka.example.com

使用 LoadBalancer 对外暴露则必须使用域名,broker 对应的外部域名是 POD_NAME + 域名后缀,例如 kafka-broker-0.kafka.example.com,部署结束后需要完成域名解析配置

## 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

评论0

显示验证码
没有账号?注册  忘记密码?