Implantações baseadas no Helm para Apache NiFi

AKS (Serviço de Kubernetes do Azure)

Esta solução mostra como usar gráficos Helm ao implantar o NiFi no Serviço de Kubernetes do Azure (AKS). O Helm simplifica o processo de instalação e gerenciamento de aplicativos do Kubernetes.

Apache®, Apache NiFi® e NiFi® são marcas registradas ou marcas comerciais da Apache Software Foundation nos Estados Unidos e/ou em outros países. O uso desta marca não implica aprovação por parte da Apache Software Foundation.

Arquitetura

Diagrama mostrando como um usuário configura um gráfico do Helm para implantar um aplicativo no Kubernetes. Os componentes incluem pods e volumes que o Kubernetes cria.

Baixe um Arquivo Visio dessa arquitetura.

Workflow

  • O gráfico do Helm contém um arquivo values.yaml. Esse arquivo lista os valores de entrada que os usuários podem editar.

  • O usuário ajusta as configurações do gráfico, como os valores de:

    • Tamanhos de volume
    • Quantidade de pods
    • Mecanismos de autenticação e autorização de usuário
  • O usuário executa o comando Helm install para implantar o gráfico.

  • O Helm verifica se a entrada do usuário contém os valores de todas as variáveis necessárias.

  • O Helm cria um manifesto que descreve os objetos a serem implantados no Kubernetes.

  • O Helm envia o manifesto para o cluster do Kubernetes. O Apache ZooKeeper coordena o cluster.

  • O Kubernetes cria os objetos especificados. Uma implantação do NiFi requer estes objetos:

    • Objetos de configuração.
    • Volumes de dados. O armazenamento pod é temporário.
    • Um volume de log.
    • Pods que usam uma imagem para executar o NiFi em um contêiner. O Kubernetes usa um recurso de carga de trabalho com StatefulSet para gerenciar os pods.
    • Um serviço do Kubernetes que torna a interface do usuário do NiFi disponível para os usuários.
    • Rotas de entrada se o cluster usa a entrada para disponibilizar a interface do usuário externamente.

Componentes

O gráfico do Helm é uma coleção de arquivos em uma pasta com uma estrutura de árvore. Esses arquivos descrevem os recursos do Kubernetes. Você pode configurar os seguintes componentes em um gráfico do Helm:

ZooKeeper

O ZooKeeper usa um gráfico separado. Você pode usar o gráfico padrão do ZooKeeper que o Kubernetes fornece no repositório de gráfico da incubadora. Mas, quando suas dependências incluem conteúdo de registro público, você arrisca seus fluxos de trabalho de desenvolvimento e implantação de imagens. Para diminuir esse risco, mantenha cópias locais do conteúdo público quando puder. Para obter informações detalhadas, confira Gerenciar conteúdo público com o Registro de Contêiner do Azure.

Você também pode implantar o ZooKeeper sem ajuda. Se você escolher essa opção, indique o servidor do ZooKeeper e o número da porta, para que os pods que executam o NiFi acessem o serviço do ZooKeeper.

StatefulSet do Kubernetes

Para executar um aplicativo no Kubernetes, você executa um pod. Essa unidade básica executa contêineres diferentes que implementam as diferentes atividades do aplicativo.

O Kubernetes oferece duas soluções para gerenciar pods que executam um aplicativo como o NiFi:

  • Um ReplicaSet, que mantém um conjunto estável do pods de réplica executado em um determinado momento. Você geralmente usa um ReplicaSet para garantir a disponibilidade de um número especificado de pods idênticos.
  • Um StatefulSet, que é o objeto de API de carga de trabalho que você usa para gerenciar aplicativos com estado. O StatefulSet gerencia pods que se baseiam em uma especificação de contêiner idêntica. O Kubernetes cria esses pods usando a mesma especificação. Mas esses pods não são intercambiáveis. Cada pod tem um identificador permanente que ele mantém no reagendamento.

