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/zh-hant/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

發表回復

登錄後才能評論