WA3003
Docker and Kubernetes Fundamentals Training
This intensive Docker and Kubernetes training course teaches attendees theoretical concepts and real-world skills solidified with hands-on labs, allowing students to apply their knowledge. This course covers Kubernetes and Docker fundamentals and briefly introduces Continuous Integration.
Course Details
Duration
3 days
Prerequisites
- Proficiency with the Linux Command Line Interface (CLI)
- Broad understanding of Linux system administration: Linux file system, networking, and bash scripting.
- Computer programming concepts and methodologies. Full code examples for the course are provided in the Python and Java programming languages.
Target Audience
- Developers
- System Architects
- Technical Team Leads
- Systems Administrators
- DevOps Professionals
Skills Gained
- The fundamental uses of container technology and the architectural principles of how to apply containers to technical challenges.
- Create containers with both packaged solutions and custom software.
- Use the Docker and Kubernetes CLI environments to deploy solutions in local (Docker) and cluster (Kubernetes) environments.
- How stateful services – such as databases, streaming solutions , and other specialty applications – can be deployed in highly-available configurations with redundancy and service-discovery/load-balancing.
- How other components – can be used to integrate services within the Kubernetes platform.
- How Docker and technologies such as Jenkins can be used to continuously test and build containers based on changes to source code.
Course Outline
- Docker and Linux Container Technology: Introduction and Use-Cases
- Modern Infrastructure Terminology
- Virtualization
- Hypervisors
- Hypervisor Types
- Type 1 Hypervisors
- Type 2 Hypervisors
- Type 1 vs. Type 2 Processing
- Paravirtualization
- Virtualization Qualities
- Disadvantages of Virtualization
- Containerization
- Virtualization vs. Containerization
- Where to Use Virtualization and Containerization
- Containerization: High-Level
- Popular Containerization Systems
- What are Linux Containers
- Docker
- OpenVZ
- Solaris Zones (Containers)
- Container Orchestration Tools
- Docker Swarm
- Kubernetes
- Mesos and Marathon
- Docker Use-Cases
- Microservices
- Microservices and Containers / Clusters
- Docker in Action
- Docker Basics
- Where Can I Run Docker?
- Installing Docker Container Engine
- Docker Toolbox
- What is Docker?
- Docker Architecture
- Docker Architecture Diagram
- Docker Images
- Docker Containers
- Docker Integration
- Docker Services
- Docker Application Container Public Repository
- Docker Run Command
- Starting, Inspecting, and Stopping Docker Containers
- Docker Volume
- Dockerfile
- Docker Compose
- Using Docker Compose
- Dissecting docker-compose.yml
- Specifying services
- Dependencies between containers
- Injecting Environment Variables
- Managing Docker State
- State and Data in Docker
- Volumes
- More About Volumes
- Uses for Volumes
- Working With Volumes
- Create Volume
- Use Volumes with Containers
- Bind Mounts
- Using Bind Mounts
- tmpfs Mounts
- Storing Data in the Container
- Storage Drivers
- Remote Data Storage
- Networking
- The Default Bridge Network
- User-Defined Bridge Networks
- Docker Network Commands
- Creating a User-Defined Bridge Network
- Open Container Initiative and Container Runtime Interface
- Open Container Initiative (OCI)
- Docker
- Docker Engine Architecture
- runC
- containerd
- containerd Benefits
- CRI-O
- CRI-O Components
- Kubernetes and CRI-O
- Using Container Runtimes with Minikube
- Docker Runtime and Kubernetes
- Putting Things Together
- Kubernetes Architecture
- Kubernetes Basics
- What is Kubernetes?
- Container Orchestration
- Architecture Diagram
- Components
- Kubernetes Cluster
- Master Node
- Kube-Control-Manager
- Nodes
- Pod
- Using Pods to Group Containers
- Label
- Label Syntax
- Label Selector
- Annotation
- Persistent Storage
- Resource Quota
- Interacting with Kubernetes
- Working with Kubernetes
- Installation
- Startup
- Kubernetes Tools
- kubectl Command Line Interface
- API Proxy
- Dashboard
- Kubernetes Component Hierarchy
- Deployments
- Deployment Commands
- Updating Deployments
- Network Considerations
- Services
- Namespaces
- Labels
- Annotations
- Other Useful Commands
- Kubernetes Workload
- Kubernetes Workload
- Managing Workloads
- Imperative commands
- Imperative Object Configuration
- Declarative Object Configuration
- Configuration File Schema
- Understanding API Version
- Obtaining API Versions
- Stateless Applications
- Sample Deployment Manifest File
- Working with Deployments
- Stateful Applications
- Sample Stateful Manifest File
- Working with StatefulSet
- Jobs
- Sample Job Manifest File
- Working with Batch Job
- DaemonSets
- Sample Daemon Manifest File
- Rolling Updates
- Scheduling and Node Management
- Kubernetes Scheduler
- Skip Kubernetes Scheduler
- Scheduling Process
- Scheduling Process - Predicates and Priorities
- Scheduling Algorithm
- Kubernetes Scheduling Algorithm
- Scheduling Conflicts
- Controlling Scheduling
- Label Selectors
- Node Affinity and Anti-affinity
- Taints and Tolerations
- Managing Networking
- Kubernetes Networking Components
- The Kubernetes Network Model
- Networking Scenarios
- Container-Container Communication
- Pod-Pod Communication
- 1.3 Pod-Service Communication
- External-Service Communication
- Accessing Applications
- Useful Commands
- Container Network Interface (CNI)
- What is CNI’s Role?
- CNI Configuration Format
- Sample CNI Configuration
- Running the CNI Plugins
- Managing Persistent Storage
- Storage Methods
- Container OS file system storage
- Docker Volumes
- Kubernetes Volumes
- K8S Volume Types
- Cloud Resource Types
- configMaps
- Creating configMaps from Literals
- Creating configMaps from files
- Using configMaps
- emptyDir
- Using an emptyDir Volume
- Other Volume Types
- Persistent Volumes
- Creating a Volume
- Persistent Volume Claim
- Persistent Volume
- Pod that uses Persistent Volume
- Secrets
- Creating Secrets from Files
- Creating Secrets from Literals
- Using Secrets
- Security Context
- Security Context Usage
- Working with Helm
- What is Helm?
- Installing Helm
- Helm and KUBECONFIG
- Helm Features
- Helm Terminology
- Searching for Charts with helm CLI
- Adding Repositories
- Helm Hub - Search
- Helm Hub - Chart Page
- Installing a Chart
- Upgrading a Release
- Rolling Back a Release
- Creating Custom Charts
- Common Chart Files
- Helm Templates
- Installing A Custom Chart
- Packaging Custom Charts
- Logging, Monitoring, and Troubleshooting
- Differences Between Logging and Monitoring
- Logging in Kubernetes
- Basic Logging
- Logging Agents
- Fluentd and Elastic Stack
- Monitoring with Prometheus
- Kubernetes and Prometheus - Metrics
- Alerting
- Debugging Pods
- Debugging Nodes
- Debugging Replication Controllers and Services
- Upgrading Kubernetes
- Upgrade Process
- Determine Which Version to Upgrade To
- Upgrade kubeadm
- Upgrade Control Plane Node
- Upgrade kubelet and kubectl
- Upgrade Worker Nodes
- Recovering From a Failure State
- Continuous Integration Fundamentals
- Jenkins Continuous Integration
- Jenkins Features
- Running Jenkins
- Downloading and Installing Jenkins
- Running Jenkins as a Stand-Alone Application
- Running Jenkins on an Application Server
- Installing Jenkins as a Windows Service
- Different types of Jenkins job
- Configuring Source Code Management(SCM)
- Working with Subversion
- Working with Git
- Build Triggers
- Schedule Build Jobs
- Polling the SCM
- Maven Build Steps
- Configuring Jenkins to Access Kubernetes
- Jenkins Pipeline
- Jenkins Pipeline Output
- Installing Jenkins Plugins
- Lab Exercises
- Lab 1. Creating a Docker Account and Obtaining an Access Token
- Lab 2. Managing Containers
- Lab 3. Building Images
- Lab 4. Dockerfiles
- Lab 5. Getting Started with Docker Compose
- Lab 6. Docker Volumes
- Lab 7. Custom Network Management
- Lab 8. Configuring Minikube/Kubernetes to Use a Custom Docker Account
- Lab 9. Accessing the Kubernetes API
- Lab 10. Working with Kubernetes Workloads
- Lab 11. Scheduling and Node Management
- Lab 12. Accessing Applications
- Lab 13. Using Persistent Storage
- Lab 14. Getting Started with Helm
- Lab 15. Build CI Pipeline with Jenkins
Upcoming Course Dates