首页 > 其他分享 >K8S部署Kafka

K8S部署Kafka

时间:2023-03-09 15:34:08浏览次数:47  
标签:name 部署 app metadata kafka yaml manager K8S Kafka

一、集群部署Kafka

Kafka部署在以下节点上

[root@k8s-master nfs-client]# kubectl get nodes
NAME         STATUS   ROLES                  AGE   VERSION
k8s-master   Ready    control-plane,master   17d   v1.20.0
k8s-node1    Ready    <none>                 16d   v1.20.0
k8s-node2    Ready    <none>                 16d   v1.20.0

二、部署svc

1、部署 Service Headless,用于zookeeper间相互通信

1)、.yaml文件
点击查看代码
apiVersion: v1
kind: Service
metadata:
  name: kafka-headless
  namespace: middleware
  labels:
    app: kafka
spec:
  type: ClusterIP
  clusterIP: None  # 创建无头服务,如果需要对外暴露端口可自行创建service
  ports:
  - name: kafka
    port: 9092
    targetPort: kafka
  selector:
    app: kafka

2)、应用.yaml文件

kubectl apply -f kafka-svc-headless.yaml

1、部署 Service,用于外部访问 Zookeeper

1)、.yaml文件
点击查看代码
[root@k8s-master svc]# vim kafka-svc.yaml

apiVersion: v1
kind: Service
metadata:
  name: kafka-svc
  namespace: middleware
  labels:
    app: kafka
spec:
  type: ClusterIP
  ports:
  - name: kafka
    port: 9092
    targetPort: kafka
  selector:
    app: kafka

2)、应用.yaml文件

kubectl apply -f kafka-svc.yaml

三、部署StatefulSet

1、.yaml 文件

点击查看代码
[root@k8s-master conf]# cat kafka.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: kafka-test
  namespace: middleware
  labels:
    app: kafka
spec:
  selector:
    matchLabels:
      app: kafka
  serviceName: kafka-headless
  podManagementPolicy: "Parallel"
  replicas: 3
  updateStrategy:
    type: "RollingUpdate"
  template:
    metadata:
      name: "kafka"
      labels:
        app: kafka
    spec:
      securityContext:
        fsGroup: 1001
        runAsUser: 1001
      affinity:
        podAntiAffinity:                                    # Pod反亲和性
          preferredDuringSchedulingIgnoredDuringExecution:  # 软策略,使Pod分布在不同的节点上
          - weight: 1                                       # 权重,有多个策略通过权重控制调度
            podAffinityTerm:
              topologyKey: app.kubernetes.io/name           # 通过app.kubernetes.io/name作为域调度
              labelSelector:
                matchExpressions:
                - key: app.kubernetes.io/component
                  operator: In
                  values:
                  - zookeeper
      containers:
      - name: kafka
        image: "docker.io/bitnami/kafka:2.3.0-debian-9-r4"
        imagePullPolicy: "IfNotPresent"
        env:
        - name: MY_POD_IP
          valueFrom:
            fieldRef:
              fieldPath: status.podIP
        - name: MY_POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        - name: KAFKA_CFG_ZOOKEEPER_CONNECT
          value: "zk-headless"                      # Zookeeper Service 名称
        - name: KAFKA_PORT_NUMBER
          value: "9092"
        - name: KAFKA_CFG_LISTENERS
          value: "PLAINTEXT://:$(KAFKA_PORT_NUMBER)"
        - name: KAFKA_CFG_ADVERTISED_LISTENERS
          value: 'PLAINTEXT://$(MY_POD_NAME).kafka-headless:$(KAFKA_PORT_NUMBER)'
        - name: ALLOW_PLAINTEXT_LISTENER
          value: "yes"
        - name: KAFKA_HEAP_OPTS
          value: "-Xmx512m -Xms512m"
        - name: KAFKA_CFG_LOGS_DIRS
          value: /opt/bitnami/kafka/data
        - name: JMX_PORT
          value: "9988"
        ports:
        - name: kafka
          containerPort: 9092
        livenessProbe:
          tcpSocket:
            port: kafka
          initialDelaySeconds: 10
          periodSeconds: 10
          timeoutSeconds: 5
          successThreshold: 1
          failureThreshold: 2
        readinessProbe:
          tcpSocket:
            port: kafka
          initialDelaySeconds: 5
          periodSeconds: 10
          timeoutSeconds: 5
          successThreshold: 1
          failureThreshold: 6
        volumeMounts:
        - name: data
          mountPath: /bitnami/kafka
  volumeClaimTemplates:
    - metadata:
        name: data
      spec:
        storageClassName: kafka-nfs-storage     # 指定为上面创建的 storageclass
        accessModes:
          - "ReadWriteOnce"
        resources:
          requests:
            storage: 1Gi

