Alura > Cursos de Data Science > Cursos de Engenharia de Dados > Conteúdos de Engenharia de Dados > Primeiras aulas do curso Aprofundando no Airflow: Executor Kubernetes

Aprofundando no Airflow: Executor Kubernetes

Instalando um ambiente Kubernetes - Apresentação

Olá!! Boas-vindas a mais um curso de Apache Airflow.

Autodescrição: Meu nome é Millena Gená, eu sou uma mulher branca de cabelos longos, escuros e cacheados, meus olhos são castanhos escuros, estou utilizando batom vermelho e vestindo uma blusa preta com o símbolo da escola de dados em verde no meio.

Estou sentada em uma cadeira gamer, na cor azul. Ao meu fundo, existe um guarda-roupa preto, com iluminação verde, alguns livros da saga Harry Potter, uma pelúcia de polvinho roxo, um funko da personagem Eleven, da série Stranger Things e, mais uma vez, o símbolo da escola de dados em verde.

Eu sou a instrutora que te acompanhará neste treinamento, onde aprofundaremos nossos conhecimentos na ferramenta Apache Airflow e estudaremos mais um de seus executores, o Kubernetes. Então, vamos conferir os principais conteúdos que aprenderemos durante o curso!

Começaremos configurando todo o ambiente Kubernetes na nossa máquina, utilizando o minikube. Para isso, precisaremos instalar o Docker, Minikube e Helm.

Em seguida, vamos preparar o nosso ambiente Kubernetes para configuração e instalação do Airflow. Neste momento, compreenderemos o que é o executor Kubernetes, quais as suas principais vantagens e criaremos alguns volumes persistentes.

Depois disso, configuraremos o Chart do Airflow, criando uma imagem customizada e realizando a instalação do chart. Por fim, vamos criar um DAG com algumas tarefas que extraem dados do mercado financeiro e testar o DAG no Kubernetes. Temos muito a aprender!

Para que você consiga acompanhar o curso da melhor forma, é importante que você tenha algum conhecimento em: comandos Linux; linguagem Python; Docker; e Kubernetes.

Se interessou pelo assunto? Então, vamos aprender a configurar o Airflow no Kubernetes e a utilizar o Kubernetes Executor.

Instalando um ambiente Kubernetes - Instalando o Docker

Vamos começar o nosso curso! Vamos utilizar o terminal WSL 2 para executar todos os comandos e realizar todos os passos. Ele garantirá também que não teremos nenhum erro inesperado.

Inclusive, há uma atividade nessa aula que se chama Preparando o Ambiente, onde ensino o que é o WSL e a configurá-lo na sua máquina. Não deixe de conferir essa atividade e realizar todas as suas etapas antes de prosseguir.

Para conseguirmos utilizar o executor kubernetes da melhor forma, configuraremos o Airflow em um ambiente kubernetes. O primeiro passo, portanto, é preparar todo o ambiente kubernetes na nossa máquina, começando pela instalação de um gerenciador de máquinas virtuais, o Docker.

É importante realizar a instalação do gerenciador de máquinas virtuais, porque o kubernetes precisa dele para funcionar "por baixo dos panos".

Então, vamos instalar o Docker. Para configurar o repositório do docker e também a sua instalação, é preciso seguir o passo a passo descrito na documentação dessa ferramenta. O link também ficará disponível em uma atividade após esse vídeo.

Vamos abrir o Windows Terminal. Ele abriu o PowerShell na primeira aba. Nós trabalharemos com WSL, portanto, apertaremos a seta para baixo que está na barra superior do Terminal e selecionaremos a opção de Terminal WSL, que está como Ubuntu-20.04.

Agora, podemos começar a executar os comandos, conforme descrito na documentação. Nós realizaremos os comandos para que a versão mais recente seja instalada, a versão 20.10.20. Recomendo que você utilize a mesma.

Podemos colar o primeiro comando que a documentação pede, que serve para remover outras versões do Docker instaladas na máquina.

sudo apt-get remove docker docker-engine docker.io containerd runc 

Pressionaremos "Enter". Ele pediu a senha. Vamos preencher.

sudo apt-get remove docker docker-engine docker.io containerd runc 
[sudo] password for millenagena

Ele retornou uma mensagem avisando que nenhum pacote com nome de Docker foi encontrado. Está certo, porque não instalamos nenhum.

