Best laravel framework open-source packages.

Capstone Project for Cloud DevOps Engineer Nanodegree

This is capstone project for Udacity's Cloud DevOps Engineer Nanodegree. It demonstrates author's devops skills including AWS, updating existing structure using blue/green deployment, and servicing scalable microservices using Kubernetes. It is an accumulation of many lessons I've learned.

This app converts an image from a format (e g. png, jpg, webp) to another. It's an app to go if a user wants to convert images.

Setup Instruction

1) Create AWS IAM access key

  1. Please follow the guide provided here
    • If this is first time, please create user first by following the instruction below, after clicking this link here
    • Please download or write down access key for the use in step 5

2) Create AWS S3 Bucket

3) Attach S3FullAccess Policy to IAM user

  • Please follow the instruction below, after clicking this link here

4) Setup Docker Hub

  • a. Please sign up / sign in to Docker Hub
    • Note: Please sign up using random and secure passwords. This will help increase user protection from unexpected circumstances.

5) Setup Github

  • a. Please sign up / sign in to Github

    • Note: Please sign up using random and secure passwords. This will help increase user protection from unexpected circumstances.
  • b. Please fork, or clone and then re-upload this repository to user's github.

6) Setup CircleCI

  • a. Please sign up or sign in to CircleCI

    • Note: Please sign up using random and secure passwords. This will help increase user protection from unexpected circumstances.
  • b. Please link this CircleCI account to signed-in Github account from step 3

7) Fill Environment Variables in CircleCI

  • a. Please follow the instruction provided below, after clicking this link here:

8) Make a Commit, and Start CICD!

  • a. Please add space or an extra character to this README.md, and make a commit. This will trigger CircleCI, and start executing a build.

Project Rubric

Setup Pipeline

  1. Create Github repository with project code.

    • All project code is stored in a GitHub repository and a link to the repository has been provided for reviewers.
  2. Use image repository to store Docker images

    • The project uses a centralized image repository to manage images built in the project. After a clean build, images are pushed to the repository.

Build Docker Container

  1. Execute linting step in code pipeline

    • Code is checked against a linter as part of a Continuous Integration step (demonstrated w/ two screenshots)
  2. Build a Docker container in a pipeline

    • The project takes a Dockerfile and creates a Docker container in the pipeline.

Successful Deployment

  1. The Docker container is deployed to a Kubernetes cluster

    • The cluster is deployed with CloudFormation or Ansible. This should be in the source code of the student’s submission.
  2. Use Blue/Green Deployment or a Rolling Deployment successfully

    • The project performs the correct steps to do a blue/green or rolling deployment into the environment selected. Submit the following screenshots as evidence of the successful completion of chosen deployment methodology:

      • a. Screenshot of the Circle CI or Jenkins pipeline showing all stages passed successfully.
      • b. Screenshot of your AWS EC2 page showing the newly created (for blue/green) or modified (for rolling) instances running as the EKS cluster nodes.
      • c. Screenshot of the kubectl command output showing that the deployment is successful, pods are running, and the service can be accessed via an external IP or port forwarding.
      • d. Screenshot showing that you can access the application after deployment.

