Развертывания на основе Helm для Apache NiFi

Служба Azure Kubernetes (AKS)

В этом решении показано, как использовать диаграммы Helm при развертывании NiFi на Служба Azure Kubernetes (AKS). Helm упрощает процесс установки приложений Kubernetes и управления ими.

Apache®, Apache NiFi®, и NiFi® являются зарегистрированными товарными знаками или товарными знаками Apache Software Foundation в США и/или других странах. Использование этих меток не подразумевает подтверждения от Apache Software Foundation.

Архитектура

Схема, показывающая, как пользователь настраивает диаграмму Helm для развертывания приложения в Kubernetes. Компоненты включают модули pod и тома, создаваемые Kubernetes.

Скачайте файл Visio для этой архитектуры.

Рабочий процесс

  • Диаграмма Helm содержит файл values.yaml. В этом файле перечислены входные значения, которые могут изменять пользователи.

  • Пользователь корректирует параметры в диаграмме, включая следующие значения:

    • Размеры томов.
    • Количество объектов pod.
    • Механизмы проверки подлинности и авторизации пользователей.
  • Пользователь запускает команду Helm install для развертывания диаграммы.

  • Helm проверяет, содержатся ли среди введенных пользователем данных значения для всех обязательных переменных.

  • Helm создает манифест, описывающий объекты для развертывания в Kubernetes.

  • Helm отправляет манифест в кластер Kubernetes. Apache ZooKeeper обеспечивает координацию кластеров.

  • Kubernetes создает указанные объекты. Для развертывания NiFi требуются следующие объекты:

    • Объекты конфигурации.
    • Тома данных. Хранилище объектов pod, временное.
    • Журнальный том.
    • Объекты pod, использующие образ для запуска NiFi в контейнере. Kubernetes использует ресурс рабочей нагрузки StatefulSet для управления объектами pod.
    • Служба Kubernetes, которая делает пользовательский интерфейс NiFi доступным для пользователей.
    • Маршруты входящего трафика, если кластер использует входящий трафик для обеспечения доступности пользовательского интерфейса извне.

Компоненты

Диаграмма Helm — это коллекция файлов в папке с древовидной структурой. Эти файлы описывают ресурсы Kubernetes. На диаграмме Helm можно настроить следующие компоненты:

ZooKeeper

ZooKeeper использует отдельную диаграмму. Вы можете использовать стандартную диаграмму ZooKeeper, которую Kubernetes предоставляет в своем репозитории-инкубаторе диаграмм. Но если ваши зависимости включают общедоступное содержимое реестра, вы подвергаете риску свои рабочие процессы разработки и развертывания образов. Чтобы минимизировать риски, по возможности сохраняйте локальные копии общедоступного содержимого. Подробные сведения см. в статье об управлении общедоступным содержимым с помощью Реестра контейнеров Azure.

В качестве альтернативы вы можете развертывать ZooKeeper самостоятельно. Если выбран этот параметр, укажите сервер ZooKeeper и номер порта, чтобы объекты pod, запускающие NiFi, могли получить доступ к службе ZooKeeper.

Kubernetes StatefulSet

Чтобы запустить приложение в Kubernetes, запустите объект pod. Эта базовая единица запускает различные контейнеры, реализующие различные действия приложения.

Kubernetes предлагает два решения для управления объектами pod, которые запускают такие приложения, как NiFi:

  • ReplicaSet, который поддерживает устойчивый набор реплик объектов pod, выполняемых в любой момент времени. Вы часто используете ReplicaSet, чтобы гарантировать доступность указанного числа идентичных объектов pod.
  • StatefulSet, который является объектом API рабочей нагрузки, используемым для управления приложениями с отслеживанием состояния. StatefulSet управляет объектами pod, основанными на идентичной спецификации контейнера. Kubernetes создает эти объекты из одной спецификации. Но эти объекты не взаимозаменяемы. У каждого объекта pod есть постоянный идентификатор, который сохраняется при перепланировании.

Так как для управления данными вы используете NiFi, StatefulSet предоставляет лучшее решение для развертываний NiFi.

ConfigMap

