Coder Social home page Coder Social logo

capstone's Introduction

Cloud DevOps Engineer Capstone Project

Capstone project of the Udacity DevOps Engineer Nanodegree

Project Tasks:

  • Working in AWS
  • Using Jenkins to implement Continuous Integration and Continuous Deployment
  • Building pipelines
  • Working with CloudFormation to deploy clusters
  • Building Kubernetes clusters
  • Building Docker containers in pipelines

In this project I have applied the skills and knowledge which were developed throughout the Cloud DevOps Nanodegree program.

Application

The application used here is a basic website with an index.html page that runs over the NGINX server. I have created a CI/CD pipeline that deploys website to a cluster in AWS EKS which is Rollout Deployment.

Kubernetes Cluster

Cloudformation is used to deploy the Kubernetes Cluster and the NodeGroup. The code is in cloudformation_files directory. It is divided in two stacks, one for the network (network.yml) and a second one for the cluster itself (AWS_EKS.yml).

Jenkins Pipeline

I am using a CI/CD pipeline on a rolling deployment. On each HTML change, the docker image is pushed to AWS and the Kubernetes pods are rolled out so they restart with the new image from the repository. There is a load balancer before the exposed 8000 TCP ports to avoid having downtime. These are the steps in more detail:

![Jenkins Pipeline](./jenkins pipeline)

  1. Create network environment to the AWS

./create.sh capstone-network network.yml network-parameters.json

  1. Then create AWS ELK cluster

./create.sh capstone-eks AWS_EKS.yml AWS_EKS_parameters.json

  1. Create Image

docker-compose build

  1. Tag & Push

docker tag capstone:latest rajxxx/capstone:latest

docker push rajxxx/capstone:latest

  1. Start Docker Container

docker container run -d rajxxx/capstone:latest

  1. Set current kubectl context

kubectl config use-context arn:aws:eks:us-east-1:418573230812:cluster/AWSEKSCLUSTER

  1. Deployment

kubectl apply -f kubernetes_files/deploy.yml kubectl apply -f kubernetes_files/LoadBalancer.yml

  1. Rollout Deployment

Rollout the pods to use the new pushed image.

kubectl rollout restart deployment/application

View the public web page

Finally, enter the public DNS record in the web browser to access the page.

$ kubectl get deployment
NAME         READY   UP-TO-DATE   AVAILABLE   AGE
application   1/1     1            1           67m

Website Url :- http://a51b38bfe87114c2bbe51d289c244393-131057743.us-east-1.elb.amazonaws.com:8000/

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.