| Getting Started & Local Clusters | 1.1 | Try K8s in a browser sandbox (Killercoda) |
| Getting Started & Local Clusters | 1.2 | Install kubectl (brew / dl.k8s.io), keep within ±1 minor |
| Getting Started & Local Clusters | 1.3 / 1.4 | minikube start, addons, docker-env, image load |
| Getting Started & Local Clusters | 1.5 | First app: create deployment + expose |
| Getting Started & Local Clusters | 1.6 | GUI: minikube dashboard → Headlamp / k9s |
| Getting Started & Local Clusters | 2.1 / 2.2 | kubeadm init/join + containerd + a CNI |
| Getting Started & Local Clusters | 2.3 – 2.6 | Release binaries, static Pods, kubelet under systemd |
| Getting Started & Local Clusters | 2.7 / 2.8 | Managed clusters: GKE, AKS (was ACS), EKS |
| Learning kubectl | 3.1 | get, short names, -A, api-resources |
| Learning kubectl | 3.2 | delete by name/label/file, cascades, finalizers |
| Learning kubectl | 3.3 | -w, watch, rollout status, kubectl wait |
| Learning kubectl | 3.4 | edit, set, patch, scale, and why edits drift |
| Learning kubectl | 3.5 | kubectl explain for field docs |
| Creating & Modifying Workloads | 4.1 | Deployment from the CLI |
| Creating & Modifying Workloads | 4.2 | apply -f file/dir/URL |
| Creating & Modifying Workloads | 4.3 | A Pod manifest from scratch |
| Creating & Modifying Workloads | 4.4 | A Deployment manifest (apps/v1) |
| Creating & Modifying Workloads | 4.5 | Rolling update, history, undo, restart |
| Services & Ingress | 5.1 | Expose a Deployment with a Service |
| Services & Ingress | 5.2 | Verify Service DNS |
| Services & Ingress | 5.3 | Change Service type (NodePort, LoadBalancer) |
| Services & Ingress | 5.4 | Install an Ingress controller |
| Services & Ingress | 5.5 | Ingress networking.k8s.io/v1 (+ Gateway API extra) |
| API, Namespaces & Labels | 6.1 | Discover API groups and versions |
| API, Namespaces & Labels | 6.2 | Anatomy of a manifest |
| API, Namespaces & Labels | 6.3 | Namespaces against name collisions |
| API, Namespaces & Labels | 6.4 | ResourceQuota + LimitRange |
| API, Namespaces & Labels | 6.5 / 6.6 | Labels and selectors |
| API, Namespaces & Labels | 6.7 | Annotations and change-cause |
| Creating & Modifying Workloads | 7.1 | Job (with TTL cleanup) |
| Creating & Modifying Workloads | 7.2 | CronJob batch/v1 |
| Creating & Modifying Workloads | 7.3 | DaemonSet per node |
| Creating & Modifying Workloads | 7.4 | StatefulSet + headless Service |
| Creating & Modifying Workloads | 7.5 | Init containers (+ native sidecars) |
| Volumes & Configuration | 8.1 | Share files via emptyDir |
| Volumes & Configuration | 8.2 | Secrets (and why base64 ≠ encryption) |
| Volumes & Configuration | 8.3 | ConfigMaps as env vars or files |
| Volumes & Configuration | 8.4 | Static PV + PVC |
| Volumes & Configuration | 8.5 / 8.6 | Dynamic provisioning with StorageClasses |
| Scaling | 9.1 | kubectl scale |
| Scaling | 9.2 / 9.3 | Node autoscaling (Cluster Autoscaler, Karpenter) |
| Scaling | 9.4 | HPA autoscaling/v2 (+ VPA extra) |
| Security | 10.1 | ServiceAccounts and bound tokens |
| Security | 10.2 | kubectl auth can-i, inspect roles |
| Security | 10.3 | Role + RoleBinding (least privilege) |
| Security | 10.4 | securityContext + Pod Security Admission (+ NetworkPolicy extra) |
| Monitoring & Logging | 11.1 | kubectl logs (incl. --previous) |
| Monitoring & Logging | 11.2 – 11.4 | Liveness, readiness, startup probes |
| Monitoring & Logging | 11.5 | metrics-server + kubectl top (was Heapster) |
| Monitoring & Logging | 11.6 | Prometheus via kube-prometheus-stack |
| Monitoring & Logging | 11.7 | Central logging (Fluent Bit → Loki/OpenSearch) |
| Maintenance & Troubleshooting | 12.1 | kubectl autocompletion |
| Services & Ingress | 12.2 | Relabel a Pod out of a Service |
| Services & Ingress | 12.3 | Reach a ClusterIP Service (port-forward, proxy) |
| Maintenance & Troubleshooting | 12.4 | Parse status with jsonpath and kubectl wait |
| Maintenance & Troubleshooting | 12.5 | Debug Pods (statuses table, kubectl debug) |
| Maintenance & Troubleshooting | 12.6 | cluster-info dump snapshot |
| Maintenance & Troubleshooting | 12.7 | Add worker nodes (kubelet, containerd, kube-proxy) |
| Maintenance & Troubleshooting | 12.8 | cordon/drain/uncordon + PDBs |
| Maintenance & Troubleshooting | 12.9 | etcd v3 snapshots |
| Extending Kubernetes | 13.1 / 13.2 | Build K8s from source (make WHAT=) |
| Extending Kubernetes | 13.3 | Python client |
| Extending Kubernetes | 13.4 | CRDs apiextensions.k8s.io/v1 (+ operators, admission extras) |
| Managing Manifests | 14.1 | Install Helm 3 (no Tiller) |
| Managing Manifests | 14.2 | Install charts, upgrade, rollback |
| Managing Manifests | 14.3 | Create and package your own chart |
| Managing Manifests | 14.4 | Compose → K8s with kompose (+ Kustomize, SSA, GitOps extras) |
| Extending Kubernetes | 14.5 | Clusters as code (kubicorn → Cluster API/eksctl) |
| Security | 14.6 | Encrypted Secrets in Git (Sealed Secrets, ESO, SOPS) |
| Extending Kubernetes | 14.7 | Functions (kubeless → Knative/OpenFaaS/KEDA) |
| Best Practices | BP Ch. 1–17 | The production checklist |