当前位置: 首页 > news >正文

k8s部署kafka集群

k8s部署kafka集群

kafka(Kafka with KRaft)
mkdir -p ~/kafka-ymlkubectl create ns kafka
cat > ~/kafka-yml/kafka.yml << 'EOF'
apiVersion: v1
kind: Service
metadata:name: kafka-headlessnamespace: kafkalabels:app: kafka
spec:type: ClusterIPclusterIP: Noneports:- name: kafka-clientport: 9092targetPort: kafka-client- name: controllerport: 9093targetPort: controller   selector:app: kafka
---
#部署 Service,用于外部访问 Kafka
apiVersion: v1
kind: Service
metadata:name: kafka-servicenamespace: kafkalabels:app: kafka
spec:type: NodePortports:- name: kafka-clientport: 9092targetPort: kafka-clientnodePort: 30992selector:app: kafka
---
# 分别在 StatefulSet 中的每个 Pod 中获取相应的序号作为 KAFKA_CFG_NODE_ID(只能是整数),然后再执行启动脚本
apiVersion: v1
kind: ConfigMap
metadata:name: ldc-kafka-scriptsnamespace: kafka
data:setup.sh: |-#!/bin/bashexport KAFKA_CFG_NODE_ID=${MY_POD_NAME##*-} exec /opt/bitnami/scripts/kafka/entrypoint.sh /opt/bitnami/scripts/kafka/run.sh
---
apiVersion: apps/v1
kind: StatefulSet
metadata:name: kafkanamespace: kafkalabels:app: kafka
spec:selector:matchLabels:app: kafkaserviceName: kafka-headlesspodManagementPolicy: Parallelreplicas: 3 # 部署完成后,将会创建 3 个 Kafka 副本updateStrategy:type: RollingUpdatetemplate:metadata:labels:app: kafkaspec:affinity:podAntiAffinity: # 工作负载反亲和preferredDuringSchedulingIgnoredDuringExecution: # 尽量满足如下条件- weight: 1podAffinityTerm:labelSelector: # 选择Pod的标签,与工作负载本身反亲和matchExpressions:- key: "app"operator: Invalues:- kafkatopologyKey: "kubernetes.io/hostname"  # 在节点上起作用containers:- name: kafka#image: bitnami/kafka:3.4.1#image: bitnami/kafka:3.7.0image: ccr.ccs.tencentyun.com/huanghuanhui/bitnami-kafka:3.7.0imagePullPolicy: "IfNotPresent"command:- /opt/leaderchain/setup.shenv:- name: BITNAMI_DEBUGvalue: "true" # true 详细日志# KRaft settings - name: MY_POD_NAME # 用于生成 KAFKA_CFG_NODE_IDvalueFrom:fieldRef:fieldPath: metadata.name            - name: KAFKA_CFG_PROCESS_ROLESvalue: "controller,broker"- name: KAFKA_CFG_CONTROLLER_QUORUM_VOTERSvalue: "0@kafka-0.kafka-headless:9093,1@kafka-1.kafka-headless:9093,2@kafka-2.kafka-headless:9093"- name: KAFKA_KRAFT_CLUSTER_IDvalue: "Jc7hwCMorEyPprSI1Iw4sW"  # Listeners            - name: KAFKA_CFG_LISTENERSvalue: "PLAINTEXT://:9092,CONTROLLER://:9093"- name: KAFKA_CFG_ADVERTISED_LISTENERSvalue: "PLAINTEXT://:9092"- name: KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAPvalue: "CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT"- name: KAFKA_CFG_CONTROLLER_LISTENER_NAMESvalue: "CONTROLLER"- name: KAFKA_CFG_INTER_BROKER_LISTENER_NAMEvalue: "PLAINTEXT"ports:- containerPort: 9092name: kafka-client                  - containerPort: 9093name: controllerprotocol: TCP                     volumeMounts:- mountPath: /bitnami/kafkaname: kafka-data- mountPath: /opt/leaderchain/setup.shname: scriptssubPath: setup.shreadOnly: true      securityContext:fsGroup: 1001runAsUser: 1001volumes:    - configMap:defaultMode: 493name: ldc-kafka-scriptsname: scripts      volumeClaimTemplates:- metadata:name: kafka-dataspec:storageClassName: nfs-storageaccessModes: [ReadWriteOnce]resources:requests:storage: 2Ti
EOF
kubectl apply -f ~/kafka-yml/kafka.yml
kafka-ui
cat > ~/kafka-yml/kafka-ui.yml << 'EOF'
apiVersion: apps/v1
kind: Deployment
metadata:name: kafka-uinamespace: kafkalabels:app: kafka-ui
spec:replicas: 1selector:matchLabels:app: kafka-uitemplate:metadata:labels:app: kafka-uispec:containers:- name: kafka-ui#image: provectuslabs/kafka-ui:v0.7.2image: ccr.ccs.tencentyun.com/huanghuanhui/kafka-ui:v0.7.2imagePullPolicy: IfNotPresentenv:- name: KAFKA_CLUSTERS_0_NAMEvalue: 'kafka-elk'- name: KAFKA_CLUSTERS_0_BOOTSTRAPSERVERSvalue: 'kafka-headless:9092'- name: DYNAMIC_CONFIG_ENABLEDvalue: "true"- name: AUTH_TYPE # https://docs.kafka-ui.provectus.io/configuration/authentication/basic-authenticationvalue: "LOGIN_FORM"- name: SPRING_SECURITY_USER_NAMEvalue: "admin"    - name: SPRING_SECURITY_USER_PASSWORDvalue: "Admin@2024"ports:- name: webcontainerPort: 8080
---
apiVersion: v1
kind: Service
metadata:name: kafka-uinamespace: kafka
spec:selector:app: kafka-uitype: NodePortports:- name: webport: 8080targetPort: 8080nodePort: 30088
EOF
kubectl apply -f ~/kafka-yml/kafka-ui.yml
cat > ~/kafka-yml/kafka-ui-Ingress.yml << 'EOF'
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: kafka-ui-ingressnamespace: kafkaannotations:nginx.ingress.kubernetes.io/ssl-redirect: 'true'nginx.ingress.kubernetes.io/proxy-body-size: '4G'
spec:ingressClassName: nginxrules:- host: kafka-ui.openhhh.comhttp:paths:- path: /pathType: Prefixbackend:service:name: kafka-uiport:number: 8080tls:- hosts:- kafka-ui.openhhh.comsecretName: kafka-ui-ingress-tls
EOF
kubectl create secret -n kafka \
tls kafka-ui-ingress-tls \
--key=/root/ssl/openhhh.com.key \
--cert=/root/ssl/openhhh.com.pem
kubectl apply -f ~/kafka-yml/kafka-ui-Ingress.yml

