Editar

Compartir a través de


Implementaciones basadas en Helm para Apache NiFi

Azure Kubernetes Service (AKS)

Esta solución muestra cómo usar gráficos de Helm al implementar NiFi en Azure Kubernetes Service (AKS). Helm simplifica el proceso de instalación y administración de aplicaciones de Kubernetes.

Apache®, Apache NiFi® y NiFi® son marcas comerciales registradas o marcas comerciales de Apache Software Foundation en Estados Unidos u otros países. El uso de estas marcas no implica la aprobación de Apache Software Foundation.

Architecture

Diagrama que muestra cómo un usuario configura un gráfico de Helm para implementar una aplicación en Kubernetes. Los componentes incluyen pods y volúmenes que crea Kubernetes.

Descargue un archivo Visio de esta arquitectura.

Flujo de trabajo

  • Un gráfico de Helm contiene un archivo values.yaml. En ese archivo figuran los valores de entrada que los usuarios pueden editar.

  • Un usuario ajusta la configuración de un gráfico, incluidos los valores para:

    • Tamaños de volumen.
    • Número de pods.
    • Mecanismos de autenticación y autorización de usuarios.
  • El usuario ejecuta el comando de Helm install para implementar el gráfico.

  • Helm comprueba si la entrada del usuario contiene valores para todas las variables necesarias.

  • Helm crea un manifiesto que describe los objetos que se implementarán en Kubernetes.

  • Helm envía el manifiesto al clúster de Kubernetes. Apache ZooKeeper se ocupa de la coordinación de clústeres.

  • Kubernetes crea los objetos especificados. Una implementación de NiFi requiere estos objetos:

    • Objetos de configuración.
    • Volúmenes de datos. El almacenamiento de pods es temporal.
    • Un volumen de registro.
    • Pods que usan una imagen para ejecutar NiFi en un contenedor. Kubernetes usa un recurso de carga de trabajo StatefulSet para administrar los pods.
    • Un servicio de Kubernetes que hace que la interfaz de usuario de NiFi esté disponible para los usuarios.
    • Rutas de entrada si el clúster usa la entrada para que la interfaz de usuario esté disponible externamente.

Componentes

Un gráfico de Helm es una colección de archivos de una carpeta con una estructura de árbol. Estos archivos describen los recursos de Kubernetes. Puede configurar los siguientes componentes en un gráfico de Helm:

ZooKeeper

ZooKeeper usa un gráfico independiente. Puede usar el gráfico estándar de ZooKeeper que Kubernetes proporciona en su repositorio de gráficos de incubadora. Pero cuando las dependencias incluyen contenido del registro público, se introducen riesgos en los flujos de trabajo de desarrollo e implementación de imágenes. Para mitigar estos riesgos, mantenga copias locales del contenido público siempre que sea posible. Para más información, consulte Administración del contenido público con Azure Container Registry.

Como alternativa, puede implementar ZooKeeper por su cuenta. Si elige esta opción, proporcione el servidor y el número de puerto de ZooKeeper para que los pods que ejecutan NiFi puedan acceder al servicio ZooKeeper.

StatefulSet de Kubernetes

Para ejecutar una aplicación en Kubernetes, ejecute un pod. Esta unidad básica ejecuta diferentes contenedores que implementan las distintas actividades de la aplicación.

Kubernetes ofrece dos soluciones para administrar pods que ejecutan una aplicación como NiFi:

  • ReplicaSet, que mantiene un conjunto estable de los pods de réplica que se ejecutan en un momento dado. A menudo se usa replicaSet para garantizar la disponibilidad de un número especificado de pods idénticos.
  • StatefulSet, que es el objeto de API de carga de trabajo que se usa para administrar aplicaciones con estado. StatefulSet administra pods que se basan en una especificación de contenedor idéntica. Kubernetes crea estos pods a partir de la misma especificación. Pero estos pods no son intercambiables. Cada pod tiene un identificador persistente que mantiene en la reprogramación.

Dado que usa NiFi para administrar datos, statefulSet proporciona la mejor solución para las implementaciones de NiFi.

