Skip to content

fix: Restart wedged Vector and sink collector pods - #269

Merged
ecv merged 2 commits into
mainfrom
fix/268-probes
Nov 10, 2026
Merged

ecv merged 2 commits into
mainfrom
fix/268-probes

Conversation

@ecv

@ecv ecv commented Nov 10, 2026 •

Copy link
Copy Markdown
Contributor

The Vector telemetry exporter and the hub sink collector run with no health probes, so a wedged process in either pod keeps running and looks healthy. With this change both pods get readiness and liveness probes that check only the process itself, so a wedged pod is restarted while a NATS, ClickHouse or customer remote-write outage fails neither probe.

Fixes #268

Related to https://github.com/datum-cloud/infra/issues/9112

What changed

  • The Vector exporter now answers health checks, and a NetworkPolicy keeps its unauthenticated observability API (which can stream exported customer telemetry) reachable only on the metrics port.
  • The sink collector now reports health, and its startup allowance of about two minutes outlasts the ClickHouse exporter's startup block during a ClickHouse outage.
  • The exporter's sidecar container gets no probe from this change. A sidecar liveness probe restarts pods only if its threshold is shorter than a plausible API-server loss, so adding one here would restart every exporter during a control-plane blip. That is left to deployers; infra staging already has a lenient one.
  • Residuals: hostNetwork pods on the same node can still reach the Vector API port under GKE Dataplane V2, and the sink collector Service gains a health port that exposes health status only.
  • Overlap: Route cell shell traces to Tempo #203 also edits the sink collector manifest, in non-overlapping hunks.

Test plan

  • A wedged Vector exporter or sink collector pod is restarted by its liveness probe
  • A NATS, ClickHouse or remote-write outage does not fail either probe
  • Only the Vector metrics port is reachable from other pods; the observability API is refused
  • The config tests pass, including the rendered NetworkPolicy selector matching the Deployment's pod labels

Warning

Not verified on a cluster. The NetworkPolicy assumes the CNI admits kubelet probes from the node; GKE Dataplane V2 does this by default, but no probe has run against a deployed pod. The sink startup allowance of about two minutes equals infra's Flux two-minute timeout, so a ClickHouse outage during a rollout can fail the reconcile.

ecv added 2 commits November 10, 2026 11:28
The Vector exporter ran with its API off and no probes, and the sink
collector had no health_check extension, so the OpenTelemetry operator
generated no probes for it. A wedged process in either pod kept running
and looked healthy.

Vector 0.61 serves GET /health on its API port (8686) and the sink's
health_check extension serves / on 13133; neither tracks a downstream
sink, so an outage there fails no probe.

Key features/changes:
- Enable the Vector API on 0.0.0.0:8686 and probe /health for readiness
  and liveness
- Add a NetworkPolicy admitting only the 9598 metrics port to Vector,
  since the same API port serves the unauthenticated gRPC event tap
- Enable health_check on 0.0.0.0:13133 for the sink collector, with a
  two-minute startup window because the clickhouse exporter blocks
  startup for about 30s while ClickHouse is unreachable
- Add config tests that fail on the pre-fix manifests
The Vector NetworkPolicy selector is correct only after the kustomization
rewrites its labels. Nothing asserted that the rendered selector matches
the Deployment's pod labels, so a label change would silently reopen the
unauthenticated gRPC tap on port 8686 with every test green. Render the
overlay and compare the two.

Also pin the sink collector liveness settings (10s period, six failures).

Vector /health source:
https://github.com/vectordotdev/vector/blob/v0.61.0/src/api/grpc_server.rs#L158-L183
Vector API defaults:
https://github.com/vectordotdev/vector/blob/v0.61.0/src/config/api.rs
Operator probe generation:
https://github.com/open-telemetry/opentelemetry-operator/blob/v0.162.0/internal/otelconfig/config.go#L322-L395
https://github.com/open-telemetry/opentelemetry-operator/blob/v0.162.0/internal/components/extensions/healthcheckv1.go
@ecv ecv changed the title Give the Vector exporter and sink collector health probes fix: Restart wedged Vector and sink collector pods Nov 10, 2026
@ecv ecv self-assigned this Nov 10, 2026
@ecv
ecv marked this pull request as ready for review November 10, 2026 17:02
@ecv
ecv requested a review from a team as a code owner November 10, 2026 17:02
@ecv
ecv requested review from 0xmc and andrewb3000 November 10, 2026 17:02

@kevwilliams kevwilliams left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Verified Vector 0.61's /health tracks only shutdown, operator v0.144 honors startupProbe, and health_check's pipeline check and component-status gate stay off.

@ecv
ecv merged commit 302f9c8 into main Nov 10, 2026
30 of 39 checks passed
@ecv
ecv deleted the fix/268-probes branch November 10, 2026 21:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Vector and sink collector pods run without health probes

3 participants