k8s部署kafka的详细阐述

一、k8s部署kafka集群

k8s部署kafka集群需要考虑到kafka的分布式特性,可以使用kafka-manager或者Zookeeper进行管理。

第一步是创建一个Zookeeper集群,可以使用Kubernetes的StatefulSet来创建,通过Kubernetes的DNS服务来管理集群中的Zookeeper服务。

<apiVersion: v1
kind: Service
metadata:
  name: zk-cs
spec:
  selector:
    app: zk-cs
  ports:
  - name: client
    port: 2181
    protocol: TCP
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: zk-cs
spec:
  selector:
    matchLabels:
      app: zk-cs
  serviceName: zk-cs
  replicas: 3
  template:
    metadata:
      labels:
        app: zk-cs
    spec:
      containers:
      - name: zk-cs
        image: zookeeper
        ports:
        - name: client
          containerPort: 2181
        readinessProbe:
          tcpSocket:
            port: client
          initialDelaySeconds: 10
          periodSeconds: 5  >

接下来是创建kafka集群,在使用kubernetes创建kafka集群时,需要使用Kafka StatefulSet,以便保持kafaka的有序ID。

<apiVersion: v1
kind: Service
metadata:
  name: kafka-cs
spec:
  selector:
    app: kafka-cs
  type: NodePort
  ports:
  - name: kafka
    port: 9092
    protocol: TCP
    nodePort: 30092
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: kafka-cs
spec:
  selector:
    matchLabels:
      app: kafka-cs
  serviceName: kafka-cs
  replicas: 3
  template:
    metadata:
      labels:
        app: kafka-cs
    spec:
      containers:
      - name: kafka-cs
        image: wurstmeister/kafka
        env:
        - name: KAFKA_ADVERTISED_HOST_NAME
          valueFrom:
            fieldRef:
              fieldPath: status.podIP
        - name: KAFKA_ADVERTISED_PORT
          value: "9092"
        - name: KAFKA_ZOOKEEPER_CONNECT
          value: zk-cs-0.zk-cs:2181,zk-cs-1.zk-cs:2181,zk-cs-2.zk-cs:2181
        ports:
        - name: kafka
          containerPort: 9092
        readinessProbe:
          tcpSocket:
            port: kafka
          initialDelaySeconds: 10
          periodSeconds: 5 >

二、k8s部署kafka和logstash

在kubernetes中部署kafka和logstash可以将logstash部署在单独的Pod中。

首先需要创建一个Kafka的Service,通过该service进行和Kafka Pod的通信。

然后创建一个Logstash Deployment和Service,将logstash部署在独立的Pod里面,将需要处理的日志转发到kafka的Service。

<apiVersion: v1
kind: Service
metadata:
  name: kafka-cs
spec:
  selector:
    app: kafka-cs
  type: NodePort
  ports:
  - name: kafka
    port: 9092
    protocol: TCP
    nodePort: 30092
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: logstash
spec:
  replicas: 1
  selector:
    matchLabels:
      app: logstash
  template:
    metadata:
      labels:
        app: logstash
    spec:
      containers:
      - name: logstash
        image: docker.elastic.co/logstash/logstash:7.12.0
        volumeMounts:
        - name: logstash-config
          mountPath: /usr/share/logstash/pipeline/logstash.conf
          subPath: logstash.conf
        ports:
        - name: logstash
          containerPort: 5000
        env:
          - name: KAFKA_BROKERS
            value: "kafka-cs:9092"
        livenessProbe:
          tcpSocket:
            port: 5000
          initialDelaySeconds: 10
          periodSeconds: 5
      volumes:
        - name: logstash-config
          configMap:
            name: logstash-config
            items:
              - key: logstash.conf
                path: logstash.conf

---
apiVersion: v1
kind: Service
metadata:
  name: logstash
spec:
  selector:
    app: logstash
  ports:
  - name: logstash
    port: 5000
    protocol: tcp
    targetPort: 5000 >

三、k8s部署kafka单机

在kubernetes中单机部署kafka通常使用Deployment和Service进行部署。

首先需要创建一个Kafka Deployment和Service,将它们部署到Kubernetes集群之中。

<apiVersion: v1
kind: Service
metadata:
  name: kafka
spec:
  selector:
    app: kafka
  ports:
  - name: kafka
    port: 9092
    protocol: TCP
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: kafka
spec:
  replicas: 1
  selector:
    matchLabels:
      app: kafka
  template:
    metadata:
      labels:
        app: kafka
    spec:
      containers:
      - name: kafka
        image: wurstmeister/kafka
        ports:
        - name: kafka
          containerPort: 9092
        env:
        - name: KAFKA_ADVERTISED_HOST_NAME
          valueFrom:
            fieldRef:
              fieldPath: status.hostIP
        - name: KAFKA_ADVERTISED_PORT
          value: "9092"
        - name: KAFKA_ZOOKEEPER_CONNECT
          value: zookeeper:2181
        readinessProbe:
          tcpSocket:
            port: kafka
          periodSeconds: 10
          timeoutSeconds: 5  >

