Deploy do Dremio com Kubernetes no Amazon EKS

Neste artigo vamos discutir uma das forma de como colocar o Dremio em produção no modo cluster utilizando o Kubernetes e a plataforma da Amazon EKS.

Image for post
Image for post

O Dremio é uma ferramenta fantástica para o mundo de dados que vem ganhando espaço no ambiente de Data Lakes. Ele permite centralizar diversos repositórios de dados e analisá-los separadamente ou em conjunto de uma forma muito simples, rápida e intuitiva.

Uma definição do site oficial em tradução livre diz:

O Dremio é um mecanismo de Data Lake em nuvem de última geração que centraliza seus dados para consultas rápidas e interativas diretamente no armazenamento do Data Lake.

Como o objetivo deste artigo é realizar o deploy para um ambiente de produção, não vamos entrar em conceitos sobre o Dremio e caso você ainda não conheça esta ferramenta ou queira conhecer um pouco mais, sugiro ler este artigo (que é muito bom por sinal).

Em relação a instalação do Dremio, existem diversas formas e podem ser encontradas neste link. Neste artigo vamos utilizar o Kubernetes no EKS.

Por que o Kubernetes?

O Kubernetes é a ferramenta mais moderna para deploy de aplicações em modo distribuído, possibilitando um auto escalonamento e eficiente gerenciamento de recursos. Possui diversos componentes para soluções completas de aplicações cloud native e processos de DevOps.

Ainda para melhorar nossa vida, vamos utilizar o Amazon EKS (Elastic Kubernetes Service) que é o Kubernetes como serviço da AWS, o melhor disso tudo é que não gastamos tempo com a instalação.

Não iremos abordar neste artigo os conceitos sobre Kubernetes, mas caso você tenha interesse, leia este aqui que traz alguns conceitos importantes sobre a ferramenta.

Requisitos para a nossa missão

Para atingir o nosso objetivo de uma forma mais eficiente e eficaz, vamos precisar de algumas ferramentas instaladas em nosso ambiente, para que assim também seja possível reproduzir em outros locais.

No link de cada ferramenta possui as instruções para sua instalação. Então vamos analisar cada uma delas:

  • kubectl: ferramenta de linha de comando para criar, gerenciar e inspecionar clusters construídos com o Kubernetes.
  • awscli: ferramenta de linha de comando para administrar serviços e recursos dentro do seu ambiente AWS, uma forma de automatizar a administração de seus recursos dentro da plataforma.
  • eksctl: é a ferramenta para linha de comando específica do Amazon EKS. Irá nos auxiliar na criação de nosso cluster.
  • git: ferramenta para controle de versão de arquivos. Vamos utilizá-la para baixar os arquivos necessários para deploy do Dremio.
  • helm: se trata de um gerenciador de pacotes para o Kubernetes (estilo o apt-get para o Linux), que tem o objetivo de facilitar a nossa vida na instalação de todas as dependências necessárias para o deploy de um serviço.

Agora vamos ao Deploy

  1. Criação da infraestrutura;
  2. Configuração de recursos do Dremio;
  3. Deploy no Kubernetes;
  4. Gerenciamento da infraestrutura;
  5. Acessando o Dremio.

Criação da infraestrutura

O primeiro passo é realizar a configuração da sua conta AWS em seu ambiente, para ter acessos de criação, exclusão e administração de forma geral. Para isso é necessário que você tenha as credenciais de acesso (access key e secret access key).

Com as credenciais em mãos digite o comando abaixo, configure as chaves e a região padrão que você irá utilizar, neste artigo escolhi a us-east-2 (Ohio).

aws configure

O resultado deve ser o seguinte:

Image for post
Image for post

O próximo passo é criar o cluster do Kubernetes e para isso vamos utilizar o seguinte comando:

Agora vamos analisar algumas informações importantes do comando acima:

  • a tag name indica o nome do seu cluster e a nodegroup-name o nome do grupo de nós;
  • a version indica a versão do Kubernetes no EKS;
  • a node-type é a mais importante, pois indica qual o tipo de máquina que contém os recursos (memória, processamento, armazenamento…) do seu cluster, verifique a documentação para mais detalhes de recursos e preços.
  • a nodes indica a quantidade de máquinas do seu cluster, node-ami o tipo de imagem (basicamente o sistema operacional) e a region a região dentro da AWS para execução do cluster.

O comando demora um pouco para ser finalizado e o resultado deve ser parecido com o da imagem a seguir:

Image for post
Image for post

Após a finalização, dentro do console da AWS e no serviço do EKS você já deve conseguir visualizar o cluster criado.

Image for post
Image for post

Configuração de recursos do Dremio

Neste passo vamos baixar os arquivos necessários para que seja realizado o deploy do Dremio utilizando o Kubernetes e realizar algumas configurações para adequar à nossa realidade de projeto.

O Dremio já oferece diversos arquivos de configuração para realizar deploy com Docker e Kubernetes em diversas plataformas, vamos clonar o repositório para o nosso ambiente com o comando a seguir:

git clone https://github.com/dremio/dremio-cloud-tools.git

Dentro da pasta clonada pelo git, vamos acessar as subpastas charts e depois dremio, e dentro dessa última vamos realizar os próximos passos.

Image for post
Image for post

Antes de prosseguir devemos visualizar e alterar se necessário o arquivo values .yaml, nele contém as configurações de recursos que vamos utilizar no cluster, é importante ajustar a sua realidade, caso contrário pode ocorrer problemas para subir os serviços pela falta de recursos.

