Skip to content

Fix robot externalLabels and disable cloud scrapes in robotmetrics - #1096

Merged
methylDragon merged 1 commit into
mainfrom
ch3/victoriametrics-robotmetrics-fixes
Oct 22, 2026
Merged

methylDragon merged 1 commit into
mainfrom
ch3/victoriametrics-robotmetrics-fixes

Conversation

@methylDragon

@methylDragon methylDragon commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

Why: Edge robot metrics scraped by vmagent lack robot and cluster labels, while the cloud robotmetrics chart creates duplicate kubelet and kube-apiserver scrape resources.

TL;DR: Default robot and cluster labels in edge vmagent from .Values.robot.name, disable cloud kubelet and API server scrape resources on the robotmetrics proxy, and add default vmstorage resources.

📖 Detailed Change Description (click to expand)

Problem

  • Edge victoriametrics-robotmetrics-operator.yaml copies .Values.vmagent.spec.externalLabels without merging .Values.robot.name from the rollout controller, leaving robot-scraped series without robot or cluster labels.
  • Cloud victoriametrics-robotmetrics-cloud.values.yaml disables node-exporter and kube-state-metrics on the cloud ingestion proxy, but leaves kubelet and kubeApiServer enabled so cloud vmagent-vmc double-scrapes cloud nodes and the API server.

Changes

  • Populate default robot and cluster labels on edge vmagent.
    • Seeds $externalLabelsMap from .Values.robot.name before merging .Values.vmagent.spec.externalLabels so edge metrics match federated labels.
  • Disable cloud kubelet and API server scrape resource generation on the robotmetrics proxy chart.
    • Sets kubelet.enabled: false and kubeApiServer.enabled: false so the cloud robotmetrics chart stops emitting duplicate cluster scrape targets.
  • Add default vmstorage CPU and memory requests and limits in cloud values.
    • Defines 1000m/4Gi requests and 2000m/12Gi limits under vmcluster.spec.vmstorage.resources, matching the chart-level limits defaults (values-cloud.yaml).

Review Focus

Where to Look

  • Check $externalLabelsMap in src/app_charts/victoriametrics/victoriametrics-robotmetrics/robot/victoriametrics-robotmetrics-operator.yaml.
    • Verify .Values.robot.name sets default robot and cluster keys while allowing .Values.vmagent.spec.externalLabels entries to override or extend them.

Gotchas

  • We populate $externalLabelsMap by iterating .Values.vmagent.spec.externalLabels with range instead of mutating it in place.
    • Because copying keys into a fresh dictionary avoids mutating .Values while preserving user-supplied external labels.

Tested

  • Built victoriametrics-robotmetrics cloud and robot chart targets and verified 0 kubelet or kube-apiserver scrape resources in the rendered cloud manifest.
bazel build \
  //src/app_charts/victoriametrics/victoriametrics-robotmetrics:all

@methylDragon
methylDragon requested a review from liyin00 October 20, 2026 14:56
@methylDragon methylDragon added the enhancement New feature or request label Oct 20, 2026
@methylDragon
methylDragon added this pull request to stack #1098 October 20, 2026 15:21
Why: Edge robot metrics scraped by vmagent lack robot and cluster labels, while the cloud robotmetrics chart creates duplicate kubelet and kube-apiserver scrape resources.

**TL;DR:** Default robot and cluster labels in edge `vmagent` from `.Values.robot.name`, disable cloud kubelet and API server scrape resources on the robotmetrics proxy, and add default `vmstorage` resources.

<details>

<summary><b>📖 Detailed Review Guide</b> (click to expand)</summary>

### Problem

- Edge `victoriametrics-robotmetrics-operator.yaml` copies `.Values.vmagent.spec.externalLabels` without merging `.Values.robot.name` from the rollout controller, leaving robot-scraped series without robot or cluster labels.
- Cloud `victoriametrics-robotmetrics-cloud.values.yaml` disables node-exporter and kube-state-metrics on the cloud ingestion proxy, but leaves `kubelet` and `kubeApiServer` enabled so cloud vmagent-vmc double-scrapes cloud nodes and the API server.

### Changes

- Populate default robot and cluster labels on edge `vmagent`.
  - Seeds `$externalLabelsMap` from `.Values.robot.name` before merging `.Values.vmagent.spec.externalLabels` so edge metrics match federated labels.
- Disable cloud kubelet and API server scrape resource generation on the robotmetrics proxy chart.
  - Sets `kubelet.enabled: false` and `kubeApiServer.enabled: false` so the cloud robotmetrics chart stops emitting duplicate cluster scrape targets.
- Add default `vmstorage` CPU and memory requests and limits in cloud values.
  - Defines 1000m/4Gi requests and 2000m/12Gi limits under `vmcluster.spec.vmstorage.resources`, matching the chart-level `limits` defaults (`values-cloud.yaml`).

### Review Focus

#### Where to Look

- Check `$externalLabelsMap` in `src/app_charts/victoriametrics/victoriametrics-robotmetrics/robot/victoriametrics-robotmetrics-operator.yaml`.
  - Verify `.Values.robot.name` sets default robot and cluster keys while allowing `.Values.vmagent.spec.externalLabels` entries to override or extend them.

#### Gotchas

- We populate `$externalLabelsMap` by iterating `.Values.vmagent.spec.externalLabels` with `range` instead of mutating it in place.
  - Because copying keys into a fresh dictionary avoids mutating `.Values` while preserving user-supplied external labels.

### Tested

- Built `victoriametrics-robotmetrics` cloud and robot chart targets and verified 0 kubelet or kube-apiserver scrape resources in the rendered cloud manifest.

```bash
bazel build \
  //src/app_charts/victoriametrics/victoriametrics-robotmetrics:all
```

</details>

Signed-off-by: methylDragon <methylDragon@intrinsic.ai>
@methylDragon
methylDragon force-pushed the ch3/victoriametrics-robotmetrics-fixes branch from bc2f44f to 4296dac Compare October 22, 2026 01:15
@methylDragon
methylDragon enabled stacked auto-merge (squash) October 22, 2026 01:15
@methylDragon
methylDragon merged commit f1d314d into main Oct 22, 2026
6 checks passed
@methylDragon
methylDragon deleted the ch3/victoriametrics-robotmetrics-fixes branch October 22, 2026 01:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants