Este repositório contém código e informações referentes ao Trabalho Prático IV da matéria de Sistemas Distribuídos (BCC-362), ministrada pelo professor C. Fred na Universidade Federal de Ouro Preto (UFOP).
- Arthur Negrão
- Igor Machado
A aplicação construída consiste em um servidor web que realiza consultas em um banco de dados. Sua temática é um banco de dados de uma empresa que armazena seus funcionários, sendo cada funcionário constituído por 3 campos:
- nome: String
- idade: Inteiro
- salario: Float
GET /
POST /dados
Parâmetro | Tipo | Descrição |
---|---|---|
nome |
string |
Obrigatório. Nome do usuário a ser inserido |
idade |
int |
Obrigatório. Idade do usuário a ser inserido |
salario |
float |
Obrigatório. Salário do usuário a ser inserido |
GET /<nome>
Parâmetro | Tipo | Descrição |
---|---|---|
nome |
string |
Parâmetro de rota. Obrigatório. Nome do usuário a ser pesquisado |
Observe que esta é uma aplicação muito simples sem real valor de uso, já que o enfoque do trabalho é sobre a infraestrutura kubernetes.
Back-end: Node, Express
Banco de dados: PostgreSQL
Inicialmente é necessário instalar um controlador kubernetes em sua máquina. Algumas opções são:
Para este trabalho, utilizaremos o Docker Desktop. Neste ambiente, basta ir na seção 'Configurações', 'Kubernetes', e então 'Enable Kubernetes'. Depois disso basta clicar em 'Apply & restart'.
Antes de construir o cluster K8s é necessário gerar as imagens docker através dos dockerfiles. Para tal:
Em /TP4-APP, rode
npm install
docker build -t aplicacao-web-server:1.0 .
Em /TP4-BD, rode
docker build -t banco-postgres:1.0 .
O deploy do cluster é extremamente simples:
Em /TP4-KUBERNETES, rode
kubectl apply -f application.yaml
e então, rode
kubectl expose deployment web-server-app-deployment --type=LoadBalancer --port=3000
Este comando é responsável por expor seu webserver a rede externa do cluster, permitindo acesso web.
Para rodar os testes, no diretório base do repositório, rode o seguinte comando:
python tests.py
Se alguma requisição falhar, uma mensagem será printada no console. Se não houver nenhum problema com sua rede local, não espera-se nenhuma falha.
É interessante observar os logs gerados pelos pods de seu cluster, principalmente para observar o load-balancing em ação. Para tal, os seguintes comandos são úteis:
kubectl get pods
Este comando retornará informações sobre todos os pods em seu cluster.
Para acessar os logs de um desses pods, basta pegar um dos nomes obtidos através do comando acima e utilizar:
kubectl logs 'nome_do_pod'
O K8s é realmente tolerante a falhas. Tente desligar container por container (e falhe como nós falhamos).
Para desligar, dentro do Docker Desktop, volte a aba onde você ligou o Kubernetes. Neste local você pode desmarcar a caixinha de enable kubernetes.
Se quiser apagar o cluster, clique antes no botão vermelho Reset Kubernetes Cluster.