四、k8s部署方式

k8s部署kafka一般有两种方式:使用StatefulSet和使用Deployment。StatefulSet适用于有状态的应用,如数据库等。Deployment适用于无状态的应用,如Web应用程序或API服务。

使用StatefulSet部署kafka可以创建一个稳定的网络标识符和唯一标识符,以便容器通过网络与其他容器进行通信。

使用Deployment部署kafka可以快速创建和删除kafka服务,可以很好地解决容器的运行效率问题。

五、k8s部署服务

k8s部署kafka服务需要使用Deployment或者StatefulSet和Service进行部署。

Deployments和StatefulSet通常用于部署应用程序或服务,而Service用于通过Kubernetes服务发现机制将这些应用程序或服务公开给其他客户端。

六、k8s部署流程

k8s部署kafka的流程包括以下步骤:

1.创建Zookeeper Deployment和Service。

2.创建Kafka Deployment和Service。

3.在Kafka中配置Kafka上的Zookeeper地址。

4.创建logstash Deployment和Service,启动logstash和Kafka之间的连接。

七、k8s部署jar包

k8s部署kafka jar包需要使用Docker构建一个容器镜像,并将jar包文件复制到容器镜像中。

构建Docker镜像的Dockerfile文件如下:

<FROM openjdk:8u171-jdk-alpine
ADD kafka_2.11-2.0.0.tgz /opt
WORKDIR /opt/kafka_2.11-2.0.0
EXPOSE 9092
CMD ["bin/kafka-server-start.sh", "config/server.properties"] >

八、k8s部署应用

k8s部署kafka应用一般使用Deployment或者StatefulSet和Service进行部署,具体步骤见上述内容。

九、k8s部署nginx

k8s部署nginx可以使用Deployment和Service进行部署。

部署nginx的Deployment文件如下:

<apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.8
        ports:
        - containerPort: 80
          name: http >

通过定义Service来将nginx服务暴露给外部客户端:

<apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  selector:
    app: nginx
  type: NodePort
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 80 >

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/237700.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-12 12:06
下一篇 2024-12-12 12:06

相关推荐

  • Python消费Kafka数据指南

    本文将为您详细介绍如何使用Python消费Kafka数据,旨在帮助读者快速掌握这一重要技能。 一、Kafka简介 Kafka是一种高性能和可伸缩的分布式消息队列,由Apache软件…

    编程 2025-04-28
  • 如何解决Docker+k8s报错413 Request Entity Too Large

    对于使用Docker容器和Kubernetes集群的开发人员,在处理HTTP请求时,常常会遇到413 Request Entity Too Large的报错。这通常是由于请求的大小…

    编程 2025-04-27
  • k8s节点设置cpu高于多少就不调度

    本文将从以下几个方面详细阐述k8s节点设置cpu高于多少就不调度的相关内容: 一、k8s节点设置的概念和原理 k8s是Google开源的容器集群管理系统,用于自动化部署、扩展和管理…

    编程 2025-04-27
  • index.html怎么打开 – 详细解析

    一、index.html怎么打开看 1、如果你已经拥有了index.html文件,那么你可以直接使用任何一个现代浏览器打开index.html文件,比如Google Chrome、…

    编程 2025-04-25
  • Resetful API的详细阐述

    一、Resetful API简介 Resetful(REpresentational State Transfer)是一种基于HTTP协议的Web API设计风格,它是一种轻量级的…

    编程 2025-04-25
  • neo4j菜鸟教程详细阐述

    一、neo4j介绍 neo4j是一种图形数据库,以实现高效的图操作为设计目标。neo4j使用图形模型来存储数据,数据的表述方式类似于实际世界中的网络。neo4j具有高效的读和写操作…

    编程 2025-04-25
  • AXI DMA的详细阐述

    一、AXI DMA概述 AXI DMA是指Advanced eXtensible Interface Direct Memory Access,是Xilinx公司提供的基于AMBA…

    编程 2025-04-25
  • 关键路径的详细阐述

    关键路径是项目管理中非常重要的一个概念,它通常指的是项目中最长的一条路径,它决定了整个项目的完成时间。在这篇文章中,我们将从多个方面对关键路径做详细的阐述。 一、概念 关键路径是指…

    编程 2025-04-25
  • K8s环境部署及管理指南

    一、K8s环境介绍 K8s是目前最受欢迎的容器编排平台,可以很好地管理和调度容器,实现应用的高可用。K8s环境包含了多个组件,包括etcd、kube-apiserver、kube-…

    编程 2025-04-25
  • c++ explicit的详细阐述

    一、explicit的作用 在C++中,explicit关键字可以在构造函数声明前加上,防止编译器进行自动类型转换,强制要求调用者必须强制类型转换才能调用该函数,避免了将一个参数类…

    编程 2025-04-25

发表回复

登录后才能评论