ConfigMaps

Kubernetes ofrece ConfigMaps para almacenar datos no confidenciales. Kubernetes usa estos objetos para administrar varios archivos de configuración, como nifi.properties. El contenedor que ejecuta la aplicación accede a la información de configuración a través de volúmenes y archivos montados. ConfigMaps facilita la administración de los cambios de configuración posteriores a la implementación.

ServiceAccount

En instancias protegidas, NiFi usa autenticación y autorización. NiFi administra esta información en archivos del sistema de archivos. En concreto, cada nodo de clúster debe mantener un archivo authorizations.xml y un archivo users.xml. Todos los miembros deben poder escribir en estos archivos. Y cada nodo del clúster debe tener una copia idéntica de esta información. De lo contrario, el clúster deja de sincronizarse y se interrumpe.

Para cumplir estas condiciones, puede copiar estos archivos desde el primer miembro del clúster a todos los miembros que entren en vigor. A continuación, cada nuevo miembro mantiene sus propias copias. Por lo general, los pods no tienen autorización para copiar contenido de otro pod. Pero una cuenta ServiceAccount de Kubernetes ofrece una manera de obtener autorización.

Servicios

Los servicios de Kubernetes hacen que el servicio de aplicación esté disponible para los usuarios del clúster de Kubernetes. Los objetos de servicio también hacen posible que los nodos miembros de clústeres NiFi se comuniquen entre sí. Para las implementaciones de gráficos de Helm, use dos tipos de servicio: servicios sin encabezado y servicios basados en IP.

Entrada

Una entrada administra el acceso externo a los servicios de clúster. En concreto, un controlador de entrada preconfigurado expone rutas HTTP y HTTPS desde fuera del clúster a los servicios del clúster. Puede definir reglas de entrada que determinen cómo enruta el tráfico el controlador. El gráfico de Helm incluye la ruta de entrada en la configuración.

Secretos

Para configurar clústeres NiFi protegidos, debe almacenar las credenciales. Los secretos de Kubernetes proporcionan una manera segura de almacenar y recuperar estas credenciales.

Detalles del escenario

Los usuarios de Apache NiFi a menudo necesitan implementar NiFi en Kubernetes. Una implementación de Kubernetes implica muchos objetos, como pods, volúmenes y servicios. Es difícil administrar los manifiestos o archivos de especificación que Kubernetes usa para este número de objetos. La dificultad aumenta cuando se implementan varios clústeres NiFi que usan configuraciones diferentes.

Los gráficos de Helm proporcionan una solución para administrar los manifiestos. Helm es el administrador de paquetes para Kubernetes. Con la herramienta Helm, puede simplificar el proceso de instalación y administración de aplicaciones de Kubernetes.

Un gráfico es el formato de empaquetado que usa Helm. Los requisitos de configuración se escriben en los archivos del gráfico. Helm realiza un seguimiento del historial y las versiones de cada gráfico. A continuación, Helm usa gráficos para generar archivos de manifiesto de Kubernetes.

En un solo gráfico, puede implementar aplicaciones que usan configuraciones diferentes. Al ejecutar NiFi en Azure, puede usar gráficos de Helm para implementar diferentes configuraciones de NiFi en Kubernetes.

Apache®, Apache NiFi® y NiFi son marcas comerciales registradas o marcas comerciales de Apache Software Foundation en los Estados Unidos u otros países. El uso de estas marcas no implica la aprobación de Apache Software Foundation.

Consideraciones

Estas consideraciones implementan los pilares del marco de buena arquitectura de Azure, que es un conjunto de principios guía que se pueden usar para mejorar la calidad de una carga de trabajo. Para más información, consulte Marco de buena arquitectura de Microsoft Azure.

Discos de datos

Para el uso del disco, considere la posibilidad de usar un conjunto seccionado de discos para repositorios. En las implementaciones de prueba que usaban Virtual Machine Scale Sets, este enfoque funcionaba mejor. El siguiente extracto de nifi.properties muestra una configuración de uso de disco:

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

