Update note 1: vmagent, vmalert, vmalertmanager, vmsingle: the config-reloader sidecar now gets an extra --target-dir= argument per watched directory, which changes the pod spec. All VMAlertmanager pods, and every VMAgent, VMAlert or VMSingle pod whose reloader watches a directory (spec.configMaps, relabeling or stream aggregation configs, rule ConfigMaps), will be rolled out once during this upgrade.
Update note 2: vmcluster: a serviceSpec with useAsDefault: true that makes the default Service of vmstorage non-headless, that is a spec.type other than ClusterIP, or an explicit spec.clusterIP/spec.clusterIPs other than None, is now rejected at spec.vmstorage.serviceSpec. Reconciliation of such a VMCluster fails until the serviceSpec keeps the Service headless, or until useAsDefault is removed, which turns it into an additional Service. See #2491.
Update note 3: vmcluster, vmalertmanager: spec.vmselect.serviceSpec of VMCluster and spec.serviceSpec of VMAlertmanager with useAsDefault: true and an explicit spec.type, but no spec.clusterIP, now produce a Service with a virtual IP instead of a headless one. That Service is recreated during the upgrade and gets a new clusterIP. For a VMCluster with spec.requestsLoadBalancer.enabled, the recreated Service is the vmauth proxy of vmselect, while its internal Service stays headless. Add spec.clusterIP: None, or remove spec.type, to keep the previous behaviour. See #2487.
Update note 4: vmrule, vmuser, vmalertmanagerconfig, vmanomalyconfig, vmservicescrape, vmpodscrape, vmnodescrape, vmprobe, vmstaticscrape, vmscrapeconfig: status.updateStatus of these config-only objects no longer reports whether the applications selecting them accepted their content. It is now operational unless the operator cannot parse the object's own spec, in which case it is set to failed. The ignored value is no longer set. The state reported by each application is available at status.conditions.
-
Dependency: vmoperator: Updated default versions for VM apps to v1.152.0.
-
Dependency: vmoperator: Updated default versions for VT apps to v0.11.1.
-
Dependency: vmoperator: Updated default version for VMAnomaly to v1.30.7.
-
Dependency: vmoperator: Updated default version for Alertmanager to v0.34.1.
-
FEATURE: vmanomaly: support bounded
spec.reader.workers, query-level business policies, andsettings.native_threads_per_workerintroduced in vmanomaly v1.30.2. See #2496. -
FEATURE: vmanomaly: add typed
spec.writer.batchMaxSeries,spec.writer.batchMaxBytes, andspec.writer.metricPrefixCacheMaxEntriesfields for the bounded writer controls introduced in vmanomaly v1.30.3. See #2542. -
FEATURE: vmoperator: add
k8s_versionlabel with the Kubernetes server version to thevm_app_versionmetric. See #2530. -
FEATURE: vmoperator: add
operator_controller_errors_total{controller,namespace,name,reason}metric, which counts reconcile errors of every controller byreason:get_object,parse_object,cancel_context,conflict,declinedandother. It deprecatesoperator_controller_object_get_errors_total,operator_controller_object_parsing_errors_total,operator_controller_reconcile_conflict_errors_totalandoperator_controller_reconcile_errors_total, which are still exported, but will be removed in a future release. See #2536. -
FEATURE: vtagent: add
VTAgentCRD for vtagent. It can accept OTLP trace spans over HTTP and gRPC and replicates them to one or more VictoriaTraces instances. The newVTAgentCRD must be installed in order to use it. See #2510. -
FEATURE: vtagent, vtsingle, vtcluster: add
grpcSpecfield (spec.insert.grpcSpecforVTCluster) to accept OTLP trace spans over gRPC in addition to HTTP. ItslistenPortis exposed at the componentServiceand can be secured with the optionaltlsConfig. See #2510. -
FEATURE: vlagent, vlsingle, vlcluster: add
minVersionandcipherSuitesfields totlsConfigof syslog TCP listeners. See #2510. -
FEATURE: vlsingle, vtsingle: add
removePvcAfterDeletefield, which makes Kubernetes garbage-collect thePersistentVolumeClaimtogether with the deletedVLSingleorVTSingleobject. It is disabled by default, so thePersistentVolumeClaimwith the stored data is now preserved after the object deletion. Previously, it was always removed together with the object. See #2545. -
FEATURE: vmcluster, vmalertmanager: allow a
serviceSpecwithuseAsDefault: trueto replace the headless defaultServiceofvmselectandVMAlertmanagerwith a regular one by definingspec.type. Previously,spec.type: ClusterIPstill inheritedclusterIP: Nonefrom the defaultService, so the only way to get a virtual IP was to pinspec.clusterIPby hand. See #2487. -
BUGFIX: vmoperator: set
status.updateStatusfor config-only objects -VMRule,VMUser,VMAlertmanagerConfig,VMAnomalyConfig,VMServiceScrape,VMPodScrape,VMNodeScrape,VMProbe,VMStaticScrapeandVMScrapeConfig- even when no application selects them. Previously, such objects were left without any status, which failed health checks of GitOps tools such as ArgoCD. The status is nowoperational, orfailedif the operator cannot parse the object's spec. See #2649. -
BUGFIX: vmagent, vmanomaly: set the default value
0tospec.shardCountin the CRD schema. Previously, the field was absent unless sharding was configured, so every read of the object's/scalesubresource failed withthe spec replicas field ".spec.shardCount" does not exist, which brokespec.vpa,spec.hpaand any external autoscaler pointed at the object. TheVMAgentandVMAnomalyCRDs must be updated to get this fix. See #2473. -
BUGFIX: vmoperator: set default values for each possible
levellabel ofoperator_log_messages_totalmetric. See #2477. -
BUGFIX: vmoperator: add the default
preStopsleep hook only on Kubernetes >= 1.30. Previously it was added on 1.29 as well, where thePodLifecycleSleepActionfeature gate is alpha and off by default, the affected components could fail to reconcile. This bug was introduced in v0.71.0. See #2522. -
BUGFIX: vmagent: remove the generated
HorizontalPodAutoscalerobject once it no longer applies, both whenspec.hpais unset and whenspec.daemonSetModeis enabled withspec.hpastill set. Previously, the object was named after its scale target, which is theVMAgentobject itself, while the cleanup looked for thevmagent-<name>name it never had. The object is now namedvmagent-<name>, consistently with the other objects generated by the operator, and the object with the old name is removed on the next reconcile. This bug was introduced in v0.71.0. See #2518. -
BUGFIX: vmagent, vmanomaly: name the generated
VerticalPodAutoscalerobjectvmagent-<name>andvmanomaly-<name>instead of theVMAgentandVMAnomalyobject name, consistently with the other objects generated by the operator. The object with the old name is removed on the next reconcile. See #2518. -
BUGFIX: vmauth, vmuser: identify
VMUserobjects withspec.jwtas<namespace>/jwt:<name>. It allows to configure multipleVMUserobjects with identicalspec.jwtsections at the same namespace. Previously, such objects shared the same id as soon as the operator created theirvmuser-<name>secrets, so only one of them was kept at the generatedvmauthconfig and the rest were dropped with a duplicate id error atstatus.currentSyncError. Objects withspec.disableSecretCreationwere not affected. See #2532. -
BUGFIX: vmagent, vmsingle: remove the service discovery
RoleandRoleBindingonce the object stops using the operator managedServiceAccount, and remove them from the namespaces watched by the operator once the object is deleted. Previously, settingspec.serviceAccountNameleft theRoleandRoleBindingat the object's namespace behind, and withWATCH_NAMESPACEset the objects created at the other watched namespaces were never removed. This bug was introduced in v0.73.0, when the operator started creating these objects at the object's namespace in cluster-wide mode and at every watched namespace in namespaced mode. See #2655. -
BUGFIX: vmsingle: fix
VMSinglepods crash-looping whenspec.relabelConfigorspec.inlineRelabelConfigis set. This bug was introduced in v0.69.0. See #2552. -
BUGFIX: vmagent, vmsingle, vmalert:
config-reloadernow triggers an application reload after its initial directory sync, and retries a failed reload request with backoff instead of dropping it. Previously, the application container could start and read a directory before the reloader filled it, with no reload to follow. This bug was introduced in v0.72.0. See #2527. -
BUGFIX: vmoperator: generate the operator's
ClusterRolefrom the+kubebuilder:rbacmarkers in the code, instead of maintainingconfig/rbac/role.yamlby hand. Previously, the markers were silently ignored bycontroller-genand the hand-writtenClusterRolewas missing thepatchverb forpods, so the operator failed to trigger the rules reload onVMAlertpods after aVMRulechange, logging only a403 Forbiddenerror while the updated rules were applied with a delay. The regeneratedClusterRolealso drops permissions the operator does not need, such asescalateandbindonClusterRoles. The operator'sClusterRolemust be updated to get this fix. See #2543. -
BUGFIX: vmcluster: reject a
serviceSpecwithuseAsDefault: truethat makes the defaultServiceofvmstoragenon-headless, that is aspec.typeother thanClusterIP, or an explicitspec.clusterIP/spec.clusterIPsother thanNone. Previously, such aserviceSpecwas applied as is, andvminsertandvmselectsilently lost the per-pod DNS records ofvmstoragethat only a headlessServiceprovides. See #2487. -
BUGFIX: vmauth: accept
spec.unauthorizedUserAccessSpecwith onlyaccess_logset, withouturl_map,url_prefixortargetRefs. Previously such a spec was rejected both by the admission webhook and by the reconcile withat least one of url_map, url_prefix or targetRefs must be defined, so there was no way to log the requests that vmauth answers with401. It requires vmauth v1.147.0 or newer. See #2551. -
BUGFIX: vmoperator: expose the reason why a PersistentVolumeClaim resize was declined under the resource's
status.reason, e.g. when it is rejected by a non-expandableStorageClass, and still apply the pending metadata changes. Previously, the reason was only logged and the reconcile could be reported as fully successful. See #2512. -
BUGFIX: vmanomaly: fix propagation of
spec.extraEnvsFromto anomaly pods, previously it was omitted. See #2567. -
BUGFIX: vmalertmanager: fix propagation of
spec.extraEnvsFromto vmalertmanager pod, previously it was omitted. See #2582. -
BUGFIX: vmauth: fix unmarshalling of
spec.httpRoute.extraRuleswith multiple rules. Previously, a rule could inherit fields from the previous one, e.g. a rule withoutfilterssilently gotfiltersfrom the rule above it. This bug was introduced in v0.66.0, whenspec.httpRoutewas added. See #2605. -
BUGFIX: vmoperator: remove the invalid
itemskey underdnsConfigin theVMAgent,VMAlertmanager,VMAnomaly,VMCluster,VLAgent,VLCluster,VTAgentandVTClusterCRDs. Previously, while Kubernetes itself ignored this key, it could fail validation in strict JSON Schema consumers such as KubeVela. See #2618. -
BUGFIX: vmoperator: apply
storage.volumeClaimTemplate.spec.volumeAttributesClassNamechanges to already createdPersistentVolumeClaims. Previously, the field was silently ignored after the claim was created. See #2598. -
BUGFIX: VMRule CRD: drop the leftover default value
""from therecordandalertfields. This default caused Kubernetes to add an emptyalert: ""orrecord: ""to every rule, so GitOps tools such as ArgoCD always detected a diff and keptVMRuleobjectsOutOfSync. This default value was introduced in v0.73.0, which required every rule to have bothrecordandalertfields set. v0.73.1 stopped identifying rules this way, since a group may contain multiple rules with the same name. TheVMRuleCRD must be updated to get this fix. See #2622. -
BUGFIX: vmagent, vmsingle, vmalert: fix
config-reloadersidecar crashing with--target-dir count must match watched directory counterror. Previously, the bug could be triggered byVMAlertwithspec.configMapsdefined and at least oneVMRuleselected, or byVMAgentandVMSinglewhose scrape config was large enough while also usingspec.configMaps, relabeling configs or stream aggregation configs. This bug was introduced in v0.72.0. See #2583.