É conhecido que quando falamos sobre infraestrutura de microsserviços ou de sistemas distribuídos de alta performance, escalabilidade e alta disponibilidade, logo pensamos no Kubernetes para essa função. Geralmente, quando o desenvolvedor back ou front entra em um time com um projeto ou alguns projetos entregues, essa infraestrutura já foi criada e ele não participa da instalação e configuração da ferramenta. Isso dificulta para que esse profissional conheça essa parte “operacional” do fluxo e ele limita-se à utilização e deploy nessa infraestrutura.
Mas e se o desenvolvedor quer configurar do zero o Kubernetes? Para isso, existem algumas soluções de configuração fácil de um ambiente Kubernetes. Existem algumas soluções no mercado como o minikube, k3s, kind e microk8s e cada uma com as suas especificidades, conforme tabela abaixo:
Com essas informações, a ideia deste artigo é orientar a instalação e o primeiro deploy de uma aplicação na ferramenta Microk8s. Para isso vamos utilizar o sistema operacional Linux.
O que é MicroK8s?
O MicroK8s, como o próprio nome diz, é um “micro” cluster do Kubernetes (saiba mais sobre o Kubernetes), ou seja, ele é utilizado como um cluster mínimo para subir componentes conteinerizados em produção. Esse sistema é de código aberto e fornece as principais funcionalidades do Kubernetes em um único nó, ou até mesmo um cluster de produção e de alta disponibilidade.
Ele também reduz os recursos, podendo ser utilizado para:
– transformar o Kubernetes em uma ferramenta de desenvolvimento leve
– disponibilizar o Kubernetes para uso em ambientes mínimos, como o GitHub CI
– adaptar o Kubernetes para aplicativos IoT de pequenos dispositivos
Instalação
Pré-requisitos:
– Instalação da ferramenta snapd.
1. Instalação do microk8s com o comando
$ sudo snap install microk8s --classic microk8s (1.26/stable) v1.26.1 from Canonical✓ installed
2. Junte-se ao grupo
O MicroK8s cria um grupo para permitir o uso contínuo de comandos que exigem privilégio de administrador. Para adicionar seu usuário atual ao grupo e obter acesso ao diretório de cache .kube, execute os dois comandos a seguir:
sudo usermod -a -G microk8s $USER sudo chown -f -R $USER ~/.kube #Você também precisará entrar novamente na sessão para que a atualização do grupo ocorra: su - $USER
3. Iniciando e Parando o MicroK8s
a. O MicroK8s continuará em execução até que você decida interrompê-lo. Você pode parar e iniciar o MicroK8s com estes comandos simples:
microk8s stop
b. interromperá o MicroK8s e seus serviços. Você pode começar novamente a qualquer momento executando:
microk8s start
4. Verifique o estado
O MicroK8s possui um comando integrado para exibir seu status. Durante a instalação, você pode usar o –wait-ready sinalizador para aguardar a inicialização dos serviços do Kubernetes:
microk8s status --wait-ready
5. Acessar o Kubernetes
O MicroK8s inclui sua própria versão kubectl para acessar o Kubernetes. Use-o para executar comandos para monitorar e controlar seu Kubernetes. Por exemplo, para visualizar seu nó:
microk8s kubectl get nodes #ou para ver os serviços em execução: microk8s kubectl get services
Observe que, se você deixar o MicroK8s em execução, ele será reiniciado automaticamente após uma reinicialização. Se você não quiser que isso aconteça, simplesmente lembre-se de executar microk8s stop antes de desligar.
Utilizando Complementos
O próprio microk8s fornece alguns complementos para serem utilizados juntamente com ele, para habilitar esses componentes basta usar o comando
# exemplo para habilitar complementos microk8s enable dashboard dns registry istio # para mais infos microk8s enable --help # para desabilitar microk8s disable <nome complemento>
Veja a listagem completa dos complementos.
Construindo ou inserindo uma imagem
Agora que seu microk8s está configurado da forma correta, basta fazer o deploy da sua imagem baixar um cointaner de um registry.
Existem alguns jeitos para colocar uma imagem dentro do microk8s, são eles:
– Usando imagens locais
– Utilizando um registry público
– Usando um registry privado
– Usando um registry integrado
Neste artigo iremos abordar como utilizar imagens locais sem um registry, para isso vamo usar o seguinte Dockerfile de exemplo:
FROM nginx
Após criar esse docker file, basta executar o comando:
docker build . -t mynginx:local
Isso gerará uma imagem nova chamada mynginx:local.
Após a construção da imagem, podemos recuperar essa imagem e transferir ao microk8s, para tal, precisamos extrair a imagem do docker e criar um arquivo .tar, com o seguinte comando:
docker save mynginx > myimage.tar
Fazendo isso, ele gerará um arquivo myimage.tar que iremos transfierir com o comando ctr image import para o microk8s, confome abaixo:
microk8s ctr image import myimage.tar
PS: lembre de sempre fazer os comandos na mesma pasta para ele achar o arquivo.
Dessa forma, podemos então verificar se a imagem está de fato no microk8s:
microk8s ctr images ls
Implantando a Nossa App
Agora que conseguimos instalar e colocar a nossa app dentro do microk8s, chegou a hora de fazer o deploy dessa app.
Para isso, primeiro verificamos com o comando ctr images ls para checar se nossa imagem está lá:
microk8s ctr images ls
Após isso, vamos utilizar o comando apply -f para implantar um Deployment (para dúvidas consulte a documentação do kubernetes). Criamos o arquivo my-deploy.yml conforme conteúdo abaixo:
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: mynginx:local imagePullPolicy: Never ports: - containerPort: 80
Execute o comando:
microk8s kubectl apply -f my-deploy.yml
Pronto, o microk8s implantará sua imagem conforme a especificação do arquivo yml criado.
Para verificar se ela realmente está no ar utilize kubectl get deployments
Conclusão
Para os desenvolvedores iniciantes, o microk8s acaba sendo uma opção interessante para o aprendizado devido à sua fácil configuração e utilização. Isso comparado com os seus concorrentes como o minikube. A documentação da plataforma também é bem rica e a comunidade de desenvolvedores da plataforma costuma responder os issues abertos.