首页 > 其他分享 >k8s部署Kafka集群超详细讲解

k8s部署Kafka集群超详细讲解

时间:2024-10-17 15:20:06浏览次数:10  
标签:log name -- kafka ms 讲解 override k8s Kafka

准备部署环境

Kubernetes集群信息

NAMEVERSION
k8s-masterv1.29.2
k8s-node01v1.29.2
k8s-node02v1.29.2

Kafka:3.7.1版本
Zookeeper:3.6.3版本

准备StorageClass

# kubectl get sc 
NAME                PROVISIONER      RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
nfs-csi (default)   nfs.csi.k8s.io   Delete          Immediate           false                  51d

创建namespace

Kubectl create ns kafka

部署zookeeper集群

编写zookeeper集群部署zk.yaml文件

apiVersion: v1
kind: Service
metadata:
  name: zk-hs
  namespace: kafka
  labels:
    app: zk
spec:
  ports:
  - port: 2888
    name: server
  - port: 3888
    name: leader-election
  - port: 2181
    name: client
  clusterIP: None
  selector:
    app: zk
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: zk
  namespace: kafka
spec:
  selector:
    matchLabels:
      app: zk
  serviceName: zk-hs
  replicas: 3
  updateStrategy:
    type: RollingUpdate
  podManagementPolicy: Parallel
  template:
    metadata:
      labels:
        app: zk
    spec:
      containers:
      - name: zookeeper
        imagePullPolicy: Alawys
        image: registry.cn-hangzhou.aliyuncs.com/aliyun_0612/zookeeper:3.6.3
        resources:
          requests:
            memory: "200Mi"
            cpu: "0.1"
        ports:
        - containerPort: 2181
          name: client
        - containerPort: 2888
          name: server
        - containerPort: 3888
          name: leader-election
        command:
        - sh
        - -c
        - "start-zookeeper \
          --servers=3 \
          --data_dir=/var/lib/zookeeper/data \
          --data_log_dir=/var/lib/zookeeper/data/log \
          --conf_dir=/opt/zookeeper/conf \
          --client_port=2181 \
          --election_port=3888 \
          --server_port=2888 \
          --tick_time=2000 \
          --init_limit=10 \
          --sync_limit=5 \
          --heap=512M \
          --max_client_cnxns=60 \
          --snap_retain_count=3 \
          --purge_interval=12 \
          --max_session_timeout=40000 \
          --min_session_timeout=4000 \
          --log_level=INFO"
        readinessProbe:
          exec:
            command:
            - sh
            - -c
            - "zookeeper-ready 2181"
          initialDelaySeconds: 10
          timeoutSeconds: 5
        livenessProbe:
          exec:
            command:
            - sh
            - -c
            - "zookeeper-ready 2181"
          initialDelaySeconds: 10
          timeoutSeconds: 5
        volumeMounts:
        - name: datadir
          mountPath: /var/lib/zookeeper
      securityContext:
        runAsUser: 0
        fsGroup: 0
  volumeClaimTemplates:
  - metadata:
      name: datadir
    spec:
      accessModes: [ "ReadWriteMany" ]
      storageClassName: nfs-csi
      resources:
        requests:
          storage: 2Gi

kafka集群部署kafka.yaml文件

---
apiVersion: v1
kind: Service
metadata:
  name: kafka-svc
  namespace: kafka
  labels:
    app: kafka
spec:
  ports:
  - port: 9092
    name: server
  clusterIP: None
  selector:
    app: kafka
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: kafka
  namespace: kafka
