Stories

Detail Return Return

使用 bitnami/kafka 在 k8s 安裝 kafka 集羣 - Stories Detail

bitnami/kafka 提供的 helm 包用起來非常穩定,公司生產環境有兩個 kafka 集羣,已經使用兩年了,沒有出過任何故障,穩如老狗!下面介紹安裝方式。

環境依賴

  • helm 工具
  • k8s 集羣(已經安裝好並且配置好了 storageClass)

生產環境

不用 zookeeper 使用內置的 kraft,節點選舉更快,更輕量。

新建 kafka-values.yaml 文件,填入下面內容:

controller:
  replicaCount: 3
  # nodeSelector:
  #   nodegroup-type: kafka
  persistence:
    size: 32Gi

listeners:
  client:
    protocol: PLAINTEXT # 關閉客户端身份認證(內網不需要認證)

replicaCount 表示 kafka 集羣節點數量,生產至少 3 個以上,推薦奇數。nodeSelector 調度至特定節點,生產推薦為 kafka 各個節點使用獨立節點。最後不啓用身份認證。可以通過 artifacthub 查看更多配置參數。

部署命令:

helm upgrade -f kafka-values.yaml --install kafka bitnami/kafka --version 26.11.4 --create-namespace --namespace kafka

上面命令表示在 kafka 命名空間下安裝 kafka 集羣,默認以 controller 模式運行,安裝 helm chart 包版本為 26.11.4 對應的 kafka 版本為 3.6.1

測試環境

新建 kafka-values.yaml 文件,填入下面內容:

controller:
  replicaCount: 1
  persistence:
    size: 20Gi
  extraConfig: |
    offsets.topic.replication.factor=1
    transaction.state.log.replication.factor=1

listeners:
  client:
    protocol: PLAINTEXT # 關閉客户端身份認證(內網不需要認證)

測試環境只啓用 1 個節點,節省資源。

管理 ui

最後附上用於管理 kafka 的 ui 清單。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: kafka-ui
  namespace: kafka
  labels:
    app: kafka-ui
spec:
  replicas: 1
  selector:
    matchLabels:
      app: kafka-ui
  template:
    metadata:
      labels:
        app: kafka-ui
    spec:
      containers:
        - name: kafka-ui
          image: provectuslabs/kafka-ui
          ports:
            - containerPort: 8080
          env:
            - name: DYNAMIC_CONFIG_ENABLED
              value: 'true'
            - name: AUTH_TYPE
              value: 'LOGIN_FORM'
            - name: 'SPRING_SECURITY_USER_NAME'
              value: 'kafka-admin'
            - name: 'SPRING_SECURITY_USER_PASSWORD'
              value: '123456'
            - name: KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS
              value: "kafka.kafka.svc.cluster.local:9092"
          resources:
            limits:
              memory: "512Mi"
            requests:
              memory: "256Mi"
---
apiVersion: v1
kind: Service
metadata:
  name: kafka-ui
  namespace: kafka
spec:
  selector:
    app: kafka-ui
  ports:
    - protocol: TCP
      port: 8080
      targetPort: 8080
  type: ClusterIP

---
apiVersion: apisix.apache.org/v2
kind: ApisixRoute
metadata:
  name: kafka-ui-route
  namespace: kafka
  annotations:
    k8s.apisix.apache.org/upstream-scheme: http
spec:
  http:
    - name: bene-kafka-ui
      match:
        paths:
          - /*
        hosts:
          - kafka.exmpale.com
      backends:
        - serviceName: kafka-ui
          servicePort: 8080
      plugins:
        - name: redirect
          enable: true
          config:
            http_to_https: true

這裏使用了 apisix 暴露公網訪問,ui 啓用了身份認證,具體可配置參數。

Add a new Comments

Some HTML is okay.