k8s部署kafka集群

打印 上一主题 下一主题

主题 951|帖子 951|积分 2853

k8s部署kafka集群

kafka(Kafka with KRaft)

  1. mkdir -p ~/kafka-yml
  2. kubectl create ns kafka
复制代码
  1. cat > ~/kafka-yml/kafka.yml << 'EOF'
  2. apiVersion: v1
  3. kind: Service
  4. metadata:
  5.   name: kafka-headless
  6.   namespace: kafka
  7.   labels:
  8.     app: kafka
  9. spec:
  10.   type: ClusterIP
  11.   clusterIP: None
  12.   ports:
  13.   - name: kafka-client
  14.     port: 9092
  15.     targetPort: kafka-client
  16.   - name: controller
  17.     port: 9093
  18.     targetPort: controller   
  19.   selector:
  20.     app: kafka
  21. ---
  22. #部署 Service,用于外部访问 Kafka
  23. apiVersion: v1
  24. kind: Service
  25. metadata:
  26.   name: kafka-service
  27.   namespace: kafka
  28.   labels:
  29.     app: kafka
  30. spec:
  31.   type: NodePort
  32.   ports:
  33.   - name: kafka-client
  34.     port: 9092
  35.     targetPort: kafka-client
  36.     nodePort: 30992
  37.   selector:
  38.     app: kafka
  39. ---
  40. # 分别在 StatefulSet 中的每个 Pod 中获取相应的序号作为 KAFKA_CFG_NODE_ID(只能是整数),然后再执行启动脚本
  41. apiVersion: v1
  42. kind: ConfigMap
  43. metadata:
  44.   name: ldc-kafka-scripts
  45.   namespace: kafka
  46. data:
  47.   setup.sh: |-
  48.     #!/bin/bash
  49.     export KAFKA_CFG_NODE_ID=${MY_POD_NAME##*-}
  50.     exec /opt/bitnami/scripts/kafka/entrypoint.sh /opt/bitnami/scripts/kafka/run.sh
  51. ---
  52. apiVersion: apps/v1
  53. kind: StatefulSet
  54. metadata:
  55.   name: kafka
  56.   namespace: kafka
  57.   labels:
  58.     app: kafka
  59. spec:
  60.   selector:
  61.     matchLabels:
  62.       app: kafka
  63.   serviceName: kafka-headless
  64.   podManagementPolicy: Parallel
  65.   replicas: 3 # 部署完成后,将会创建 3 个 Kafka 副本
  66.   updateStrategy:
  67.     type: RollingUpdate
  68.   template:
  69.     metadata:
  70.       labels:
  71.         app: kafka
  72.     spec:
  73.       affinity:
  74.         podAntiAffinity: # 工作负载反亲和
  75.           preferredDuringSchedulingIgnoredDuringExecution: # 尽量满足如下条件
  76.           - weight: 1
  77.             podAffinityTerm:
  78.               labelSelector: # 选择Pod的标签,与工作负载本身反亲和
  79.                 matchExpressions:
  80.                   - key: "app"
  81.                     operator: In
  82.                     values:
  83.                       - kafka
  84.               topologyKey: "kubernetes.io/hostname"  # 在节点上起作用
  85.       containers:
  86.       - name: kafka
  87.         #image: bitnami/kafka:3.4.1
  88.         #image: bitnami/kafka:3.7.0
  89.         image: ccr.ccs.tencentyun.com/huanghuanhui/bitnami-kafka:3.7.0
  90.         imagePullPolicy: "IfNotPresent"
  91.         command:
  92.         - /opt/leaderchain/setup.sh
  93.         env:
  94.         - name: BITNAMI_DEBUG
  95.           value: "true" # true 详细日志
  96.         # KRaft settings
  97.         - name: MY_POD_NAME # 用于生成 KAFKA_CFG_NODE_ID
  98.           valueFrom:
  99.             fieldRef:
  100.               fieldPath: metadata.name            
  101.         - name: KAFKA_CFG_PROCESS_ROLES
  102.           value: "controller,broker"
  103.         - name: KAFKA_CFG_CONTROLLER_QUORUM_VOTERS
  104.           value: "0@kafka-0.kafka-headless:9093,1@kafka-1.kafka-headless:9093,2@kafka-2.kafka-headless:9093"
  105.         - name: KAFKA_KRAFT_CLUSTER_ID
  106.           value: "Jc7hwCMorEyPprSI1Iw4sW"  
  107.         # Listeners            
  108.         - name: KAFKA_CFG_LISTENERS
  109.           value: "PLAINTEXT://:9092,CONTROLLER://:9093"
  110.         - name: KAFKA_CFG_ADVERTISED_LISTENERS
  111.           value: "PLAINTEXT://:9092"
  112.         - name: KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP
  113.           value: "CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT"
  114.         - name: KAFKA_CFG_CONTROLLER_LISTENER_NAMES
  115.           value: "CONTROLLER"
  116.         - name: KAFKA_CFG_INTER_BROKER_LISTENER_NAME
  117.           value: "PLAINTEXT"
  118.         ports:
  119.         - containerPort: 9092
  120.           name: kafka-client                  
  121.         - containerPort: 9093
  122.           name: controller
  123.           protocol: TCP                     
  124.         volumeMounts:
  125.         - mountPath: /bitnami/kafka
  126.           name: kafka-data
  127.         - mountPath: /opt/leaderchain/setup.sh
  128.           name: scripts
  129.           subPath: setup.sh
  130.           readOnly: true      
  131.       securityContext:
  132.         fsGroup: 1001
  133.         runAsUser: 1001
  134.       volumes:   
  135.       - configMap:
  136.           defaultMode: 493
  137.           name: ldc-kafka-scripts
  138.         name: scripts      
  139.   volumeClaimTemplates:
  140.   - metadata:
  141.       name: kafka-data
  142.     spec:
  143.       storageClassName: nfs-storage
  144.       accessModes: [ReadWriteOnce]
  145.       resources:
  146.         requests:
  147.           storage: 2Ti
  148. EOF
复制代码
  1. kubectl apply -f ~/kafka-yml/kafka.yml
复制代码
kafka-ui

  1. cat > ~/kafka-yml/kafka-ui.yml << 'EOF'
  2. apiVersion: apps/v1
  3. kind: Deployment
  4. metadata:
  5.   name: kafka-ui
  6.   namespace: kafka
  7.   labels:
  8.     app: kafka-ui
  9. spec:
  10.   replicas: 1
  11.   selector:
  12.     matchLabels:
  13.       app: kafka-ui
  14.   template:
  15.     metadata:
  16.       labels:
  17.         app: kafka-ui
  18.     spec:
  19.       containers:
  20.       - name: kafka-ui
  21.         #image: provectuslabs/kafka-ui:v0.7.2
  22.         image: ccr.ccs.tencentyun.com/huanghuanhui/kafka-ui:v0.7.2
  23.         imagePullPolicy: IfNotPresent
  24.         env:
  25.         - name: KAFKA_CLUSTERS_0_NAME
  26.           value: 'kafka-elk'
  27.         - name: KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS
  28.           value: 'kafka-headless:9092'
  29.         - name: DYNAMIC_CONFIG_ENABLED
  30.           value: "true"
  31.         - name: AUTH_TYPE # https://docs.kafka-ui.provectus.io/configuration/authentication/basic-authentication
  32.           value: "LOGIN_FORM"
  33.         - name: SPRING_SECURITY_USER_NAME
  34.           value: "admin"   
  35.         - name: SPRING_SECURITY_USER_PASSWORD
  36.           value: "Admin@2024"
  37.         ports:
  38.         - name: web
  39.           containerPort: 8080
  40. ---
  41. apiVersion: v1
  42. kind: Service
  43. metadata:
  44.   name: kafka-ui
  45.   namespace: kafka
  46. spec:
  47.   selector:
  48.     app: kafka-ui
  49.   type: NodePort
  50.   ports:
  51.   - name: web
  52.     port: 8080
  53.     targetPort: 8080
  54.     nodePort: 30088
  55. EOF
复制代码
  1. kubectl apply -f ~/kafka-yml/kafka-ui.yml
复制代码
  1. cat > ~/kafka-yml/kafka-ui-Ingress.yml << 'EOF'
  2. apiVersion: networking.k8s.io/v1
  3. kind: Ingress
  4. metadata:
  5.   name: kafka-ui-ingress
  6.   namespace: kafka
  7.   annotations:
  8.     nginx.ingress.kubernetes.io/ssl-redirect: 'true'
  9.     nginx.ingress.kubernetes.io/proxy-body-size: '4G'
  10. spec:
  11.   ingressClassName: nginx
  12.   rules:
  13.   - host: kafka-ui.openhhh.com
  14.     http:
  15.       paths:
  16.       - path: /
  17.         pathType: Prefix
  18.         backend:
  19.           service:
  20.             name: kafka-ui
  21.             port:
  22.               number: 8080
  23.   tls:
  24.   - hosts:
  25.     - kafka-ui.openhhh.com
  26.     secretName: kafka-ui-ingress-tls
  27. EOF
复制代码
  1. kubectl create secret -n kafka \
  2. tls kafka-ui-ingress-tls \
  3. --key=/root/ssl/openhhh.com.key \
  4. --cert=/root/ssl/openhhh.com.pem
复制代码
  1. kubectl apply -f ~/kafka-yml/kafka-ui-Ingress.yml
复制代码
  访问地址:https://kafka-ui.openhhh.com
  账号暗码:admin、Admin@2024

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

悠扬随风

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表