Prezados,
Segue meu desafio concluido.
.
├── Makefile
├── README.md
├── ca.jpg
├── k8s
│ ├── ingress
│ │ └── ingress-nginx.yaml
│ ├── metrics-server
│ │ └── metrics-server.yaml
│ ├── mysql
│ │ ├── mysql-claim0-persistentvolumeclaim.yaml
│ │ ├── mysql-deployment.yaml
│ │ ├── mysql-init-db.yaml
│ │ └── mysql-service.yaml
│ ├── nginx
│ │ ├── nginx-deployment.yaml
│ │ ├── nginx-hpa.yaml
│ │ └── nginx-service.yaml
│ └── nodejs
│ ├── nodejs-deployment.yaml
│ ├── nodejs-hpa.yaml
│ └── nodejs-service.yaml
├── kops.env
├── pull-request.txt
└── src
├── db
│ └── schema
│ └── database_schema.sql
├── docker-compose.yaml
├── nginx
│ ├── Dockerfile
│ ├── conf
│ │ └── default.conf
│ └── html
│ ├── 50x.html
│ └── index.html
└── node
├── Dockerfile
├── healthcheck.js
├── node_modules
├── package-lock.json
├── package.json
└── server.js
make docker-compose-start
curl http://localhost/packages
docker-compose -f src/docker-compose.yaml logs -f
docker-compose -f src/docker-compose.yaml logs -f mysql
docker-compose -f src/docker-compose.yaml logs -f nodejs
docker-compose -f src/docker-compose.yaml logs -f nginx
make docker-compose-stop
make docker-compose-destroy
minikube addons enable ingress # caso não esteja habilitado
make kube-deploy-app

kops e caso não exista crie o mesmoexport KOPS_STATE_STORE=s3://<CHALLENGE-DELTA-BUCKET-KOPS-STATE>
aws s3 mb $KOPS_STATE_STORE --region us-east-1
kops.env e depois para provisionar o cluster e fazer o deploy da app:make kube-aws-provision
make kube-deploy-app
APP_ENDPOINT=$(kubectl get ingress nginx-ingress -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')
curl http://$APP_ENDPOINT/packages
kubectl logs deployments/$nomedoservico
kubectl logs deployments/mysql
kubectl logs deployments/nodejs
kubectl logs deployments/nginx
Para se habilitar funcionalidade do k8s escalar os pods baseados metricas primeiro temos que coletar as metricas e por isso temos que instalar o metrics-server.
Porém o nosso cluster criado com o kops não nos permite criar o cluster através da linha de comando ja com a seguinte configuração habilitada. por isso temos alguns passos que eu consegui uma forma pratica de automatizar.
you must allow service account tokens to communicate with kubelet, edit your cluster configuration
kops edit cluster
Add configuration below to your cluster configuration.
kubelet:
anonymousAuth: false
authorizationMode: Webhook
authenticationTokenWebhook: true
Update your cluster
kops update cluster --yes
kops rolling-update cluster --yes
kubectl apply -f k8s/metrics-server
kubectl top pods
kubectl top nodes
kubectl get hpa
kubectl describe hpa
# Ou por ex de um serviço especifico
kubectl get hpa nodejs
kubectl describe hpa nodejs
make kube-aws-destroy
Banco: packages Usuário Root: root Senha Root: hurb_root Usuário da Aplicação: user_packages Senha da aplicação: passwords Acesso:
#Ambiente com docker-compose
docker-compose -f src/docker-compose.yaml exec mysql mysql -h localhost -u root -phurb_root packages
#Ambiente com k8s
kubectl exec -it service/mysql -- mysql -h localhost -u root -phurb_root packages
As imagens docker criadas nesse projeto são buildadas pelo docker hub automaticamente no caso de um commit
https://hub.docker.com/r/rafilkmp3/docker-nodejs-challenge-delta
https://hub.docker.com/r/rafilkmp3/docker-nginx-challenge-delta
Realizei algumas mudanças na estrutura de pastas para melhor e organizar a aplicação, alem de incluir alguns endpoints para app ser monitorada pela api do k8s.
Achei bem interessante o desafio.
Obrigado pela oportunidade.
https://kubernetes.github.io/ingress-nginx/deploy/
https://kubernetes.io/docs/setup/production-environment/tools/kops/
https://kubernetes.io/docs/reference/kubectl/
https://kubernetes.io/docs/setup/learning-environment/minikube/
https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/
Content type
Image
Digest
Size
38.4 MB
Last updated
over 6 years ago
docker pull rafilkmp3/docker-nodejs-challenge-delta