Description Tries to show the essence of a modern devops practices
- I have made the effort to deploy on AKS as its a more realistically true approach than deploying minikube and I also realised at starting that this is gonna be a big project
- I had to have around 12 gb of ram to run all the components.
- Used load balancer for access my application in real time.
- Creating a Kubernetes cluster in azure eks
az aks create \
--resource-group NetworkWatcherRG \
--name AKS \
--node-count 1 \
--node-vm-size Standard_B2ls_v2 \
--enable-addons monitoring \
--generate-ssh-keys- Getting the creds for azure
az aks get-credentials --resource-group NetworkWatcherRG --name AKS
- Deploying a msql db with secret
kubectl create secret generic mysql-secret \
--from-literal=mysql-user=yourusername \
--from-literal=mysql-password=yourpassword
-
Deploying a mysql server on K8s mysql.yaml
- Choosing to go with 100Mi is intentional as we dont need much during testing
-
Writing a simple node.js application with mysql in the back for storing data -- check server.js
- Its a dynamic apps that takes data from /manhwa endpoint
-
Using docker file to create a docker image -- check docker file
-
Deploying the node app on k8s -- check k8s/yaml
-
Using github actions we create CI for this
- Steps taken in CI
- Implemented simple tests
- Pushing to docker
- In the second job
- ** Implemented that change of new docker image in the app.yaml file **
-
Updating the changes in the app.yaml file allows us to have one push CI/CD with Argocd
For demonstration just look in actions of this repo
- Installing argo cd in the cluster with official doc
- Applyin the argocd.yaml in k8s folder for application to be applied
As its a public repo we dont need any secrets
-
For this i have decided to a lot of stuff for it work seamlessly
- Created a new namespace for rollouts versions
- Connected to default service of mysql coz i dont want to have another pod running without any use and this also showcase the coredns concept of kubernetes
- Implemented rollouts
-
Created app_rollout.yaml under argo_rollout folder to deploy the application
Final output of Argo cd rollout dashboard

- Installing prometheus and grafana
helm install prometheus prometheus-community/kube-prometheus-stack \
--namespace monitoring \
--set nodeSelector."kubernetes\.io/hostname"="aks-temp-10754646-vmss000000"
Grafana dashboard ⬇️
Prometheus dashboard ⬇️

- Installing EFK stack
- Will like to tell it took a lot time as there many pre requisite to it
- Also the system requirements in the default YAML was too much
- Check out the EKF folder So had to do a lot of customisation and took help from youtube
Terminal view ⬇️
index in elastic serach ⬇️
logs of default namespace ⬇️










