Como rodar um cluster Kubernetes local

Introdução

Olá pessoal tudo bem?

Decidi contribuir aqui na comunidade um pouquinho com meus conhecimentos.

Enquanto não tomo coragem para produzir vídeos educativos no Youtube (hoje só no TikTok) vou escrevendo alguns artigos aqui para contribuir com a comunidade.

Tenho experiência com a tecnologia Kubernetes e vejo que os canais de tecnologia brasileiros abordam tanto esse tecnologia incrível.

Vou dar uma introdução ao Kubernetes em outro artigo. Hoje, estou focado em te ensinar como subir um cluster local de maneira rápida e prática para você brincar com a tecnologia

Repositório com o Código

Meu repo para esse artigo pode ser encontrado aqui: https://github.com/estevaofay/minikube

Instalando o minikube

O minikube é um utilitátio que consegue subir um cluster Kubernetes (vou usar bastante a sigla K8s) dentro de um container no seu computador.

Ou seja, como pré-requisito, preciso que você tenha docker instalado na sua máquina.

Como estamos falando de kubernetes, eu assumo que você tenha o kubectl também instalado

Site oficial: https://minikube.sigs.k8s.io/docs/start/

A melhor forma de instalar na minha opinião é:

  • Windows -> usando Chocolatey
  • MacOS -> usando Homebrew
  • Linux -> Instalando o binário (ou debian package se for mais fácil)

Como estou usando MacOS vou seguir os passos a seguir:

$ brew install minikube

Verificando uma instalação bem sucedida

$ minikube version
> minikube version: v1.25.2
> commit: 362d5fdc0a3dbee389b3d3f1034e8023e72bd3a7

Criando um cluster local

O que me faz gostar muito do minikube é a facilidade de criar e destruir um cluster local

$ minikube start

Você pode passar muitas flags para esse comando, providenciando mais ou menos recursos para o minikube criar o seu cluster, e uma série de outras configs (como a versão do kube-api do seu cluster) mas só com isso já é suficiente para mim 99% dos casos.

O minikube quando terminar de criar o cluster vai adicionar as credenciais ao seu ~/.kube/config (arquivo com as credenciais k8s que vc tem configurado)

Verificando o minikube nos contextos

$ kubectl config get-contexts
> CURRENT   NAME         CLUSTER    AUTHINFO    NAMESPACE
> *         minikube     minikube   minikube    default

Rodando uma aplicação

Recomendo sempre trabalhar de forma declarativa com K8s, entretando para esse tutorial seria legal vermos uma aplicação rodando para ver se tudo está funcionando.

Podemos fazer isso com uma pod nginx com o seguinte comando:

$ kubectl run nginx --image=nginx --namespace default
> pod/nginx created

Verificando a aplicação criada

$ kubectl get pod --namespace default
> NAME    READY   STATUS    RESTARTS   AGE
> nginx   1/1     Running   0          69s

Uma pod simples assim não faz muita coisa, mas já ajuda a entender como funciona um cluster k8s.

Um último comandinho legal é para ensinar você a pegar os logs do dessa pod.

$ kubectl logs nginx --namespace default --follow
> 2022/05/17 16:26:17 [notice] 1#1: using the "epoll" event method
> 2022/05/17 16:26:17 [notice] 1#1: nginx/1.21.6
> 2022/05/17 16:26:17 [notice] 1#1: built by gcc 10.2.1 20210110 (Debian 10.2.1-6)
> ... 

Agora é hora de experimentar e brincar com seu cluster local

Divirta-se, aplique manifestos helm, faça um ingress, trabalhe com services e teste tudo local antes de ir para PROD :smile:

A ideia é que você sempre faça alterações locais antes de levar isso para um cluster da empresa

Deletando o cluster

Para deletar é tão simples quanto para criar. Somente precisamos de:

$ minikube delete
> 🔥  Deleting "minikube" in docker ...
> 🔥  Deleting container "minikube" ...
> 🔥  Removing /Users/$USER/.minikube/machines/minikube ...
> 💀  Removed all traces of the "minikube" cluster.

Verificando que o cluster foi deletado

Só rodar aquele comando dos contexts. Ele deveria retornar vazio

$ kubectl config get-contexts
> CURRENT   NAME         CLUSTER    AUTHINFO    NAMESPACE

É isso galera, espero que gostem. Tenho gosto por ensinar e venho fazendo isso na minha empresa/no TikTok. Um dia espero fazer um colab com o @filipedeschamps, seja por vídeo ou seja pelos trabalhos incríveis que vocês estão liderando na comunidade open-source.

Se vocês gostarem vou fazer uma série de artigos para vocês aprenderem comigo como usar K8s para criar uma plataforma que escala para milhões de requisições/usuários.

Um abraço!

Estêvão, obrigado por trazer conteúdos de infraestrutura e devops aqui para o TabNews! E estou te seguindo no TikTok 🤝

Grande iniciativa Estêvao. O Minikube é sensacional, e o Kubernetes também :D. Aproveito para deixar aqui um link para o meu vídeo sobre o Minikube:

https://youtu.be/VCV5v36FoM8

Espero que gostem!