Статьи

Руководство по установке Kafka Docker в Kubernetes

В этом окончательном руководстве я дам вам простое пошаговое руководство по установке Kafka Docker в Kubernetes. Этот пост включает в себя полное видео прохождение.

В последнее время возник большой интерес к развертыванию Kafka в кластере Kubernetes . Если вы хотите совершить глубокое погружение самостоятельно, тогда вы нашли нужную статью. Теперь, когда у нас есть Kafka Docker , развернуть кластер Kafka в Kubernetes совсем несложно.

Развернуть ZooKeeper в Кубернетес

Kafka использует ZooKeeper для отслеживания его конфигурации, включая доступные темы.

Прежде чем мы развернем Kafka, нам нужно развернуть ZooKeeper.

Создайте файл с именем zookeeper.yml и добавьте следующее содержимое:

---
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: zookeeper-deployment-1
spec:
  template:
    metadata:
      labels:
        app: zookeeper-1
    spec:
      containers:
      - name: zoo1
        image: digitalwonderland/zookeeper
        ports:
        - containerPort: 2181
        env:
        - name: ZOOKEEPER_ID
          value: "1"
        - name: ZOOKEEPER_SERVER_1
          value: zoo1
---
apiVersion: v1
kind: Service
metadata:
  name: zoo1
  labels:
    app: zookeeper-1
spec:
  ports:
  - name: client
    port: 2181
    protocol: TCP
  - name: follower
    port: 2888
    protocol: TCP
  - name: leader
    port: 3888
    protocol: TCP
  selector:
    app: zookeeper-1

Это создает развертывание Kubernetes, которое будет планировать модули zookeeper и службу Kubernetes для маршрутизации трафика в модули. У сервиса есть короткое имя zoo1, которое мы будем использовать позже, когда будем развертывать Kafka Brokers.

Создать ресурс:

$ kubectl create -f zookeeper.yml

Теперь давайте начнем развертывание Kafka.

Развертывание службы док-станции Kafka

Первое, что нам нужно сделать, это развернуть сервис Kubernetes, который будет управлять нашими развертываниями Kafka Broker.

Создайте новый файл с именем kafka-service.yml и добавьте следующее содержимое:

---
apiVersion: v1
kind: Service
metadata:
  name: kafka-service
  labels:
    name: kafka
spec:
  ports:
  - port: 9092
    name: kafka-port
    protocol: TCP
  selector:
    app: kafka
    id: "0"
  type: LoadBalancer

Вы можете заметить, что мы установили тип  LoadBalancer. Если ваш Kubernetes Cluster развернут на голом металле, не волнуйтесь. Существует новое дополнение Kubernetes под названием MetalLB, которое позволяет это. Ознакомьтесь с моей статьей Kubernetes metallb голый металлический нагрузочный балансировщик для получения инструкций о том, как включить его. Это сделает вашу жизнь намного проще.

Создать сервис.

$ kubectl create -f kafka-service

Теперь нам нужно получить внешний IP-адрес для сервиса, потому что он нам понадобится, чтобы раскрутить брокера Kafka в следующем разделе.

$ kubectl describe svc kafka-service
Name: kafka-service
Namespace: default
Labels: name=kafka
Annotations: kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"name":"kafka"},"name":"kafka-service","namespace":"default"},"spec":{"ports...
Selector: app=kafka,id=0
Type: LoadBalancer
IP: 10.105.148.62
LoadBalancer Ingress: 192.168.1.240
Port: kafka-port 9092/TCP
TargetPort: 9092/TCP
NodePort: kafka-port 30718/TCP
Endpoints: 10.44.0.4:9092
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>

В приведенном выше примере я хотел бы отметить, что для параметра LoadBalancer Ingress установлено значение 192.168.1.240. Теперь мы можем начать наш Kafka Broker.

Развертывание Kafka Broker в Кубернетес

У нас развернута служба Kubernetes, но все, что она делает, — это балансировка нагрузки наших модулей Kafka, которые еще не развернуты.

Выполните следующие шаги, чтобы развернуть их.

Создайте новый файл с именем kafka-broker.yml и добавьте следующее содержимое:

---
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: kafka-broker0
spec:
  template:
    metadata:
      labels:
        app: kafka
        id: "0"
    spec:
      containers:
      - name: kafka
        image: wurstmeister/kafka
        ports:
        - containerPort: 9092
        env:
        - name: KAFKA_ADVERTISED_PORT
          value: "30718"
        - name: KAFKA_ADVERTISED_HOST_NAME
          value: 192.168.1.240
        - name: KAFKA_ZOOKEEPER_CONNECT
          value: zoo1:2181
        - name: KAFKA_BROKER_ID
          value: "0"
        - name: KAFKA_CREATE_TOPICS
          value: admintome-test:1:1

Обратите внимание, что для KAFKA_ADVERTISED_HOST_NAME задан IP-адрес, который мы отметили ранее. Также обратите внимание, что мы советуем Kafka Broker автоматически создать тематический тест admintome с 1 разделом и 1 репликой. Вы можете создать несколько тем, используя один и тот же язык и разделив их запятыми (то есть — topic1:1:1,topic2:1:1).

Сохраните файл и создайте ресурс.

$ create -f kafka-broker.yml

Вы можете проверить, что все работает.

$ kubectl get pod kafka-broker0

Чтобы масштабировать брокеров Kafka, создайте другой файл, но дайте ему другое имя (например, kafka-broker1) и обновите идентификатор, чтобы он соответствовал.

Давайте проверим наше развертывание Kafka

Тестирование с KafkaCat

Мы собираемся протестировать наше развертывание Kafka с помощью приложения под названием KafkaCat .

Установить:

$ apt-get install kafkacat

После установки приложения мы запустим его в потребительском режиме (по умолчанию).

kafkacat -b 192.168.1.240:9092 -t admintome-test

Это еще ничего не должно показать, потому что мы еще ничего не отправили в нашу тему …

Чтобы отправить материал, мы можем скопировать любой текстовый файл в наш текущий каталог и отправить его в нашу тему Kafka. В другом окне выполните следующую команду.

$ cat README | kafkacat -b 192.168.1.240 -t admintome-test

Вы должны увидеть вывод в первом окне, в котором KafkaCat все еще работает в потребительском режиме.

Поздравляем! Вы успешно развернули кластер Kafka в Kubernetes.