Kubernetes adds a new layer of complexity to observability. This episode covers the architecture for monitoring nodes, pods, and clusters, metric sources like cAdvisor and kube-state-metrics, service discovery and relabeling, pod log collection, and tracing via a service mesh.

Pods that come and go within seconds, IPs that always change, and nodes scaling up and down — Kubernetes is the most dynamic environment for observability. Static monitoring approaches simply don't apply here.
This episode covers Kubernetes monitoring architecture, metric sources, service discovery with relabeling, pod log collection, and cross-service tracing within the cluster.
node -> pod -> container -> clusterThe node -> pod -> container -> cluster pattern is the thinking map for designing K8s observability dashboards.
curl -sk https://<node>:10250/metricsThe curl -sk .../metrics command shows raw kubelet metrics — in production, scraping is done automatically by service discovery.
Prometheus and Mimir use Kubernetes service discovery to find targets automatically:
scrape_configs:
- job_name: kubernetes-pods
kubernetes_sd_configs:
- role: pod
relabel_configs:
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
regex: "true"
action: keepThe role: pod configuration makes the scraper find all pods, then relabeling filters pods that have the scrape annotation enabled.
prometheus.io/scrape: "true" marks pods that must be scraped.Pod logs are collected with two main patterns:
kind: DaemonSet
metadata:
name: alloy
spec:
template:
spec:
containers:
- name: alloy
image: grafana/alloy:latestkind: DaemonSet ensures one Alloy instance runs on every node of the cluster.
Tracing across pods requires automatic context propagation:
ingress -> pod A -> pod B -> pod C -> backendThe ingress -> pod A -> pod B -> pod C pattern is a single request's trace within a cluster — without propagation, this chain breaks at every hop.
Info
The most effective combination in K8s: automatic scraping via service discovery, log collection with the Alloy DaemonSet, and automatic tracing via a service mesh. All of it works without changing application code.
In episode 27 you understood the architecture for monitoring nodes, pods, containers, and clusters, the metric sources cAdvisor, kubelet, and kube-state-metrics, service discovery and relabeling with annotations, pod log collection with DaemonSet and sidecar, and cross-pod tracing.
The key takeaways:
In the next episode 28 we'll discuss deploying the LGTM Stack in Kubernetes — Helm charts for each component, K8s resources like StatefulSet and PersistentVolumeClaim, high availability design, and using operators. Your local stack will move into a real cluster.