Skip to content

Commit

Permalink
adicionando o kong
Browse files Browse the repository at this point in the history
  • Loading branch information
Samuel Ferino committed Mar 27, 2024
1 parent 692cd69 commit 82cfb41
Show file tree
Hide file tree
Showing 5 changed files with 59 additions and 18 deletions.
31 changes: 16 additions & 15 deletions COMMENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,9 +62,9 @@ Dia 23/Março (tarde)

- Instalei os pacotes e executei a aplicação flask. Fiz algumas requisições de post e get.
- Estou criando o dockerfile, vou criar usando dockerfile multi-stage.
- É uma solução mais segura e enxuta porque na versão final do container só haverá o código e biblitecas necessárias em runtime. Isso é importante para aqueles casos que fazem varios apt installs, por exemplo compilador c. Apesar do código atual não usar nada do tipo, acho que a longo prazo evitar que a build cresca anormalmente porque alguém precisou de algo.
- Também é possível economizar em execuções fazendo cache de passos intermediarios.
- aproveitei para colocar um dockerignore para impedir que sejam colocadas coisas que não se devem na imagem docker
- É uma solução mais segura e enxuta porque na versão final do container só haverá o código e biblitecas necessárias em runtime. Isso é importante para aqueles casos que fazem varios apt installs, por exemplo compilador c. Apesar do código atual não usar nada do tipo, acho que a longo prazo evitar que a build cresca anormalmente porque alguém precisou de algo.
- Também é possível economizar em execuções fazendo cache de passos intermediarios.
- aproveitei para colocar um dockerignore para impedir que sejam colocadas coisas que não se devem na imagem docker

- Agora que eu lembrei, esqueci de criar um .gitignore.
- Finalizei o dockerfile, testei apenas o build, não a execução. Mas aproveitei para fazer um script make para facilitar o build (com tag). Agora basta digitar make que é executado o build
Expand All @@ -80,27 +80,28 @@ Dia 25/Março
[viagem p/ Recife]

