From 8f2224deca6aff136e406b655c69bd0ca4920a64 Mon Sep 17 00:00:00 2001 From: jwright Date: Tue, 25 Aug 2026 17:25:01 +1000 Subject: [PATCH] cluster: OpenShift-first narrative - oc as the command language, scope panel reframed, node investigation via oc describe/debug, generic-model caption on Course II --- pilot/arc.tpl.html | 21 ++++++++++++++------- pilot/assemble-arc.mjs | 1 + 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/pilot/arc.tpl.html b/pilot/arc.tpl.html index dda2ddb..74b511e 100644 --- a/pilot/arc.tpl.html +++ b/pilot/arc.tpl.html @@ -32,6 +32,9 @@

The Exploded Cluster teaches how modern container platforms work by taking them apart, literally. Each course is one machine drawn as a single exploded illustration, sliced into its real components and wired to your scroll, so the architecture moves while the words explain it. + OpenShift is the teaching lens. oc is the command language. Kubernetes + primitives explain the machinery underneath. Occasional lab notes show a separate Kubernetes + environment where a concept was observed; they are not a claim that the lab runs OpenShift. Start with the aperitif's four terminal commands - three that deliver, one that checks - and finish knowing how a change travels from a Git commit to a running, secret-fed, digest-pinned workload on a fleet. The library at the end links only to official documentation, so every claim here can be checked against its source.

@@ -69,10 +72,10 @@

A note on the commands: this site uses oc, - OpenShift's CLI. The Kubernetes commands here work the same - under kubectl; oc is a superset, and the - OpenShift-only parts (SCCs, Routes) are its own. Read - kubectl in the docs, type whichever your cluster gives you.

+ OpenShift's CLI. Examples use oc, the OpenShift CLI, against + Kubernetes API resources - for those, kubectl behaves identically. + Where a step needs OpenShift APIs (SCCs, Routes, ClusterOperators, MachineConfig), it will + not exist on a plain Kubernetes cluster, and the text says so.

That 1/1 reads as containers-ready over containers-wanted: a pod can hold more than one, which is Course IIIb.

Three of those were delivery actions - build, push, apply, and the @@ -171,6 +174,8 @@ alt="A small fleet mid-explosion: one wide command slab with a strong cyan seam hovering above a row of three identical worker blocks, all floating apart in the void."> +

Generic OpenShift/Kubernetes cluster model - not a diagram + of the homelab.
    @@ -247,9 +252,11 @@ runtime, not the kubelet, and kube-proxy, or an eBPF datapath replacing it, makes Service addresses route to real pods.

    The scheduler places the pod. The kubelet realises it. The runtime runs it.

    -

    Field note. Node NotReady? The kubelet is a systemd unit - like any other: journalctl -u kubelet on that node, and check it - can still reach the api-server. A node that cannot phone home is presumed lost.

    +

    Field note. Node NotReady? + oc describe node shows its conditions and the last heartbeat, and + the node's events say what the platform already knows. When you need the node itself, + oc debug node/<name> is the supported doorway - not SSH. A + node that cannot phone home is presumed lost.

    The control plane does not start container processes directly. It records and reconciles intent; node-side components execute it - the kubelet turning intent into instructions, the runtime turning instructions into processes.

    diff --git a/pilot/assemble-arc.mjs b/pilot/assemble-arc.mjs index 6469cf1..3eb36e2 100644 --- a/pilot/assemble-arc.mjs +++ b/pilot/assemble-arc.mjs @@ -282,6 +282,7 @@ const banned = [ [/every manifest include<\/span>s/, "broken 'include s' construction"], [/two policies renders from one field/, "subject/verb error 'renders from one field'"], [/grown-up chart/, "'grown-up chart' (use 'production-grade chart')"], + [/journalctl -u kubelet/, "node-shell instruction (use oc describe / oc debug node)"], ]; // legend blurbs are inlined into the app JS (the SCENES const), so scan both surfaces const visible = html + "\n" + app;