Skip to content

Add Talos provider support - #3406

Merged
levan-m merged 12 commits into
mainfrom
levan-m/talos-provider-support
Sep 12, 2026
Merged

levan-m merged 12 commits into
mainfrom
levan-m/talos-provider-support

Conversation

@levan-m

@levan-m levan-m commented Aug 26, 2026

Copy link
Copy Markdown
Collaborator

What does this PR do?

CONTP-2027

Add Talos provider support.

Motivation

Get Operator in parity with helm chart providers support.

Additional Notes

Anything else we should know when reviewing?

Minimum Agent Versions

Are there minimum versions of the Datadog Agent and/or Cluster Agent required?

  • Agent: vX.Y.Z
  • Cluster Agent: vX.Y.Z

Describe your test plan

Tested both using Docker and EC2 with Talos AMI, most of the feature work. APM with UDS worked but had to add a socket mount to application pod.

system-probe like npm, tcpQueueLength, oomKill don't work; neither does security-agent features due to
Confirmed iveprocesses and sysprobe, security features work by looking

  • Service catalog
  • live processes view
  • following metrics:
    • cws datadog.runtime_security.process_resolver.cache_size
    • tcqueuelength tcp_queue.read_buffer_max_usage_pct
    • npm datadog.network_tracer.usm.http.total_hits
    • cspm datadog.security_agent.compliance.running for

haven't reproduced oom_kill but should work too.

  • Setup Talos cluster
  • Add label pod-security.kubernetes.io/enforce: privileged to agent namespace.
  • Apply below dda
dda
apiVersion: datadoghq.com/v2alpha1
kind: DatadogAgent
metadata:
  annotations:
    agent.datadoghq.com/cluster-provider: talos
spec:
  features:
    apm:
      enabled: true
      unixDomainSocketConfig:
        enabled: true
    clusterChecks:
      enabled: true
      useClusterChecksRunners: true
    cspm:
      enabled: true
    cws:
      enabled: true
    liveContainerCollection:
      enabled: true
    liveProcessCollection:
      enabled: true
    logCollection:
      containerCollectAll: true
      enabled: true
    npm:
      enabled: true
    oomKill:
      enabled: true
    processDiscovery:
      enabled: true
    tcpQueueLength:
      enabled: true
  global:
    clusterName: talos-aws-test
    credentials:
      apiSecret:
        keyName: api-key
        secretName: datadog-secret
      appSecret:
        keyName: app-key
        secretName: datadog-secret
    kubelet:
      tlsVerify: false

Checklist

  • PR has at least one valid label: bug, enhancement, refactoring, documentation, tooling, and/or dependencies
  • PR has a milestone or the qa/skip-qa label
  • All commits are signed (see: signing commits)

@datadog-datadog-prod-us1 datadog-datadog-prod-us1 Bot 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.

Datadog Autotest: PASS

More details

The Talos provider removes unavailable host volumes from the affected Agent features. The static review finds no concrete failure in the changed paths.

Was this helpful? React 👍 or 👎

Open Bits AI session

🤖 Datadog Autotest · Commit de64bf8 · What is Autotest? · @DataDog review to ask questions · Any feedback? Reach out in #autotest

@datadog-datadog-prod-us1

datadog-datadog-prod-us1 Bot commented Aug 26, 2026

Copy link
Copy Markdown

Pipelines  Code Coverage

🎯 Code Coverage (details)
Patch Coverage: 84.34%
Overall Coverage: 51.13% (+0.12%)

This comment will be updated automatically if new data arrives.
🔗 Commit SHA: fda2d2b | Docs | View more details | Give us feedback!

@levan-m levan-m mentioned this pull request Aug 28, 2026
3 tasks

@tbavelier tbavelier left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

nit: Should we report incompatible features as unsupported instead of "simply" dropping host volumes that are not compatible ?

@levan-m

levan-m commented Sep 9, 2026

Copy link
Copy Markdown
Collaborator Author

nit: Should we report incompatible features as unsupported instead of "simply" dropping host volumes that are not compatible ?

