Your browser sucks, JavaScript disabled! Gunnar's console needs JavaScript and WebAssembly. Git over SSH on port 2222 does not.

nordisk/Skidbladnir

.nornir/k8s-unfold.md

k8s-unfold — design

Class: design · the Kubernetes target for the airgap pipeline's install step. Two halves, split by Skidbladnir's charter (core stays sync + no shell; verbs as data; network clients behind features).

f0 — two halves

half where sync? deps
renderer src/k8s.rs KubernetesRenderer: ServiceRenderer sync core none (hand-rolled YAML)
applier src/k8s_apply.rs (feature kubernetes) async kube 0.99 + k8s-openapi 0.24 + tokio, rustls-tls (no OpenSSL/C)

With the kubernetes feature off, the applier isn't compiled and neither kube nor tokio enters the build — the lean offline core is unchanged (mirrors redfish/terraform/kvm).

f1 — renderer (data)

ComponentSpec (+ additive k8s fields image/namespace/replicas/stateful/ storage) → to_service_spec under Backend::Kubernetes → KubernetesRenderer emits a RenderedService:

Example — the knut Arrow Flight server (N5): ComponentSpec::knut_flight (product.rs) renders a plain stateless Deployment + Service in namespace knut on port 50055 (env-only config, TCP readiness/liveness). Rendered by cargo run --example render-knut-flight-k8s; checked-in snapshot + a hand-written Namespace + apply/prove/validate steps live in deploy/knut-flight/. The SAME spec drives the systemd install (cargo run --example install-knut-flight), so the two Runtime targets (Jera-systemd | Kube) never drift.

f2 — applier (network, kubernetes feature)

K8sApplier drives those manifests+verbs over the real API — the systemd-over-D-Bus analog for k8s, no kubectl/helm:

Boundary

Platform bring-up only (workload/service/pvc + wait). The app-data load (DB COPY, S3 objects, config) is tillsynia-admin's job, not Skidbladnir's.

Status

Renderer + applier both green: cargo test (default) 111 lib + 11 integration; cargo test --features kubernetes 114 lib + 11. The apply/scale/wait/delete I/O is exercised only against a live cluster — k8s_live_apply_scale_delete is #[ignore] (run on the lab worker node: cargo test --features kubernetes -- --ignored k8s_live).