feat: add victoria-logs cluster and collector (#54)

* feat: add victoria-logs cluster and collector

Signed-off-by: Devin Buhl <devin@buhl.casa>

* fix: enable gateway api for vm

Signed-off-by: Devin Buhl <devin@buhl.casa>

---------

Signed-off-by: Devin Buhl <devin@buhl.casa>
This commit is contained in:
Devin Buhl
2026-06-24 10:55:56 -04:00
committed by GitHub
parent b687efafb4
commit 8ee481b2e7
17 changed files with 288 additions and 2 deletions
@@ -15,7 +15,7 @@ spec:
storage:
size: 20Gi
storageClass: openebs-spare-disk
storageClass: openebs-system-disk
# One instance per worker (3 workers, 3 instances).
affinity:
@@ -0,0 +1,44 @@
---
# yaml-language-server: $schema=https://k8s-schemas.home-operations.com/helm.toolkit.fluxcd.io/helmrelease_v2.json
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: victoria-logs-collector
spec:
chartRef:
kind: OCIRepository
name: victoria-logs-collector
interval: 1h
rollback:
cleanupOnFail: true
upgrade:
cleanupOnFail: true
strategy:
name: RemediateOnFailure
remediation:
remediateLastFailure: true
retries: 2
values:
fullnameOverride: victoria-logs-collector
remoteWrite:
- url: http://victoria-logs-vlinsert.o11y.svc.cluster.local:9481/insert/native
maxDiskUsagePerURL: 10GB
extraArgs:
"kubernetesCollector.decolorizeFields": _msg
collector:
streamFields:
- kubernetes.pod_name
- kubernetes.pod_namespace
- kubernetes.container_name
- kubernetes.pod_labels.app.kubernetes.io/name
podMonitor:
enabled: true
tolerations:
- key: node-role.kubernetes.io/control-plane
operator: Exists
effect: NoSchedule
@@ -0,0 +1,6 @@
---
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ./helmrelease.yaml
- ./ocirepository.yaml
@@ -0,0 +1,14 @@
---
# yaml-language-server: $schema=https://k8s-schemas.home-operations.com/source.toolkit.fluxcd.io/ocirepository_v1.json
apiVersion: source.toolkit.fluxcd.io/v1
kind: OCIRepository
metadata:
name: victoria-logs-collector
spec:
interval: 15m
layerSelector:
mediaType: application/vnd.cncf.helm.chart.content.v1.tar+gzip
operation: copy
ref:
tag: 0.3.6
url: oci://ghcr.io/victoriametrics/helm-charts/victoria-logs-collector
@@ -0,0 +1,60 @@
---
# yaml-language-server: $schema=https://k8s-schemas.home-operations.com/helm.toolkit.fluxcd.io/helmrelease_v2.json
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: victoria-logs
spec:
chartRef:
kind: OCIRepository
name: victoria-logs
interval: 1h
rollback:
cleanupOnFail: true
upgrade:
cleanupOnFail: true
strategy:
name: RemediateOnFailure
remediation:
remediateLastFailure: true
retries: 2
values:
fullnameOverride: victoria-logs
vlstorage:
replicaCount: 3
retentionPeriod: ${LOGS_RETENTION_PERIOD}
persistentVolume:
storageClassName: ${LOGS_STORAGE_CLASS}
size: 100Gi
topologySpreadConstraints:
- maxSkew: 1
topologyKey: kubernetes.io/hostname
whenUnsatisfiable: DoNotSchedule
labelSelector:
matchLabels:
app.kubernetes.io/component: vlstorage
vmServiceScrape:
enabled: true
vlinsert:
topologySpreadConstraints:
- maxSkew: 1
topologyKey: kubernetes.io/hostname
whenUnsatisfiable: ScheduleAnyway
labelSelector:
matchLabels:
app.kubernetes.io/component: vlinsert
vmServiceScrape:
enabled: true
vlselect:
topologySpreadConstraints:
- maxSkew: 1
topologyKey: kubernetes.io/hostname
whenUnsatisfiable: ScheduleAnyway
labelSelector:
matchLabels:
app.kubernetes.io/component: vlselect
vmServiceScrape:
enabled: true
@@ -0,0 +1,6 @@
---
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ./helmrelease.yaml
- ./ocirepository.yaml
@@ -0,0 +1,14 @@
---
# yaml-language-server: $schema=https://k8s-schemas.home-operations.com/source.toolkit.fluxcd.io/ocirepository_v1.json
apiVersion: source.toolkit.fluxcd.io/v1
kind: OCIRepository
metadata:
name: victoria-logs
spec:
interval: 15m
layerSelector:
mediaType: application/vnd.cncf.helm.chart.content.v1.tar+gzip
operation: copy
ref:
tag: 0.2.7
url: oci://ghcr.io/victoriametrics/helm-charts/victoria-logs-cluster
@@ -31,3 +31,11 @@ spec:
url: http://vminsert-victoria-metrics.o11y.svc.cluster.local:8480
paths:
- /insert/0/.*
- static:
url: http://victoria-logs-vlinsert.o11y.svc.cluster.local:9481
paths:
- /insert/jsonline
- /insert/native
- /insert/elasticsearch/.*
- /insert/loki/.*
- /insert/opentelemetry/.*
@@ -24,10 +24,15 @@ spec:
global:
clusterLabel: cluster
victoria-metrics-operator:
env:
- name: VM_GATEWAY_API_ENABLED
value: "true"
vmcluster:
enabled: true
spec:
retentionPeriod: 30d
retentionPeriod: ${METRICS_RETENTION_PERIOD}
replicationFactor: 2
vmstorage:
replicaCount: 3
@@ -137,6 +142,7 @@ spec:
httpRoute:
hostnames:
- vmauth.${APP_DOMAIN}
- vmauth.${ALT_DOMAIN}
parentRefs:
- name: envoy
namespace: envoy-system
@@ -9,4 +9,6 @@ resources:
- ./grafana.yaml
- ./victoria-metrics.yaml
- ./victoria-metrics-users.yaml
- ./victoria-logs.yaml
- ./victoria-logs-collector.yaml
- ./namespace.yaml
@@ -0,0 +1,36 @@
---
# yaml-language-server: $schema=https://k8s-schemas.home-operations.com/kustomize.toolkit.fluxcd.io/kustomization_v1.json
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: victoria-logs-collector
namespace: flux-system
spec:
dependsOn:
- name: victoria-logs
healthChecks:
- apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
name: victoria-logs-collector
namespace: o11y
interval: 1h
path: ./kubernetes/apps/base/victoria-logs-collector
prune: true
sourceRef:
kind: GitRepository
name: flux-system
namespace: flux-system
targetNamespace: o11y
patches:
- patch: |-
apiVersion: source.toolkit.fluxcd.io/v1
kind: OCIRepository
metadata:
name: victoria-logs-collector
spec:
ref:
# renovate: datasource=docker depName=ghcr.io/victoriametrics/helm-charts/victoria-logs-collector
tag: 0.3.6
target:
kind: OCIRepository
name: victoria-logs-collector
@@ -0,0 +1,36 @@
---
# yaml-language-server: $schema=https://k8s-schemas.home-operations.com/kustomize.toolkit.fluxcd.io/kustomization_v1.json
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: victoria-logs
namespace: flux-system
spec:
dependsOn:
- name: victoria-metrics
healthChecks:
- apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
name: victoria-logs
namespace: o11y
interval: 1h
path: ./kubernetes/apps/base/victoria-logs
prune: true
sourceRef:
kind: GitRepository
name: flux-system
namespace: flux-system
targetNamespace: o11y
patches:
- patch: |-
apiVersion: source.toolkit.fluxcd.io/v1
kind: OCIRepository
metadata:
name: victoria-logs
spec:
ref:
# renovate: datasource=docker depName=ghcr.io/victoriametrics/helm-charts/victoria-logs-cluster
tag: 0.2.7
target:
kind: OCIRepository
name: victoria-logs
@@ -9,4 +9,6 @@ resources:
- ./grafana.yaml
- ./victoria-metrics.yaml
- ./victoria-metrics-users.yaml
- ./victoria-logs.yaml
- ./victoria-logs-collector.yaml
- ./namespace.yaml
@@ -0,0 +1,23 @@
---
# yaml-language-server: $schema=https://k8s-schemas.home-operations.com/kustomize.toolkit.fluxcd.io/kustomization_v1.json
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: victoria-logs-collector
namespace: flux-system
spec:
dependsOn:
- name: victoria-logs
healthChecks:
- apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
name: victoria-logs-collector
namespace: o11y
interval: 1h
path: ./kubernetes/apps/base/victoria-logs-collector
prune: true
sourceRef:
kind: GitRepository
name: flux-system
namespace: flux-system
targetNamespace: o11y
@@ -0,0 +1,23 @@
---
# yaml-language-server: $schema=https://k8s-schemas.home-operations.com/kustomize.toolkit.fluxcd.io/kustomization_v1.json
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: victoria-logs
namespace: flux-system
spec:
dependsOn:
- name: victoria-metrics
healthChecks:
- apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
name: victoria-logs
namespace: o11y
interval: 1h
path: ./kubernetes/apps/base/victoria-logs
prune: true
sourceRef:
kind: GitRepository
name: flux-system
namespace: flux-system
targetNamespace: o11y
@@ -9,3 +9,6 @@ data:
ALT_DOMAIN: futostatus.com
CLUSTER_NAME: o11y-production
OP_VAULT: o11y_tf_prod
LOGS_RETENTION_PERIOD: 120d
LOGS_STORAGE_CLASS: openebs-spare-disk-2
METRICS_RETENTION_PERIOD: 120d
@@ -9,3 +9,6 @@ data:
ALT_DOMAIN: staging.futostatus.com
CLUSTER_NAME: o11y-staging
OP_VAULT: o11y_tf_staging
LOGS_RETENTION_PERIOD: 30d
LOGS_STORAGE_CLASS: openebs-spare-disk
METRICS_RETENTION_PERIOD: 30d