Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Introduction

Welcome!

This guide is the one I wish I had when I set out to provision my Kubernetes cluster. It can be very difficult as a beginner to navigate the landscape where everything is modular and there’s several options for even the most basic things like storage and networking, and everyone just says “it depends” with no further context when asked which one to use. Sometimes, it’s useful to just have someone tell you what to use, so this is me, telling you what I use. You may like it, you may not, but hopefully it can give you something to go on.

I recommend taking this slow. Build a lab with virtual machines or unused PCs first and walk through this manual step by step. There is a lot involved in setting up your first Kube cluster, so please do yourself a favor and don’t skip sections until you get to the maintenance guide. If there is information you believe to be missing that can’t be found easily online, feel free to open an issue on the Github repo. I will only be covering the stack that I use. If you’d like to use your own stack, feel free to fork this repo, but the point of this is to give a set of good technologies that will fulfill the requirements of most homelab environments, not to explore every option in detail. Once the manual is complete, I would like to add a section that explores commonly-used components and how they differ, but I will only be covering the installation process for my chosen stack.

Work in progress

Please note that this guide is not finished. I am actively writing it to document how my new cluster is set up for disaster recovery purposes. There will be many sections that just say “TODO”. Please keep this in mind when reading.

Stack & Justification

TODO: comparisons

ComponentChosen TechnologyRequired for basic operation
Operating System (OS)Talos Linux✅️
Container Runtime Interface (CRI)Containerd✅️
Container Network Interface (CNI)Calico✅️
Load BalancerMetalLB❌️ (recommended)
Container Storage Interface (CSI)Rook (Ceph)✅️
Certificate managementCertManager❌️ (recommended)
Ingress / Gateway API controllerTraefik❌️ (recommended)
GitOpsFluxCD❌️ (recommended)
Postgres databasesCloud-Native Postgres (CNPG)❌️
Virtual machine managementKubeVirt❌️

Required Skills

Kubernetes is a beast, and should not be the first thing you go for when learning about server administration or cloud environments. This guide assumes you already have a solid foundation in the following areas:

  • Git
  • Linux System Administration
    • CLI
    • Disk management
    • Package management
    • Virtual machines
    • Certificate management (acme.sh, certbot, letsencrypt, or similar technologies)
  • Linux Containers (one of Docker, Podman, etc)
  • Networking Fundamentals
    • IP addressing
    • Subnetting
    • VLANs
    • Firewalls
    • Routing
    • DHCP
    • ARP

What to do if you’re not ready

You may be able to get by without expertise in some of these areas, but expect to do a lot of Googling and YouTube-watching. Covering all of these areas is out of scope for this manual, as it would balloon out of control and no longer be useful for me. I would recommend at least taking a Linux+ course (even if you don’t get the cert) before attempting to start this journey. It will help you immensely. It should give you at least a shallow set of knowledge on all of these areas and prepare you well for Kubernetes.

I recommend Shawn Powers’ Linux+ video courses on YouTube and CBTNuggets.