Module-1: Introduction to DevOps
- What is DevOps?
- Roles and Responsibilities of a DevOps Engineer
- How DevOps fits in the whole Software Development lifecycle
- DevOps tools
Module 2: Version Control with Git
2.1 Introduction to Version Control and Git
- Basic Concepts of Git
- Setup git repository (remote and local)
- Working with Git (git status, git commit, git add, git push)
- Initialize Git project locally
- Concept of Branches
- Merge Requests
- Deleting Branches
- Avoiding Merge Commits
- Resolving Merge Conflicts
- Don't track certain files (.gitignore)
- Save work-in-progress changes (git stash)
- Going back in history (git checkout)
- Undoing commits (git revert, git reset)
- Merging Branches
- Git for DevOps
Module 3: Containers with Docker
3.1 Containers with Docker
- What is a Container?
- Docker Components and architecture explained
- Docker vs. Virtual Machine
- Main Docker Commands
- Debugging a Docker Container
- Demo Project Overview - Docker in Practice (Nodejs App with MongoDB and Mongo Express UI)
- Developing with Containers
- Docker Compose - Running multiple services
- Dockerfile - Building our own Docker Image
- Private Docker Repository - Pushing our built Docker Image into a private Registry on AWS
- Deploy containerized app
- Docker Volumes - Persist data in Docker
- Volumes Demo - Configure persistence for our demo project
Module 4: Build Automation - CI/CD with Jenkins
4.1 Jenkins
- What is Build Automation? What is Jenkins?
- Install Jenkins on cloud server (Docker vs Server install)
- Jenkins plugins
- Installing build tools in Jenkins
- Jenkins Basics Demo
- Create Freestyle Job
- Configure Git Repository
- Run Tests and Build Java Application
- Docker in Jenkins
- Make Docker commands available in Jenkins
- Build Docker Image
- Push to DockerHub Repo
- Jenkins Pipeline (Use Cases)
- Create a simple Pipeline Job
- Full Jenkins file Syntax Demo
- Create a full Pipeline Job
- Build Java App
- Build Docker Image
- Push to private DockerHub
- Create a Multi-Branch Pipeline Job
- Credentials in Jenkins
- Jenkins Shared Library
- WebHooks - Trigger Jenkins Jobs automatically
- Versioning Application in Continuous Deployment
- Concepts of Versioning in Software Development
- Increment Application version from Jenkins Pipeline
- Set new Docker Image version from Jenkins Pipeline
- Commit Version Bump from Jenkins Pipeline
Module 5: AWS Services
5.1 Services
- Introduction to Amazon Web Services
- Identity & Access Management (IAM) - User, Groups and Permissions
- Regions and Availability Zones
- Virtual Private Cloud (VPC) - Your Private Network
- Subnets
- Security Groups
- Internet Gateway
- Route Table
- CIDR Blocks
- Introduction to Elastic Compute Cloud (EC2)
- Create an EC2 Instance
- Run Web application on EC2 using Docker
- AWS Command Line Tool
- Install and configure AWS CLI
- Create EC2
- Create Security Group
- Create key-pair
- Create IAM user with permissions
5.2 AWS & Jenkins - Continuous Deployment with Jenkins to AWS EC2
- Automate deploying from Jenkins Pipeline to EC2 Instance
- using docker run
- using docker-compose
- Real-life example of dynamically setting new image version in docker-compose
- SSH agent plugin and SSH credential type in Jenkins
Module 6: Container Orchestration with Kubernetes
6.1 Container Orchestration with Kubernetes
- Introduction to Kubernetes
- Understand the main Kubernetes Components
- Node, Pod, Service, Ingress, ConfigMap, Secret, Volume, Deployment, StatefulSet
- Kubernetes Architecture
- Minikube and kubectl - Local Setup
- Main Kubectl Commands - K8s CLI
- Create and debug Pod in a Minicluster
- Kubernetes YAML Configuration File
- Create and Configure Deployment and Service Component
- Demo Project: MongoDB and MongoExpress
- Organizing your components with K8s Namespaces
- Kubernetes Service Types
- Making your App accessible from outside with Kubernetes Ingress
- Persisting Data in Kubernetes with Volumes
- Persistent Volume
- Persistent Volume Claim
- Storage Class
- ConfigMap and Secret Kubernetes Volume Types
- Deploying Stateful Apps with StatefulSet
- Deploying Kubernetes cluster on a Managed Kubernetes Service (K8s on Cloud)
- Helm - Package Manager of Kubernetes
- Helm Demo: Install a Stateful Application on Kubernetes using Helm
- Demo: Deploy App from Private Docker Registry
- Extending the Kubernetes API with Operator
- Prometheus Operator Demo with Helm: Setup Prometheus Monitoring in K8s
Module 7: Kubernetes on AWS - EKS
7.1 AWS & Kubernetes
- AWS Container Services: Overview (ECR, ECS, EKS, Fargate)
- Create an EKS cluster with AWS Management Console (UI)
- Create cluster VPC
- Create cluster Roles
- Use Cloudformation Stack
- EC2 Worker Nodes
- Fargate Profile
- Configure Austoscaler
- Configure kube context to connect to the cluster
- Create an EKS cluster with eksctl (the easy way)
7.2 AWS & Kubernetes & Jenkins & Docker - CI/CD
- Configure kubectl inside Jenkins
- Configure kube context in Jenkins
- Install aws-iam-authenticator in Jenkins
- Complete Jenkins Pipeline - Deploy to EKS - using kubectl
- Complete Jenkins Pipeline - Build and push docker image to ECR and deploy to EKS
- Complete Jenkins Pipeline - Deploy to LKE using Kubernetes CLI plugin and kubeconfig file
Module 8: Infrastructure as Code with Terraform
8.1 Terraform
- What is Terraform? How it works
- Architecture
- Providers
- Resources & Data Sources
- Variables & Output Values
- Environment variables in Terraform
- Terraform commands
- Terraform State
- Modules
- Remote State
Terraform & AWS
- Create Security Group
- Create VPC
- Create Subnet
- Create Route Table
- Create Internet Gateway
- Create key-pair
- Provision EC2 server
- Modularize the demo project
Terraform & AWS & Kubernetes
- Use existing modules from Terraform Registry
- Create VPC
- Provision EKS cluster
Terraform & AWS & Jenkins - complete CI/CD
- Configure Terraform in Jenkins
- Automate provisioning EC2 instance from Jenkins pipeline and deploy the application with docker-compose