sudo apt-get remove docker docker-engine docker.io containerd runc 
[sudo] password for millenagena

Reading package lists... Done

Building dependency tree

Reading state information... Done

Package 'docker.io' is not installed, so not removed

E: Unable to locate package docker

E: Unable to locate package docker-engine

O próximo comando servirá para a atualização dos pacotes da nossa máquina.

sudo apt-get update

Finalizamos a atualização dos pacotes. É sempre importante fazer isso antes de realizar qualquer nova instalação na máquina. Agora, vamos pressionar "Ctrl + L" para limpar o Terminal e colar o próximo comando, que serve para instalar pacotes recomendados. Assim, instalaremos o Docker sem nenhum problema.

sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

Agora, executaremos mais dois comandos para a configuração da chave oficial do Docker. Limparemos o Terminal com "Ctrl + L" e colaremos o primeiro, o sudo mkdir.

sudo mkdir -p /etc/apt/keyrings

Vamos colar o segundo comando e, definitivamente, adicionarmos a chave oficial do Docker.

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

A chave foi adicionada e podemos executar o comando para a configuração do repositório do Dcoker na nossa máquina.

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Por fim, vamos executar novamente o comando de atualização de pacotes.

sudo apt-get update

Feito isso, podemos, definitivamente, executar o comando de instalação do Docker.

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

A instalação foi finalizada e precisamos executar o comando que vai inicializar o docker. Vamos limpar o Terminal novamente e colar o comando.

sudo service docker start

No Terminal do WSl, o Docker não é inicializado automaticamente, por isso, sempre será necessário executar esse comando. Apertamos "Enter" e o Docker foi inicializado. Para conferirmos se a instalação está correta, vamos executar uma imagem Docker chamada "Hello World", apenas ao nível de teste.

sudo docker run hello-world

Unable to find image 'hello-world:latest' locally

latest: Pulling from library/hello-world

1db29710123e: Pull complete

Digest: sha256:c77beld3a47d0caf71a82dd893ee61ce01f32fc758031a6ec4cf1389248bb833

Status: Downloaded newer image for hello-world:latest

Hello from Docker!

This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:

  1. The Docker client contacted the Docker daemon.

  2. The Docker daemon pulled the “hello-world” image from the Docker Hub. (amd64)

  3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading.

  4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal.

To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:

https://hub.docker.com/

For more examples and ideas, visit:

https://docs.docker.com/get-started/

O comando foi executado corretamente e retornou a mensagem "Hello from Docker!". Vamos limpar o Terminal outra vez. Agora, executaremos mais alguns comandos para habilitarmos o uso do Docker como usuário comum, ou seja, sem a necessidade de adicionar sudo à frente do comando todas as vezes em que executarmos algo no Docker.

Além disso, é importante realizarmos esse passo para que o Kubernetes consiga utilizar o Docker sem nenhum problema. Então, vamos inserir o comando para adicionar um grupo docker.

sudo groupadd docker

groupadd: group 'docker' already exists

Ele retornou uma mensagem avisando que esse grupo já existe. Não tem problema. Podemos passar para o segundo comando, que serve para adicionar o usuário ao grupo docker.


sudo usermod -aG docker $USER

Para garantirmos que essas configurações serão aplicadas, podemos fechar o nosso Terminal e abri-lo outra vez. Essa é uma recomendação da própria documentação. Vamos abrir uma nova guia e selecionar Ubuntu.20.04.

Testarmos se as configurações foram devidamente aplicadas executando novamente o comando da imagem "Hello World", desta vez, sem o sudo.

docker run hello-world

Hello from Docker!

This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:

  1. The Docker client contacted the Docker daemon.

  2. The Docker daemon pulled the “hello-world” image from the Docker Hub. (amd64)

  3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading.

  4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal.

To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:

https://hub.docker.com/

For more examples and ideas, visit:

https://docs.docker.com/get-started/

A imagem foi executada corretamente e ele trouxe a mensagem "Hello from Docker!" sem precisar do sudo antes do comando. Se você tiver algum erro nesta etapa, talvez seja necessário desligar o WSL e ligá-lo novamente. Mas, não se preocupe! Uma atividade também será disponibilizada nessa aula, ensinando a reiniciar o Terminal WSL.