As tags mais importantes do arquivo são as seguintes:

Elas definem recursos para utilização do Dremio como: memória, quantidade de CPU para utilização, espaço em disco e outras configurações tanto para o nó master (coordinator) quanto para os nós workers (executors). E também é possível configurar as portas utilizadas pelos serviços.

O repositório ainda contém os arquivos de configuração do Dremio e outras possíveis personalizações, então é importante analisar cada um.

Deploy no Kubernetes

Agora vamos utilizar o helm para fazer deploy do Dremio dentro do Kubernetes que criamos no EKS.

Para isso basta digitar o comando abaixo dentro da pasta dremio do repositório que clonamos, a mesma que utilizamos anteriormente.

helm install --wait . --generate-name

O helm irá ler os arquivos de configurações do Dremio e fará todo o processo de deploy para nós.

O comando pode demorar bastante para ser concluído, depende dos recursos do seu cluster e a quantidade de “nós” alocados para o deploy. Ele pode até te retornar o erro de timeout, caso isso aconteça passe para o próximo passo para verificar se não foi apenas o terminal que se desconectou e não um erro impeditivo que aconteceu.

Gerenciamento da infraestrutura

Após concluir o deploy temos que verificar se o nosso cluster está em execução com toda a sua infraestrutura criada.

Vamos digitar o seguinte comando:

kubectl get services

Obs: caso o contexto do kubectl não mudou para a AWS você terá que fazer isso manualmente.

O resultado deve ser o seguinte:

Image for post
Image for post

Algo importante neste comando é que ele já nos mostra a URL de acesso para o seu cluster e consequentemente para o Dremio. No meu caso a URL é a af1777105b13c48459059d6e30db9a05–997477623.us-east-2.elb.amazonaws.com.

Agora vamos verificar se todos os nossos “nós” estão sendo executados corretamente. O comando será o:

kubectl get pods

Image for post
Image for post

O resultado nos mostra que existe um nó master (dremio-master-0), um nó worker (dremio-executor-0) e dois nós do zookeper (zk-0 e zk-1) em execução.

Existem também dois nós (dremio-executor-1 e dremio-executor-2) pendentes, porém estes dois eu não irei utilizar por falta de recursos no cluster, mas caso queira ativar eles, basta aumentar os recursos do cluster com o eksctl ou diminuir os recursos do Dremio no arquivo values.yml.

O importante é que o Dremio vai funcionar com os recursos separados para ele, pois sua execução depende de um nó master, um executor e um zookeeper.

Como o nosso cluster está em execução, podemos acessar o console da AWS no serviço do EKS para verificar de forma visual os dois “nós” do Dremio em execução.

Image for post
Image for post

Ao acessar o serviço do EC2 também podemos verificar essas informações e obter mais detalhes sobre as instâncias em execução:

Image for post
Image for post

Acessando o Dremio

Agora para finalizar vamos acessar o Dremio utilizando a URL que coletamos nos passos anteriores, no meu caso o meu DNS gerado é o seguinte:

af1777105b13c48459059d6e30db9a05–997477623.us-east-2.elb.amazonaws.com

E o Dremio pode ser acessado na porta 9047, ficando assim:

af1777105b13c48459059d6e30db9a05–997477623.us-east-2.elb.amazonaws.com:9047

Ainda conforme o nosso comando kubectl get services nos informou ele possui outra porta liberada, a 31010 que serve para acesso via ODBC (Open Database Connectivity), a URL fica assim:

af1777105b13c48459059d6e30db9a05–997477623.us-east-2.elb.amazonaws.com:31010

A primeira ao acessar a interface gráfica do Dremio é preciso informar alguns dados básicos conforme a imagem a abaixo:

Image for post
Image for post

Depois o ambiente estará pronto para utilização:

Image for post
Image for post

E adicionar Sources e Datasets:

Image for post
Image for post

Algumas considerações

Alguns comandos para exclusão do cluster por linha de comando:

  • helm list: lista os cluster criados pelo helm.
  • helm delete — keep-history <nome-cluster>: exclui o cluster criado pelo helm e suas dependências, é preciso informar o nome do cluster indicado no comando de listagem dos clusters.
  • eksctl get cluster: lista os cluster ativos no EKS.
  • eksctl delete cluster --name <nome-cluster>: exclui um cluster dentro do EKS pelo nome que foi indicado no comando de listagem.

Concluindo…

Neste artigo aprendemos uma maneira de criar o ambiente de produção é/ou teste/homologação dentro do Amazon EKS que oferece diversas facilidades e utilizamos assim o que temos de melhor para gerenciamento de clusters, o Kubernetes.

Caso você queira apenas estudar o Dremio vale a pena instalar local ou em um servidor mais simples, sugiro a utilização do Docker ou a instalação manual.

Espero que vocês tenham gostado do artigo, não deixe de curtir, comentar e compartilhar, assim o conhecimento é promovido entre todos nós!

Data Hackers

Blog oficial da comunidade Data Hackers

Medium is an open platform where 170 million readers come to find insightful and dynamic thinking. Here, expert and undiscovered voices alike dive into the heart of any topic and bring new ideas to the surface. Learn more

Follow the writers, publications, and topics that matter to you, and you’ll see them on your homepage and in your inbox. Explore

If you have a story to tell, knowledge to share, or a perspective to offer — welcome home. It’s easy and free to post your thinking on any topic. Write on Medium

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store