首页 > 其他分享 >helm部署Kafka集群

helm部署Kafka集群

时间:2024-08-02 17:38:56浏览次数:14  
标签:-- strimzi kafka cluster 集群 helm Kafka my

生产环境推荐的kafka部署方式为operator方式部署,Strimzi是目前最主流的operator方案。集群数据量较小的话,可以采用NFS共享存储,数据量较大的话可使用local pv存储。

部署operator

[root@k8s-master31 01-kafka]# helm repo add strimzi https://strimzi.io/charts/
"strimzi" has been added to your repositories
[root@k8s-master31 01-kafka]# helm install strimzi -n kafka strimzi/strimzi-kafka-operator
NAME: strimzi
LAST DEPLOYED: Fri Aug  2 11:17:49 2024
NAMESPACE: kafka
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Thank you for installing strimzi-kafka-operator-0.42.0

To create a Kafka cluster refer to the following documentation.

https://strimzi.io/docs/operators/latest/deploying.html#deploying-cluster-operator-helm-chart-str
[root@k8s-master31 01-kafka]# kubectl get pod -n kafka
NAME                                       READY   STATUS    RESTARTS   AGE
strimzi-cluster-operator-bc8c67c48-7s4gf   1/1     Running   0          7m39s
[root@k8s-master31 01-kafka]# helm -n kafka list
NAME    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART                           APP VERSI
strimzi kafka           1               2024-08-02 11:17:49.681761827 +0800 CST deployed        strimzi-kafka-operator-0.42.0   0.42.0

创建 Kafka 集群

Strimzi官方仓库为我们提供了各种场景下的示例文件,资源清单下载地址:https://github.com/strimzi/strimzi-kafka-operator/releases

  • 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 节点的临时群集。
[root@k8s-master31 01-kafka]# wget https://github.com/strimzi/strimzi-kafka-operator/releases/download/0.42.0/strimzi-0.42.0.tar.gz
[root@k8s-master31 01-kafka]# tar xf strimzi-0.42.0.tar.gz
[root@k8s-master31 01-kafka]# cd strimzi-0.42.0/examples/kafka/
[root@k8s-master31 kafka]# ls
kafka-ephemeral-single.yaml  kafka-ephemeral.yaml  kafka-jbod.yaml  kafka-persistent-single.yaml  kafka-persistent.yaml  kafka-with-node-pools.yaml kraft

创建 pvc

此处以nfs存储为例,提前创建pvc资源,分别用于3个zookeeper和3个kafka持久化存储数据使用。

[root@tiaoban kafka]# cat kafka-pvc.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: data-my-cluster-zookeeper-0
  namespace: kafka
spec:
  storageClassName: nfs-client
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 100Gi
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: data-my-cluster-zookeeper-1
  namespace: kafka
spec:
  storageClassName: nfs-client
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 100Gi
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: data-my-cluster-zookeeper-2
  namespace: kafka
spec:
  storageClassName: nfs-client
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 100Gi
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: data-0-my-cluster-kafka-0
  namespace: kafka
spec:
  storageClassName: nfs-client
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 100Gi
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: data-0-my-cluster-kafka-1
  namespace: kafka
spec:
  storageClassName: nfs-client
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 100Gi
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: data-0-my-cluster-kafka-2
  namespace: kafka
spec:
  storageClassName: nfs-client
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 100Gi

部署kafka和zookeeper

参考官方仓库的kafka-persistent.yaml示例文件,部署三个 ZooKeeper 和三个 Kafka 节点的持久集群。

apiVersion: kafka.strimzi.io/v1beta2  # API版本,指定使用Strimzi Kafka Operator的v1beta2版本
kind: Kafka  # 资源类型为Kafka
metadata:
  name: my-cluster  # Kafka集群的名称