@tbavelier I took another look at this, it was left as is because inherently it was Operator limitation, not Talos, which prevented these features to work. I have a POC now I'm validating and will add changes to the PR.

levan-m and others added 2 commits September 9, 2026 14:59
npm mounts debugfs into system-probe like oomKill, tcpQueueLength, and cws
already do, but it was the only one of the four missing from the Talos
renderer fixture. Enable it in talos-dda.yaml and regenerate the goldens so
the feature is covered end-to-end before any behavior change.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
oomKill, tcpQueueLength, npm, and cws each mount debugfs
(/sys/kernel/debug) into system-probe, but none mount tracefs. On Talos the
kernel exposes tracefs as a standalone mount at /sys/kernel/tracing rather
than nesting it under debugfs, and a hostPath mount is not recursive across
sibling mount points, so CO-RE eBPF probe init failed for all four features:

  tracefs: /sys/kernel/tracing is not mounted with tracefs filesystem type

Add the mount through the existing provider-capabilities mechanism, gated on
TalosProvider, so only clusters declaring that provider are affected. The
mount is read-write to match the existing debugfs mount, since system-probe
writes to kprobe_events to register kprobes. npm did not implement
ProviderAwareFeature before; it is discovered by type assertion, so the new
method needs no registration.

Verified on a Talos v1.13.7 EC2 cluster (kernel 6.18.39-talos): the error is
gone and all four modules register (network_tracer,
tcp_queue_length_tracer, oom_kill_probe, event_monitor), with oom_kill and
tcp_queue_length reporting [OK].

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@levan-m
levan-m requested a review from a team as a code owner September 9, 2026 19:00
@levan-m
levan-m requested review from Janaeq and removed request for a team September 9, 2026 19:00

@datadog-datadog-prod-us1 datadog-datadog-prod-us1 Bot 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.

Datadog Autotest: FAIL

Talos tracefs support exists only in some feature hooks. USM, Dynamic Instrumentation, and eBPF Check can omit the tracefs mount, so the related system-probe module cannot start.

Open Bits AI session

🤖 Datadog Autotest · Commit bfdb709 · What is Autotest? · @DataDog review to ask questions · Any feedback? Reach out in #autotest

