Kubernetes üzerine HELM ile Bitnami/KAFKA deploy edilmesi






Bitnami/Kafka Nedir?

Basitçe ifade etmek gerekirse, Bitnami/Kafka, popüler açık kaynaklı mesajlaşma sistemi olan Apache Kafka'nın, Bitnami tarafından paket haline getirilmiş ve dağıtıma hazır bir versiyonudur.

Bitnami/Kafka Helm Chart'ını kullanmanın avantajları:

  • Kolay Kurulum: Karmaşık Kafka kurulumunu tek bir Helm komutuna indirger.
  • Yapılandırılabilirlik: values.yaml dosyası ile Kafka'nın birçok ayarını (örneğin JMX portunu açmak, persistency ayarları, kaynak limitleri vb.) kolayca değiştirebilirsin.
  • Standartlaşma: Güvenilir ve test edilmiş bir kurulum yöntemi sunar.
  • Güncel ve Güvenli: Bitnami, chart'ları ve içindeki uygulamaları düzenli olarak günceller ve güvenlik taramalarından geçirir.

Bitnami/KAFKA helm charts: https://artifacthub.io/packages/helm/bitnami/kafka

Bitnami/KAFKA kurulumu

  • Bitnami helm reposunun eklenmesi
  • BASH
    
    # Bitnami HELM reposunun eklenmesi
    
    helm repo add bitnami https://charts.bitnami.com/bitnami
    helm repo update
    
    # Bitnami/Kafka default values export edilmesi
    
    helm show values bitnami/kafka  > kafka-values.yaml
    
        
  • Örnek kafka-values.yaml
  • YAML / kafka.values.yml
    
    global:
      defaultStorageClass: "longhorn"
    
    extraConfig: |
      auto.leader.rebalance.enable=true
      default.replication.factor=3
    
    image:
      debug: true
    
    broker:
      replicaCount: 6
      persistence:
        enabled: true
        size: 2Gi
      resources:
          limits: {}
          requests: {}
    
    
    listeners:
      client:
        protocol: PLAINTEXT
      controller:
        protocol: PLAINTEXT
      interbroker:
        protocol: PLAINTEXT
      external:
        protocol: PLAINTEXT
    
    service:
      type: ClusterIP
      ports:
        client: 9092
        controller: 19093
        interbroker: 19094
        external: 19092
    
    zookeeper:
      enabled: true
      replicaCount: 6
      persistence:
        enabled: true
        size: 1Gi
    
    controller:
      replicaCount: 0
    
    kraft:
      enabled: false
    
    metrics:
      jmx:
        enabled: true
        resources:
          limits: {}
          requests: {}
    
      serviceMonitor:
        enabled: true
        namespace: kafka
        labels:
          release: kube-prometheus-stack
    
        

Kafka-UI Nedir?

Kafka-UI, Apache Kafka cluster'larını yönetmek ve gözlemlemek için kullanılan açık kaynaklı, web tabanlı bir grafik arayüzüdür (GUI). Komut satırı araçlarına (CLI) görsel bir alternatif sunarak Kafka ile etkileşimi kolaylaştırır. Genellikle bir Docker container veya Kubernetes pod'u olarak çalıştırılır ve web tarayıcınız üzerinden erişilir.

Videonda da bahsettiğin gibi, Provectus tarafından geliştirilen popüler bir Kafka UI aracıdır ve Helm chart'ı ile kolayca deploy edilebilir.

Kafka-ui helm charts: https://provectus.github.io/kafka-ui-charts/

KAFKA-UI kurulumu

  • Kafka-ui helm reposunun eklenmesi
  • BASH
    
    # Kafka-ui helm reposunun eklenmesi
    helm repo add kafka-ui https://provectus.github.io/kafka-ui-charts
    helm repo update
    
    # kafka-ui deploy edilmesi
    helm install kafka-ui kafka-ui/kafka-ui -n kafka -f kafkaui-values.yaml --create-namespace
    
        
  • Örnek kafkaui-values.yaml
  • YAML / kafka-ui.values.yml
    
    yamlApplicationConfig:
      kafka:
        clusters:
          - name: my-kafka-cluster
            bootstrapServers: kafka1-broker-0.kafka1-broker-headless.kafka.svc.cluster.local:9092
      auth:
        type: disabled
      management:
        health:
          ldap:
            enabled: false
    
    ingress:
      enabled: true
      annotations:
        cert-manager.io/cluster-issuer: selfsigned-cluster-issuer
      ingressClassName: "nginx"
      host: "kafka-ui.sercangezer.home"
      tls:
        enabled: true
        secretName: "kafkaui-tls"
    
        

Örnek uygulama

YAML / ornek-uygulama.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: consumer
spec:
  replicas: 1
  selector:
    matchLabels:
      app: consumer
  template:
    metadata:
      labels:
        app: consumer
    spec:
      containers:
        - name: consumer
          image: sercangezer/poc-kafka-consumer:v1
          ports:
            - containerPort: 8080
          env:
            - name: SPRING_PROFILES_ACTIVE
              value: "dev"
          imagePullPolicy: Always
---
apiVersion: v1
kind: Service
metadata:
  name: consumer
spec:
  selector:
    app: consumer
  ports:
    - protocol: TCP
      port: 8080
      targetPort: 8080
  type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: producer
spec:
  replicas: 1
  selector:
    matchLabels:
      app: producer
  template:
    metadata:
      labels:
        app: producer
    spec:
      containers:
        - name: producer
          image: sercangezer/poc-kafka-producer:v1
          ports:
            - containerPort: 8082
          env:
            - name: SPRING_PROFILES_ACTIVE
              value: "dev"
          imagePullPolicy: Always
---
apiVersion: v1
kind: Service
metadata:
  name: producer
spec:
  selector:
    app: producer
  ports:
    - protocol: TCP
      port: 8082
      targetPort: 8082
  type: ClusterIP

    

Kubernetes KAFKA Grafana Dashboard

Kubernetes Kafka Grafana Dashboard: https://grafana.com/grafana/dashboards/12483-kubernetes-kafka/