логотип PurpleSchool
логотип PurpleSchool

Установка и настройка Kafka в Kubernetes

Автор

Олег Марков

Введение

Apache Kafka — одна из самых популярных распределённых платформ потоковой обработки данных с высокой производительностью. Но чтобы использовать Kafka на практике в современных облачных инфраструктурах, всё чаще возникает задача установить и настроить её в Kubernetes. Такой подход позволяет легко управлять масштабируемостью, обновлениями и высоким уровнем отказоустойчивости.

В этой статье я подробно покажу, как развернуть Kafka кластер в Kubernetes, объясню необходимые концепции, проведу через настройку Helm-чартов и Persistent Volume, разберу варианты конфигурации и поделюсь с вами примерами кодов манифестов. Так вы сможете быстро и уверенно внедрить Kafka в ваш Kubernetes-кластер.


Что такое Kafka и зачем её устанавливать в Kubernetes

Обзор Kafka

Kafka — это распределённый брокер сообщений, предназначенный для передачи, хранения и обработки больших объёмов потоковых данных в реальном времени. С её помощью приложения обмениваются сообщениями с малой задержкой, сохраняя устойчивость даже при нагрузках.

Почему Kubernetes

Kubernetes — это система управления контейнерами, которая автоматизирует развертывание и масштабирование приложений. Если вы уже используете Kubernetes или переходите на контейнеризацию, разворачивать Kafka в этой среде удобно по нескольким причинам:

  • Автоматическое распределение нагрузки между брокерами.
  • Легко добавлять или удалять узлы.
  • Мониторинг, логи и восстановление работают из коробки.
  • Гибкая интеграция с Persistent Volume для стабильного хранения данных.

Подходы к развертыванию Kafka в Kubernetes

Смотрите, вы можете развернуть Kafka в Kubernetes двумя основными способами:

  1. Ручное создание манифестов Kubernetes для каждого компонента Kafka — требует больше усилий, но даёт полный контроль.
  2. Использование Helm-чартов — самый быстрый, масштабируемый и надёжный способ, особенно если вы только начинаете работу с Kafka в Kubernetes.

В этой статье я буду использовать второй способ — Helm-чарты, потому что это действительно сильно облегчает процесс. Если вы хотите затем углубиться и разобраться с ручным развертыванием, этот опыт вам тоже пригодится.


Предварительные требования

Перед началом убедитесь, что у вас есть следующее:

  • Доступ к рабочему Kubernetes-кластеру (например, minikube, kind, GKE, EKS или другой).
  • Установлен kubectl для управления кластером.
  • Helm версии 3 и выше.
  • Доступ к интернету для скачивания чартов и образов.

Проверьте подключение к кластеру:

kubectl get nodes
# Этот вывод покажет активные узлы Kubernetes

Если команда отработала, можете двигаться дальше.


Установка Helm

Если у вас ещё не установлен Helm, вот быстрая инструкция:

curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
# Эта команда скачает и установит Helm 3

Проверьте установку:

helm version
# Вы увидите версию Helm, если всё прошло успешно

Добавляем Helm репозиторий с Kafka

Самый популярный и поддерживаемый Helm-чарт для Kafka — это bitnami/kafka. Давайте добавим этот репозиторий.

helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
# Теперь вы можете использовать Helm-чарты Bitnami для установки Kafka

Развёртывание Kafka через Helm

Теперь приступим к самой установке. Для начала стоит определиться с namespace.

kubectl create namespace kafka
# Создаём отдельное пространство имён для удобства

Далее устанавливаем Kafka:

helm install my-kafka bitnami/kafka --namespace kafka
# Эта команда поднимет Kafka с настройками по умолчанию в вашем кластере

Вывод покажет статус установки и значения по умолчанию.

Если хотите предварительно посмотреть параметры чарта:

helm show values bitnami/kafka > kafka-values.yaml
# Сохраняем значения чарта для дальнейшей настройки

Кастомизация Helm-чарта Kafka

Применение настроек по умолчанию подходит для быстрого старта, но для надёжной работы нужны дополнительные параметры — например, настройка хранения данных, количества брокеров, ресурсов и параметров безопасности.

Редактируйте файл kafka-values.yaml. Вот пример такого файла с самыми важными параметрами:

replicaCount: 3             # Количество брокеров Kafka
auth:
  enabled: true             # Включить аутентификацию
  sasl:
    mechanism: scram-sha-256
    jaas:
      clientUser: user       # Имя пользователя
      clientPassword: password  # Пароль (используется для теста, для PROD лучше через secret)
persistence:
  enabled: true
  size: 10Gi                # Размер хранилища под брокера
  storageClass: "standard"  # StorageClass для Persistent Volume
