{"adoption": {"forks": 15836, "observed_at": "2026-08-28T04:12:11.638770+00:00", "stars": 49554}, "canonical_url": "https://ross.abutalabs.com/products/kubernetes-the-hard-way", "card": {"archived": false, "artifact_type": "learning-resource", "description": "Bootstrap Kubernetes the hard way. No scripts.", "domain": ["tutorials", "cloud-computing"], "enriched": true, "function": ["documentation", "container-orchestration", "developer-tools"], "health_score": 29, "homepage": null, "language": null, "license": "Apache-2.0", "license_family": "permissive", "maturity": "active", "member_repos": ["kelseyhightower/kubernetes-the-hard-way"], "name": "kelseyhightower/kubernetes-the-hard-way", "platform": ["cloud", "self-hosted"], "pushed_at": "2025-04-10T06:11:47+00:00", "repo": "kelseyhightower/kubernetes-the-hard-way", "stars": 49554, "tags": ["kubernetes", "tutorial", "education", "hands-on-labs", "tls-certificates", "etcd", "containerd", "containers", "devops", "linux"], "topics": [], "urls": [], "use_cases": ["learn how kubernetes works under the hood", "manually bootstrap a kubernetes cluster step by step", "understand kubernetes control plane components", "generate TLS certificates for a kubernetes cluster", "set up etcd and containerd for kubernetes", "study for kubernetes administrator certification", "understand how kubeadm and managed clusters work internally"], "what_it_is": "A step-by-step tutorial that walks learners through manually bootstrapping a Kubernetes cluster from scratch, with no automation scripts. It is optimized for understanding how Kubernetes core components like etcd, the control plane, and worker nodes fit together.", "when_to_avoid": ["you need a production-ready cluster quickly", "you want automated cluster provisioning with tools like kubeadm, kops, or a managed service", "you need community support for the resulting cluster", "you only have a single machine and cannot provision several VMs"], "when_to_choose": ["you want deep understanding of Kubernetes internals rather than a quick cluster", "you are preparing for CKA or similar Kubernetes certifications", "you learn best by doing each step manually", "you want to see how certificates, etcd, and control plane components connect"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/kubernetes-the-hard-way", "repo": "kelseyhightower/kubernetes-the-hard-way", "role": "main", "score": 39}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:12:11.638770+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T16:20:11.816756+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2a6676b5aeb4f965b9d2bb80aeed8323d019dc5ae49f266199add002629cb298", "fetched_at": "2026-08-28T04:12:11.638770+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kelseyhightower/kubernetes-the-hard-way"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:12:11.638770+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T16:20:11.816756+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2a6676b5aeb4f965b9d2bb80aeed8323d019dc5ae49f266199add002629cb298", "fetched_at": "2026-08-28T04:12:11.638770+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kelseyhightower/kubernetes-the-hard-way"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T16:20:11.816756+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2a6676b5aeb4f965b9d2bb80aeed8323d019dc5ae49f266199add002629cb298", "fetched_at": "2026-08-28T04:12:11.638770+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kelseyhightower/kubernetes-the-hard-way"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:12:11.638770+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:12:11.638770+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:12:11.638770+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T16:20:11.816756+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2a6676b5aeb4f965b9d2bb80aeed8323d019dc5ae49f266199add002629cb298", "fetched_at": "2026-08-28T04:12:11.638770+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kelseyhightower/kubernetes-the-hard-way"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:12:11.638770+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:12:11.638770+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T16:20:11.816756+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2a6676b5aeb4f965b9d2bb80aeed8323d019dc5ae49f266199add002629cb298", "fetched_at": "2026-08-28T04:12:11.638770+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kelseyhightower/kubernetes-the-hard-way"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:12:11.638770+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:12:11.638770+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:12:11.638770+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T16:20:11.816756+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2a6676b5aeb4f965b9d2bb80aeed8323d019dc5ae49f266199add002629cb298", "fetched_at": "2026-08-28T04:12:11.638770+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kelseyhightower/kubernetes-the-hard-way"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:12:11.638770+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:12:11.638770+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T16:20:11.816756+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2a6676b5aeb4f965b9d2bb80aeed8323d019dc5ae49f266199add002629cb298", "fetched_at": "2026-08-28T04:12:11.638770+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kelseyhightower/kubernetes-the-hard-way"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T16:20:11.816756+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2a6676b5aeb4f965b9d2bb80aeed8323d019dc5ae49f266199add002629cb298", "fetched_at": "2026-08-28T04:12:11.638770+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kelseyhightower/kubernetes-the-hard-way"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T16:20:11.816756+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2a6676b5aeb4f965b9d2bb80aeed8323d019dc5ae49f266199add002629cb298", "fetched_at": "2026-08-28T04:12:11.638770+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kelseyhightower/kubernetes-the-hard-way"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T16:20:11.816756+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2a6676b5aeb4f965b9d2bb80aeed8323d019dc5ae49f266199add002629cb298", "fetched_at": "2026-08-28T04:12:11.638770+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kelseyhightower/kubernetes-the-hard-way"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 15, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": ["no_releases"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 3709, "days_push": 510, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 39, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}