Chart ships no defaults for singleBinary.resources, which let the kernel OOM-kill loki-0 on 2026-05-14 (exit 137 during initial install). Pin requests at 100m / 512Mi and limit memory to 2Gi (~4x steady-state RSS of 540Mi at current 37 lines/sec ingest). CPU stays unburstable.
144 lines
3.4 KiB
YAML
144 lines
3.4 KiB
YAML
apiVersion: source.toolkit.fluxcd.io/v1
|
|
kind: HelmRepository
|
|
metadata:
|
|
name: grafana
|
|
namespace: monitoring
|
|
spec:
|
|
interval: 24h
|
|
url: https://grafana.github.io/helm-charts
|
|
---
|
|
apiVersion: helm.toolkit.fluxcd.io/v2
|
|
kind: HelmRelease
|
|
metadata:
|
|
name: loki
|
|
namespace: monitoring
|
|
spec:
|
|
interval: 30m
|
|
chart:
|
|
spec:
|
|
chart: loki
|
|
version: ">=6.0.0"
|
|
sourceRef:
|
|
kind: HelmRepository
|
|
name: grafana
|
|
namespace: monitoring
|
|
install:
|
|
remediation:
|
|
retries: 3
|
|
upgrade:
|
|
remediation:
|
|
retries: 3
|
|
values:
|
|
deploymentMode: SingleBinary
|
|
loki:
|
|
auth_enabled: false
|
|
commonConfig:
|
|
replication_factor: 1
|
|
storage:
|
|
type: filesystem
|
|
limits_config:
|
|
retention_period: 2160h
|
|
ingestion_rate_mb: 10
|
|
ingestion_burst_size_mb: 20
|
|
max_streams_per_user: 10000
|
|
max_query_length: 720h
|
|
max_entries_limit_per_query: 5000
|
|
schemaConfig:
|
|
configs:
|
|
- from: "2024-01-01"
|
|
store: tsdb
|
|
object_store: filesystem
|
|
schema: v13
|
|
index:
|
|
prefix: loki_index_
|
|
period: 24h
|
|
singleBinary:
|
|
replicas: 1
|
|
persistence:
|
|
enabled: true
|
|
storageClass: ceph-block
|
|
size: 80Gi
|
|
# Chart ships no defaults. Without a memory limit the pod is OOM-
|
|
# killed by the kernel when WAL replay / large queries spike RSS
|
|
# (lost loki-0 once on 2026-05-14 to exit 137 during initial
|
|
# install). Steady-state RSS is ~540Mi at current ingest (~37
|
|
# lines/sec); 2Gi limit gives 4x headroom for replay/query bursts.
|
|
# CPU is left unlimited so queries can burst.
|
|
resources:
|
|
requests:
|
|
cpu: 100m
|
|
memory: 512Mi
|
|
limits:
|
|
memory: 2Gi
|
|
gateway:
|
|
enabled: false
|
|
chunksCache:
|
|
enabled: false
|
|
resultsCache:
|
|
enabled: false
|
|
# Disable components not needed in SingleBinary mode
|
|
backend:
|
|
replicas: 0
|
|
read:
|
|
replicas: 0
|
|
write:
|
|
replicas: 0
|
|
---
|
|
apiVersion: helm.toolkit.fluxcd.io/v2
|
|
kind: HelmRelease
|
|
metadata:
|
|
name: alloy
|
|
namespace: monitoring
|
|
spec:
|
|
interval: 30m
|
|
chart:
|
|
spec:
|
|
chart: alloy
|
|
version: ">=0.12.0"
|
|
sourceRef:
|
|
kind: HelmRepository
|
|
name: grafana
|
|
namespace: monitoring
|
|
install:
|
|
remediation:
|
|
retries: 3
|
|
upgrade:
|
|
remediation:
|
|
retries: 3
|
|
values:
|
|
alloy:
|
|
configMap:
|
|
content: |
|
|
// Discover and collect K8s pod logs
|
|
discovery.kubernetes "pods" {
|
|
role = "pod"
|
|
}
|
|
|
|
discovery.relabel "pods" {
|
|
targets = discovery.kubernetes.pods.targets
|
|
|
|
rule {
|
|
source_labels = ["__meta_kubernetes_namespace"]
|
|
target_label = "namespace"
|
|
}
|
|
rule {
|
|
source_labels = ["__meta_kubernetes_pod_name"]
|
|
target_label = "pod"
|
|
}
|
|
rule {
|
|
source_labels = ["__meta_kubernetes_pod_container_name"]
|
|
target_label = "container"
|
|
}
|
|
}
|
|
|
|
loki.source.kubernetes "pods" {
|
|
targets = discovery.relabel.pods.output
|
|
forward_to = [loki.write.default.receiver]
|
|
}
|
|
|
|
loki.write "default" {
|
|
endpoint {
|
|
url = "http://loki.monitoring.svc.cluster.local:3100/loki/api/v1/push"
|
|
}
|
|
}
|