References

  1. The Kompose Authors. (2022). Go from docker compose to kubernetes. https://kompose.io/
  2. Udacity. (2023). Cloud DevOps Engineer Nanodegree. https://www.udacity.com/course/cloud-dev-ops-nanodegree--nd9991
  3. Jonatan Heyman, Carl Byström, Joakim Hamrén, Hugo Heyman. (2023). Locust - An open source load testing tool. https://locust.io
  4. Ashley D. (2021). Bootstrapping Microservices with Docker, Kubernetes and Terraform. Manning Publications Co.
  5. Ben Dilts, Karl Sun, et. al. (2023). Lucid chart - Where seeing becomes doing. Lucid.https://www.lucidchart.com/pages/landing
  6. Benjamin Muschko. (2021). Certified Kubernetes Application Developer (CKAD) Study Guide: In-Depth Guidance and Practice 1st Edition. O'Reilly Publications.
  7. Benjamin Muschko. (2022). Certified Kubernetes Administrator (CKA) Study Guide. O'Reilly Publications.
  8. Bas Meijer, Lorin, Hochstein, Rene Moser. (2022). Ansible: Up and Running, Third Edition. O'Reilly Publications.
  9. Ashley Davis. (2021). Bootstrapping Microservices with Docker, Kubernetes and Terraform. Manning Publications.
  10. Imam Bux. (2020, Aug 4th). minikube ip is not reachable. Stack Overflow. https://stackoverflow.com/questions/60710171/minikube-ip-is-not-reachable#answer-63243909
  11. Jeff Geerling. (2011). Ansible for DevOps. Leanpub.
  12. Amazon. (2023). Auto Scaling Template Snippets. AWS. https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/quickref-autoscaling.html
  13. Andres. (05.03.2023). Multiple Playbooks in Ansible. dev.to. https://dev.to/andresfmoya/multiple-playbooks-in-ansible-2pdc
  14. Build Virtual. Deploy a kubernetes cluster using ansible. Build Virtual. https://buildvirtual.net/deploy-a-kubernetes-cluster-using-ansible/
  15. Troung. AWS S3: Bucket cannot have ACLs set with ObjectOwnership's BucketOwnerEnforced setting. Stack Overflow. https://stackoverflow.com/questions/76097031/aws-s3-bucket-cannot-have-acls-set-with-objectownerships-bucketownerenforced-s#76107203
  16. Tamás Panyi. Build a Kubernetes Cluster on AWS with CloudFormation from Scratch. Medium. https://medium.com/@panyitamas/build-a-kubernetes-cluster-on-aws-with-cloudformation-from-scratch-d7ecfbed16a2
  17. Ankit Gangwar. Setup Prometheus and Grafana monitoring on Kubernetes cluster using Helm. Medium. https://medium.com/globant/setup-prometheus-and-grafana-monitoring-on-kubernetes-cluster-using-helm-3484efd85891
  18. The Kubernetes Authors. Configuring Redis using a ConfigMap. Kubernetes. https://kubernetes.io/docs/tutorials/configuration/configure-redis-using-configmap
  19. Shahar Azulay. Redis on Kubernetes: A Powerful Solution – With Limits. groundcover. https://www.groundcover.com/blog/redis-cluster-kubernetes
  20. Ferdinand de Antoni. Redis Cluster on Kubernetes. Medium. https://medium.com/geekculture/redis-cluster-on-kubernetes-c9839f1c14b6
  21. Dragonfly DB. Error: redis.exceptions.responseerror moved. Dragonfly. https://www.dragonflydb.io/error-solutions/redis-exceptions-responseerror-moved
  22. Anish. Kubernetes Access Service located in another namespace. 8gwifi. https://8gwifi.org/docs/kube-externalname.jsp
  23. Kubernetes. Debugging DNS Resolution. kubernetes. https://kubernetes.io/docs/tasks/administer-cluster/dns-debugging-resolution/
  24. JPG. How to add a custom decorator to a FastAPI route?. https://stackoverflow.com/questions/64497615/how-to-add-a-custom-decorator-to-a-fastapi-route
  25. Mario. Building a Decorator for a Fastapi Route Simplify and Beautify Your App Routes. https://www.pythonbynight.com/blog/building-decorator-for-fastapi
  26. Bubu Tripathy. Blue-Green Deployment using Kubernetes. https://medium.com/@bubu.tripathy/blue-green-deployment-using-kubernetes-be994df956b4
  27. AWS Team. Why can't I connect to my Amazon EKS cluster? . https://repost.aws/knowledge-center/eks-cluster-connection
  28. Giant Swarm. Using Kubernetes LoadBalancer Services on AWS. Medium. https://medium.com/@GiantSwarm/using-kubernetes-loadbalancer-services-on-aws-5c22f932d0c9
  29. Meysam. How to Set Up Ingress Controller in AWS EKS. Medium. https://towardsdatascience.com/how-to-set-up-ingress-controller-in-aws-eks-d745d9107307
  30. Kubernetes. Ingress. Kubernetes. https://kubernetes.io/docs/concepts/services-networking/ingress/
  31. AWS EKS Workshop. Microservices on Kubernetes. Amazon Web Services. https://www.eksworkshop.com/docs/introduction/getting-started/microservices/
  32. Peter De Tender. Setting up SSL/TLS for Kubernetes Ingress. snyk. https://snyk.io/blog/setting-up-ssl-tls-for-kubernetes-ingress/
  33. Michael Pratt. Ingress vs. Load Balancer in Kubernetes. Baeldung. https://www.baeldung.com/ops/kubernetes-ingress-vs-load-balancer
  34. Yang Yang and Michael Hausenblas. Kubernetes Ingress with AWS ALB Ingress Controller. AWS. https://aws.amazon.com/blogs/opensource/kubernetes-ingress-aws-alb-ingress-controller/
  35. Kubernetes Team. Ingress-Nginx Controller Installation Guide. Kubernetes. https://kubernetes.github.io/ingress-nginx/deploy/
  36. Elton Stoneman. (2021). Learn Kubernetes in a Month of Lunches. Manning Publications Co.
  37. NGINX Team. Configure Rate Limiting. NGINX. https://docs.nginx.com/nginx-service-mesh/tutorials/ratelimit-walkthrough/#:~:text=In%20a%20Kubernetes%20environment%2C%20rate,workloads%20running%20inside%20the%20cluster.
  38. Mike Petersen. Ultimate Guide to Kubernetes Ingress Controllers. Platform 9. https://platform9.com/blog/ultimate-guide-to-kubernetes-ingress-controllers/
  39. Harsh Manvar. Kubernetes Ingress Vs Gateway API. https://medium.com/google-cloud/kubernetes-ingress-vs-gateway-api-647ee233693d
  40. Dawid Kruk. How to create nginx ingress rules for services in 3 different namespaces in azure Kubernetes cluster. https://stackoverflow.com/questions/73918866/how-to-create-nginx-ingress-rules-for-services-in-3-different-namespaces-in-azur#answer-73921798
  41. Awanish. Building a Kubernetes Application with Amazon EKS. Medium. https://medium.com/edureka/amazon-eks-ac646c23abf8
  42. AWS Team. Clean Up. AWS. https://archive.eksworkshop.com/beginner/130_exposing-service/cleaning/
  43. Digital Ocean Team. How to Delete Load Balancers from Kubernetes Clusters. Digital Ocean. https://docs.digitalocean.com/products/kubernetes/how-to/delete-load-balancers
  44. ElmoVanKielmo. What is the meaning of "gaierror: [Errno -3] Temporary failure in name resolution". Stack Overflow. https://stackoverflow.com/questions/40238610/what-is-the-meaning-of-gaierror-errno-3-temporary-failure-in-name-resolutio#answer-40238730