访问地址:https://kafka-ui.openhhh.com

账号密码:admin、Admin@2024

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Navicat图形化管理工具安装教程
  • vue接入google map自定义marker教程
  • Microsoft 365 Office BusinessPro LTSC 2024 for Mac( 微软Office办公套件)
  • 学习Numpy的奇思妙想
  • 【深度学习】PyTorch框架(5):Transformer和多注意力机制
  • 流淌在机械键盘上的魔法 源自这颗芯片
  • 3.1、数据结构-线性表
  • Android 各个版本兼容型问题
  • 【Gin】深度解析:在Gin框架中优化应用程序流程的责任链设计模式(上)
  • springcloud接入skywalking作为应用监控
  • SOCKET通信阻塞问题解决方案
  • Docker(十)-Docker运行elasticsearch7.4.2容器实例
  • mac怎样清理photoshop垃圾的方法 ps清理缓存和垃圾 苹果电脑暂存盘已满怎么清理
  • OpenCV分水岭算法watershed函数的使用
  • React: class 和 style
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • Asm.js的简单介绍
  • Gradle 5.0 正式版发布
  • Java方法详解
  • python 装饰器(一)
  • Redux系列x:源码分析
  • vue.js框架原理浅析
  • 工作中总结前端开发流程--vue项目
  • 关于字符编码你应该知道的事情
  • 记录:CentOS7.2配置LNMP环境记录
  • 警报:线上事故之CountDownLatch的威力
  • 离散点最小(凸)包围边界查找
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 三分钟教你同步 Visual Studio Code 设置
  • 数组的操作
  • 突破自己的技术思维
  • 携程小程序初体验
  • 怎么将电脑中的声音录制成WAV格式
  • #Linux(Source Insight安装及工程建立)
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • (done) 两个矩阵 “相似” 是什么意思?
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (二刷)代码随想录第16天|104.二叉树的最大深度 559.n叉树的最大深度● 111.二叉树的最小深度● 222.完全二叉树的节点个数
  • (附源码)php投票系统 毕业设计 121500
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (力扣)1314.矩阵区域和
  • (三)Kafka 监控之 Streams 监控(Streams Monitoring)和其他
  • .gitignore
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .net framework4与其client profile版本的区别
  • .NET 应用启用与禁用自动生成绑定重定向 (bindingRedirect),解决不同版本 dll 的依赖问题
  • .NET 中使用 Mutex 进行跨越进程边界的同步
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .net 重复调用webservice_Java RMI 远程调用详解,优劣势说明
  • .net经典笔试题
  • .sdf和.msp文件读取
  • /etc/apt/sources.list 和 /etc/apt/sources.list.d
  • [ 隧道技术 ] 反弹shell的集中常见方式(二)bash反弹shell
  • [Android 13]Input系列--获取触摸窗口