spec:
  selector:
     matchLabels:
        app: kafka
  serviceName: kafka-svc
  replicas: 3
  template:
    metadata:
      labels:
        app: kafka
    spec:
      containers:
      - name: k8s-kafka
        imagePullPolicy: Always 
        image: registry.cn-hangzhou.aliyuncs.com/aliyun_0612/kafka:3.7.1
        resources:
          requests:
            memory: "600Mi"
            cpu: 500m
        ports:
        - containerPort: 9092
          name: server
        command:
        - sh
        - -c
        - "exec /opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties --override broker.id=${HOSTNAME##*-} \
          --override listeners=PLAINTEXT://:9092 \
          --override zookeeper.connect=zk-hs.kafka.svc.cluster.local:2181 \
          --override log.dir=/var/lib/kafka \
          --override auto.create.topics.enable=true \
          --override auto.leader.rebalance.enable=true \
          --override background.threads=10 \
          --override compression.type=producer \
          --override delete.topic.enable=false \
          --override leader.imbalance.check.interval.seconds=300 \
          --override leader.imbalance.per.broker.percentage=10 \
          --override log.flush.interval.messages=9223372036854775807 \
          --override log.flush.offset.checkpoint.interval.ms=60000 \
          --override log.flush.scheduler.interval.ms=9223372036854775807 \
          --override log.retention.bytes=-1 \
          --override log.retention.hours=168 \
          --override log.roll.hours=168 \
          --override log.roll.jitter.hours=0 \
          --override log.segment.bytes=1073741824 \
          --override log.segment.delete.delay.ms=60000 \
          --override message.max.bytes=1000012 \
          --override min.insync.replicas=1 \
          --override num.io.threads=8 \
          --override num.network.threads=3 \
          --override num.recovery.threads.per.data.dir=1 \
          --override num.replica.fetchers=1 \
          --override offset.metadata.max.bytes=4096 \
          --override offsets.commit.required.acks=-1 \
          --override offsets.commit.timeout.ms=5000 \
          --override offsets.load.buffer.size=5242880 \
          --override offsets.retention.check.interval.ms=600000 \
          --override offsets.retention.minutes=1440 \
          --override offsets.topic.compression.codec=0 \
          --override offsets.topic.num.partitions=50 \
          --override offsets.topic.replication.factor=3 \
          --override offsets.topic.segment.bytes=104857600 \
          --override queued.max.requests=500 \
          --override quota.consumer.default=9223372036854775807 \
          --override quota.producer.default=9223372036854775807 \
          --override replica.fetch.min.bytes=1 \
          --override replica.fetch.wait.max.ms=500 \
          --override replica.high.watermark.checkpoint.interval.ms=5000 \
          --override replica.lag.time.max.ms=10000 \
          --override replica.socket.receive.buffer.bytes=65536 \
          --override replica.socket.timeout.ms=30000 \
          --override request.timeout.ms=30000 \
          --override socket.receive.buffer.bytes=102400 \
          --override socket.request.max.bytes=104857600 \
          --override socket.send.buffer.bytes=102400 \
          --override unclean.leader.election.enable=true \
          --override zookeeper.session.timeout.ms=6000 \
          --override zookeeper.set.acl=false \
          --override broker.id.generation.enable=true \
          --override connections.max.idle.ms=600000 \
          --override controlled.shutdown.enable=true \
          --override controlled.shutdown.max.retries=3 \
          --override controlled.shutdown.retry.backoff.ms=5000 \
          --override controller.socket.timeout.ms=30000 \
          --override default.replication.factor=1 \
          --override fetch.purgatory.purge.interval.requests=1000 \
          --override group.max.session.timeout.ms=300000 \
          --override group.min.session.timeout.ms=6000 \
          --override inter.broker.protocol.version=2.2.0 \
          --override log.cleaner.backoff.ms=15000 \
          --override log.cleaner.dedupe.buffer.size=134217728 \
          --override log.cleaner.delete.retention.ms=86400000 \
          --override log.cleaner.enable=true \
          --override log.cleaner.io.buffer.load.factor=0.9 \
          --override log.cleaner.io.buffer.size=524288 \
          --override log.cleaner.io.max.bytes.per.second=1.7976931348623157E308 \
          --override log.cleaner.min.cleanable.ratio=0.5 \
          --override log.cleaner.min.compaction.lag.ms=0 \
          --override log.cleaner.threads=1 \
          --override log.cleanup.policy=delete \
          --override log.index.interval.bytes=4096 \
          --override log.index.size.max.bytes=10485760 \
          --override log.message.timestamp.difference.max.ms=9223372036854775807 \
          --override log.message.timestamp.type=CreateTime \
          --override log.preallocate=false \
          --override log.retention.check.interval.ms=300000 \
          --override max.connections.per.ip=2147483647 \
          --override num.partitions=3 \
          --override producer.purgatory.purge.interval.requests=1000 \
          --override replica.fetch.backoff.ms=1000 \
          --override replica.fetch.max.bytes=1048576 \
          --override replica.fetch.response.max.bytes=10485760 \
          --override reserved.broker.max.id=1000 "
        env:
        - name: KAFKA_HEAP_OPTS
          value : "-Xmx512M -Xms512M"
        - name: KAFKA_OPTS
          value: "-Dlogging.level=INFO"
        volumeMounts:
        - name: datadir
          mountPath: /var/lib/kafka
        readinessProbe:
          tcpSocket:
            port: 9092
          timeoutSeconds: 1
          initialDelaySeconds: 5
      securityContext:
        runAsUser: 1000
        fsGroup: 1000
  volumeClaimTemplates:
  - metadata:
      name: datadir
    spec:
      accessModes: [ "ReadWriteMany" ]
      storageClassName: nfs-csi
      resources:
        requests:
          storage: 10Gi

部署集群

部署集群

[root@k8s-master ~]# kubectl apply -f zk.yaml
[root@k8s-master ~]# kubectl apply -f kafka.yaml

检查状态
在这里插入图片描述
出现启动失败情况,解决不了可以下方评论,专业大神会提供解决方案

验证zk集群

进入zk pod中,查看zk集群是否正常

[root@k8s-master test]# kubectl exec -it -nkafka zk-0 bash

在这里插入图片描述
使用

[root@k8s-master test]# zkCli.sh

在这里插入图片描述
查看kafka brokers
在这里插入图片描述
通过验证,zk集群正常

验证Kafka集群