Kubernetes предлагает ConfigMaps для хранения данных, не являющихся конфиденциальными. Kubernetes использует эти объекты для управления различными файлами конфигурации, например nifi.properties. Контейнер, который запускает приложение, получает доступ к сведениям о конфигурации через подключенные тома и файлы. ConfigMaps упрощают управление изменениями конфигурации после развертывания.

ServiceAccount

NiFi использует проверку подлинности и авторизацию для защищенных экземпляров. NiFi управляет этой информацией в файлах из файловой системы. В частности, каждый узел кластера должен поддерживать файлы authorizations.xml и users.xml. Все элементы должны иметь возможность записи в эти файлы. И каждый узел в кластере должен иметь одинаковую копию этих сведений. В противном случае кластер прекращает синхронизацию и выходит из строя.

Чтобы выполнить эти условия, можно скопировать эти файлы из первого элемента кластера в каждый возникающий элемент. Затем каждый новый элемент сохраняет свои собственные копии. Обычно объекты pod не авторизованы для копирования содержимого из другого объекта. Но ServiceAccount Kubernetes предоставляет способ для получения авторизации.

Службы

Службы Kubernetes делают службу приложений доступной для пользователей кластера Kubernetes. Объекты обслуживания также позволяют узлам элементов кластеров NiFi взаимодействовать друг с другом. Для развертываний диаграммы Helm используйте два типа служб: службы без монитора и службы на основе IP.

Входящий трафик

Входящий трафик управляет внешним доступом к службам кластеров. В частности, предварительно настроенный контроллер входящего трафика предоставляет маршруты HTTP и HTTPS извне кластера службам в кластере. Вы можете определить правила входящего трафика, определяющие способ маршрутизации трафика контроллером. Диаграмма Helm включает в конфигурацию маршрут входящего трафика.

Секреты

Для настройки защищенных кластеров NiFi необходимо хранить учетные данные. Секреты Kubernetes обеспечивают безопасный способ хранения и получения этих учетных данных.

Подробности сценария

У пользователей Apache NiFi часто возникает необходимость развернуть NiFi на Kubernetes. Развертывание Kubernetes включает в себя множество таких объектов, как pod, тома и службы. Управлять манифестами или файлами спецификаций, которые Kubernetes использует для этого числа объектов, сложно. Уровень сложности растет при развертывании нескольких кластеров NiFi, использующих разные конфигурации.

Диаграммы Helm предоставляют решение для управления манифестами. Helm — это диспетчер пакетов для Kubernetes. Средство Helm позволяет упростить процесс установки приложений Kubernetes и управление ими.

Диаграмма — это формат упаковки, используемый Helm. Требования к конфигурации нужно ввести в файлы диаграммы. Helm отслеживает историю и версии каждой диаграммы. А затем использует диаграммы для создания файлов манифеста Kubernetes.

На одной диаграмме можно развертывать приложения, использующие разные конфигурации. При запуске NiFi в Azure можно использовать диаграммы Helm для развертывания различных конфигураций NiFi в Kubernetes.

Apache®, Apache NiFi®, и NiFi® являются зарегистрированными товарными знаками или товарными знаками Apache Software Foundation в США и/или других странах. Использование этих меток не подразумевает подтверждения от Apache Software Foundation.

Рекомендации

Эти рекомендации реализуют основные принципы платформы Azure Well-Architected Framework, которая является набором руководящих принципов, которые можно использовать для улучшения качества рабочей нагрузки. Дополнительные сведения см. в статье Microsoft Azure Well-Architected Framework.

Диски данных

Для потребления места на диске рекомендуется использовать чередующийся набор дисков для репозиториев. В тестовых развертываниях, которые использовали Масштабируемые наборы виртуальных машин, этот подход лучше всего работает. Следующий фрагмент nifi.properties демонстрирует конфигурацию использования диска:

nifi.flowfile.repository.directory=/data/partition1/flowfiles
nifi.provenance.repository.directory.stripe1=/data/partition1/provenancenifi.provenance.repository.directory.stripe2=/data/partition2/provenancenifi.provenance.repository.directory.stripe3=/data/partition3/provenancenifi.content.repository.directory.stripe2=/data/partition2/content
nifi.content.repository.directory.stripe3=/data/partition3/content

