Um desafio para provisionar uma infraestrutura de aplicativos e observabilidade no Kubernetes
Os arquivos do projeto estão estruturados da seguinte forma:
desafio-devops
├── k8s-deploy-simpleapp-python # Arquivos de deploy da aplicação
├── k8s-deploy-stack-logs # Arquivos de deploy do ambiente de logs
├── k8s-deploy-stack-metrics # Arquivos de deploy do ambiente de métricas
└── src-simpleapp-python # Código fonte da aplicação e script para build da imagem
Para provisionar o ambiente escolhi o minikube para facilitar os testes localmente com algumas configurações adicionais de cpu e memória para executar todos os ambientes em conjunto (aplicação, stack de métricas/logs).
Importante: você preciasa de um software de virtualização como Virtual Box para executar o minikube.
# instalar minikube
# https://minikube.sigs.k8s.io/docs/start/
$ curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
$ sudo install minikube-linux-amd64 /usr/local/bin/minikube
# configurações adicionais do ambiente para execução
$ minikube config set memory 8192
$ minikube config set cpus 8
# inicializar o ambiente
$ minikube start
😄 minikube v1.25.1 on Ubuntu 18.04
✨ Using the virtualbox driver based on existing profile
👍 Starting control plane node minikube in cluster minikube
.
.
.
# validar configurações de CPU e memória do minikube
$ vboxmanage showvminfo minikube | grep "Memory size\|Number of CPUs"
Memory size: 8192MB
Number of CPUs: 8
$ cd src-simpleapp-python
$ docker build -t simpleapp-python3 .
$ docker tag simpleapp-python:latest <hub-user>/<repo-name>:latest
$ docker push <hub-user>/<repo-name>:latest
$ kubectl apply -f ./src-simpleapp-python-k8s-deploy/simpleapp-cm.yml
$ kubectl apply -f ./src-simpleapp-python-k8s-deploy/simpleapp.yml
$ helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
$ helm repo add stable https://charts.helm.sh/stable
$ helm repo update
$ helm install prometheus prometheus-community/kube-prometheus-stack
$ kubectl port-forward deployment/prometheus-grafana 3000
http://localhost:3000
Acessar o grafana com os seguintes usuário e senha:
user: admin
password: prom-operator
$ helm install elasticsearch elastic/elasticsearch -f ./k8s-deploy-stack-logs/elasticsearch-master.yaml
$ helm install dashboard elastic/kibana -f ./k8s-deploy-stack-logs/kibana.yaml
$ kubectl port-forward svc/dashboard-kibana 5601
http://localhost:3000
$ helm install fluent-bit fluent/fluent-bit -f ./k8s-deploy-stack-logs/fluent-bit.yaml