kelseyhightower/kubernetes-the-hard-wayPublic

Bootstrap Kubernetes the hard way. No scripts.

AI summary: A step-by-step tutorial for bootstrapping a Kubernetes cluster manually to understand its internal components.

Stars
50.3K
+15 today
Forks
15.9K
Watchers
951
Open issues
29
Open PRs
27
Contributors
~61
Commits
296
Branches
5

Apache-2.0Created Jul 7, 2016Last push 1y ago+155 stars this week+155 this month

Quick answers

What is kubernetes-the-hard-way?
A step-by-step tutorial for bootstrapping a Kubernetes cluster manually to understand its internal components.
What does kubernetes-the-hard-way do?
This project provides a comprehensive, manual tutorial for setting up a Kubernetes cluster from scratch without the use of automated provisioning scripts. It guides users through every low-level task required to configure certificates, etcd, control plane nodes, and worker nodes. The deliberate 'hard way' approach ensures the learner interacts directly with the underlying infrastructure and configuration files. It is specifically optimized for learning rather than producing a production-ready environment. By avoiding automation magic, it exposes the complex interactions between different Kubernetes subsystems.
Who is kubernetes-the-hard-way for?
System administrators, DevOps engineers, and technical professionals wanting a deep understanding of Kubernetes architecture. It is designed for learners who already have experience with Linux command-line tools and basic networking concepts.
How do I get started with kubernetes-the-hard-way?
https://github.com/kelseyhightower/kubernetes-the-hard-way
How popular is kubernetes-the-hard-way on GitHub?
kelseyhightower/kubernetes-the-hard-way has 50,266 stars and 15,932 forks on GitHub, and gained 155 stars in the last 7 days.
What license does kubernetes-the-hard-way use?
kelseyhightower/kubernetes-the-hard-way is released under the Apache-2.0 license.

Star history

