Harborline lands on a managed Kubernetes cluster — same five services, same containers, new substrate. This chapter re-plumbs the stack from Chapters 3–10 the Kubernetes way: an operator-managed Prometheus, ServiceMonitors instead of static configs, Alloy as a DaemonSet, and webhook-injected OpenTelemetry. The checkout SLO crosses the migration byte-for-byte unchanged — the platform changed, the discipline didn't.
6 topics
Harborline's five services move to a managed Kubernetes cluster, and every layer of the observability stack has to answer the same question: what does this look like when pods churn by the minute? The cluster arrives with telemetry of its own — cAdvisor inside every kubelet, control-plane /metrics, events — and with a hard boundary: none of it knows a checkout from a health check. This chapter assumes the Kubernetes Deep Dive course and never re-teaches the platform; it builds the durable stack underneath kubectl top and kubectl logs.
Six topics make the migration: the built-in telemetry surface and its application-shaped hole; kube-prometheus-stack and the operator pattern; ServiceMonitors and the three selector layers that fail silently; node-level log shipping with Alloy as a DaemonSet; the dashboards that separate a starved workload from a slow application; and the OTel Operator, where the chapter's thesis lands — the checkout SLO survives the replatform unchanged.
The migration ledger — the plumbing changed, the discipline didn't
Changeddiscovery, agents, plumbing
Discovery becomes ServiceMonitors instead of static scrape configs. Agents become DaemonSets — one Alloy and one Collector per node. Plumbing becomes webhook-injected SDKs and operator-generated config, and every signal gains k8s.* metadata.
Unchangedsignals, SLOs, dashboards
The signals and the harborline_ metric names, the dashboards, and the checkout SLO — 99.9% availability, 95% under 500 ms, 28-day window — cross the migration byte-for-byte.