spec:  # Kafka集群的规范
  kafka:  # Kafka集群的配置
    version: 3.7.1  # Kafka的版本
    replicas: 3  # Kafka的副本数量
    listeners:  # Kafka监听器配置
      - name: plain  # 监听器名称为plain
        port: 9092  # 监听器端口为9092
        type: internal  # 监听器类型为内部
        tls: false  # 是否启用TLS(传输层安全性),此处为false
      - name: tls  # 监听器名称为tls
        port: 9093  # 监听器端口为9093
        type: internal  # 监听器类型为内部
        tls: true  # 是否启用TLS,此处为true
    config:  # Kafka的配置
      offsets.topic.replication.factor: 3  # offsets主题的副本因子
      transaction.state.log.replication.factor: 3  # 事务状态日志的副本因子
      transaction.state.log.min.isr: 2  # 事务状态日志的最小同步副本数
      default.replication.factor: 3  # 默认副本因子
      min.insync.replicas: 2  # 最小同步副本数
      inter.broker.protocol.version: "3.7"  # Kafka代理间的协议版本
    storage:  # Kafka存储配置
      type: jbod  # 存储类型为JBOD(Just a Bunch of Disks)
      volumes:  # 存储卷配置
      - id: 0  # 存储卷ID
        type: persistent-claim  # 存储卷类型为持久化声明
        size: 100Gi  # 存储卷大小为100Gi
        deleteClaim: false  # 是否在删除Kafka集群时删除存储声明,此处为false
  zookeeper:  # Zookeeper的配置
    replicas: 3  # Zookeeper的副本数量
    storage:  # Zookeeper存储配置
      type: persistent-claim  # 存储类型为持久化声明
      size: 100Gi  # 存储大小为100Gi
      deleteClaim: false  # 是否在删除Zookeeper集群时删除存储声明,此处为false
  entityOperator:  # 实体操作器的配置
    topicOperator: {}  # 主题操作器的配置(空表示启用默认配置)
    userOperator: {}  # 用户操作器的配置(空表示启用默认配置)

访问验证

[root@k8s-master31 kafka]#  kubectl get pod -n kafka
NAME                                          READY   STATUS    RESTARTS   AGE
kafka-ui-dcfdd54c8-q45g5                      1/1     Running   0          50m
my-cluster-entity-operator-86f6555b5b-hkkfk   2/2     Running   0          57m
my-cluster-kafka-0                            1/1     Running   0          57m
my-cluster-kafka-1                            1/1     Running   0          57m
my-cluster-kafka-2                            1/1     Running   0          57m
my-cluster-zookeeper-0                        1/1     Running   0          59m
my-cluster-zookeeper-1                        1/1     Running   0          59m
my-cluster-zookeeper-2                        1/1     Running   0          59m
strimzi-cluster-operator-bc8c67c48-p6ztc      1/1     Running   0          4h24m
[root@k8s-master31 kafka]#
[root@k8s-master31 kafka]#  kubectl get svc -n kafka
NAME                          TYPE        CLUSTER-IP        EXTERNAL-IP   PORT(S)                                        AGE
my-cluster-kafka-bootstrap    ClusterIP   172.101.111.112   <none>        9091/TCP,9092/TCP,9093/TCP                     58m
my-cluster-kafka-brokers      ClusterIP   None              <none>        9090/TCP,9091/TCP,8443/TCP,9092/TCP,9093/TCP   58m
my-cluster-zookeeper-client   ClusterIP   172.105.10.29     <none>        2181/TCP                                       60m
my-cluster-zookeeper-nodes    ClusterIP   None              <none>        2181/TCP,2888/TCP,3888/TCP                     60m
[root@k8s-master31 kafka]#

部署kafka-ui

:::info
官网: https://docs.kafka-ui.provectus.io/configuration/helm-charts/quick-start
:::

# 添加helm仓库地址
helm repo add kafka-ui https://provectus.github.io/kafka-ui-charts

创建configmap资源,在configmap中指定kafka连接地址

[root@tiaoban kafka]# cat kafka-ui.yaml 
apiVersion: v1
kind: ConfigMap
metadata:
  name: kafka-ui-helm-values
  namespace: kafka
data:
  KAFKA_CLUSTERS_0_NAME: "kafka-cluster"
  KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: "my-cluster-kafka-brokers.kafka.svc:9092"
  AUTH_TYPE: "DISABLED"
  MANAGEMENT_HEALTH_LDAP_ENABLED: "FALSE" 

创建 configmap

[root@tiaoban kafka]# kubectl apply -f kafka-ui.yaml 
configmap/kafka-ui-helm-values created

helm方式部署kafka-ui并指定 configmap 配置文件

[root@k8s-master31 kafka]# helm install kafka-ui kafka-ui/kafka-ui -n kafka --set existingConfigMap="kafka-ui-helm-values"
NAME: kafka-ui
LAST DEPLOYED: Fri Aug  2 15:01:32 2024
NAMESPACE: kafka
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
1. Get the application URL by running these commands:
  export POD_NAME=$(kubectl get pods --namespace kafka -l "app.kubernetes.io/name=kafka-ui,app.kubernetes.io/instance=kafka-ui" -o jsonpath="{.items[0].metadata.name}")
  echo "Visit http://127.0.0.1:8080 to use your application"
  kubectl --namespace kafka port-forward $POD_NAME 8080:8080
# 端口映射
[root@k8s-master31 kafka]# kubectl --namespace kafka port-forward --address 0.0.0.0 $POD_NAME 8080:8080
Forwarding from 0.0.0.0:8080 -> 8080

测试

要创建一个可以用作 Kafka 客户端的 Pod,请运行以下命令:

kubectl run kafka-cluster-client --restart='Never' --image bitnami/kafka:3.4.1 --namespace kafka --command -- sleep infinity

#进入容器
kubectl exec --tty -i kafka-cluster-client --namespace kafka -- bash
# 启动生产者
kafka-console-producer.sh \
            --broker-list my-cluster-kafka-brokers.kafka.svc:9092 \
            --topic test

image.png

# 启动消费者
kafka-console-consumer.sh \
            --bootstrap-server my-cluster-kafka-brokers.kafka.svc:9092 \
            --topic test \
            --from-beginning

image.png
浏览器访问 ip:8080
image.png

标签:--,strimzi,kafka,cluster,集群,helm,Kafka,my
From: https://www.cnblogs.com/boradviews/p/18339255

相关文章

  • 在淘客返利系统中使用Kafka实现事件驱动架构
    在淘客返利系统中使用Kafka实现事件驱动架构大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!今天我们来探讨如何在淘客返利系统中使用Kafka实现事件驱动架构,以提高系统的可扩展性和灵活性。一、什么是事件驱动架构事件驱动架构(Event-DrivenArchit......
  • docker方式安装redis集群
    创建一个Redis集群,你需要按照一定的步骤来配置Docker容器和Redis实例。以下是详细的步骤来帮助你完成这个过程,并创建一个包含六台服务器的Redis集群。准备工作确保你已经安装了Docker和DockerCompose(可选但推荐)。创建Redis集群创建目录结构在主机上创建必要的......
  • redis集群搭建,哨兵集群搭建
    一、首先创建redis文件夹,下载redis源码(通过yum下载无法指定文件夹,比较乱)[root@dxhredis]#mkdir/redis[root@dxhredis]#cd/redis/[root@dxhredis]#wgethttp://download.redis.io/releases/redis-6.2.6.tar.gz二、解压源码,并下载工具进行编译[root@dxhredis]#ta......
  • 使用 Python 生产者和消费者在 Kubernetes minikube 上设置 Kafka Kraft
    我正在尝试从kubernetes集群外部连接到kubernetesminikubekafkapod。服务器启动没有任何问题,但我无法设法将本地kafka生产者/消费者连接到外部kafkapod。在集群内的kafka服务器映像上,我将bootstrap-server设置为:bin/kafka-topics.sh--create--bootst......
  • MongoDB两地三中心集群架构设计、全球多写集群架构设计
    文章目录高级集群架构设计两地三中心集群架构设计容灾级别两地三中心方案:复制集跨中心部署两地三中心部署的考量点两地三中心复制集搭建环境准备整体架构配置域名解析启动5个MongoDB实例初始化复制集配置选举优先级启动持续写脚本(每2秒写一条记录)测试结果总结全球多......
  • MongoDB复制集/集群搭建详解
    文章目录复制集介绍三节点复制集模式Pss模式PSA模式典型三节点复制集环境搭建注意事项搭建配置复制集复制集状态查询复制集常用命令安全认证创建用户创建keyFile文件启动mongod复制集连接方式复制集成员角色属性成员角色配置隐藏节点配置延时节点添加投票节点移除复制......
  • kubeasz 制作k8s 集群离线安装包
    转载:kubeasz制作k8s集群离线安装包kubeasz制作k8s集群离线安装包大家好,欢迎来到运维有术本文介绍了,利用ezdown制作kubeasz离线部署k8s集群所需的离线安装包。使用kubeasz离线安装k8s集群需要下载四个部分:kubeasz项目代码二进制文件(k8s、etcd、container......
  • kubeadm部署k8s集群
    目录1.环境准备2.升级内核3.所有节点安装docker4.安装kubeadm,kubelet和kubectl5.高可用配置6.部署K8S集群7.所有节点部署网络插件flannel8.部署Dashboard可视化面板9.更新k8s证书有效期1.环境准备7-2192.168.9.210master017-5192.168.9.120master027-7192.168.9.......
  • kafka实际应用
    JavaMQ在实际业务场景中需要注意的问题消息丢失:发送方丢失:未存储到kafka,由于leader切换导致的丢失消费方丢失:拉取到消息提交后尚未实际消费完成即异常了,导致拉取到的消息没有实际消费重复消费:多个消费者消费同一partition提交时覆盖问题导致的重复顺序消费:partit......
  • 智算集群网络拥塞原因分析及IB组网的优势
     智算集群网络在什么场景下会出现拥塞?CLOS网络架构(以其主要提出者CharlesClos命名,最初用于实现无阻塞的电话交换网络)是一种广泛应用于现代数据中心和高性能计算环境中的网络设计方法。智算集群建设中落地的CLOS架构主要是:Spine-Leaf网络架构。其除了支持Overlay层面技术之外;Sp......