Como você usa o NiFi para gerenciar dados, o StatefulSet tem a melhor solução para implantações de NiFi.

ConfigMaps

O Kubernetes oferece ConfigMaps para armazenar dados não confidenciais. O Kubernetes usa esses objetos para gerenciar vários arquivos de configuração, como nifi.properties. O contêiner que executa o aplicativo acessa as informações de configuração por meio de volumes e arquivos montados. O ConfigMaps facilita o gerenciamento de alterações de configuração após a implantação.

ServiceAccount

Em instâncias protegidas, o NiFi usa autenticação e autorização. O NiFi gerencia essas informações em arquivos do sistema de arquivos. Cada nó de cluster precisa manter um arquivo authorizations.xml e um arquivo users.xml. Todos os membros precisam ter permissão para gravar nesses arquivos. E cada nó de cluster precisa ter uma cópia idêntica dessas informações. Caso contrário, o cluster fica fora de sincronia e é interrompido.

Para atender a essas condições, você pode copiar esses arquivos do primeiro membro do cluster para todos os novos membros. Cada novo membro mantém as próprias cópias. Os pods geralmente não têm autorização para copiar o conteúdo de outro Pod. Mas o ServiceAccount do Kubernetes oferece uma forma de obter a autorização.

Serviços

Os serviços do Kubernetes disponibilizam o serviço de aplicativo para os usuários do cluster do Kubernetes. Os objetos de serviço também possibilitam que nós membros de clusters NiFi se comuniquem. Em implantações de gráfico Helm, use dois tipos de serviço: sem periféricos e baseados em IP.

Entrada

A entrada gerencia o acesso externo aos serviços do cluster. Ou seja, um controlador de entrada pré-configurado expõe rotas HTTP e HTTPS de fora do cluster para serviços de dentro do cluster. Você pode definir regras de entrada que determinam como o controlador roteia o tráfego. O gráfico Helm insere a rota de entrada na configuração.

Segredos

Para configurar clusters NiFi protegidos, você precisa armazenar credenciais. Os segredos do Kubernetes oferecem uma forma segura de armazenar e recuperar essas credenciais.

Detalhes do cenário

Os usuários do Apache NiFi geralmente precisam implantar o NiFi no Kubernetes. A implantação do Kubernetes envolve muitos objetos, como pods, volumes e serviços. É difícil gerenciar os manifestos ou os arquivos de especificação que o Kubernetes usa nesses inúmeros objetos. A dificuldade aumenta se você implanta vários clusters NiFi que usam configurações diferentes.

Os gráficos do Helm têm uma solução para gerenciar os manifestos. Helm é o gerenciador de pacotes do Kubernetes. Usando a ferramenta Helm, você simplifica o processo de instalação e gerenciamento de aplicativos do Kubernetes.

Gráfico é o formato de empacotamento que o Helm usa. Você insere os requisitos de configuração em arquivos de gráfico. O Helm mantém o controle do histórico e das versões de cada gráfico. Depois, ele usa gráficos para gerar arquivos de manifesto do Kubernetes.

Em um único gráfico, você pode implantar aplicativos que usam configurações diferentes. Ao executar o NiFi no Azure, você usa gráficos do Helm para implantar diferentes configurações de NiFi no Kubernetes.

Apache®, Apache NiFi® e NiFi® são marcas registradas ou marcas comerciais da Apache Software Foundation nos Estados Unidos e/ou em outros países. O uso desta marca não implica aprovação por parte da Apache Software Foundation.

Considerações

Estas considerações implementam os pilares do Azure Well-Architected Framework, que é um conjunto de princípios de orientação que podem ser usados para aprimorar a qualidade de uma carga de trabalho. Para obter mais informações, consulte Microsoft Azure Well-Architected Framework.

Discos de dados

Para o uso do disco, use um conjunto distribuído de discos para repositórios. Em implantações de teste que usaram conjuntos de dimensionamento de máquinas virtuais, essa opção funcionou melhor. O trecho a seguir de nifi.properties mostra uma configuração de uso do 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

