Welcome to the Kubernetes the Hard Way lab environment!
This playground is inspired by Kelsey Hightower's legendary tutorial of the same name...
... with one key difference: everything is already set up and ready for you to explore!
No need to manually provision VMs on a cloud provider or spend hours configuring each component from scratch.
The goal of this playground is to provide a learning environment for exploring and understanding the inner workings of a Kubernetes cluster.
The configuration and operational practices presented here are NOT recommended for production use.
People often say "don't try this at home" when they're doing something dangerous.
In this case, you should try this at home instead of at work.
Your production clusters will thank you for learning the hard way in a safe environment first! 😉
This lab environment provides the end result of Kelsey's tutorial: a fully functional, manually assembled Kubernetes cluster where every component runs as a systemd service (rather than as containers).
Instead of spending hours setting up cloud VMs and configuring each component, you can jump straight into exploring and learning from a working "hard way" cluster.
In addition to Kelsey's original tutorial setup, this lab also includes:
This cluster consists of multiple nodes running various Kubernetes components as systemd services. The architecture follows the traditional Kubernetes design, but with everything running on the host system rather than in containers.
The control plane runs the core Kubernetes services that manage cluster state and make scheduling decisions.
Control plane components
These components are essential for the control plane to function properly:
Component | Role |
---|---|
etcd | Distributed key-value store that holds all cluster data. |
kube-apiserver | The heart and soul of the Kubernetes control plane, exposing the Kubernetes API. |
kube-controller-manager | Manages various controllers that maintain the desired state of the cluster. |
kube-scheduler | Schedules Pods onto Nodes based on resource availability and other constraints. |
CoreDNS (optional) | Provides DNS resolution and service discovery for the cluster. |
Worker nodes run the actual workloads and provide the runtime environment for pods.
Worker node components
Component | Role |
---|---|
kubelet | Primary node agent that ensures containers are running in pods. |
Container Runtime (containerd) | Manages container creation, execution, and cleanup. |
Network addon (flannel) | Provides networking for pod-to-pod communication. |
kube-proxy | Network proxy that maintains network rules on nodes for service networking. |
systemctl status <service-name>
to see the health of each componentjournalctl -u <service-name>
to view detailed logs for troubleshootingHere's a fun fact: this manually assembled, systemd-managed Kubernetes cluster actually passes the sonobuoy conformance tests!
This means our "distribution" of Kubernetes could technically be submitted for official CNCF certification. Of course, we're not going to certify "Kubernetes the Hard Way on systemd" as an official distribution, but it's impressive that a cluster assembled entirely by hand can meet the same standards as enterprise-grade Kubernetes platforms.
This demonstrates that under the hood, Kubernetes is "just" a collection of well-designed, interoperable components.
So congratulations—you're playing with a (kinda) certified Kubernetes distribution! 🎉
Welcome to the Kubernetes the Hard Way lab environment!
This playground is inspired by Kelsey Hightower's legendary tutorial of the same name...
... with one key difference: everything is already set up and ready for you to explore!
No need to manually provision VMs on a cloud provider or spend hours configuring each component from scratch.
The goal of this playground is to provide a learning environment for exploring and understanding the inner workings of a Kubernetes cluster.
The configuration and operational practices presented here are NOT recommended for production use.
People often say "don't try this at home" when they're doing something dangerous.
In this case, you should try this at home instead of at work.
Your production clusters will thank you for learning the hard way in a safe environment first! 😉
This lab environment provides the end result of Kelsey's tutorial: a fully functional, manually assembled Kubernetes cluster where every component runs as a systemd service (rather than as containers).
Instead of spending hours setting up cloud VMs and configuring each component, you can jump straight into exploring and learning from a working "hard way" cluster.
In addition to Kelsey's original tutorial setup, this lab also includes:
This cluster consists of multiple nodes running various Kubernetes components as systemd services. The architecture follows the traditional Kubernetes design, but with everything running on the host system rather than in containers.
The control plane runs the core Kubernetes services that manage cluster state and make scheduling decisions.
Control plane components
These components are essential for the control plane to function properly:
Component | Role |
---|---|
etcd | Distributed key-value store that holds all cluster data. |
kube-apiserver | The heart and soul of the Kubernetes control plane, exposing the Kubernetes API. |
kube-controller-manager | Manages various controllers that maintain the desired state of the cluster. |
kube-scheduler | Schedules Pods onto Nodes based on resource availability and other constraints. |
CoreDNS (optional) | Provides DNS resolution and service discovery for the cluster. |
Worker nodes run the actual workloads and provide the runtime environment for pods.
Worker node components
Component | Role |
---|---|
kubelet | Primary node agent that ensures containers are running in pods. |
Container Runtime (containerd) | Manages container creation, execution, and cleanup. |
Network addon (flannel) | Provides networking for pod-to-pod communication. |
kube-proxy | Network proxy that maintains network rules on nodes for service networking. |
systemctl status <service-name>
to see the health of each componentjournalctl -u <service-name>
to view detailed logs for troubleshootingHere's a fun fact: this manually assembled, systemd-managed Kubernetes cluster actually passes the sonobuoy conformance tests!
This means our "distribution" of Kubernetes could technically be submitted for official CNCF certification. Of course, we're not going to certify "Kubernetes the Hard Way on systemd" as an official distribution, but it's impressive that a cluster assembled entirely by hand can meet the same standards as enterprise-grade Kubernetes platforms.
This demonstrates that under the hood, Kubernetes is "just" a collection of well-designed, interoperable components.
So congratulations—you're playing with a (kinda) certified Kubernetes distribution! 🎉
Pro Tip: Install iximiuz Labs CLI to start playgrounds and SSH into them from your favorite local terminal:
curl -sf https://labs.iximiuz.com/cli/install.sh | sh