2)、应用.yaml文件

kubectl apply -f kafka.yaml

四、部署kafka-manager

1、.yaml 文件

点击查看代码
[root@k8s-master conf]# cat kafka-manager.yaml
apiVersion: v1
kind: Service
metadata:
  name: kafka-manager
  namespace: middleware
  labels:
    app: kafka-manager
spec:
  type: NodePort
  ports:
  - name: kafka
    port: 9000
    targetPort: 9000
    nodePort: 30900
  selector:
    app: kafka-manager
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: kafka-manager
  namespace: middleware
  labels:
    app: kafka-manager
spec:
  replicas: 1
  selector:
    matchLabels:
      app: kafka-manager
  template:
    metadata:
      labels:
        app: kafka-manager
    spec:
      containers:
      - name: kafka-manager
        image: zenko/kafka-manager:1.3.3.22
        imagePullPolicy: IfNotPresent
        ports:
        - name: kafka-manager
          containerPort: 9000
          protocol: TCP
        env:
        - name: ZK_HOSTS
          value: "zk-service:2181"
        livenessProbe:
          httpGet:
            path: /api/health
            port: kafka-manager
        readinessProbe:
          httpGet:
            path: /api/health
            port: kafka-manager

2)、应用.yaml文件

kubectl apply -f kafka-manager.yaml

参考文献:
https://www.cnblogs.com/hsyw/p/16753968.html
https://www.cnblogs.com/shareHistory/p/15843422.html
https://www.jianshu.com/p/50a9d38ada27

标签:name,部署,app,metadata,kafka,yaml,manager,K8S,Kafka
From: https://www.cnblogs.com/llds/p/17198576.html

相关文章

  • K8S部署zookeeper
    一、集群部署zookeeperzookeeper部署在以下节点上[root@k8s-masternfs-client]#kubectlgetnodesNAMESTATUSROLESAGEVERSIONk8s-......
  • SourceTree安装部署
    SourceTree1、下载地址https://www.sourcetreeapp.com/注意:使用sourcetree必须要先安装git客户端才可以git客户端的下载地址https://git-scm.com/downloads2、git......
  • K8S配置nfs
    在k8s中当我们需要持久化存储一些数据的使用,会使用到的就是PV和PVC,但PV和PVC都是需要手动创建的话会很麻烦,特别是当有StatefulSet应用存在的时候,如果你需要手......
  • Kafka快速高效的原因
    因为kafka高吞吐量,管道大,而保证kafka快速移动大量数据的设计决策有顺序I/O和零拷贝复制原则 顺序I/O:通过使用仅附加日志作为主要数据结构,将新数据添加到文件末尾......
  • 前端从0-1使用nginx打包部署静态资源,以及hash和history配置汇总
    第一:我们要搭建nginx部署基础环境具体流程可参考这个链接从0-1超详细教你实现前端代码nginx部署全流程第二:我们要知道前端路由hash和history实现以及区别路由功能:1、记......
  • 容器快速部署xx-job-admin
    1.下载指定版本容器镜像dockerpullxuxueli/xxl-job-admin:{指定版本}2.运行容器方式1:命令行配置启动/***如需自定义mysql等配置,可通过"-ePARAMS"指定,参数......
  • 容灾恢复 | 记一次K8S集群中etcd数据快照的备份恢复实践
    [点击......
  • K8S 性能优化 - 大型集群 CIDR 配置
    前言K8S性能优化系列文章,本文为第三篇:Kubernetes大型集群CIDR配置最佳实践。系列文章:《K8S性能优化-OSsysctl调优》《K8S性能优化-K8SAPIServer调优》......
  • 【转载】node服务开发和服务器部署(node.js+koa2+pm2+nginx)教程
    我为什么要写这篇文章昨天晚上有个小哥发维信给我,问我怎么部署一个node服务,有没有相关教程,我有点震惊,就问他有哪些不懂,他说几乎都不懂。我想他应该也是找过相关教程了......
  • Nginx + Keepalived 高可用集群部署
    负载均衡技术对于一个网站尤其是大型网站的web服务器集群来说是至关重要的!做好负载均衡架构,可以实现故障转移和高可用环境,避免单点故障,保证网站健康持续运行。在使用Nginx......