Esta configuración usa tres volúmenes del mismo tamaño. Puede ajustar los valores y el seccionado para satisfacer los requisitos del sistema.

Escenarios de implementación

Puede usar un equilibrador de carga público o privado o un controlador de entrada para exponer un clúster NiFi. Cuando se usan gráficos de Helm para esta implementación, hay dos configuraciones disponibles:

  • Un clúster NiFi no seguro al que se puede acceder a través de una dirección URL HTTP sin autenticación o autorización de usuario.
  • Un clúster NiFi protegido al que se puede acceder a través de una dirección URL HTTPS. Este tipo de clúster está protegido con TLS. Al configurar clústeres protegidos, puede proporcionar sus propios certificados. Como alternativa, los gráficos pueden generar los certificados. Para ello, los gráficos usan un kit de herramientas de NiFi que proporciona una entidad de certificado (CA) autofirmado.

Si configura un clúster NiFi para que se ejecute como un clúster protegido con comunicación TLS, debe activar la autenticación de usuario. Use uno de los siguientes métodos de autenticación de usuario admitidos:

  • Autenticación basada en certificados. Los usuarios se autentican mediante el certificado que presentan a la interfaz de usuario de NiFi. Para usar este tipo de sistema de autenticación de usuario, agregue el certificado público de la entidad de certificación a la implementación de NiFi.
  • Autenticación de usuario basada en LDAP. Un servidor LDAP autentica las credenciales de usuario. Al implementar el gráfico, proporcione información sobre el servidor LDAP y el árbol de información.
  • Autenticación de usuario basada en OpenID. Los usuarios proporcionan información al servidor OpenID para configurar la implementación.

Uso y configuración de recursos

Para optimizar el uso de recursos, use estas opciones de Helm para configurar los valores de CPU y memoria:

  • La opción request, que especifica la cantidad inicial del recurso que solicita el contenedor.
  • La opción limit, que especifica la cantidad máxima del recurso que puede usar el contenedor.

Al configurar NiFi, tenga en cuenta la configuración de memoria del sistema. Dado que NiFi es una aplicación Java, debe ajustar la configuración como los valores mínimo y máximo de memoria de la máquina virtual Java (JVM). Use la configuración siguiente:

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

Seguridad

La seguridad proporciona garantías contra ataques deliberados y el abuso de datos y sistemas valiosos. Para más información, consulte Introducción al pilar de seguridad.

Use un contexto de seguridad de Kubernetes para mejorar la seguridad de los contenedores subyacentes que ejecutan el binario de NiFi. Un contexto de seguridad administra el acceso a esos contenedores y sus pods. A través de un contexto de seguridad, puede conceder permisos a los usuarios que no son raíz para ejecutar los contenedores.

Otros usos de contextos de seguridad son los siguientes:

  • Restringir el acceso de los usuarios basados en el sistema operativo que ejecutan los contenedores.
  • Especificar los grupos que pueden acceder a los contenedores.
  • Limitar el acceso al sistema de archivos.

Imágenes del contenedor

Los contenedores de Kubernetes son las unidades básicas que ejecutan archivos binarios de NiFi. Para configurar un clúster NiFi, céntrese en la imagen que usa para ejecutar estos contenedores. Tiene dos opciones para esta imagen:

  • Usar la imagen de NiFi estándar para ejecutar el gráfico de NiFi. La comunidad de Apache NiFi proporciona esa imagen. Pero debe agregar un archivo binario kubectl a los contenedores para configurar clústeres protegidos.
  • Usar una imagen personalizada. Si toma este enfoque, tenga en cuenta los requisitos del sistema de archivos. Asegúrese de que la ubicación de los archivos binarios de NiFi es correcta. Para más información sobre el sistema de archivos configurado, consulte Dockerfile en el código fuente de Apache NiFi.

Colaboradores

Microsoft mantiene este artículo. Originalmente lo escribieron los siguientes colaboradores.

Autor principal:

Para ver los perfiles no públicos de LinkedIn, inicie sesión en LinkedIn.

Pasos siguientes