Зачем вам NiFiKop: запуск Apache NiFi в Kubernetes

NiFiKop, Nifi Kubernetes оператор развертывание и запуск, Nifi on Kubernetes, курсы Apache NiFi, обучение Apache NiFi, Apache NiFi для инженеров данных и администраторов, инженерия больших данных курсы обучение, курсы дата-инженеров и администраторов NiFi, Cloudera NiFi, Школа Больших Данных Учебный центр Коммерсант

В этой статье для обучения дата-инженеров и администраторов кластера Apache NiFi познакомимся с NiFiKop – оператором, который упрощает запуск потокового ETL-маршрутизатора на платформе контейнерной виртуализации Kubernetes.

4 трудности управления кластером Apache NiFi

При том, что Apache NiFI имеет множество достоинств, предоставляя возможности сбора, маршрутизации и обогащения потоков данных из разных источников, он имеет и определенные ограничения:

  • сложности с мультиарендностью – в NiFi мультиарендность ограничивается управлением доступом пользователей через графический интерфейс, что не всегда достаточно для управления несколькими потоками данных в одном кластере без возможности разграничить использование ресурсов между разными потоками или командами.
  • трудности отладки и мониторинга состояния кластера, который управляет сотнями потоков данных, используя одну и ту же инфраструктуру и инструменты логирования, а какой-то узел становится нестабильным. Чтобы устранить проблему, связанную с инфраструктурой, этапом обработки или источником данных, приходится просматривать множество журналов и анализировать сотни системных метрик.
  • отсутствие предсказуемости в production. Из-за отсутствия изоляции ресурсов невозможно предсказать поведение развертывания в рабочей среде, даже успешно протестировав поведение потока данных в тестовой инфраструктуре. Довольно сложно воспроизвести в тестовой среде поведение кластеров NiFi после их развертывания и точно сымитировать производственную работу.
  • отсутствие автоматизации рутинных операций по умолчанию. Чтобы использовать Apache NiFi в соответствии с лучшими практиками современной инженерии ПО, придется полностью построить интеграцию CI/CD для реализации DevOps-подхода к жизненному циклу потока данных. Без этого получится процесс развертывания, обновления и тестирования потока данных NiFi будет управляться вручную, что неэффективно и чревато ошибками.

Решить эти проблемы можно, применив к эксплуатации Apache NiFi принципы Data Mesh и DataOps, согласно которым не нужно создавать централизованную платформу данных, объединяющую все группы данных. Наоборот, децентрализация позволит управлять многими типами данных и их обработкой, реализуя это как сервис по требованию. Для этого команда ИТ-компании Orange решила использовать платформу контейнерной виртуализации Kubernetes и реализовала собственный оператор NiFiKop, упрощающий развертывание Apache NiFi в ней. Далее рассмотрим, как это работает.

Что такое NiFiKop и как это работает в Kubernetes

Мы уже писали о преимуществах развертывания Apache NiFi на Kubernetes, а также сложностях практической реализации этого процесса. Чтобы упростить процесс запуска NiFi-приложений в Kubernetes, ИТ-компания Orange в 2021 году выпустила собственный оператор, а 20 ноября 2022 года в Github вышла его версия 1.0.0. Этот оператор автоматизирует подготовку, управление, автомасштабирование и операции с кластерами Apache NiFi, развернутыми на Kubernetes. NiFiKop предоставляет следующие возможности:

  • поддержка детальной конфигурации узла;
  • непрерывное обновление, масштабирование и автоматическая балансировка кластера NiFi;
  • безопасность соединения с использованием шифрования SSL;
  • расширенный поток данных и управление пользователями через пользовательские ресурсы Kubernetes (CRD, Custom Resource Definition);
  • мониторинг системных метрик через Prometheus;
  • автоматическая реакция и самовосстановление на основе предупреждений благодаря набору плагинов.

Поскольку Apache NiFi является приложением с отслеживанием состояния, каждый узел имеет свою уникальную конфигурацию, которая немного отличается от всех остальных. Поэтому все настройки NiFi в Kubernetes используют StatefulSet для создания кластера NiFi. StatefulSet управляет развертыванием и масштабированием набора подов, а также гарантирует их упорядоченность и уникальность. Как и развертывание, StatefulSet управляет подами, основанными на идентичной спецификации контейнера. В отличие от развертывания, StatefulSet поддерживает фиксированные идентификаторы для каждого пода, которые созданы на основе одной и той же спецификации, но не являются взаимозаменяемыми. На самом деле у каждого есть постоянный идентификатор, который сохраняется при любом изменении расписания.

StatefulSet поддерживает уникальные идентификаторы узлов, сгенерированные во время запуска пода, сеть между узлами без головных сервисов и уникальные постоянные тома для узлов. Однако, с использованием StatefulSet теряется возможность изменить конфигурацию уникальных узлов, удалить конкретный узел из кластера, т.к. StatefulSet всегда удаляет самый последний созданный узел, и использовать несколько разных постоянных томов для каждого узла.

