В этом окончательном руководстве я дам вам простое пошаговое руководство по установке 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.