Dia 25/Março (noite)
- Pronto, fiz o upload de 2 versões do docker: 1.0 e latest. Caso alguem queira trabalhar especificamente com uma versão pode usar a 1.0, do contrário, pode apenas usar a latest.
- Aproveitei para fazer um script make publish para facilitar a release da imagem.
- Pronto, fiz o upload de 2 versões do docker: 1.0 e latest. Caso alguem queira trabalhar especificamente com uma versão pode usar a 1.0, do contrário, pode apenas usar a latest.
- Aproveitei para fazer um script make publish para facilitar a release da imagem.
- Vou agora para os testes com o kubernetes, terminei uma versão inicial, com apenas um pod mesmo que faz referencia a imagem que subi ao dockerhub
- Vou criar um cluster kubernetes microk8s dentro de uma vm, já que é mais simples, usando o snap.
- Vou criar um cluster kubernetes microk8s dentro de uma vm, já que é mais simples, usando o snap.
- para a virtual machine (vm) que instanciarei o cluster, vou usar o vagrant. Para mim é mais comodo, usar ele porque consigo criar e destruir a vm facilmente, bem como configurá-la.
- resolvi usar o ubuntu 20.04, uma versão lts que é amplamente conhecida. Mesmo tendo a 22.04 lts, prefiro versões mais antigas, mais estáveis e com uma boa comunidade ao redor. Crie uma vm com o mínimo do requisito permitido para rodar o microk8s, com uns 4megabytes e 2 cpus.
- Aproveitei para colocar o .vagrant na lista de arquivos a serem ignorados. Estou adicionando os comandos de configuraçao da vm na parte de script, incluindo os do microk8s (documentação: https://microk8s.io/docs/getting-started). Não esqueci de testar primeiro na vm.
- Sempre fazer incrementalmente
- Resolvi pegar uma versão estável do kubernetes. No site há a menção a 1.26, 1.27, 1.28. Como a 1.26 já perdeu o suporte, estarei usando a 1.27, a mais antiga com suporte que vai até Junho 2024-06-28. Mesma lógica poderia ser usada para a versão do ubuntu 20.04 que só termina o suporte em Abril/2025
- resolvi usar o ubuntu 20.04, uma versão lts que é amplamente conhecida. Mesmo tendo a 22.04 lts, prefiro versões mais antigas, mais estáveis e com uma boa comunidade ao redor. Crie uma vm com o mínimo do requisito permitido para rodar o microk8s, com uns 4megabytes e 2 cpus.
- Aproveitei para colocar o .vagrant na lista de arquivos a serem ignorados. Estou adicionando os comandos de configuraçao da vm na parte de script, incluindo os do microk8s (documentação: https://microk8s.io/docs/getting-started). Não esqueci de testar primeiro na vm.
- Sempre fazer incrementalmente
- Resolvi pegar uma versão estável do kubernetes. No site há a menção a 1.26, 1.27, 1.28. Como a 1.26 já perdeu o suporte, estarei usando a 1.27, a mais antiga com suporte que vai até Junho 2024-06-28. Mesma lógica poderia ser usada para a versão do ubuntu 20.04 que só termina o suporte em Abril/2025

- terminar dei criar o cluster e testar a instanciação da aplicação no kubernetes.
- Aproveitei para implementar um healt check simples na api flask para que o deployment esteja ok apenas quando o healthcheck responder.
- Tive que fazer isso porque a aplicação demorar um pouco mais para subir e estava tendo que usar sleep para captura quando a aplicação estava ok para então fazer a requisição de teste no Vagrant.
- Aproveitei para implementar um healt check simples na api flask para que o deployment esteja ok apenas quando o healthcheck responder.
- Tive que fazer isso porque a aplicação demorar um pouco mais para subir e estava tendo que usar sleep para captura quando a aplicação estava ok para então fazer a requisição de teste no Vagrant.
- Estou atualmente em dúvida entre qual passo seguir: pegar os comandos que uso no vagrant e passar para um ansible; fazer o continous release via Github Actions ou configurar monitoramento no cluster

Dia 26/Março
[Viagem de volta de Recife a Natal]

Dia 26/Março (noite)
- Adicionando as secrets no repositório, tinha esquecido de remover do makefile. Preciso regerar a tag do Dockehub
- Preciso testar se o pipeline de entrega/release contínua está funcionando.
- Preciso testar se o pipeline de entrega/release contínua está funcionando.
- Adicionei a parte de monitoramento ao cluster kubernetes no script vagrant
- Adicionei mais documentação a pasta do kubernetes
- Estou vendo para transportar a configuração para um script ansible
- Adicionei mais documentação a pasta do kubernetes
- Estou vendo para transportar a configuração para um script ansible
- Lembrei que faltava o api gateway, instalei o kong via helm. Falta agora configurar ele
24 changes: 21 additions & 3 deletions local_infra/Vagrantfile
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/focal64"

config.vm.provision "file", source: "./k8s", destination: "/home/vagrant/k8s"
config.vm.provision "file", source: "./kong", destination: "/home/vagrant/kong"

# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine. In the example below,
Expand All @@ -16,7 +17,7 @@ Vagrant.configure("2") do |config|
# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine and only allow access
# via 127.0.0.1 to disable public access
# config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"
config.vm.network "forwarded_port", guest: 8001, host: 8001, host_ip: "127.0.0.1"

# Create a private network, which allows host-only access to the machine using a specific IP.
config.vm.network "private_network", ip: "192.168.56.10"
Expand All @@ -40,25 +41,42 @@ Vagrant.configure("2") do |config|
apt-get update
apt-get upgrade -y
echo "Installing MicroK8s (version 1.27)"
snap install microk8s --classic --channel=1.27
microk8s status --wait-ready
mkdir -p ~/.kube
usermod -a -G microk8s vagrant
chown -f -R vagrant ~/.kube
echo "Deploying Flask App into the MicroK8s"
microk8s kubectl create namespace app
microk8s kubectl apply -f /home/vagrant/k8s/flask-app-k8s.yaml --namespace app
microk8s.kubectl wait --for=condition=available deployment/flask-app-deployment --namespace app --timeout=300s
microk8s kubectl wait --for=condition=Ready pod -l app=flask-app -n app --timeout=300s
microk8s kubectl get service --namespace app
microk8s kubectl get deployment --namespace app
microk8s enable dashboard metrics-server observability
echo "Installing MicroK8s addons/plugins"
microk8s enable dns
microk8s enable storage
microk8s enable ingress
microk8s enable metrics-server
microk8s enable observability
microk8s enable dashboard
microk8s helm repo add kong https://charts.konghq.com
microk8s helm repo update
microk8s helm install kong kong/kong --namespace kong-api-gateway --create-namespace -f /home/vagrant/kong/values.yaml
export NODE_PORT="$(microk8s kubectl get services/flask-app-service --namespace app -o go-template='{{(index .spec.ports 0).nodePort}}')"
echo "NODE_PORT=${NODE_PORT}"
curl -sv localhost:${NODE_PORT}/api/comment/list/1
microk8s kubectl --namespace kube-system patch svc kubernetes-dashboard -p '{"spec": {"type": "NodePort", "ports": [{"nodePort": 32000, "port": 443, "protocol": "TCP", "targetPort": 8443}]}}'
microk8s kubectl --namespace observability patch svc kube-prom-stack-kube-prome-prometheus -p '{"spec": {"type": "NodePort", "ports": [{"nodePort": 32001, "port": 9090, "protocol": "TCP", "targetPort": 9090}]}}'
microk8s kubectl --namespace observability patch svc kube-prom-stack-grafana -p '{"spec": {"type": "NodePort", "ports": [{"nodePort": 32002, "port": 80, "protocol": "TCP", "targetPort": 3000}]}}'
SHELL
end
Empty file added local_infra/ansible/README.md
Empty file.
16 changes: 16 additions & 0 deletions local_infra/kong/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# Kong API Gateway

Este diretório contain informações relacionadas ao Kong API Gateway.

## Como instalar?

```bash
$ microk8s helm repo add kong https://charts.konghq.com
$ microk8s helm repo update
$ microk8s helm install kong kong/kong --create-namespace kong-api-gateway -f values.yaml
$ microk8s kubectl port-forward svc/kong-proxy 8001:8001 -n default
```

## Como configurar?


6 changes: 6 additions & 0 deletions local_infra/kong/values.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# values.yaml
kongProxy:
type: NodePort
service:
port: 8000
targetPort: 8000

0 comments on commit 82cfb41

Please sign in to comment.