Agora que o Docker está instalado e configurado, podemos partir para a configuração do Cluster Kubernetes na nossa máquina. Faremos isso nos próximos vídeos!!

Instalando um ambiente Kubernetes - Configurando o minikube

Para instalarmos um ambiente Kubernetes em nossa máquina, utilizaremos uma ferramenta chamada Minikube - uma das formas mais simples de configurar um cluster Kubernetes na máquina local, utilizada principalmente para realização de testes de aplicações.

Para que realizemos a instalação do Minikube, é importante que tenhamos um gerenciador de máquinas virtuais, no caso, o Docker, que instalamos anteriormente. Inclusive, é necessário garantir que o Docker esteja rodando antes de iniciarmos a instalação e configuração do Minikube, porque ele precisa desse gerenciador para funcionar corretamente.

Inicializaremos o Docker com o comando sudo service docker start, que pedirá nossa senha.

sudo service docker start

Com o Docker inicializado, podemos partir para a instalação no Minikube, e, assim como fizemos para instalá-lo, seguiremos os comandos da documentação do próprio Minikube. Optaremos pela versão mais atual até o momento, que é a 1.28.0. Para isso, usaremos dois comandos. São eles:

curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

Para checar se a instalação foi realizada corretamente, iniciaremos o Minikube com o comando mikube start.

minikube start

Este processo pode levar alguns minutos. Quando finalizado, podemos conferir se o Minikube foi inicializado e o cluster Kubernetes configurado através do comando minikube status.

minikube status

Ao executá-lo, deve nos retornar uma mensagem semelhante à esta:

minikube type: Control Plane host: Running kubelet: Running apiserver: Running kubeconfig: Configured

Isso significa que o cluster está configurado e os demais tópicos estão sendo executados.

É interessante sabermos que, ao instalarmos e inicializarmos o Minikube, automaticamente também é instalado o Kubectl, uma ferramenta de linha de comando utilizada para controlar e configurar clusters no Kubernetes.

Para executar comandos do Kubectl dentro do minikube, sempre utilizaremos a estruturação minikube kubectl -- e o comando que desejamos executar, como, por exemplo help.

minikube kubectl --help

O comando help nos retorna outros comandos do Kubectl. Aqui, o utilizamos de maneira exemplificativa.

Com o minikube instalado, podemos acessar o dashboard do Kubernetes para visualizar, configurar e gerenciar o cluster. Para isso, executaremos o comando minikube dashboard que deve nos retornar, entre outras informações, uma URL pela qual acessaremos o dashboard.

minikube dashboard

Acessando a URL pelo navegador, estaremos na dashboard do Kubernetes, onde conseguimos gerenciar todos os serviços que estão rodando.

Na barra lateral esquerda, iremos em "Nodes", na seção de "Cluster". Note que temos um único node rodando, no caso, o minikube, então o acessaremos. Feito isso, teremos acesso a algumas informações sobre este node, além da alocação de recursos da nossa máquina.

Agora, novamente na barra lateral, acessaremos "Pods". Perceba que não temos nenhum pods rodando, mas, posteriormente, quando instalarmos e configurarmos o Airflow no Kubernetes, teremos alguns pods em execução responsáveis pela execução dos serviços do Airflow e das tarefas dos DAGs.

Caso você não se lembre do que é um pods, há uma atividade revisando essa conceituação.

Para finalizar, vejamos como podemos parar o cluster Kubernetes quando quisermos.

No terminal, teclaremos "Ctrl + C" para encerrar o processo de execução da dashboard e, para encerrar o Minikube, executaremos minikube stop.

minikube stop

Pronto! O Minikube foi finalizado! Quando quisermos executá-lo novamente, precisaremos inicializar o Docker e executar o comando minikube start.

Agora que já temos um cluster Kubernetes configurado em nossa máquina, precisamos descobrir uma maneira de configurar o Airflow dentro desse cluster. É o que faremos a seguir!

Sobre o curso Aprofundando no Airflow: Executor Kubernetes

O curso Aprofundando no Airflow: Executor Kubernetes possui 113 minutos de vídeos, em um total de 56 atividades. Gostou? Conheça nossos outros cursos de Engenharia de Dados em Data Science, ou leia nossos artigos de Data Science.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda Engenharia de Dados acessando integralmente esse e outros cursos, comece hoje!

Conheça os Planos para Empresas