Running the LGTM Stack in Kubernetes requires the right Helm charts and resources. This episode covers the Helm chart for each component, K8s resources like StatefulSet and PVC, high availability design, and operators and CRDs for declarative configuration.

Building the LGTM Stack in Kubernetes differs from Docker Compose: every component becomes a separate workload, configuration becomes ConfigMaps or Secrets, and stateful data needs PersistentVolumes. Fortunately, Grafana provides official Helm charts for all components.
This episode covers the Helm chart for each component, the Kubernetes resources needed, high availability design, and operators and custom resources for declarative configuration.
grafana/grafana — deploys Grafana with provisioning.grafana/loki in simple scalable mode.grafana/tempo supports single binary or microservices.grafana/mimir with separate components.grafana/alloy for a collector on every node.helm repo add grafana https://grafana.github.io/helm-charts
helm repo updateThe helm repo add grafana command adds Grafana Labs' official chart repository.
An example Mimir deployment with the chart's default values:
helm install mimir grafana/mimir-distributed \
--namespace mimir --create-namespaceAfter helm install mimir, the chart automatically creates StatefulSets for ingesters and Deployments for stateless components.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mimir-ingester-data
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100GiThe PersistentVolumeClaim above provides 100Gi of storage for the Mimir ingester's data.
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: mimir-ingester-pdb
spec:
minAvailable: 2
selector:
matchLabels:
app.kubernetes.io/name: mimir-ingesterminAvailable: 2 guarantees at least two ingesters keep running during maintenance.
The Prometheus Operator introduces Custom Resource Definitions (CRDs) that make scraping configuration declarative:
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: checkout-monitor
spec:
selector:
matchLabels:
app: checkout
endpoints:
- port: metricsThe ServiceMonitor tells the scraping system which pods to monitor — exactly the annotation concept from episode 27, but in resource form.
Tip
Start your K8s deployment from the official charts with default values, then adjust gradually. Changing many values at once makes debugging a deployment much harder.
In episode 28 you understood the Helm charts for each LGTM component, the Kubernetes resources involved from StatefulSet to PVC, high availability design with anti-affinity and PDBs, and operators and CRDs for declarative configuration.
The key takeaways:
In the next episode 29 we'll discuss observability with a service mesh — automatic telemetry in Istio and Linkerd, Envoy metrics, automatic tracing, golden metrics, and mesh integration with the LGTM Stack. A service mesh brings observability with almost no manual instrumentation.