Capstone project from Udacity's Cloud DevOps Engineer Nanodegree program.
Capstone project from Udacity’s Cloud DevOps Engineer
Nanodegree
program. I developed a Continuous Integration and Continuous Deployment pipeline for a microservices application with a rolling deployment into a Kubernetes cluster.
In this project I applied the skills and knowledge which were developed throughout the Cloud DevOps Nanodegree program. These included:
CRITERIA | MEETS SPECIFICATIONS | |
---|---|---|
Set Up Pipeline | 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. |
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 | Execute linting step in code pipeline | Code is checked against a linter as part of a Continuous Integration step (demonstrated w/ two screenshots). |
Build a Docker container in a pipeline | The project takes a Dockerfile and creates a Docker container in the pipeline. | |
Successful Deployment | 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. |
Use Blue/Green Deployment or a Rolling Deployment successfully | The project performs the correct steps to do a blue/green or a rolling deployment into the environment selected. Student demonstrates the successful completion of chosen deployment methodology with screenshots. |
For the Docker application, I used an existing Flask app that displays a GIF of a cute cat randomly. Go to docker-curriculum for further details.
Per project directions, I developed an independent Jenkins pipeline that creates an AWS EKS cluster. For the source code, visit the eks-cluster repo.
This is a CI/CD pipeline that deploys a Docker image to a Kubernetes cluster on Amazon EKS using Jenkins. For the Continuous Integration steps, it lints the Dockerfile and performs a security scan using Aqua Microscanner. For Continuous Deployment, it builds the Docker image, verifies if the Docker container responds to an HTTP request, then it pushes the image to Docker Hub. To avoid filling up the disk, it removes the local image. Then, it deploys the image to an AWS EKS cluster. Finally, it updates the pods to use the latest image with no downtime.
These are all the stages of the pipeline:
List all the Kubernetes cluster resources from the udacity namespace with kubectl:
kubectl get all -o wide -n udacity
Enter the Load Balancer public DNS name to access the web app:
http://a14746228a01b4241bd83a3a425e5877-1242614637.us-east-2.elb.amazonaws.com
Project licensed under the terms of the MIT License. See the LICENSE
file for details.
Find me as rcmelendez on LinkedIn,
@rcmelendez">Medium, and of course GitHub.