В этой конфигурации используются три тома одинакового размера. Вы можете настроить значения и чередование в соответствии с требованиями к системе.

Сценарии развертывания

Для предоставления кластера NiFi можно использовать общедоступную или частную подсистему балансировки нагрузки или контроллер входящего трафика. При использовании диаграмм Helm для этой реализации доступны две конфигурации:

  • Незащищенный кластер NiFi, доступный по URL-адресу HTTP без проверки подлинности или авторизации пользователя.
  • Защищенный кластер NiFi, доступный по URL-адресу HTTPS. Такой кластер защищен с помощью TLS. При настройке защищенных кластеров можно предоставить собственные сертификаты. К тому же диаграммы могут создавать сертификаты. Для этого диаграммы используют набор средств NiFi, предоставляющий самозаверяющий центр сертификации (ЦС).

Если вы настраиваете кластер NiFi для работы в качестве защищенного кластера с обменом данными по протоколу TLS, необходимо включить проверку подлинности пользователя. Воспользуйтесь одним из следующих поддерживаемых способов проверки подлинности пользователя:

  • Проверка подлинности на основе сертификата. Пользователи проходят проверку подлинности путем предоставления сертификата пользовательскому интерфейсу NiFi. Чтобы использовать эту систему проверки подлинности пользователей, добавьте открытый сертификат центра сертификации в развертывание NiFi.
  • Проверка подлинности пользователей на основе протокола LDAP. Подлинность учетных данных пользователя проверяется на сервере LDAP. При развертывании диаграммы нужно предоставить сведения о сервере LDAP и информационном дереве.
  • Проверка подлинности пользователя на основе OpenID. Пользователи предоставляют сведения серверу OpenID для настройки развертывания.

Конфигурация и потребление ресурсов

Чтобы оптимизировать потребление ресурсов, воспользуйтесь следующими параметрами Helm для настройки значений ЦП и памяти:

  • Параметр request, который указывает начальный объем ресурса, запрашиваемого контейнером
  • Параметр limit, который указывает максимальный объем ресурса, который может использовать контейнер

При настройке NiFi нужно учитывать конфигурацию памяти системы. Так как NiFi является приложением Java, вам следует настроить такие параметры, как минимальное и максимальное значения памяти виртуальной машины Java. Используйте следующие параметры:

  • jvmMinMemory
  • jvmMaxMemory
  • g1ReservePercent
  • conGcThreads
  • parallelGcThreads
  • initiatingHeapOccupancyPercent

Безопасность

Безопасность обеспечивает гарантии от преднамеренного нападения и злоупотребления ценными данными и системами. Дополнительные сведения см. в разделе "Общие сведения о компоненте безопасности".

Используйте контекст безопасности Kubernetes для повышения безопасности базовых контейнеров, в которых выполняется двоичный объект NiFi. Контекст безопасности управляет доступом к этим контейнерам и их объектам pod. С помощью контекста безопасности можно предоставить некорневым пользователям разрешения на запуск контейнеров.

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

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

Образы контейнеров

Контейнеры Kubernetes — это базовые единицы, запускающие двоичные объекты NiFi. Чтобы настроить кластер NiFi, сосредоточьтесь на образе, используемом для запуска этих контейнеров. У вас есть два варианта действий для этого образа:

  • Использовать стандартный образ NiFi, чтобы запустить диаграмму NiFi. Этот образ предоставляет виртуальное сообщество Apache NiFi. Но для настройки защищенных кластеров необходимо добавить двоичный объект kubectl в контейнеры.
  • Использовать пользовательский образ. В случае такого подхода необходимо учитывать требования к файловой системе. Убедитесь в правильности расположения двоичных объектов NiFi. Дополнительные сведения о настроенной файловой системе см. в разделе о Dockerfile в исходном коде Apache NiFi.

Соавторы

Эта статья поддерживается корпорацией Майкрософт. Первоначально он был написан следующими участниками.

Автор субъекта:

Чтобы просмотреть недоступные профили LinkedIn, войдите в LinkedIn.

Следующие шаги