since Jul 3, 2016
020K40KJul 2016Nov 2019Apr 2023Oct 2026
50.3K stars as of Oct 4, 2026. Before Sep 25, 2026, reconstructed from public GitHub event archives (checked against the repository's real star total); since then measured daily.

Contribution activity

commits per day, last 52 weeks

Signals and awards

derived from tracked data
  • Landmark project

    50,266 stars

  • Battle-tested

    10 years of history

  • Permissive license

    Apache-2.0

What kubernetes-the-hard-way does

This project provides a comprehensive, manual tutorial for setting up a Kubernetes cluster from scratch without the use of automated provisioning scripts. It guides users through every low-level task required to configure certificates, etcd, control plane nodes, and worker nodes. The deliberate 'hard way' approach ensures the learner interacts directly with the underlying infrastructure and configuration files. It is specifically optimized for learning rather than producing a production-ready environment. By avoiding automation magic, it exposes the complex interactions between different Kubernetes subsystems.

System administrators, DevOps engineers, and technical professionals wanting a deep understanding of Kubernetes architecture. It is designed for learners who already have experience with Linux command-line tools and basic networking concepts.

  • Manual bootstrapping: requires the user to execute every configuration step by hand rather than using scripts.
  • Component breakdown: isolates the setup of individual services like etcd, the API server, and kubelets.
  • Security configuration: guides users through generating and distributing TLS certificates for secure internal communication.
  • Infrastructure neutral: focuses on core principles that apply regardless of the specific cloud provider or hardware.
  • Deep dive learning: prioritizes educational value over speed, forcing users to understand the underlying mechanics.

Where teams use it

Learning Kubernetes internals

Systems engineers complete the tutorial to understand how the control plane and worker nodes interact under the hood.

Troubleshooting clusters

DevOps professionals build clusters manually to better diagnose issues when automated deployment tools fail.

Preparing for certification

Candidates study the manual steps to gain the deep knowledge required for the Certified Kubernetes Administrator exam.

Designing custom infrastructure

Platform architects review the raw configuration requirements to design bespoke orchestration environments.

Getting started: https://github.com/kelseyhightower/kubernetes-the-hard-way

README

master branch

Kubernetes The Hard Way

This tutorial walks you through setting up Kubernetes the hard way. This guide is not for someone looking for a fully automated tool to bring up a Kubernetes cluster. Kubernetes The Hard Way is optimized for learning, which means taking the long route to ensure you understand each task required to bootstrap a Kubernetes cluster.

The results of this tutorial should not be viewed as production ready, and may receive limited support from the community, but don't let that stop you from learning!

Copyright

Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

Target Audience

The target audience for this tutorial is someone who wants to understand the fundamentals of Kubernetes and how the core components fit together.

Cluster Details

Kubernetes The Hard Way guides you through bootstrapping a basic Kubernetes cluster with all control plane components running on a single node, and two worker nodes, which is enough to learn the core concepts.

Component versions:

Labs

This tutorial requires four (4) ARM64 or AMD64 based virtual or physical machines connected to the same network.

View on GitHub

Recent activity

commits and pull requests

Commits per week

last 52 weeks

When work happens

weekday and hour
SunMonTueWedThuFriSat036912151821Sun 0:00 — 1 commitsSun 1:00 — 1 commitsSun 2:00 — 2 commitsSun 3:00 — 6 commitsSun 4:00 — 2 commitsSun 5:00 — 5 commitsSun 6:00 — 2 commitsSun 7:00 — 8 commitsSun 8:00 — 3 commitsSun 9:00 — 1 commitsSun 10:00 — 2 commitsSun 11:00 — 1 commitsSun 12:00 — 0 commitsSun 13:00 — 2 commitsSun 14:00 — 0 commitsSun 15:00 — 1 commitsSun 16:00 — 0 commitsSun 17:00 — 0 commitsSun 18:00 — 1 commitsSun 19:00 — 3 commitsSun 20:00 — 1 commitsSun 21:00 — 1 commitsSun 22:00 — 1 commitsSun 23:00 — 2 commitsMon 0:00 — 0 commitsMon 1:00 — 1 commitsMon 2:00 — 0 commitsMon 3:00 — 0 commitsMon 4:00 — 0 commitsMon 5:00 — 0 commitsMon 6:00 — 4 commitsMon 7:00 — 3 commitsMon 8:00 — 0 commitsMon 9:00 — 2 commitsMon 10:00 — 0 commitsMon 11:00 — 1 commitsMon 12:00 — 1 commitsMon 13:00 — 0 commitsMon 14:00 — 3 commitsMon 15:00 — 0 commitsMon 16:00 — 0 commitsMon 17:00 — 2 commitsMon 18:00 — 2 commitsMon 19:00 — 1 commitsMon 20:00 — 1 commitsMon 21:00 — 0 commitsMon 22:00 — 0 commitsMon 23:00 — 0 commitsTue 0:00 — 0 commitsTue 1:00 — 0 commitsTue 2:00 — 0 commitsTue 3:00 — 0 commitsTue 4:00 — 0 commitsTue 5:00 — 7 commitsTue 6:00 — 3 commitsTue 7:00 — 4 commitsTue 8:00 — 1 commitsTue 9:00 — 1 commitsTue 10:00 — 1 commitsTue 11:00 — 1 commitsTue 12:00 — 0 commitsTue 13:00 — 1 commitsTue 14:00 — 4 commitsTue 15:00 — 1 commitsTue 16:00 — 1 commitsTue 17:00 — 0 commitsTue 18:00 — 0 commitsTue 19:00 — 1 commitsTue 20:00 — 0 commitsTue 21:00 — 0 commitsTue 22:00 — 0 commitsTue 23:00 — 1 commitsWed 0:00 — 0 commitsWed 1:00 — 0 commitsWed 2:00 — 0 commitsWed 3:00 — 0 commitsWed 4:00 — 0 commitsWed 5:00 — 0 commitsWed 6:00 — 0 commitsWed 7:00 — 0 commitsWed 8:00 — 0 commitsWed 9:00 — 0 commitsWed 10:00 — 0 commitsWed 11:00 — 0 commitsWed 12:00 — 0 commitsWed 13:00 — 2 commitsWed 14:00 — 1 commitsWed 15:00 — 1 commitsWed 16:00 — 0 commitsWed 17:00 — 0 commitsWed 18:00 — 0 commitsWed 19:00 — 1 commitsWed 20:00 — 1 commitsWed 21:00 — 0 commitsWed 22:00 — 1 commitsWed 23:00 — 1 commitsThu 0:00 — 0 commitsThu 1:00 — 0 commitsThu 2:00 — 1 commitsThu 3:00 — 0 commitsThu 4:00 — 0 commitsThu 5:00 — 0 commitsThu 6:00 — 0 commitsThu 7:00 — 11 commitsThu 8:00 — 6 commitsThu 9:00 — 1 commitsThu 10:00 — 2 commitsThu 11:00 — 4 commitsThu 12:00 — 5 commitsThu 13:00 — 10 commitsThu 14:00 — 14 commitsThu 15:00 — 15 commitsThu 16:00 — 0 commitsThu 17:00 — 2 commitsThu 18:00 — 0 commitsThu 19:00 — 3 commitsThu 20:00 — 0 commitsThu 21:00 — 0 commitsThu 22:00 — 0 commitsThu 23:00 — 1 commitsFri 0:00 — 1 commitsFri 1:00 — 0 commitsFri 2:00 — 0 commitsFri 3:00 — 0 commitsFri 4:00 — 5 commitsFri 5:00 — 0 commitsFri 6:00 — 0 commitsFri 7:00 — 0 commitsFri 8:00 — 1 commitsFri 9:00 — 1 commitsFri 10:00 — 6 commitsFri 11:00 — 4 commitsFri 12:00 — 0 commitsFri 13:00 — 1 commitsFri 14:00 — 1 commitsFri 15:00 — 2 commitsFri 16:00 — 10 commitsFri 17:00 — 17 commitsFri 18:00 — 1 commitsFri 19:00 — 0 commitsFri 20:00 — 4 commitsFri 21:00 — 2 commitsFri 22:00 — 0 commitsFri 23:00 — 0 commitsSat 0:00 — 3 commitsSat 1:00 — 0 commitsSat 2:00 — 0 commitsSat 3:00 — 0 commitsSat 4:00 — 0 commitsSat 5:00 — 0 commitsSat 6:00 — 0 commitsSat 7:00 — 0 commitsSat 8:00 — 2 commitsSat 9:00 — 6 commitsSat 10:00 — 1 commitsSat 11:00 — 5 commitsSat 12:00 — 2 commitsSat 13:00 — 1 commitsSat 14:00 — 2 commitsSat 15:00 — 0 commitsSat 16:00 — 3 commitsSat 17:00 — 1 commitsSat 18:00 — 5 commitsSat 19:00 — 5 commitsSat 20:00 — 5 commitsSat 21:00 — 0 commitsSat 22:00 — 2 commitsSat 23:00 — 5 commits
Commit volume by weekday and hour (UTC). Larger dots mean more commits.
DateListRankStars gained
Sep 26, 2026daily#8+105
Sep 25, 2026daily#8+105
  • sindresorhus/awesome

    😎 Awesome lists about all kinds of interesting topics [NOTE: Pull requests are temporarily disabled until I have a chance to catch up with the existing ones]

    514.6K stars

  • jwasham/coding-interview-university

    A complete computer science study plan to become a software engineer.

    362.3K stars

  • awesome-selfhosted/awesome-selfhosted

    A list of Free Software network services and web applications which can be hosted on your own servers

    323.8K stars

  • trimstray/the-book-of-secret-knowledge

    A collection of inspiring lists, manuals, cheatsheets, blogs, hacks, one-liners, cli/web tools and more.

    247.8K stars

  • multica-ai/andrej-karpathy-skills

    A single CLAUDE.md file to improve Claude Code behavior, derived from Andrej Karpathy's observations on LLM coding pitfalls.

    216.8K stars

  • x1xhlol/system-prompts-and-models-of-ai-tools

    FULL Augment Code, Claude Code, Cluely, CodeBuddy, Comet, Cursor, Devin AI, Junie, Kiro, Leap.new, Lovable, Manus, NotionAI, Orchids.app, Perplexity, Poke, Qoder, Replit, Same.dev, Trae, Traycer AI, VSCode Agent, Warp.dev, Windsurf, Xcode, Z.ai Code, Dia & v0. (And other Open Sourced) System Prompts, Internal Tools & AI Models

    144K stars