// mutations for the node agent. Talos exposes tracefs as a standalone mount
// rather than nesting it under the debugfs mount this feature already adds,
// so it must be mounted explicitly.
func (f *npmFeature) NodeAgentProviderCapabilities() providercaps.ProviderCapabilityMap {

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Mount tracefs for all Talos eBPF features

USM, Dynamic Instrumentation, and eBPF Check can fail on Talos.

Assertion details
  • Input: Enable the Talos provider and enable USM, Dynamic Instrumentation, or eBPF Check without NPM, OOM Kill, TCP Queue Length, or CWS.
  • Expected: Each Talos system-probe feature must mount /sys/kernel/tracing.
  • Actual: The system-probe container has the debugfs mount but no tracefs mount. The module cannot use Talos tracefs and does not start.

Was this helpful? React 👍 or 👎
🤖 Datadog Autotest · What is Autotest? · @DataDog review to ask questions · Any feedback? Reach out in #autotest · Open Bits AI session

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

addressed in de4cf7b

levan-m and others added 2 commits September 9, 2026 15:39
npm already declared the Talos tracefs capability; usm, dyninst, ebpfcheck,
sbom (enrichment) and gpu (privileged mode) mount debugfs into system-probe
the same way and needed the same capability. sbom and gpu gate it on the
condition that adds their debugfs mount.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Both Talos goldens carried spec hashes that no longer reproduce, so
TestRender_Golden failed on this branch. Rendered content is unchanged;
only the hash annotation moves.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@levan-m
levan-m requested review from a team as code owners September 9, 2026 19:46

@datadog-datadog-prod-us1 datadog-datadog-prod-us1 Bot 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.

Datadog Autotest: PASS

More details

The Talos capability changes remove the host files that Talos lacks. They also mount standalone tracefs for the Agent features that use system-probe.

Was this helpful? React 👍 or 👎

Open Bits AI session

🤖 Datadog Autotest · Commit 545b7fc · What is Autotest? · @DataDog review to ask questions · Any feedback? Reach out in #autotest

@tbavelier tbavelier left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

============
System Probe
============

  Status: Running
  Uptime: 2m30.000369542s
  Last Updated: 2026-09-10 13:39:03 UTC (1789047543000)

  USM
  ===
    Status: Running
    Last Check: 2026-09-10 13:38:58 UTC (1789047538000)
    Blocked Processes: [
      {
        "PathIdentifiers": [
          {
            "Dev": 34,
            "Inode": 111,
            "Reason": "no-symbols",
            "SamplePath": "/host/proc/1/root/usr/bin/init"
          },
          {
            "Dev": 34,
            "Inode": 86,
            "Reason": "no-symbols",
            "SamplePath": "/host/proc/8/root/usr/bin/containerd"
          },
          {
            "Dev": 51,
            "Inode": 12584461,
            "Reason": "failed to find symbols []string{\"crypto/tls.(*Conn).Close\", \"crypto/tls.(*Conn).Read\", \"crypto/tls.(*Conn).Write\"}",
            "SamplePath": "/host/proc/68/root/usr/local/bin/kubelet"
          },
          {
            "Dev": 64,
            "Inode": 40800,
            "Reason": "not-go",
            "SamplePath": "/host/proc/172/root/pause"
          },
          {
            "Dev": 72,
            "Inode": 40800,
            "Reason": "not-go",
            "SamplePath": "/host/proc/182/root/pause"
          },
          {
            "Dev": 76,
            "Inode": 8547068,
            "Reason": "no-symbols",
            "SamplePath": "/host/proc/227/root/usr/local/bin/kube-proxy"
          },
          {
            "Dev": 78,
            "Inode": 30009,
            "Reason": "no-symbols",
            "SamplePath": "/host/proc/461/root/opt/bin/flanneld"
          },
          {
            "Dev": 83,
            "Inode": 40800,
            "Reason": "not-go",
            "SamplePath": "/host/proc/601/root/pause"
          },
          {
            "Dev": 95,
            "Inode": 12747739,
            "Reason": "no-symbols",
            "SamplePath": "/host/proc/635/root/manager"
          },
          {
            "Dev": 105,
            "Inode": 40800,
            "Reason": "not-go",
            "SamplePath": "/host/proc/743/root/pause"
          },
          {
            "Dev": 34,
            "Inode": 87,
            "Reason": "no-symbols",
            "SamplePath": "/host/proc/43/root/usr/bin/containerd-shim-runc-v2"
          },
          {
            "Dev": 117,
            "Inode": 40800,
            "Reason": "not-go",
            "SamplePath": "/host/proc/841/root/pause"
          },
          {
            "Dev": 119,
            "Inode": 263994,
            "Reason": "failed to find symbols []string{\"crypto/tls.(*Conn).Read\", \"crypto/tls.(*Conn).Write\", \"crypto/tls.(*Conn).Close\"}",
            "SamplePath": "/host/proc/872/root/opt/datadog-agent/bin/datadog-cluster-agent"
          },
          {
            "Dev": 129,
            "Inode": 9144337,
            "Reason": "failed to find symbols []string{\"crypto/tls.(*Conn).Write\", \"crypto/tls.(*Conn).Close\", \"crypto/tls.(*Conn).Read\"}",
            "SamplePath": "/host/proc/1102/root/opt/datadog-agent/embedded/bin/trace-loader"
          }
        ],
        "ProgramType": "go-tls"
      }
    ]

  Discovery Service Map
  =====================
    Status: Not running

  NPM
  ===
    Status: Running
    Last Check: 2026-09-10 13:38:58 UTC (1789047538000)

  OOM Kill
  ========
    Status: Running
    Last Check: 2026-09-10 13:38:58 UTC (1789047538000)

  Event Monitor
  ================
    Status: Running

from system-probe on my talos qemu cluster 🔥

@levan-m
levan-m merged commit 3e256ba into main Sep 12, 2026
39 checks passed
@levan-m
levan-m deleted the levan-m/talos-provider-support branch September 12, 2026 09:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants