Modern DevOps with Docker and Kubernetes

Software is remaking the world and containers are remaking how we run and manage software. This course introduces two of the most powerful container technologies – Docker and Kubernetes – and how they can be used by software developers.

Containers are a powerful tool for developing and managing software. When combined with DevOps practices, it is possible for organizations to efficiently deliver applications and services at high velocity.

This training course introduces containers and two of the most popular tools for their management and orchestration: Docker and Kubernetes. They will be introduced to the core components of both Docker and Kubernetes as they apply to the software development process.

Topics covered include: containers, tools for local management, pods, labels, volumes, networking, replication controllers, services, and stateful sets. Students will get hands-on experience with how the technologies can be used to deliver software following microservices and DevOps strategies, and will create a complete continuous integration and depoyment (CICD) pipeline showing how Docker and Kubernetes can be used to manage the software lifecycle. Components of the broader software ecosystem including Ansible, Jenkins, and Spinnaker will also be covered as they pertain to Docker/Kubernetes.

At the end of the course, participants and teams will understand how to build secure, robust, highly available services that are resilient and able to adapt to rigorous application demands. They will also be able to show how components of the ecosystem can be combined to create larger systems addressing complex use-cases.

Target Audience.

Developers, system architects, technical team leads, systems administrators, and DevOps professionals who want to understand Docker/Kubernetes and how it is used in cloud environments.

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.

Objectives.

  • Learn 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.
  • Understand the fundamental Kubernetes resources used for configuring and deploying containerized applications. Understand how to supply environment specific configuration and secrets for Kubernetes applications.
  • Design and run CI/CD workflows on Docker and Kubernetes using Jenkins and Spinnaker.
  • Learn how stateful services – such as databases, streaming solutions such as Kafka, and other specialty applications such as ElasticSearch – can be deployed in highly-available configurations with redundancy and service-discovery/load-balancing.
  • Show how other components – such as Kafka Connect – can be used to integrate services within the Kubernetes platform.

Course Outline

Day 1: Containers and Docker.

Evolving Architectures

  • Microservice Architecture
  • DevOps Primer
  • Cloud Native Practices
  • Implementing Microservices with Docker and Kubernetes

DevOps Tooling

  • Managing software in Linux: apt, yum, apk
  • DevOps Workflows with git
  • Infrastructure Management with Ansible

Continuous Integration Using Docker

  • CI/CD Fundamentals
  • Jenkins
  • Lab: Deploying Jenkins
  • Lab: Building CI Pipelines

Day 2: Kubernetes Fundamentals.

Kubernetes Core Concepts (Quickstart)

  • Pods
  • Labels
  • Controllers
  • Services
  • Secrets
  • Lab: Accessing the Kubernetes API
  • Lab: Kubernetes Workloads
    • Deploying an Application to Kubernetes
    • Connecting Applications via Services
  • Lab: Accessing Applications with Services

Kubernetes: Beyond Basics

  • Kubernetes Services in depth
  • Lab: Kubernetes Service Discovery

Container Networking In-depth

Stateful Services

  • onsiderations involved in the management of stateful applications
  • Case Study: Kafka, a Big Data streaming solution
  • Lab: Deploy ZooKeeper and Kafka as stateful sets with headless services
  • Lab: Produce and consume data to Kafka

Day 3: Advanced Kubernetes.

Systems Integration

  • Case Study: Building ETL pipelines with Kafka Connect
  • Lab: Deploy MySQL/MariaDB
  • Lab: Deploy ElasticSearch
  • Lab: Extract, Transform, Load Data
  • Lab: Integrate data systems using streams (Kafka Connect)

Infrastructure as Code

  • Describing and deploying applications as packages
  • Using Helm to deploy pre-packaged software resources to Kubernetes
  • Lab: Install helm and Tiller
  • Lab: Installing software from charts
  • Lab: Packaging Software Components as Charts
  • Lab: Packaging Software Components with Dependencies

Cloud Storage Within Kubernetes

  • Benefits of Storage as a Service
  • MinIO: A Self-Hosted S3 Server
  • Lab: Deploy Minio to Kubernetes

Continuous Deployment

  • Kubernetes CD Systems: Considerations
  • Spinnaker: An Integrated CD Toolkit
  • Lab: Deploy Spinnaker to Kubernetes
  • Lab: Configure Continuous Deployment Pipelines
  • Lab: CI/CD from Start to End