进入kafka pod节点中

[root@k8s-master ~]# kubectl exec -it -nkafka kafka-0 bash

在这里插入图片描述
创建测试topic

/opt/kafka/bin/kafka-topics.sh --bootstrap-server localhost:9092 --create --topic mytopic --replication-factor 3 --partitions 3

这里要使用绝对路径
在这里插入图片描述
使用describe 查看topic分区数以及副本数正常

/opt/kafka/bin/kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic mytopic

这里要使用绝对路径
在这里插入图片描述
至此,kafka集群在kubernetes上部署已经完成。
有什么问题可以下方评论。

标签:log,name,--,kafka,ms,讲解,override,k8s,Kafka
From: https://blog.csdn.net/qq_40477248/article/details/143017354

相关文章

  • 旁路电容和去耦合什么作用:【图文讲解】
    1:旁路和去耦旁路电容:BypassCapacitor去耦电容:DecouplingCapacitor这两个概念在电路中是常见的,但是真正理解起来并不容易。我们先回到英文语境里,来看它们的意思。Bypass:在英语中有抄小路的意思,在电路中也这个意思,如下图所示:couple:在英语中是一对的意思,引申为配对、耦合......
  • 网上纪念馆(源码+文档+部署+讲解)
    网上纪念馆是成品商业化项目,系统可基于源码二开。系统概述是一款为个人和家族提供线上祭祀、纪念服务的平台,涵盖了纪念馆创建、供奉记录、祭品管理、背景音乐设置等功能,让用户随时随地缅怀先人。详细功能介绍:纪念馆管理:支持创建不同类型的纪念馆(名人纪念馆、普通纪念馆......
  • 电子病历系统(源码+文档+部署+讲解)
    电子病历系统是成品商业化项目,系统可基于源码二开。系统概述系统功能总结患者中心病历模版工作台:提供可自定义的病历模版,方便医生快速生成病历。预约管理:患者可在线预约就诊,系统自动生成预约记录。诊所管理:患者可查询就诊记录、查看诊所信息等。回访管理:系统可对......
  • 售票系统(源码+文档+部署+讲解)
    售票系统是成品商业化项目,系统可基于源码二开。系统概述票务管理系统是一款为游乐园量身定制的综合性管理平台,涵盖了从门票销售、检票管理到财务统计等全流程的业务,旨在提高运营效率,提升游客体验。详细功能介绍:票务管理:支持单票、套票销售,提供手工出票、检票管理等功......
  • Charger IC原理讲解与个人理解
    ChargerIC原理讲解与个人理解ChargerICChargerIC的主要功能包括:ChargerIC的共同点:ChargerIC典型应用图OVPOVP的工作原理:OVP的实现方法:ChargerICChargerIC(充电集成电路)是一种专门用于管理电池充电的集成电路。它的主要功能是控制电池的充电过程,以确保安全、......
  • 基于SpringBoot+Vue+uniapp的互助学习小程序的详细设计和实现(源码+lw+部署文档+讲解
    文章目录前言详细视频演示具体实现截图技术栈后端框架SpringBoot前端框架Vue持久层框架MyBaitsPlus系统测试系统测试目的系统功能测试系统测试结论为什么选择我代码参考数据库参考源码获取前言......
  • 基于springboot高校软件工程专业人才培养达成评价系统(源码+文档+部署讲解等)
    目的:本课题旨在设计并实现一个基于SpringBoot的攀枝花学院软件工程专业人才培养达成评价系统,提高人才培养质量和效率,为学校的教学管理和决策提供科学依据。意义:一、提高人才培养质量科学评价体系:通过建立科学合理的人才培养达成评价体系,能够全面、客观地评价学生的专......
  • 基于微信小程序+springboot的加油站会员管理系统设计与实现(源码+文档+部署讲解等)
    目的:本课题旨在设计并实现一个基于SpringBoot的攀枝花市金河加油站会员管理系统,提高加油站的会员管理效率和服务质量,为加油站的经营决策提供数据支持。意义:一、提高会员管理效率自动化管理流程:系统可以实现会员信息的自动录入、更新、查询和统计等功能,减少人工操作的......
  • 基于微信小程序的木材销售系统(源码+文档+部署讲解等)
    目的:本课题旨在设计并实现一个基于SpringBoot的木材销售系统,提高木材销售的效率和管理水平,为木材企业提供便捷的销售渠道和管理工具。意义:一、提高木材销售效率自动化销售流程:系统可以实现木材销售的自动化流程,包括订单管理、库存管理、发货管理等,减少人工操作的繁琐......
  • k8s-NFS系统配置
    k8s-NFS系统配置NFS(networkfilesystem),nfs文件系统在k8s中主要用于持久化存储,可以被多个pod访问和共享数据。特点数据持久性nfs为k8s的pod提供了一种持久化数据的方式,即使pod被删除,数据也不会丢失,这是因为数据存在nfs服务器上,并不是存在pod上。资源共享nfs系统的文件可以......