Uma aplicação simples baseada em flask para demonstrar a utilização do kubernetes.
Para ver como as imagens foram criadas utilizando o Docker, assim como uma forma de executar apenas usando Docker, veja o repositório docker-quotesApp. Para as imagens em si, acesse: https://hub.docker.com/u/clusterminator.
Cada tópico abaixo se refere a uma versão gradativamente mais complexa da aplicação, reciclando boa parte do código usado na versão anterior. Para ver a aplicação completa, isto é, utilizando configmap
, volumes
, etc, VEJA AQUI.
Basta usar o pull.sh:
$ sh pull.sh
O que é?
Essa é a versão mais simples, uma api flask que faz requisições para um banco de dados. São utilizados: CluterIP
, pod
e NodePort
.
Para inicializar, basta usar:
$ sh ./api-only-version/start.sh
A aplicação estará disponível em localhost:30000/quotes
Para encerrar, basta usar:
$ sh ./api-only-version/stop.sh
O que é?
Essa versão usa os mesmos componentes que a acima, porém é mais complexa, com um serviço para prover imagens de fundos e uma API específica para prover a página principal, assim como servir de proxy para as demais APIs.
Para inicializar, basta fazer:
$ sh ./pod-version/start.sh
A aplicação estará disponível em localhost:30000
Para finalizar, basta usar:
$ sh ./pod-version/stop.sh
O que é?
Essa versão utiliza deployments
para reinicializar pods deletados e secrets
para permitir o acesso ao banco de dados sem arriscar as credenciais.
Para inicializar, basta fazer:
$ sh ./deployment-version/start.sh
A aplicação estará disponível em localhost:30000
Para finalizar, basta usar:
$ sh ./deployment-version/stop.sh
Utiliza-se um configmap
para permitir o compartilhamento de credenciais de acesso entre quotes-api
e addget-api
, uma API que permite requisitar uma citações específica com base em seu id e adicionar novas. Os endpoints são explicados em maior detalhe abaixo.
Para inicializar, basta fazer:
$ sh ./configmap-version/start.sh
A página de citações aleatórias estará disponível em localhost:30000, a API para adicionar novas citações e requisitar citações pelo id está disponível em localhost:30001.
Para finalizar, basta usar:
$ sh ./configmap-version/stop.sh
Essa versão usa volumes
para preservar citações adicionadas.
Para inicializar, basta
Para inicializar, basta fazer:
$ sh ./complete-version/start.sh
A página de citações aleatórias estará disponível em localhost:30000, a API para adicionar novas citações e requisitar citações pelo id está disponível em localhost:30001.
Como os servidores flask são simplórios (esse é um projeto exemplificativo) o restart do banco de dados vai quebrar a conexão deles com o banco de dados e eles não serão capazes de se conectar sozinhos. Caso deseje reiniciar o servidor do banco de dados, use o script abaixo que irá deletar todos os pods:
$ sh ./complete-version/restart-pods.sh
Para finalizar a aplicação, basta usar:
$ sh ./configmap-version/stop.sh
O script irá perguntar se você deseja apagar os volumes também, caso deseja, basta digitar "y" e depois ENTER
.
Em localhost:30000, você irá encontrar a página principal da API, é uma simples página HTML que usa a função fetch
do javascript para requisitar as APIs do backend. Ele deverá ter essa aparência.
Em localhost:30001, você irá encontrar os endpoints: getQuote
e addQuote
.
Para adicionar uma citação, basta fazer:
$ curl -X POST -H "Content-Type: application/json" -d '{"author": "Maurice Switzer", "quote": "É melhor calar-se e deixar que as pessoas pensem que você é um idiota do que falar e acabar com a dúvida."}' http://127.0.0.1:30001/addQuote
{
"id": 1127,
"message": "Nova cita\u00e7\u00e3o adicionada!"
}
Você pode consultar uma citação diretamente pelo seu browser: http://localhost:30001/getQuote/1127 ou com o comando curl acima, em ambos os casos, passando o id da citação na própria URL.
$ curl http://localhost:30001/getQuote/1127
{
"author": "Maurice Switzer",
"quote": "\u00c9 melhor calar-se e deixar que as pessoas pensem que voc\u00ea \u00e9 um idiota do que falar e acabar com a d\u00favida."
-
A nova imagem do quotes-api utiliza essa versão do servidor flask a qual importa variáveis de ambiente estabelecidas com o arquivo
quotes-api-secret.yaml
. -
Para codificar variáveis do secret você pode utilizar esse site ou esse script.