Primeiros passos com Kubernetes (k8s)
Resolvi criar um tutorial para quem está querendo iniciar com o Kubernetes. Antes de mais nada, recomendo que entenda como o Docker funciona, pois além de se tornar mais fácil o aprendizado, o k8s serve como um orquestrador de containers :)
E o que seria um orquestrador?
- Ele ajudará com que se um container "morrer" (ficar fora do ar ou ser deletado, por exemplo), fará um novo container ser levantado com o número de Réplicas
- Outro ponto interessante, caso muitas pessoas estejam usando aquele serviço, é possível criar um balanceador para que as pessoas utilizem outras instâncias com o Load Balancer
Quando entendemos o conceito de container — um ambiente que terá o mínimo possível para a aplicação rodar com bibliotecas e pacotes específicos — é possível entender melhor o conceito do pod , onde geralmente o mesmo, possui apenas um container dentro dele, por ser a menor unidade que podemos realizar o deploy da aplicação.
Com base nesses fundamentos, podemos ir para a nossa prática!
Recomendo que utilize o Minikube para ser o seu ambiente de teste. Assim, tornará mais fácil entender os principais comandos do Kubernetes
Com todo nosso ambiente pronto, podemos iniciar nosso Minikube
Eu criei um repositório, no qual utilizaremos para o nosso teste
Dentro desse repositório, temos dois arquivos: service-definition.yaml e simpleapp-pod.yml
Com o comando "kubectl create" podemos criar o nosso serviço e o Pod que será lido pelo nosso arquivo "yaml"
Quando olhamos esses dois arquivos, podemos entender alguns conceitos que já vínhamos conversando anteriormente
- simpleapp-pod.yml → nesse arquivo, iremos criar o tipo do Pod, utilizando kind. Nosso caso, ele será Deployment
- Além disso, temos o número de réplicas que criaremos do Pod, para manter funcionando dentro do Minikube e caso algum Pod seja desligado, automaticamente, será criado outro, por conta das réplicas. Na imagem abaixo, podemos ver os 3 Pods rodando em tempo real
- Por fim, para adicionarmos o container, escolhemos um container que no meu caso, está hospedado no Docker Hub. Dessa forma, é possível fazer o download desse container.
kind: Deploymentreplicas: 3containers:- name: simpleappimage: michelleamesquita/simpleapp
- service-definition.yml → Será aonde criaremos o serviço. É nesse arquivo, onde é possível fazer uma conexão do back end com o front end. Como também, podemos criar um Load Balance, caso a gente tenha um ambiente em Cloud e mude o
type: LoadBalancer
- No nosso exemplo, usaremos o type: Nodeport . Assim, podemos expor o nosso serviço a uma porta de estática de fora do cluster e podemos acessar pela nossa própria máquina, solicitando
<NodeIP>:<NodePort>
- Também, não podemos esquecer de utilizar o app para podermos "conectar" os 2 arquivos vistos anteriormente
Visto o código, podemos usar o nosso laboratório:
Assim, acessamos a nossa aplicação :)
Uma dica interessante, para as pessoas que gostam de segurança, vale conhecer o kubesec
Com ele, podemos analisar nosso arquivo yml, onde terá criado o nosso Pod. Assim, poderemos ver se existe alguma vulnerabilidade no nosso arquivo Kubernetes, como senha em texto claro ou declaração de algum dado sensível/alguma variável
Espero que tenham gostado 💜