Neste artigo iremos aprender como usar Kubernetes na prática, rodando uma simples aplicação WEB com Kubernetes. Será mostrado e explicado cada passo, com o objetivo de proporcionar maior conhecimento e experiência com a tecnologia.
Importante: este artigo é uma continuação do “Introdução ao Kubernetes“.
Como usar Kubernetes: primeiro objeto da aplicação – POD
No primeiro momento, depois de já ter tudo instalado em sua máquina e o diretório da aplicação criado, precisamos criar nosso objeto POD. Vamos criar o arquivo com as configurações do objeto então:
Arquivo aplicacao.yaml
apiVersion: v1 #versão da API do Kubernetes kind: Pod #Tipo do objeto que será criado metadata: name: aplicacao #Nome de identificação para o objeto pod spec: #Características do objeto containers: - name: container-aplicacao image: php:5.6-apache ports: - containerPort: 80
Depois de criar o arquivo do objeto com suas especificações, precisamos rodar o comando que de fato é responsável por sua criação:
$ kubectl create -f aplicacao.yaml
iago@iagomachado ~/Desktop/Arquivos/kubernetes/app$ kubectl create -f aplicacao.yaml pod "aplicacao" created
Pronto, agora que temos nosso objeto POD criado, será que já podemos testar uma das funcionalidades/vantagens do Kubernetes, que é sua regeneração própria? Bom, vamos testar removendo objeto que criamos e ver se o Kubernetes consegue regenerar ele sozinho:
$ kubectl delete pods aplicacao $ kubectl get pods
iago@iagomachado ~/Desktop/Arquivos/kubernetes/app$ kubectl delete pods aplicacao pod "aplicacao" deleted iago@iagomachado ~/Desktop/Arquivos/kubernetes/app$ kubectl get pods No resources found.
Mas o que aconteceu? O Kubernetes deveria ter recriado o objeto não? Bom, acontece que até o momento foi criado apenas o objeto POD, que é um dos objetos mais básicos do kubernetes, sendo assim, ele não tem recursos suficientes para informar o Kubernetes do status de processamento da aplicação. Para que seja possível é necessário criarmos o objeto deployment, que será responsável por atualizar o Kubernetes sobre as informações de processamento.
O objeto Deployment
Arquivo deployment.yaml
apiVersion: apps/v1beta1 kind: Deployment metadata: name: aplicacao-deployment spec: template: metadata: labels: name: aplicacao-pod spec: containers: - name: container-aplicacao image: php:5.6-apache ports: - containerPort: 80
Com essas configurações, agora estamos colocando nosso objeto POD dentro de outro, o Deployment, que por sua vez possui mais recursos e conseguirá então, passar o estado desejado que foi configurado para nosso Kubernetes. É possível ver que o segundo spec é basicamente o spec do nosso objeto POD inicial. Agora basta rodar o comando para criar o objeto, em seguida, vamos listar ele:
$ kubectl create -f deployment.yaml $ kubectl get pods
iago@iagomachado ~/Desktop/Arquivos/kubernetes/app$ kubectl create -f deployment.yaml deployment.apps "aplicacao-deployment" created iago@iagomachado ~/Desktop/Arquivos/kubernetes/app$ kubectl get pods NAME READY STATUS RESTARTS AGE aplicacao-deployment-787789445d-77l5r 0/1 ContainerCreating 0 7s
Agora vamos ver a mágica acontecer, remova seu objeto, aguarde alguns segundos e liste novamente utilizando o comando já ensinado e veremos o seguinte resultado:
$ kubectl delete pods aplicacao-deployment-787789445d-77l5r $ kubectl get pods
iago@iagomachado ~/Desktop/Arquivos/kubernetes/app$ kubectl delete pods aplicacao-deployment-787789445d-77l5r pod "aplicacao-deployment-787789445d-77l5r" deleted iago@iagomachado ~/Desktop/Arquivos/kubernetes/app$ kubectl get pods NAME READY STATUS RESTARTS AGE aplicacao-deployment-787789445d-5m6zz 1/1 Running 0 47s
Incrível não é mesmo!? Isso prova que o Kubernetes efetuou uma regeneração própria recebendo as informações de estado da aplicação. Assim que o objeto foi removido ele iniciou a criação de um novo. #kuberneteséofuturo.
Obs: Repare na tag de identificação do objeto marcada em vermelho, elas são diferentes, realmente foi criado um novo objeto no lugar do removido.
Depois de tudo isso, queremos poder acessar nossa aplicação Web, mas como fazemos? Os objetos PODs são instáveis e sofrem constantes alterações, dessa forma, não podem ser acessados. Para isso é necessária a criação de mais um objeto, o objeto service ou, em português, serviço. Ele irá funcionar como um balanceador de cargas e nos permitirá o acesso a aplicação.
O objeto Service
Arquivo servico-aplicacao.yaml
apiVersion: v1 kind: Service metadata: name: servico-aplicacao spec: type: LoadBalancer ports: - port: 80 selector: name: aplicacao-pod
Depois de criar o arquivo vamos rodar o famoso comando responsável por criar o objeto e em seguida rodar o comando que nos devolve a URL de acesso a aplicação:
$ kubectl create -f servico-aplicacao.yaml $ minikube service servico-aplicacao --url
iago@iagomachado ~/Desktop/Arquivos/kubernetes/app$ kubectl create -f servico-aplicacao.yaml service "servico-aplicacao" created iago@iagomachado ~/Desktop/Arquivos/kubernetes/app$ minikube service servico-aplicacao --url http://192.168.99.100:31866
Acessando a URL http://192.168.99.100:31866 (ou a URL que foi retornada para você) é possível perceber que o erro 403 Forbidden foi apresentado na tela (se você entende um pouco de Docker, já deve saber o motivo). Muito simples, é por que estamos usando como base a seguinte imagem php:5.6-apache, que não vem com nada no diretório html! Agora só precisamos adicionar algum arquivo no objeto deployment para testar. Para isso vamos acessar o objeto e criar um arquivo index.php com algum conteúdo:
$ kubectl exec -it aplicacao-deployment-787789445d-5m6zz bash $ echo "<?php phpinfo(); ?>" > index.php
iago@iagomachado ~/Desktop/Arquivos/kubernetes/app$ kubectl exec -it aplicacao-deployment-787789445d-5m6zz bash root@aplicacao-deployment-787789445d-5m6zz:/var/www/html# echo "<?php phpinfo(); ?>" > index.php
Confira se o arquivo realmente foi criado.
root@aplicacao-deployment-787789445d-5m6zz:/var/www/html# ls index.php
Agora basta acessar sua aplicação na URL que retornou para você e pronto! Você está rodando uma aplicação Web com Kubernetes.
Conclusão: Como usar Kubernetes na Prática
Realizamos nesse artigo uma simples demonstração e funcionamento de como usar Kubernetes na prática, entretanto, suas funcionalidades se expandem muito além do que foi aqui visto, como questões de escalonamento, volumes, entre muitas outras.
Por esse motivo, caso você tenha interesse em continuar estudando sobre a tecnologia, é recomendado conferir a documentação, e se você ainda não viu, veja nosso Webinar – [Descomplicando Kubernetes].
É importante destacar também, que atualmente existem diversos cursos onlines que ensinam de uma forma mais aprofundada como usar e aproveitar os benefícios da tecnologia. Sendo assim, não pare aqui, siga em frente e aumente seus conhecimentos com Kubernetes!
E ah, fique ligado no Blog da KingHost para mais conhecimentos e dicas. 😉
O que você achou deste conteúdo?