resources:
  requests:
    memory: 1Gi
    cpu: 500m
  limits:
    memory: 2Gi
    cpu: 1

Здесь вы задаёте три брокера, защищённое подключение и включаете постоянное хранилище (данные не теряются при рестарте подов).

Устанавливаем Kafka с этим файлом:

helm install my-kafka -f kafka-values.yaml bitnami/kafka --namespace kafka

Проверка установки

Как только Helm-чарт развернётся, проверьте статус подов:

kubectl get pods -n kafka
# Должны быть запущены поды my-kafka-0, my-kafka-1 и my-kafka-2 и Zookeeper

Теперь проверьте сервисы:

kubectl get svc -n kafka
# Вы увидите kafka, zookeeper, headless сервисы

Настройка хранилища (Persistent Volume)

Kafka хранит состояние — все сообщения, поэтому очень важно настроить персистентное хранилище.

В примере выше мы задали размер и StorageClass через Helm. Kubernetes сам создаст нужные PersistentVolumeClaim для каждого брокера. Вот как вы можете проверить их:

kubectl get pvc -n kafka
# Вы увидите PVC с именем my-kafka-0, my-kafka-1 и т. д.

Если кластер локальный (например, minikube), иногда вручную приходится создавать StorageClass или тестировать на стандартном. В облачных кластерах (GKE, EKS) StorageClass для SSD или HDD обычно уже есть.


Доступ к Kafka внутри и вне кластера

Доступ из подов Kubernetes

Обычно приложения, работающие в том же кластере Kubernetes, используют DNS-имена сервисов Kafka для подключения. Пример подключения:

  • Адрес брокера будет выглядеть как: my-kafka.kafka.svc.cluster.local:9092

Доступ извне — порт-форвардинг

Иногда вам нужно протестировать Kafka локально с вашего компьютера. Проще всего воспользоваться port-forward:

kubectl port-forward svc/my-kafka 9092:9092 -n kafka
# Теперь на вашей машине порт 9092 проброшен в Kafka внутри кластера

Доступ извне — LoadBalancer или NodePort

Если в кластере настроен Ingress, LoadBalancer или NodePort, сможете пробросить порт наружу для production-сценариев, настроив эти параметры в чарте Helm (например, через параметры service.type=LoadBalancer).


Настройка Zookeeper

Kafka требует Zookeeper для своей работы. В популярных Helm-чартах он разворачивается вместе с Kafka автоматически, но иногда вы захотите вынести его отдельно — например, если у вас несколько Kafka-кластеров. Для основной работы достаточно дефолтных настроек.


Управление и масштабирование кластера Kafka

Для увеличения или уменьшения количества брокеров Kafka отредактируйте параметр replicaCount в файле конфигурации:

replicaCount: 5

И примените изменения командой:

helm upgrade my-kafka -f kafka-values.yaml bitnami/kafka --namespace kafka
# Helm добавит или уберёт нужное количество брокеров

Kubernetes автоматически создаст дополнительные поды и Persistent Volume Claims.


Обновление чарта и конфигурации

Helm позволяет обновлять чарт или параметры без ручной пересборки всего кластера:

# Например, меняем аутентификацию или ресурсы:
helm upgrade my-kafka -f kafka-values.yaml bitnami/kafka --namespace kafka

Если в чарте появились новые версии, их можно подтянуть:

helm repo update
helm upgrade my-kafka bitnami/kafka --namespace kafka

Мониторинг Kafka в Kubernetes

Не забывайте о мониторинге! В Bitnami-чарте для Kafka предусмотрена поддержка Prometheus и Grafana. Например, чтобы включить метрики:

metrics:
  kafka:
    enabled: true
  zookeeper:
    enabled: true

Теперь метрики можно собирать через Prometheus и визуализировать в Grafana.


Резервное копирование данных Kafka

Для резервного копирования в Kubernetes обычно используют снапшоты Persistent Volume или сторонние решения на уровне StorageClass. Проверьте документацию вашего облачного провайдера или используйте такие инструменты, как Velero.


Пример манифеста Helm-чарта Kafka с комментариями

Смотрите, я привожу почти полный пример values.yaml с комментариями — его можно взять за основу:

replicaCount: 3   # Задаёт количество брокеров Kafka
image:
  tag: 3.5.1      # Версия Kafka (важно для совместимости)
auth:
  enabled: true
  sasl:
    mechanism: scram-sha-512
    jaas:
      clientUser: testuser  # Пользователь для SASL
      clientPassword: testpass  # Пароль (в реальной работе переместите в Secret)
persistence:
  enabled: true
  size: 10Gi     # Размер хранилища для каждого брокера
  storageClass: "fast-ssd"
