Recently Updated Pages
Lesson: Status, Add, Commit, Log
What you'll learn The everyday loop every developer repeats dozens of times a day: edit → status...
Lesson: Git's Mental Model
What you'll learn Why version control exists and what problems it solves on a real team. The fou...
Lessons on lab storage
Pick storage per workload. Shared app data → NFS. Databases → local disk on their own VM. One si...
Proving it actually works
Storage you haven't tested is a rumour. The check is a throwaway claim: kubectl apply -f - <<'YAM...
The CSI driver and the default StorageClass
A bare NFS export is static — you'd have to hand-create a PersistentVolume for every claim. The C...
The NFS server
A dedicated VM (K8s-NFS, 10.100.100.12) does one job: export a directory. K8s-NFS (10.100.100.12)...
Why NFS for cluster storage
Pods are disposable; their data shouldn't be. Kubernetes solves that with PersistentVolumes — sto...
Assignment 2: A safe backup/parameterised script
Goal: Write a robust, parameterised Bash script that backs up a directory into a timestamped comp...
Assignment 1: A system health-check script
Goal: Write a Bash script that inspects the machine it runs on — disk usage, free memory, and whe...
Lesson: Scripts You Can Trust
What you'll learn How set -euo pipefail turns silent failures into loud, safe ones. The quoting ...
Lesson: Loops, Arguments & Functions
What you'll learn How to repeat work with for and while loops. How to read arguments passed to y...
Lesson: Conditionals & Tests
What you'll learn How to branch your script with if, elif, and else. How to write tests with [[ ...
Lesson: Streams, Redirection & Exit Codes
What you'll learn The three standard streams every program has: stdin, stdout, and stderr. How t...
Lesson: Your First Bash Scripts
What you'll learn What a Bash script actually is, and how the "shebang" line tells Linux how to ...
Keeping workloads off the control plane
By default kubeadm puts a taint on the control-plane node: node-role.kubernetes.io/control-plane:...
The network layer: Calico, installed from a manifest
Kubernetes deliberately ships without a network. You choose a CNI plugin and install it. I used C...
Joining the workers (and the firewall that blocked them)
Each worker joins with the command kubeadm init printed: kubeadm join 10.100.100.7:6443 --token <...
Bootstrapping the control plane
With the master node prepped, one command brings the control plane to life: kubeadm init \ --ap...
Preparing the nodes
Before kubeadm will touch a machine, the machine has to be ready. The same prep runs on all four ...
Why kubeadm (and not k3s or a managed service)
There are easier ways to get a Kubernetes cluster. k3s is a single binary. A cloud provider will ...