Skip to content

Advanced-Cloud-2020/infrastructure

Repository files navigation

Kubernetes (CSYE 7374- Advanced Cloud computing) | Cloud Computing

Summary

Simulation on production grade kubernetes deployment on AWS

  • Backend application is built on java using spring boot framework
  • Created a minimal frontend application with react
  • Containerized the applications with docker and stored them in private repository
  • Setup the jenkins infrastructure on a custom domain using ansible
  • Created webhooks to Jenkins to create,tagged and pushed docker images on each commit
  • Created a kubernetes cluster in HA setup and deployed the microservices
  • Service discovery for frontend and backend
  • Created helm charts to deploy the application

Information about clusters

  • Created ansible play-book to launch the cluster in Dev and Prod environments
  • Playbooks handle the number of nodes and sizes of compute and master nodes depending on the type of environment
  • Created kubernetes clustes in HA setup in 3 different availability zones picking the zones automatically in production setup
  • Created the clusters with private topology and has a bastion host to maintain the compute and master node
  • Used ansible k8s module to deploy the application on the clusters

Microservices

Backend

  • The Recipe Management Web application is developed using Express Js framework
  • Storing the images of recipes in S3
  • The data is cached in Redis for 10 minutes for faster IO
  • Containerized the application

FrontEnd

  • A minimal frontend built on react to view the recipes
  • The frontend app uses a public endpoint exposed by backend
  • Containerized the application

Jenkins CI/CD

  • Created webhooks on github to trigger a jenkins build on each commit
  • Created Jenkins pipeline script to run the unit tests, tag the image with push the image to docker

Deployments on Cluster

  • Deployed the application in the kubernetes clusters using ansible k8s module
  • Created Replica sets from frontend and backend
  • Pulled the image from private docker repository using imagePullSecrets
  • Backend container has an init-container to waits for the redis service to come up
  • Frontend container waits till the backend is up and running
  • Passed DB, AWS secret and donfig data to the application with configMap and secrets
  • Created a health endpoint for the backend to perform the readiness probe
  • Created Liveness probes for both the containers
  • Created Loadbalancer services for the frontend and backend

Instructions to run code

Jenkins Setup

  • Created ansible playbooks to create infrastructure
  • Hosted jenkins on a custom domain jenkins.username.com
  • The ansible playbooks launches the EC2 instances and bootstraps the instance to start a secured jenkins server
  • Secured the jenkins server by enabling SSL and periodically updating the let’s encrypt certificates
  • Configured a custom custom domain in Route53 and updating the Route53 A record with the launched EC2 instances public dns
  • Clone the repo

Credentials needed

  • dockerhub_credentials(Username and Password)
  • github-ssh(SSH)
  • kubernetes_credentials(Username and Password) -> Username: admin, Password: (~/.kube/config/users:password | base64 )

Configure System

  • Manage Jenkins -> Configure System -> Cloud -> Kubernetes:
  • Kubernetes server certificate key: (~/.kube/config/clusters:certificate-authority-data | base64decode )
  • Credentials: kubernetes_credentials

Plugins to be Installed on Jenking to make CI/CD Work

  1. GitHub Integration
  2. Kubernetes CLI
  3. Kubernetes
  4. SSH Agent

Team information

Team Members Github Id NUID
Suhas Pasricha suhas1602 001434745
Puneet Tanwar puneetneu 001409671
Cyril Sebastian cyrilsebastian1811 001448384
Shubham Sharma shubh1646 001447366

About

A Node JS Rest API and React Js front-end app with Docker images to run on Kubernetes clusters

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •