k8s workshops
- Description
- Curriculum
- FAQ
- Announcement
- Reviews
![k8sworkshops](https://i0.wp.com/oncloudnative.com/wp-content/uploads/2021/08/k8sworkshops.jpg?resize=496%2C349&ssl=1)
Harness Kubernetes’ extensibility to deploy modern patterns and learn to effectively handle production issues
Key Features
- Build and run efficient cloud-native applications on Kubernetes using industry best practices
- Operate Kubernetes in a production environment, troubleshoot clusters, and address security concerns
- Deploy cutting-edge Kubernetes patterns such as service mesh and serverless to your cluster
Description
Kubernetes is a modern cloud native container orchestration tool and one of the most popular open source projects worldwide. In addition to the technology being powerful and highly flexible, Kubernetes engineers are in high demand across the industry.
This course is a comprehensive guide to deploying, securing, and operating modern cloud native applications on Kubernetes. From the fundamentals to Kubernetes best practices, this training covers essential aspects of configuring applications. You’ll even explore real-world techniques for running clusters in production, tips for setting up observability for cluster resources, and valuable troubleshooting techniques. Finally, you’ll learn how to extend and customize Kubernetes, as well as gaining tips for deploying service meshes, serverless tooling, and more on your cluster.
By the end of this Kubernetes course, you’ll be equipped with the tools you need to confidently run and extend modern applications on Kubernetes.
What you will learn
- Set up Kubernetes and configure its authentication
- Deploy your applications to Kubernetes
- Configure and provide storage to Kubernetes applications
- Expose Kubernetes applications outside the cluster
- Control where and how applications are run on Kubernetes
- Set up observability for Kubernetes
- Build a continuous integration and continuous deployment (CI/CD) pipeline for Kubernetes
- Extend Kubernetes with service meshes, serverless, and more
Intended Audience
This Learning Path is intended specifically for Docker and Kubernetes application developers. Anyone interested in learning how to work with Kubernetes will also benefit from this Learning Path.
Prerequisites
A solid understanding of containers, and Docker in particular, will be of value. If you are not comfortable with Docker and Kubernetes , you are encouraged to complete the Docker and Kubernetes Learning Path.This Learning path helps you to learn from fundamentals to advanced Docker and Kubernetes running on Linux machines. You should be comfortable working with basic Linux commands.
Additional Documentation
-
1The Evolution of Software Development
-
2Virtual Machines versus Containers
-
3Docker Basics
-
4What's behind docker run?
-
5Dockerfiles and Docker Images
-
6Creating a Docker Image and Uploading It to Docker Hub
-
7Running Your First Application in Docker
-
8The Essence of Linux Container Technology
-
9Namespace
-
10Joining a Container to the Network Namespace of Another Container
-
11Cgroups
-
12Containerization: The Mindset Change
-
13Several Applications in One Container
-
14One Application in One Container
-
15A Comparison of These Approaches
-
16The Need for Container Orchestration
-
17Container Interactions
-
18Network and Storage
-
19Resource Management and Scheduling
-
20Failover and Recovery
-
21Scalability
-
22Service Exposure
-
23Delivery Pipeline
-
24Orchestrator: Putting All the Things Together
-
25Welcome to the Kubernetes World
-
26Creating a Simple Page Count Application
-
27Setting up Kubernetes
-
28An Overview of Minikube
-
29Getting Started with Minikube and Kubernetes Clusters
-
30Kubernetes Components Overview
-
31etcd
-
32API Server
-
33Scheduler
-
34Controller Manager
-
35Where Is the kubelet?
-
36kube-proxy
-
37Kubernetes Architecture
-
38Container Network Interface
-
39Migrating Containerized Application to Kubernetes
-
40Pod Specification
-
41Applying a YAML Manifest
-
42Running a Pod in Kubernetes
-
43Service Specification
-
44Accessing a Pod via a Service
-
45Services and Pods
-
46Delivering Kubernetes-Native Applications
-
47Scaling a Kubernetes Application
-
48Pod Life Cycle and Kubernetes Components
-
49How Kubernetes Manages a Pod's Life Cycle
-
50Running the Pageview App in Kubernetes
-
51A Glimpse into the Advantages of Kubernetes for Multi-Node Clusters
-
52How kubectl Communicates with Kubernetes
-
53Setting up Environments with Autocompletion and Shortcuts
-
54Setting up Autocompletion
-
55Setting up the kubeconfig Configuration File
-
56Common kubectl Commands
-
57Frequently Used kubectl Commands to Create, Manage, and Delete Kubernetes Objects
-
58Walkthrough of Some Simple kubectl Commands
-
59Some Useful Flags for the get Command
-
60Populating Deployments in Kubernetes
-
61Creating a Deployment
-
62Updating a Deployment
-
63Deleting a Deployment
-
64Editing a Live Deployment for a Real-Life Application
-
65The Kubernetes API Server
-
66Kubernetes HTTP Request Flow
-
67Authentication
-
68Authorization
-
69Admission Control
-
70Starting Minikube with a Custom Set of Modules
-
71Validation
-
72The Kubernetes API
-
73Tracing kubectl HTTP Requests
-
74API Resource Type
-
75Scope of API Resources
-
76Namespace-Scoped Resources
-
77Cluster-Scoped Resources
-
78API Groups
-
79Core Group
-
80Named Group
-
81System-Wide
-
82API Versions
-
83Getting Information about API Resources
-
84How to Enable/Disable API Resources, Groups, or Versions
-
85Enabling and Disabling API Groups and Versions on a Minikube Cluster
-
86Interacting with Clusters Using the Kubernetes API
-
87Accessing the Kubernetes API Server Using kubectl as a Proxy
-
88Creating Objects Using curl
-
89Creating and Verifying a Deployment Using kubectl proxy and curl
-
90Direct Access to the Kubernetes API Using Authentication Credentials
-
91Method 1: Using Client Certificate Authentication
-
92Method 2: Using a ServiceAccount Bearer Token
-
93Creating a Deployment Using a ServiceAccount Identity
-
94Pod Configuration
-
95Creating a Pod with a Single Container
-
96Name
-
97Namespace
-
98Creating a Pod in a Different Namespace by Specifying the Namespace in the CLI
-
99Creating a Pod in a Different Namespace by Specifying the Namespace in the Pod Configuration YAML file
-
100Changing the Namespace for All Subsequent kubectl Commands
-
101Node
-
102Status
-
103Containers
-
104Using CLI Commands to Create a Pod Running a Container
-
105Creating a Pod Running a Container That Exposes a Port
-
106Creating a Pod Running a Container with Resource Requirements
-
107Creating a Pod with Resource Requests That Can't Be Met by Any of the Nodes
-
108Creating a Pod with Multiple Containers Running inside It
-
109Life Cycle of a Pod
-
110Phases of a Pod
-
111Probes/Health Checks
-
112Types of Probes
-
113Liveness Probe
-
114Readiness Probe
-
115Configuration of Probes
-
116Implementation of Probes
-
117Command Probe
-
118HTTP Request Probe
-
119TCP Socket Probe
-
120Restart Policy
-
121Creating a Pod Running a Container with a Liveness Probe and No Restart Policy
-
122Creating a Pod Running a Container with a Liveness Probe and a Restart Policy
-
123Creating a Pod Running a Container with a Readiness Probe
-
124Best Practices While Using Probes
-
125Deploying an Application in a Pod
-
126Labels
-
127Constraints for Labels
-
128Label Keys
-
129Label Values
-
130Why Do We Need Labels?
-
131Organizing Pods by Organization/Team/Project
-
132Running Selective Pods on Specific Nodes
-
133Creating a Pod with Labels
-
134Adding Labels to a Running Pod
-
135Modifying And/Or Deleting Existing Labels for a Running Pod
-
136Selecting Kubernetes Objects Using Label Selectors
-
137Equality-Based Selectors
-
138Selecting Pods Using Equality-Based Label Selectors
-
139Set-Based Selectors
-
140Selecting Pods Using Set-Based Label Selectors
-
141Selecting Pods Using a Mix of Label Selectors
-
142Annotations
-
143Constraints for Annotations
-
144Annotation Keys
-
145Annotation Values
-
146Use Case for Annotations
-
147Adding Annotations to Help with Application Debugging
-
148Working with Annotations
-
149Creating Pods with Labels/Annotations and Grouping Them as per Given Criteria
-
150ReplicaSets
-
151ReplicaSet Configuration
-
152Replicas
-
153Pod Template
-
154Pod Selector
-
155Creating a Simple ReplicaSet with nginx Containers
-
156Labels on the ReplicaSet
-
157Selectors for the ReplicaSet
-
158Pods Status
-
159Pods Template
-
160Events
-
161Deleting Pods Managed by a ReplicaSet
-
162Creating a ReplicaSet Given That a Matching Pod Already Exists
-
163Scaling a ReplicaSet after It Is Created
-
164Deployment
-
165Deployment Configuration
-
166Strategy
-
167Creating a Simple Deployment with Nginx Containers
-
168Labels and Annotations on the Deployment
-
169Selectors for the Deployment
-
170Replicas
-
171Rolling Back a Deployment
-
172Rolling Back a Deployment
-
173StatefulSets
-
174StatefulSet Configuration
-
175Use Cases for StatefulSets
-
176DaemonSets
-
177Use Cases for DaemonSets
-
178DaemonSet Configuration
-
179Jobs
-
180Job Configuration
-
181A Use Case for Jobs in Machine Learning
-
182Creating a Simple Job That Finishes in Finite Time
-
183Creating a Deployment Running an Application
-
184Service
-
185Service Configuration
-
186Types of Services
-
187NodePort Service
-
188Creating a Simple NodePort Service with Nginx Containers
-
189ClusterIP Service
-
190Service Configuration
-
191Creating a Simple ClusterIP Service with Nginx Containers
-
192Choosing a Custom IP Address for the Service
-
193Creating a ClusterIP Service with a Custom IP
-
194LoadBalancer Service
-
195ExternalName Service
-
196Ingress
-
197Creating a Service to Expose the Application Running on a Pod
-
198Volumes
-
199How to Use Volumes
-
200Defining Volumes
-
201Mounting Volumes
-
202Types of Volumes
-
203emptyDir
-
204hostPath
-
205Creating a Pod with an emptyDir Volume
-
206Creating a Pod with an emptyDir Volume Shared by Three Containers
-
207Persistent Volumes
-
208PersistentVolume Configuration
-
209storageClassName
-
210capacity
-
211volumeMode
-
212accessModes
-
213persistentVolumeReclaimPolicy
-
214PV Status
-
215PersistentVolumeClaim Configuration
-
216storageClassName
-
217resources
-
218volumeMode
-
219accessMode
-
220selectors
-
221How to Use Persistent Volumes
-
222Step 1 – Provisioning the Volume
-
223Step 2 – Binding the Volume to a Claim
-
224Step 3 – Using the Claim
-
225Creating a Pod That Uses PersistentVolume for Storage
-
226Dynamic Provisioning
-
227Creating a Pod That Uses a Dynamically Provisioned PersistentVolume
-
228What Is a ConfigMap?
-
229Creating a ConfigMap from Literal Values and Mounting It on a Pod Using Environment Variables
-
230Defining a ConfigMap from a File and Loading It onto a Pod
-
231Creating a ConfigMap from a File
-
232Creating a ConfigMap from a Folder
-
233What Is a Secret?
-
234Secret versus ConfigMap
-
235Defining a Secret from Literal Values and Loading the Values onto the Pod as an Environment Variable
-
236Defining a Secret from a File and Loading the Values onto the Pod as a File
-
237Creating a TLS Secret
-
238Creating a docker-registry Secret
-
239Using a ConfigMap and Secret to Promote an Application through Different Stages
-
240How the Components of Kubernetes Work Together to Achieve High Availability
-
241etcd
-
242Networking and DNS
-
243Nodes' and Master Servers' Locations and Resources
-
244Container Network Interface and Cluster DNS
-
245Container Runtime Interfaces
-
246Container Storage Interfaces
-
247Building a High-Availability Focused Kubernetes Cluster
-
248Self-Managed versus Vendor-Managed Kubernetes Solutions
-
249kops
-
250Other Commonly Used Tools
-
251Authentication and Identity in Kubernetes
-
252Setting up Our Kubernetes Cluster
-
253Kubernetes Service Accounts
-
254Deploying an Application on Our HA Cluster
-
255Testing the Resilience of a Highly Available Cluster
-
256Deleting Our Cluster
-
257An Overview of Infrastructure Life Cycle Management
-
258Terraform
-
259Creating an S3 Bucket with Terraform
-
260Creating a Cluster with EKS Using Terraform
-
261Kubernetes Ingress
-
262Highly Available Applications Running on Top of Kubernetes
-
263Deploying a Multi-Replica Non-HA Application in Kubernetes
-
264Working with Stateful Applications
-
265The CI/CD Pipeline
-
266Deploying an Application with State Management
-
267Expanding the State Management of Our Application
-
268Threat Modeling
-
269The 4Cs of Cloud Native Security
-
270Cluster Security
-
271Kubernetes RBAC
-
272Role
-
273RoleBinding
-
274RoleBinding ClusterRole
-
275ClusterRoleBinding
-
276Some Important Notes about RBAC Policies
-
277ServiceAccount
-
278Creating a Kubernetes RBAC ClusterRole
-
279NetworkPolicies
-
280Creating a NetworkPolicy
-
281PodSecurityPolicy
-
282Creating and Testing a PodSecurityPolicy
-
283Securing Our App
-
284Stateful Apps
-
285Understanding StatefulSets
-
286Deployments versus StatefulSets
-
287Further Refactoring Our Application
-
288Deploying a Counter App with a MySQL Backend
-
289Testing the Resilience of StatefulSet Data in PersistentVolumes
-
290Helm
-
291Chart-ifying Our Redis-Based Counter Application
-
292Chart-ifying Our StatefulSet Deployment
-
293Kubernetes Monitoring
-
294Kubernetes Metrics API/Metrics Server
-
295Prometheus
-
296Grafana
-
297Monitoring Your Applications
-
298Setting up the Metrics Server and Observing Kubernetes Objects
-
299Autoscaling in Kubernetes
-
300HorizontalPodAutoscaler
-
301Scaling Workloads in Kubernetes
-
302ClusterAutoscaler
-
303Configuring the ClusterAutoscaler
-
304Autoscaling Our Cluster Using ClusterAutoscaler
-
305Deleting Your Cluster Resources
-
306How Admission Controllers Work
-
307Creating Controllers with Custom Logic
-
308The Mutating Admission Webhook
-
309The Validating Admission Webhook
-
310How a Webhook Works
-
311Modifying a ConfigMap Object through a Patch
-
312Guidelines for Building a Mutating Admission WebHook
-
313Deploying a Webhook
-
314Configuring the Webhook to Work with Kubernetes
-
315How to Encode a Certificate in Base64 Format
-
316Creating a Mutating Webhook That Adds an Annotation to a Pod
-
317Validating a Webhook
-
318Coding a Simple Validating WebHook
-
319Creating a Validating Webhook That Checks for a Label in a Pod
-
320Controlling the Effect of a Webhook on Selected Namespaces
-
321Creating a Validating Webhook with the Namespace Selector Defined
-
322The Kubernetes Scheduler
-
323The Pod Scheduling Process
-
324Filtering
-
325Scoring
-
326Assigning
-
327Timeline of Pod Scheduling
-
328Managing the Kubernetes Scheduler
-
329Node Affinity and Anti-Affinity
-
330Running a Pod with Node Affinity
-
331Pod Affinity and Anti-Affinity
-
332Running Pods with Pod Affinity
-
333Pod Priority
-
334Taints and Tolerations
-
335Pod Priority and Preemption
-
336Taints and Tolerations
-
337Taints and Tolerations
-
338Using a Custom Kubernetes Scheduler
-
339Configuring a Kubernetes Scheduler to Schedule Pods
-
340The Need to Upgrade Your Kubernetes Cluster
-
341Kubernetes Components – Refresher
-
342A Word of Caution
-
343The Upgrade Process
-
344Some Considerations for kops
-
345An overview of the Upgrade Process
-
346The Importance of Automation
-
347Backing up the etcd Datastore
-
348Taking a Snapshot of the etcd Datastore
-
349Draining a Node and Making It Non-Schedulable
-
350Draining All the Pods from the Nodes
-
351Upgrading Kubernetes Master Components
-
352Upgrading Kubernetes Master Components
-
353Upgrading Kubernetes Worker Nodes
-
354Upgrading the Worker Nodes
-
355Upgrading the Kubernetes Platform from Version 1.15.7 to 1.15.10
-
356What Is a Custom Controller?
-
357The Relationship between a CRD, a CR, and a Controller
-
358Standard Kubernetes API Resources
-
359Why We Need Custom Resources?
-
360Example Use Case 1
-
361Example Use Case 2
-
362Example Use Case 3
-
363How Our Custom Resources Are Defined
-
364apiVersion
-
365kind
-
366spec
-
367namespaceName and podLiveForThisMinutes
-
368The Definition of a CRD
-
369Defining a CRD
-
370Defining a CR Using a CRD
-
371Writing the Custom Controller
-
372The Components of the Custom Controller
-
373CRD and Custom Controller in Action
-
374Adding Data to Our Custom Resource
-
375Adding Custom Information to the CR List Command
Coming Soon