Docker and Kubernetes
This document provides the curriculum outline of the Knowledge, Skills and
Abilities that a Docker Associate and Kubernetes Developer can be expected to
demonstrate.
Who should attend?
DevOps Engineers
Deployment Engineers
System Administrators
IT professionals who want to demonstrate their expertise in deploying,
backing up, restoring, and upgrading Kubernetes
Prerequisite:
Linux/Unix Systems Fundaments
Familiarity with Command Line Interface (CLI)
Fundamental knowledge of editors on Linux (any one of vi/nano/emacs)
Familiarity with at least one scripting/programming language
Objectives:
Day – 1
Docker Introduction
What is Docker?
Why Docker?
Containerization v/s Virtualization
Docker Architecture
Understanding the Docker components
Docker Terminologies
Docker Internals
Docker Installation
Docker Editions
Hardware and Software Requirements
Installing Docker
Docker Config Files and Settings
Lab: Installing Docker on Linux
Managing Container Lifecycle
Creating, Starting and Listing Containers
Attaching and Detaching from Container
Fetching Container details using “inspect”
Executing Commands inside a Container
Pause, Stop, Start, Restart and Kill a Container
Container Metrics via stats
Limiting Memory and CPU utilization
Storage Utilization of a Container
Expose Container Application using Host Port
Lab: Managing Container Life Cycle using Docker commands
Working with Docker Images
Searching, Filtering and Pulling Images
Docker Image save/load
Commit Container State
Understanding Docker Image Directives
Understanding the use of Base Images
What is “FROM scratch”?
RUN vs CMD
COPY vs ADD
Building Custom Images using Dockerfile
Understanding Image Layers
Publishing the Custom Image
Flatten an Image using export/import
Tagging Images
Working with Docker Hub
Pushing Docker Images to Docker Hub
Working with Local Registry Service
Lab: Working with Docker Images
Lab: Building Custom Images
Lab: Publishing the custom image
Lab: Backup and Restore and Image
Lab: Export and Import an Image
Lab: Running a container from the custom image
Lab: Working with Docker Hub
Lab: Pulling/Pushing Docker images from Docker Hub
Lab: Setting up Local Registry Service
Day – 2
Introduction to Kubernetes and its Architecture
What is Kubernetes?
Why Kubernetes?
Kubernetes Versions and Flavors
Kubernetes Terminologies
Kubernetes Cluster Architecture
Understanding Kubernetes Controllers Components
o Kube-apiserver
o ETCD
o Kube-scheduler
o Kube-controller
o CoreDNS
Understanding Kubernetes Nodes Components
o Kube-proxy
o Kubelet
o CRI – Container Runtime Interface
o CNI – Container Network Interface
o CSI – Container Storage Interface
Kubernetes Cluster Setup and Validation
Understanding different tools for deploying Kubernetes Cluster
Building the Kubernetes Cluster using kubeadm Tool
Understanding the pre-requisites
Kubernetes Controllers and Nodes
Lab: Environment Setup
Lab: Installing pre-requisites
Lab: Initializing Kubernetes Cluster using Kubeadm
Lab: Adding Nodes to the Kubernetes Cluster
Managing Pod Lifecycle
Pod Overview
o Creating a Pod with imperative syntax
o Creating a Pod with declarative syntax
o Reading the Pod's information and metadata
o Listing the objects in JSON or YAML
o Backing up your resource using the list operation
o Getting more information from the list operation
o Accessing a Pod from the outside world
o Entering into a container inside a Pod
o Creating Temporary Pod
Multi-container Pod
o Concrete scenarios where you need multi-container Pods
o When not to create a multi-container Pod
o What happens when Kubernetes fails to launch one container in
a Pod?
o Understanding the Pod deletion grace period
o Accessing a specific container inside a multi-container Pod
o Running commands in containers
o Overriding the default commands run by your containers
Labeling and annotating the Pods
What are labels and why do we need them
What are annotations and how do they differ from labels
Listing labels attached to a Pod
Adding or updating a label to/of a running Pod
Deleting a label attached to a running Pod
Adding an annotation
Understanding the Pod Lifecycle
Lab: Getting Started with kubectl CLI
Lab: Creating Pods using Imperative Commands
Lab: Creating Pods using Declarative Method
Lab: Working with Labels and Annotations
Lab: Formatting Output with kubectl
Lab: Working with Single Container Pods
Lab: Working with multi container Pods
Kubernetes Networking and Services
Cluster Communications
Pod and Node Networking
Container Network Interface (CNI)
Understanding Pod IP assignment is dynamic
Never hardcode a pod's IP addresses in your application code
Understanding how services route traffic to Pods
Understanding how DNS names are generated for services
Understanding different types of Services
o ClusterIP
o NodePort
o LoadBalancer
o ExternalName
NodePort or kubectl port-forward?
Lab: Exposing Applications using ClusterIP Service
Lab: Exposing Applications using NodePort Service
Day – 3
Working with Controllers
Understanding Various Types of Kubernetes Controllers
Desired State vs Current State
Kube-Controller-Manager
o ReplicaSet – Scaling the Application
o Deployment – Automatic Rollout and Rollback
Rolling Deployment
Recreate Deployment
Blue-Green Deployment
Canary Deployment
A/B Testing
o DaemonSet – Deploying Agents
o StatefulSet – Running StatefulSet Applications
o Job – Run a Task
o Cronjob – Run Recurring Tasks
HPA vs VPA for Pod Autoscaling
Creating a Deployment object
Exposing Deployment Pods using Service objects
Scaling a Deployment object
How does a Deployment object manage revisions and version
rollout?
Updating a Deployment object
Rolling back a Deployment object
Deployment object best practices
Use declarative object management for Deployments
Do not use the Recreate strategy for production workloads
Lab: Deploying Application using ReplicaSet
Lab: Working with Deployments – Rolling Update
Lab: Working with Deployments – Blue-Green
Lab: Autoscaling of Pods – HPA
Lab: Deploying Application using DaemonSet
Working with Kubernetes Scheduler
Understanding kube-scheduler and its features
Manual Scheduling Vs Dynamic Scheduling
nodeName vs nodeSelector
Taints and Tolerations
Lab: Manually scheduling Pod
Lab: Scheduling Pod based on Node Selector and Labels
Lab: Taints and Tolerations
Logging and Monitoring
Describe Resources
Pod and Container Logs
Debugging your application
o Debug Pods
o Debug Services
o Determine the Reason for Pod Failure
o Debug Init Containers
o Debug Running Pods
o Get a Shell to a Running Container
o Inspect Kubernetes node with crictl
Metric Server and the top command
Events
Lab: Debugging Application Failures
Lab: Deploying Metric Server
Kubernetes Storage
Understanding Kubernetes Storage
Types of Volumes
o Persistent Volumes
o Projected Volumes
o Ephemeral Volumes
Static vs Dynamic Storage
Volume Modes
Access Modes
ConfigMaps and Secrets
Lab: Working with Kubernetes Volume Service
Lab: Working with ConfigMaps and Secrets