Skip to content

This repository is a demo of a ToDo Application using react and backend is written with simple node.js using js connected to MongoDB. This Architecture will be deploy through aws with the help of k8s(eks) and ecr and each services will be connected to each other internally. At last a ALB and a ingress controller will be created for load balancing.

Notifications You must be signed in to change notification settings

Mukesh015/Three-Tier-App-Deploy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

#ThreeTierAppDeployment

Overview

This repository is a demo of a ToDo Application using react and backend is written with simple node.js using js connected to MongoDB. This Architecture will be deploy through aws with the help of k8s(eks) and ecr and each services will be connected to each other internally. At last a ALB and a ingress controller will be created for load balancing.

Lets Deploy

Prerequisites

  • Basic knowledge of Docker, and AWS services.
  • An AWS account with necessary permissions.

Challenge Steps

Application Code

The Application-Code directory contains the source code for the Three-Tier Web Application. Dive into this directory to explore the frontend and backend implementations.

Jenkins Pipeline Code

In the Jenkins-Pipeline-Code directory, you'll find Jenkins pipeline scripts. These scripts automate the CI/CD process, ensuring smooth integration and deployment of your application.

Jenkins Server Terraform

Explore the Jenkins-Server-TF directory to find Terraform scripts for setting up the Jenkins Server on AWS. These scripts simplify the infrastructure provisioning process.

k8s

The Kubernetes-Manifests-Files directory holds Kubernetes manifests for deploying your application on AWS EKS. Understand and customize these files to suit your project needs.

Project Details

🛠️ Tools Explored:

  • Terraform & AWS CLI for AWS infrastructure
  • Jenkins, Sonarqube, Terraform, Kubectl, and more for CI/CD setup
  • Helm, Prometheus, and Grafana for Monitoring
  • ArgoCD for GitOps practices

🚢 High-Level Overview:

  • IAM User setup & Terraform magic on AWS
  • Jenkins deployment with AWS integration
  • EKS Cluster creation & Load Balancer configuration
  • Private ECR repositories for secure image management
  • Helm charts for efficient monitoring setup
  • GitOps with ArgoCD - the cherry on top!

📈 The journey covered everything from setting up tools to deploying a Three-Tier app, ensuring data persistence, and implementing CI/CD pipelines.

Getting Started

To get started with this project, refer to our comprehensive guide that walks you through IAM user setup, infrastructure provisioning, CI/CD pipeline configuration, EKS cluster creation, and more.

Step 1: IAM Configuration

  • Create a user eks-admin with AdministratorAccess.
  • Generate Security Credentials: Access Key and Secret Access Key.

Step 2: EC2 Setup

  • Launch an Ubuntu instance in your favourite region (eg. region us-west-2).
  • SSH into the instance from your local machine.

Step 3: Install AWS CLI v2

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
sudo apt install unzip
unzip awscliv2.zip
sudo ./aws/install -i /usr/local/aws-cli -b /usr/local/bin --update
aws configure

Step 4: Install Docker

sudo apt-get update
sudo apt install docker.io
docker ps
sudo chown $USER /var/run/docker.sock

Step 5: Install kubectl

curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.19.6/2021-01-05/bin/linux/amd64/kubectl
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin
kubectl version --short --client

Step 6: Install eksctl

curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
sudo mv /tmp/eksctl /usr/local/bin
eksctl version

Step 7: Setup EKS Cluster

eksctl create cluster --name three-tier-cluster --region us-west-2 --node-type t2.medium --nodes-min 2 --nodes-max 2
aws eks update-kubeconfig --region us-west-2 --name three-tier-cluster
kubectl get nodes

Step 8: Run Manifests

kubectl create namespace workshop
kubectl apply -f .
kubectl delete -f .

Step 9: Install AWS Load Balancer

curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.5.4/docs/install/iam_policy.json
aws iam create-policy --policy-name AWSLoadBalancerControllerIAMPolicy --policy-document file://iam_policy.json
eksctl utils associate-iam-oidc-provider --region=us-west-2 --cluster=three-tier-cluster --approve
eksctl create iamserviceaccount --cluster=three-tier-cluster --namespace=kube-system --name=aws-load-balancer-controller --role-name AmazonEKSLoadBalancerControllerRole --attach-policy-arn=arn:aws:iam::626072240565:policy/AWSLoadBalancerControllerIAMPolicy --approve --region=us-west-2

Step 10: Deploy AWS Load Balancer Controller

sudo snap install helm --classic
helm repo add eks https://aws.github.io/eks-charts
helm repo update eks
helm install aws-load-balancer-controller eks/aws-load-balancer-controller -n kube-system --set clusterName=my-cluster --set serviceAccount.create=false --set serviceAccount.name=aws-load-balancer-controller
kubectl get deployment -n kube-system aws-load-balancer-controller
kubectl apply -f full_stack_lb.yaml

Cleanup

  • To delete the EKS cluster:
eksctl delete cluster --name three-tier-cluster --region us-west-2

Contribution Guidelines

  • Fork the repository and create your feature branch.
  • Deploy the application, adding your creative enhancements.
  • Ensure your code adheres to the project's style and contribution guidelines.
  • Submit a Pull Request with a detailed description of your changes.

Support

For any queries or issues, please open an issue in the repository.


Happy Learning! 🚀👨‍💻👩‍💻

About

This repository is a demo of a ToDo Application using react and backend is written with simple node.js using js connected to MongoDB. This Architecture will be deploy through aws with the help of k8s(eks) and ecr and each services will be connected to each other internally. At last a ALB and a ingress controller will be created for load balancing.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published