"Excellent way of explaining, complemented by a demonstration of the real situation. For me, the training was perfect. The trainer's deep knowledge of the issue is evident."
Roman Bucek
Datové centrum Ústeckého kraje
"My heart was captivated by the form, the use of Kubernetes Cluster.
I was introduced to the issue slowly, everything was explained to me."
Lubomír Sivčák
"Thank you for the fact that Mr. Snopek explains a lot of his personal experience and shows the discussed things on the running infrastructure."
Václav H.
"The lecturer knew the issue in depth and answered any question. He proceeded systematically when explaining and always left room for questions. So I have only words of praise :)"
Kubernetes is an open source platform for managing container workloads and services that facilitates declarative configuration and automation. It has a large, rapidly growing ecosystem. Kubernetes services, support, and tools are widely available.
Required knowledge
Docker and Kubernetes basics.
Target audience
The course is designed for sysadmins, DevOps, systems engineers, and others who need an introduction to containers and Kubernetes.
Course content
Basic Kubernetes concepts
API server,
control plane, worker nodes
Kubernetes API objects, API groups
Kubernetes YAML manifests and objects
Basic object kinds
Pods, ConfigMaps, Secrets
Services, labels and annotations
Deployments, StatefulSets
Namespaces
Ingresses
Custom Resources
Kubernetes controllers
scheduler, ...
TASKS:
connect to K8S server
create objects in the API server
list node objects
ensure labels and annotations
Advanced kubectl
Use kubectl parameters for custom scripting and object processing
connection to remote K8s cluster
--output and --template formats
--selector
--dry-run=
TASKS:
Use multiple `kubeconfig`s
Use kubectl filtering and outputs
Compare `.spec` and `.status` sections of k8s object
Application Deployment with apps/v1
Using `Deployments`, `DaemonSets`, `StatefulSets` for application deployment and rollout.
Why do we need selectors?
`Deployment` and relation to `ReplicaSet`
What is `revisionHistoryLimit` and what can go wrong?
multiple `rolloutStategies` and their usage
What is `ownerReference` used for?
TASKS:
Place `Deployment`, modify it and watch the results
Check `revisionHistoryLimit` quirks.
Compare `Recreate` and `RollingUpdate` priorities. Tune RollingUpdate strategy
Inspect `ownerReference`
Exposing container services to the outer world
Exposing pods to services using pod labels. Explore multiple service types.
Ingresses and CertificateManager expose service with HTTP/HTTPS protocol.
Services:
Difference on ClusterIP vs headless services
Using ExternalName service for service discovery
Ingresses:
How ingresses works
How can we use CertificateManager to get certificates using ACME protocol
TASKS (Services):
Expose pods using service..
Inspect the exposed service with DNS lookups.
Create headless service and compare it to ClusterIP one
Inspect Service Endpoints
Create LoadBalancer service (on cloud only)
TASKS (Ingresses):
Expose service to the world on HTTP
Configure CertificateManager
Use CertificateManager to get LetsEncrypt certificate
Pod Resource Limits
Using `resourceLimits`, soft and hard limits, pod `QualityofService` classes.
What can go wrong with resource limits?
TASKS:
Place resourceLimits on the objects
Explore what happens when pod exceeds the limits.
Pod statuses and lifecycle
Pods can have multiple states and advanced initialization
using `containers` and `initContainers`
pod probes - `startupProbe`, `livenessProbe` and `readinessProbe`
use `lifecycle` hooks - `preStop` and `postStart`
Use `terminationMessagePath`
TASKS:
Use initContainers, use `preStop` and `postStart` hooks.
Explore `livenessProbe` and `readinessProbe` within a service.
Pod scheduling and affinities
Some pods can be started with `podPriority`. How it can be used?
Pods can be scheduled to be located on specific nodes with affinities.
TASKS:
Create a PriorityClass and apply it to a node.
Schedule a pod to the specific nodes with `nodeAffinity`.
Schedule multiple pods to one node with `podAdffinity`
Explore pod with `podAntiAffinity`
Deployment with Kustomize
What is `kustomize` used for and what problems can `kustomize` solve for us?
TASKS:
Use kustomize to deploy multiple instances of one application
Inspect kustomize generated manifests.
Demo:
Using kustomize with ArgoCD.
Helm charts
Using Helm for deploying applications consisting of multiple manifests. Which tasks Helm solves for us?
TASKS:
Download chart from registry
Inspect the chart
Deploy the chart to a release.
Customize the chart `values` and redeploy. Inspect the deployed objects.
Optionally: create a custom chart.
Container storage
Implementing persistent storage with `PersistentVolume` and `PersistentVolumeClaim` objects.
TASKS:
Inspect existing StorageClasses
Create a new PVC
Deploy Pod with PVC.
Explore PV modes.
To be discussed?
Jobs
Cronjobs
ServiceAccounts and their permissions
Secret management
Log management
Event management
Certification
At the end of the course, you will receive a certificate and completion.
Objectives
Participants will learn the following concepts and skills:
Containers and the concept of an orchestra
Basic concepts of Kubernetes
Advanced kubectl
Kubernetes cluster management
Networking, storage and security for Kubernetes
Helm charts and tables
Lecturers
Jiří Snopek
Jirka's passion for imparting experience and knowledge to perfectly developed courses and trainings. He improves his teaching skills with foreign lecturers. He uses modern technology, new approaches, visualizations, labs for his courses.
Jirka is an expert in open source and shares his knowledge in our Linux, Ansible, containerization, OpenShift, Kubernetes, ArgoCD, Grafana, Proxmox courses.
Jiří leads a team focused on the development and operation of web and mobile applications. He is a Linux system administrator and information technology and banking infrastructure architect. Experienced in automation, optimization, infrastructure architecture and application design.
His certifications: Red Hat Certified Trainer of the Year (2019) EMEA - DevOps, Red Hat Certified Specialist in Hybrid Cloud Management, Red Hat Certified Architect Level III, Red Hat Certified Specialist in OpenShift Application Development
Do you want thistailor-made course for your company?
Once upon a time, there lived a system administrator named Henry. He was a dedicated systems manager in a medium-sized company. He took care of his group of servers and knew everything about each of them. However, as the company grew, the number of servers Henry had to work with also increased.
Docker and Kubernetes are two different technologies that are often used together in the context of containerized application deployment and management.
"Excellent way of explaining, complemented by a demonstration of the real situation. For me, the training was perfect. The trainer's deep knowledge of the issue is evident."
Roman Bucek
Datové centrum Ústeckého kraje
"My heart was captivated by the form, the use of Kubernetes Cluster.
I was introduced to the issue slowly, everything was explained to me."
Lubomír Sivčák
"Thank you for the fact that Mr. Snopek explains a lot of his personal experience and shows the discussed things on the running infrastructure."
Václav H.
"The lecturer knew the issue in depth and answered any question. He proceeded systematically when explaining and always left room for questions. So I have only words of praise :)"
Once upon a time, there lived a system administrator named Henry. He was a dedicated systems manager in a medium-sized company. He took care of his group of servers and knew everything about each of them. However, as the company grew, the number of servers Henry had to work with also increased.
Docker and Kubernetes are two different technologies that are often used together in the context of containerized application deployment and management.