Оператор NiFiKop использует Pod, ConfigMaps и PersistentVolumeClaims вместо StatefulSet, позволяя менять конфигурации уникальных узлов, удалять конкретные узлы из кластера NiFi и использовать несколько постоянных томов для каждого узла.

Функция управления жизненным циклом потока данных представляет 3 новых CRD:

  • NiFiRegistryClient, чтобы объявить клиента реестра NiFi;
  • NiFiParameterContext, чтобы создавать контекст параметров с двумя типами параметров, простым сопоставлением строк неконфиденциальных параметров и списком секретов, который содержит конфиденциальные параметры;
  • NiFiDataflow, чтобы объявить поток данных на основе NiFiRegistryClient и, при необходимости, ParameterContext, который оператор развернет в целевом кластере NiFi и будет управлять им.

Будучи RESTfull, Apache NiFi отлично подходит для создания оператора Kubernetes, позволяя реализовать оркестрацию через вызовы REST API, включая масштабирование и непрерывное обновление с проверкой работоспособности кластера.

NiFi работает с двумя типами конфигураций: только для чтения (Read-only) и на узле (PerNode).  Конфигурация только для чтения требует перезапуска узла для обновления, а все остальные узлы могут обновляться динамически. Оператор CRD различает эти поля и выполняет нужные действия, например, последовательное обновление или динамическая реконфигурация.

Определенные пользователем ресурсы Kubernetes позволяют управлять жизненным циклом потока данных, включая автоматическое развертывание на основе реестра NiFi, где можно описать свой ресурс NiFiDataflow, который будет развернут и запущен в целевом кластере. А благодаря тому, что в Kubernetes все конфигурации представлены в виде YAML-файлов, обеспечивается переносимость. NiFiKop дает возможность описывать кластеры, а также клиенты реестра, контексты параметров и потоки данных NiFi-приложения, чтобы повторно развернуть его в другом пространстве имен или кластере.

С ресурсами NiFiKop можно описать, что нужно, а оператор работает с REST API приложения NiFi, чтобы обеспечить синхронизацию ресурса, даже если кто-то вручную вносит изменения непосредственно в кластер. На основе контекстов параметров NiFiKop позволяет связываться с потоком данных, т.е. приложениями с различной конфигурацией в зависимости от среды.

Без управления пользователями и связанными с ними политиками доступа было невозможно полностью автоматизировать настройку кластера NiFi из-за следующих проблем:

  • масштабирование узла – когда новый узел присоединяется к кластеру, он должен иметь права роли, реализующие запрос прокси-пользователя, просмотр данных и пр. Управляя пользователями и политиками доступа, можно создать пользователя для этого узла с нужными правами доступа.
  • права администратора оператора — чтобы оператор мог эффективно управлять кластером, ему необходимы права на развертывание групп процессов, очистку очередей и т.д. Эти права недоступны по умолчанию при установке пользователя InitialAdmin. Оператор NiFiKop дает возможность гибко определять пользователей и политики доступа.
  • доступ пользователя – если оператор определен как InitialAdmin, нет других пользователей, которые могут получить доступ к веб-интерфейсу, чтобы вручную дать доступ еще кому-то. Поэтому в NiFiKop концепция InitialAdmin расширена до оператора, что дает возможность определить список пользователей в качестве администраторов.

Кроме того, NiFiKop позволяет использовать ресурс NiFiUser, чтобы создать или привязать существующего пользователя в кластере NiFi и применить некоторые политики доступа, которые будут управляться и постоянно синхронизироваться оператором. А ресурс NiFiUserGroup позволяет создавать группы в кластере NiFi и применять политики доступа и список NiFiUser, которые будут управляться и постоянно синхронизироваться оператором. Чтобы упростить определение ресурсов NiFiUser и NiFiUserGroup, в NiFiKop определены две группы по умолчанию, которые можно передать со списком пользователей, чтобы создаваться и управляться оператором:

  • администраторы — группа, предоставляющая максимальный доступ в кластере NiFi;
  • читатели — группа, предоставляющая доступ на чтение в кластере NiFi.

Эта функция дает возможность полностью автоматизировать развертывание кластера NiFi и управлять потоком данных.

Больше подробностей по администрированию и эксплуатации Apache NiFi  для построения эффективных ETL-конвейеров потоковой аналитики больших данных вы узнаете на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:

Я даю свое согласие на обработку персональных данных и соглашаюсь с политикой конфиденциальности.

Источники

  1. https://medium.com/@alexandreguitton_12701/a-kubernetes-operator-for-apache-nifi-3b3674938f33
  2. https://konpyutaika.github.io/nifikop/docs/1_concepts/1_start_here
Поиск по сайту