- Course Features and Tools
- What is DevOps?
- A brief overview of the history of DevOps
- The Goals of DevOps
- DevOps vs Traditional Silos
- Build Automation
- Continuous Integration
- Continuous Delivery and Continuous Deployment
- Infrastructure as Code
- Configuration Management
- Container Orchestration
- Monitoring
- Microservices
- Introduction to DevOps Tools
- Tools for Build Automation and Continuous Integration
- Tools for Configuration Management
- Tools for Virtualization and Containerization
- Tools for Monitoring
- Tools for Orchestration
- Understanding the Git Filesystem
- Creating a Local Repository (Empty)
- Basic Configuration of Git
- Adding Files to Project
- The Status of your project
- Commiting to Git
- Ignoring Certain File Types
- HOL: Creating Local Repositories with Git and Adding/Checking in Files
- Using Tags
- Using Branches
- Merging Branches
- Rebasing
- Reverting a Commit
- Using the 'diff' Command
- Using Git's Logs
- Cloning Local Repositories
- Cloning Remote Repositories over HTTPS, SSH
- Forking
- HOL: Securing Your Github Account with SSH Keys
- HOL: Cloning a Remote GitHub Repository
- Tracking Remote Repositories
- Pushing to Remote Repositories
- Pull Requests
- What is a branching strategy?
- Why you need a branching strategy
- What are some common Git branching strategies?
- GitFlow
- GitHub Flow
- GitLab Flow
- Trunk-based Development
-
Introducing Build Automation
-
Build Automation Tools
- gradle
- npm
- make
- Packer
-
HOL: Creating Build Automation with Gradle
-
HOL: Automate AMI image creation with Packer
- CI Overview
- Installing Jenkins
- Scripted vs. Declarative Pipelines
- Scripted Pipelines
- Declarative Pipelines
- Groovy and DSL
- Jenkinsfile Basics
- Upstream, Downstream, and Triggers
- Artifacts and Fingerprints
- Linking Jobs
- Automating Jobs
- HOL: Linking Jobs in Jenkins
- HOL: Building multibranch build job with dependency between multiple job
- FreeStyle Jobs
- Basic Job Structure
- Parameters
- Notifications
- HOL: Building a Freestyle Job in Jenkins
- Agents and Distributed Builds
- Setting up a Build Agent
- Distributing a Build
- HOL: Distributing a Jenkins Build Jenkins on the Command Line
- Using the Jenkins API
- Using the Jenkins CLI
- What is Continuous Delivery and Continuous Deployment
- Continous Delivery vs. Continuous Deployment
- Bringing CI and CD (and CD) Together
- Continuous Delivery Release Automation
- Automated Deployment
- Configuration Management
- HOL: Implementing Automated Deployment Through a Jenkins Pipeline
- HOL: Provide Continuous Delivery with GitHub and Terraform Cloud for AWS
- Infrastructure Provisioning
- Configuration Management
- Continuous Integration/Deployment
- Config/Secret Management
- Logging and Monitoring
- IaC and Its Benefits
- Cloud Agnostic IaC with Terraform
- What is the Terraform Workflow?
- Terraform Key Concepts: Plan, Apply, and Destroy
- Resource Addressing in Terrafrom: Understanding Terraform Code
- Terraform Fundamentals
- Terraform State
- Terraform Variables and Outputs
- Terraform Provisioners
- HOL: Deploying a VM in AWS Using the Terraform Workflow
- HOL: Using Terraform Provisioner to Setup an Nginx Proxy on AWS
- Terraform Modules
- Accessing and Using Terraform Modules
- Interacting with Terraform Module Inputs and Outputs
- HOL: Building and Testing a Basic Terraform Module
- Built-in Funtions and Dynamics Blocks
- Terraform Built-in Functions
- Terraform Dynamic Blocks
- HOL: Using Terraform Dynamic Blocks and Built-in Functions to Deploy to AWS
- What is Configuration Management?
- What is Ansible?
- Installation and Configuration
- HOL: Deploying Ansible
- HOL: Getting Started with Ansible
- HOL: Ad-Hoc Ansible Commands
- HOL: Working with Ansible Inventories
- Ansible Tasks
- Plays and Playbooks
- HOL: Ansible Playbooks: The Basics
- HOL: Working with Ansible Templates, Variables, and Facts
- HOL: Deploying Services Using Ansible
- HOL: Advanced Features in Ansible Playbooks
- Roles
- HOL: Working with Ansible Roles
- Ansible Vault
- HOL: Working with Confedential Data in Ansible
- Building Playbooks for Jenkins Master Setup
- Building Playbooks for Jenkins Worker Setup
- Building Jinja2 Templates for Ansible Playbooks
- Intalling Docker Community Edition
- Docker Basics
- Docker Commands
- Creating Containers
- Exposing Container Ports
- Executing Container Commands
- Docker Logging
- Networking
- Storage and Volumes
- Selecting a Storage Driver
- Running a Container
- Namespaces and Cgroups
- HOL: Installing and Configuring the Docker Engine
- Introduction to Docker Images
- The Compoments of a Dockerfile
- More Dockerfile Directives
- Building Efficient Images
- Managing Images
- Flattening a Docker Image to a Single Layer
- Introduction to Docker Registries
- Using Docker Registries
- HOL: Creating Your Own Docker Image
- HOL: Building a Private Docker Registry
- HOL: Building Crosplatform Images Using Multi-Stage Build
- Introduction to Docker Service
- Compose Commands
- Creating a Compose File
- Using Volumes and Networking with Compose
- HOL: Building a Microservices with Docker Compose
- Kubernetes Fundamentals
- Kubernetes Fundamentals Intro
- Exploring Kubernetes Architecture
- Kubernetes Objects
- Kubernetes Networking
- Kubernetes Networking Basics
- Kubernetes Service Fundamentals
- Service Types
- Kubernetes Storage
- Kubernetes Storage Big Picture
- Persistent Volumes and Persistent Volume Claims
- Storage Clases
- Kubernetes Deployments
- Scaling Applications Automatically
- Horizontal Pod Autoscaler
- Cluster Autoscaler
- RBAC and Admission Control
- HOL: Working with Kubernetes Namespace
- HOL: Managing Kubernetes Applications With Deployments
- HOL: Exposing Kubernetes Pods Using Services
- HOL: Using Kubernetes Services with DNS
- HOL: Using Kubernetes Ingress
- HOL: Managing Container Storage With Kubernetes Volumes
- HOL: Using PersistentVolumes in Kubernetes
- Troubleshooting
- Kubernetes Troubleshooting Overview
- Checking Cluster and Node Logs
- Checking Containers Logs
- Troubleshooting Kubernetes Networkign Issues
- HOL: Troubleshooting a Broken Kubernetes Cluster
- HOL: Troubleshooting a Broker Kubernetes Application
- Monitoring Basics
- Push or Pull
- Service Discovery
- HOL: Setting Up Prometheous and Adding Endpoints
- Infrastructure Monitoring
- Using the Node Exporter
- CPU Metrics
- Memory Metrics
- Disk Metrics
- File System Metrics
- Networking Metrics
- Load Metrics
- Using cAdvisor to Monitor Containers
- HOL: Monitoring Infrastructure and Containers with Prometheous
- Application Monitoring
- Using a Client Library
- Counters
- Gauges
- Summeries and Histograms
- HOL: Application Monitoring with Prometheous
- Manageing Alerts
- Recording Rules
- Alerting Rules
- Using Alertmanager
- Silences
- HOL: Using Alertmanager with Prometheous
- Visualization
- Adding a Dashboard
- Building a Panel
- HOL: Using Grafana to Visualize Prometheous Data
- DevOps and the Cloud
- DevOps and Google Cloud Platform
- HOL: Running Microservice in GKS using Helm
- DevOps and Microsoft Azure
- DevOps and Amazon Web Services
- AWS Services
- Identity and Access Management (IAM)
- Serverless Architecture
- Computing with Lambda
- Running Containers in ECS
- Application Monitoring with CloudWatch
- Elastic Load Balancing(ELB)
- Using Application Load Balancers
- High Availability and Scaling
- Ec2 Instance Auto Scaling
- HOL: Triggering AWS Lambda from Amazon SQS
- HOL: Create and Assume Roles in AWS
- HOL: User Application Load Balancers for Web Servers
- HOL: Implement Advanced CloudWatch Monitoring for a Web Server
- HOL: Work with AWS VPC Flow Logs for Network Monitoring