Essa configuração usa três volumes do mesmo tamanho. Você pode corrigir os valores e a distribuição de acordo com os requisitos do sistema.

Cenários de implantação

Você pode usar um balanceador de carga público ou particular ou um controlador de entrada para expor um cluster NiFi. Quando você usa gráficos do Helm nessa implementação, há duas configurações disponíveis:

  • Um cluster NiFi desprotegido que pode ser acessado por meio de um URL HTTP sem autenticação ou autorização do usuário.
  • Um cluster NiFi protegido que pode ser acessado por meio de um URL HTTPS. Esse tipo de cluster é protegido com TLS. Quando você configura clusters protegidos, pode fornecer seus próprios certificados. Mas os gráficos também podem gerar os certificados. Para essa finalidade, os gráficos usam um kit de ferramentas NiFi que fornece uma AC (autoridade de certificação) autoassinada.

Quando você configura um cluster NiFi para ser executado como um cluster protegido com comunicação TLS, precisa ativar a autenticação do usuário. Use um dos seguintes métodos de autenticação de usuário compatíveis:

  • Autenticação de usuário baseada em certificado. Os usuários são autenticados pelo certificado que apresentam à interface do usuário do NiFi. Para usar esse tipo de sistema de autenticação de usuário, insira o certificado público da AC à implantação de NiFi.
  • Autenticação de usuário baseada em LDAP. Um servidor LDAP autentica as credenciais do usuário. Ao implantar o gráfico, insira as informações do servidor LDAP e a árvore de informações.
  • Autenticação de usuário baseada em OpenID. Os usuários fornecem informações ao servidor OpenID para configurar a implantação.

Configuração e uso de recursos

Para otimizar o uso de recursos, use estas opções do Helm ao configurar os valores de CPU e memória:

  • A opção request, que especifica a quantidade inicial do recurso que o contêiner solicita
  • A opção limit, que especifica a quantidade máxima do recurso que o contêiner pode usar

Ao configurar o NiFi, considere a configuração de memória do sistema. Como o NiFi é um aplicativo Java, você precisa ajustar as configurações de acordo com os valores mínimo e máximo de memória da JVM (Máquina Virtual Java). Use as configurações a seguir:

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

Segurança

A segurança fornece garantias contra ataques deliberados e o abuso de seus dados e sistemas valiosos. Para saber mais, confira Visão geral do pilar de segurança.

Use um contexto de segurança do Kubernetes para melhorar a segurança dos contêineres subjacentes que executam o binário NiFi. O contexto de segurança gerencia o acesso a esses contêineres e os pods deles. Por meio de um contexto de segurança, você pode conceder permissões a usuários não raiz para executar os contêineres.

Outros usos de contextos de segurança incluem:

  • Restringir o acesso de usuários baseados em sistema operacional que executam os contêineres
  • Especificar os grupos que podem acessar os contêineres
  • Limitar o acesso ao sistema de arquivos

Imagens de contêiner

Contêineres do Kubernetes são as unidades básicas que executam binários NiFi. Para configurar um cluster NiFi, concentre-se na imagem que você usa para executar esses contêineres. Você tem duas opções para esta imagem:

  • Usar a imagem NiFi padrão para executar o gráfico NiFi. A comunidade do Apache NiFi fornece essa imagem. Mas você precisa adicionar um binário kubectl aos contêineres para configurar os clusters protegidos.
  • Usar uma imagem personalizada. Se você usar essa opção, considere os requisitos do sistema de arquivos. Verifique se o local de seus binários NiFi está correto. Para obter mais informações sobre o sistema de arquivos configurado, confira Dockerfile no código-fonte do Apache NiFi.

Colaboradores

Esse artigo é mantido pela Microsoft. Ele foi originalmente escrito pelos colaboradores a seguir.

Autor principal:

Para ver perfis não públicos do LinkedIn, entre no LinkedIn.

Próximas etapas