This document explains how llm-observability-stack is put together, which components own which responsibilities, and how traffic moves through the local k3s deployment.
For local NVIDIA GPU deployments, this repository is not the cluster bootstrap layer. Deploy and validate k3s-nvidia-edge first, then deploy llm-observability-stack on top of the ready k3s/NVIDIA substrate. See k3s-nvidia-edge dependency.
The preferred end-to-end CLI is edge-cli. The Go CLI in cmd/llm-observability
is a repo-local helper for this chart and should not be used as the primary
cross-repository installer.
The optional
gguf-observability
repository is a read-only evidence consumer. It observes selected Kubernetes,
Helm, Ollama, and GPU status after deployment; it owns no chart resources,
Modelfile, model lifecycle, or telemetry backend.
- Keep the stack understandable on a single local node
- Prefer static Go binaries and reproducible local images
- Keep Open WebUI easy to reach from the browser
- Keep internal APIs private by default and expose them only when needed
- Make observability and networking drills easy to demonstrate
Source lives in cmd/llm-observability and internal/stack.
Responsibilities:
- check base k3s/NVIDIA readiness through
edgebase - install and uninstall this Helm chart
- report status for Ollama, Open WebUI, Redis, OpenTelemetry Collector, and services
- validate model loading, Ollama API behavior, and CUDA/offload evidence
- run the native Go streaming benchmark client
- inspect namespace networking, Service paths, and endpoint watches
- print the Helm and kubectl commands used under the hood
The root chart owns:
- deployment composition
- values layering
- custom templates that glue the subcharts together
- observability dependencies including kube-prometheus-stack and OpenTelemetry Operator
- optional resources such as Redis, edge-toolbox, and etcd simulations
Files:
Chart.yamlvalues.yamltemplates/
Deployed through vendored subchart content in charts/ollama.
Responsibilities:
- host-mounted GGUF access
- model runtime
- optional model creation at startup through ConfigMap-backed Modelfile content
Deployed through vendored subchart content in charts/open-webui.
Responsibilities:
- browser-facing chat UI
- user/session state
- Ollama-compatible request flow to the traced proxy path
Source lives in ollama-gateway/.
Responsibilities:
- health and config endpoints
- simple
/invokedemo endpoint - Ollama-compatible proxy path at
/ollama/* - optional OpenTelemetry-traced proxy runs for Open WebUI traffic
- Prometheus request, latency, active-request, and TTFT metrics
Source lives in edge-toolbox/.
Responsibilities:
- in-cluster diagnostics
- DNS and service connectivity checks
- optional OpenTelemetry trace-seeding command
- notebook support for cluster-side network probing
Optional root-level resource set. It supports Open WebUI websocket/state flows when that path is enabled for the local profile.
Optional and disabled by default. These exist for troubleshooting and demo scenarios, not for the default happy path.
The root chart no longer vendors NVIDIA substrate charts. The verified local
k3s/NVIDIA path treats k3s-nvidia-edge as the owner of GPU Operator, NVIDIA
device plugin, Node Feature Discovery, RuntimeClass, allocatable GPU resources,
and DCGM exporter.
Available integration points:
monitoring.dcgmExporter.serviceMonitorcan observe an existing DCGM exporter Service created by the base layer.kube-prometheus-stackfor Prometheus Operator, Prometheus, Grafana, Alertmanager, node exporter, and kube-state-metrics.opentelemetry-collectorfor a directly managed OTLP collector Deployment and Service.opentelemetry-operatorremains available for clusters that need an operator-managedOpenTelemetryCollectorcustom resource.
Primary user path for the full proxy profile:
- Browser ->
open-webuiService open-webuipod ->ollama-gatewayServiceollama-gatewaypod ->ollamaServiceollama-gateway-> OpenTelemetry API when tracing is enabledollama-gateway-> OpenTelemetry Collector when OpenTelemetry is enabled
Primary user path for values.geforce-940m-k3s.yaml:
- Browser ->
open-webuiService open-webuipod ->ollamaServiceollamapod -> NVIDIA GPU throughRuntimeClass/nvidiaandnvidia.com/gpu- OpenTelemetry Collector remains available for OTLP ingest
Supporting path:
- Notebook or operator ->
kubectl execor the Go CLI edge-toolboxpod -> internal Services, DNS, OpenTelemetry API
Default local pattern:
open-webui: externally reachable for browser useollama:ClusterIPollama-gateway:ClusterIPedge-toolbox: no public Service, pod-only diagnostics
This keeps the local demo usable while reducing unnecessary surface area.
There are three main configuration layers:
values.yaml- tracked in git
- no secrets
values.local-k3s.example.yaml- tracked in git
- onboarding template for local machines
values.local-k3s.yaml- gitignored
- contains host paths, secrets, and machine-specific overrides
cmd/llm-observability/: Go CLI entrypointinternal/stack/: CLI workflows for this chart and app layertemplates/: root chart resources, optional OpenTelemetryCollector CR, and integration gluecmd/ollama-gateway+internal/gateway: traced Go gatewaycmd/edge-toolbox+internal/toolbox: in-cluster Go diagnosticsinternal/benchmark: native streaming benchmark and evidence schemahack/: local image build/import flowjupyter-notebooks/: notebook-driven operational guides
- Vendored dependency charts reduce upstream drift during local support, demos, and repeatable validation
- Local image sources make runtime behavior more repeatable than mutable pods
- Notebook and script assets are kept with the chart so the repo is self-contained for local workshops
- Optional components remain in the same repo because they are part of the troubleshooting story
This repository is optimized for:
- local demos
- workstation troubleshooting
- single-node k3s experimentation
- observability walkthroughs
It is not trying to be a generic multi-node production platform.
The verified local NVIDIA flow depends on k3s-nvidia-edge for:
- k3s and k3s containerd runtime preparation
- GPU Operator installation in namespace
gpu-operator RuntimeClass/nvidia- allocatable
nvidia.com/gpu - DCGM exporter and device plugin lifecycle
- CUDA pod validation
llm-observability-stack should be installed only after those checks pass.
After this stack is healthy, gguf-observability can validate a selected
GeForce/GGUF runtime contract and write sanitized JSON or Markdown evidence.
Deployment changes discovered by those checks must be made here or in the
infrastructure repository, not copied into the evidence tool.