resources:
  requests:
    cpu: 500m
    memory: 1Gi
  limits:
    cpu: 1
    memory: 2Gi
service:
  type: ClusterIP # Для внутреннего доступа. Для внешнего используйте LoadBalancer или NodePort
zookeeper:
  enabled: true
  replicaCount: 3   # Можно уменьшить на тесте до 1 для экономии ресурсов
metrics:
  kafka:
    enabled: true
  zookeeper:
    enabled: true

Заключение

Установка и настройка Kafka в Kubernetes с помощью Helm — это не только быстро, но и удобно, особенно если вам нужна масштабируемость, надежность и легкость процессов поддержки. С помощью правильных параметров в values-файле вы уже можете развернуть надёжный кластер Kafka с устойчивым хранением, защитой и средствами мониторинга.

Kubernetes забирает на себя инфраструктурные задачи, а Kafka продолжает выполнять свою ключевую функцию — обеспечивать высокоскоростную и надежную передачу сообщений между сервисами.


Частозадаваемые технические вопросы по теме статьи и ответы на них

1. Как настроить Kafka на работу без Zookeeper в Kubernetes (KRaft mode)?

Сначала убедитесь, что вы используете версию Kafka 2.8 и выше. Для этого задайте в чарте Helm параметры: yaml kraft: enabled: true # Включаем KRaft mode zookeeper: enabled: false # Отключаем автоматический запуск Zookeeper Примечание: в Bitnami-чарте поддержка KRaft может быть экспериментальной. Проверьте документацию чарта и Kafka версии перед продакшн использованием.


2. Как изменить конфигурацию логирования Kafka в Helm-чарте?

Вызовите: yaml log4j: existingConfigmap: kafka-log4j-config Затем создайте в кластере свой configmap с нужным файлом log4j.properties. Примените его к вашей установке — теперь Kafka будет читать параметры логирования из вашего configmap.


3. Как настроить TLS для защищённого соединения с Kafka?

В чарте Bitnami это можно сделать через параметр: yaml auth: tls: enabled: true existingSecret: kafka-tls-secret # Секрет с вашими сертификатами TLS Создайте Kubernetes Secret с приватными ключами и сертификатами — подробно это описано в документации Helm-чарта.


4. Как выставить лимит на размер логов топиков или ротацию логов?

Вам нужно добавить в values.yaml опции: yaml logRetentionBytes: 10737418240 # 10GB logRetentionHours: 168 # 7 дней Kafka автоматически удалит старые сообщения, если выполняется одно из этих условий.


5. Как восстановить Kafka кластер после падения одного или нескольких брокеров?

Kubernetes и Helm-чарт настроят новые поды автоматически, а Persistent Volume сохранит данные, если storage не разрушен. После восстановления все сообщения будут доступны — кластеры Kafka проектированы так, чтобы переживать такие сбои практически без потери данных. Если что-то пошло не так — проверьте PVC и состояние репликации топиков.

Стрелочка влевоРабота с YAML в KubernetesСоздание Go-приложений и KubernetesСтрелочка вправо

Постройте личный план изучения Kubernetes до уровня Middle — бесплатно!

Kubernetes — часть карты развития DevOps

  • step100+ шагов развития
  • lessons30 бесплатных лекций
  • lessons300 бонусных рублей на счет

Бесплатные лекции

Все гайды по Kubernetes

Terraform и Kubernetes инфраструктура как кодНастройка и использование Runners в KubernetesНастройка и деплой PostgreSQL в KubernetesСравнение и интеграция Openshift и KubernetesПримеры интеграции GitHub Actions и KubernetesDeploy приложений в Kubernetes - пошаговое руководство для начинающих и не толькоКак настроить CD в KubernetesИнтеграция Ansible в KubernetesИнтеграция CI/CD с Jenkins и KubernetesИнтеграция Kubernetes с GitLab - Автоматизация CI CD в облачной инфраструктуреГайд по DevOps инструментам в KubernetesОсобенности платформы Deckhouse в Kubernetes
Открыть базу знаний

Лучшие курсы по теме

изображение курса

Kubernetes и Helm

Антон Ларичев
AI-тренажеры
Гарантия
Бонусы
иконка звёздочки рейтинга4.9
3 999 ₽ 6 990 ₽
Подробнее
изображение курса

Docker и Ansible

Антон Ларичев
AI-тренажеры
Гарантия
Бонусы
иконка звёздочки рейтинга4.8
3 999 ₽ 6 990 ₽
Подробнее
изображение курса

Микросервисы

Антон Ларичев
Гарантия
Бонусы
иконка звёздочки рейтинга4.8
3 999 ₽ 6 990 ₽
Подробнее

Отправить комментарий