-
Notifications
You must be signed in to change notification settings - Fork 191
Description
Describe the bug
Multiple issues with volume configuration in daemonSetMode:
-
extraVolumes/extraVolumeMountsfields are ignored - CRD accepts them (due tox-kubernetes-preserve-unknown-fields), but operator code readscr.Spec.Volumes, notcr.Spec.ExtraVolumes -
volumesfield doesn't override default - operator always createspersistent-queue-dataasemptyDirfirst, user volumes are appended but don't replace it -
volumeMountsfield is not applied to DaemonSet containers
Documentation states:
Volume for the persistent-queue could be mounted with
volumesand must have either hostPath or emptyDir.
None of these work as documented.
To Reproduce
apiVersion: operator.victoriametrics.com/v1beta1
kind: VMAgent
metadata:
name: vmagent
namespace: monitoring
spec:
daemonSetMode: true
selectAllByDefault: true
remoteWrite:
- url: http://vmsingle.monitoring.svc:8428/api/v1/write
extraArgs:
remoteWrite.tmpDataPath: /vmagent-wal
volumes:
- name: vmagent-wal-host
hostPath:
path: /var/lib/vmagent-wal
type: DirectoryOrCreate
volumeMounts:
- name: vmagent-wal-host
mountPath: /vmagent-walResult:
- Volume
vmagent-wal-hostIS added to DaemonSet - VolumeMount is NOT added to container
persistent-queue-dataremainsemptyDir
# Volumes - vmagent-wal-host present, but persistent-queue-data still emptyDir
kubectl get ds -n monitoring vmagent-vmagent -o jsonpath='{.spec.template.spec.volumes}' | jq .
# VolumeMounts - only config-out, user volumeMounts missing
kubectl get ds -n monitoring vmagent-vmagent -o jsonpath='{.spec.template.spec.containers[0].volumeMounts}' | jq .Root cause analysis
Issue 1: extraVolumes ignored
Code in vmagent.go line 549:
volumes = append(volumes, cr.Spec.Volumes...)Uses Volumes, not ExtraVolumes.
Issue 2: volumes don't override default
Code in vmagent.go around line 545:
if !cr.Spec.StatefulMode {
volumes = append(volumes, corev1.Volume{
Name: vmAgentPersistentQueueMountName,
VolumeSource: corev1.VolumeSource{EmptyDir: &corev1.EmptyDirVolumeSource{}},
})
}
volumes = append(volumes, cr.Spec.Volumes...)Default emptyDir created first, user volumes appended (no override).
Issue 3: volumeMounts not applied
Code in vmagent.go line 536:
agentVolumeMounts = append(agentVolumeMounts, cr.Spec.VolumeMounts...)VolumeMounts are added to agentVolumeMounts, but somewhere between newPodSpec() and final DaemonSet creation they are lost.
Environment
- Operator version: v0.66.1
- Kubernetes: v1.34.2+k3s1
Related
- Issue allowed override vmagent volume #450 fixed volume override for StatefulMode, DaemonSetMode was not addressed