Conversation
22dba65 to
a0d0aa8
Compare
Go Package Import DifferencesBaseline: b17213f
|
Upgrade all k8s.io/* modules from v0.34.1 to v0.35.3 (Kubernetes 1.35 patch 3). Remove the replace directives that pinned core k8s.io modules to v0.34.1 — they were needed because karpenter-provider-aws v1.8.6 required alpha k8s.io versions, but v1.9.0 uses stable releases. Ecosystem module upgrades: - k8s.io/autoscaler/vertical-pod-autoscaler: v1.2.2 → v1.6.0 - sigs.k8s.io/custom-metrics-apiserver: v1.33.0 → v1.35.0 - sigs.k8s.io/karpenter: v1.8.2 → v1.9.0 - github.com/aws/karpenter-provider-aws: v1.8.6 → v1.9.0 - sigs.k8s.io/gateway-api: v1.3.1-pseudo → v1.5.1 - github.com/envoyproxy/gateway: v1.5.7 → v1.7.1 Code fixes for breaking API changes: - Adapt to tablewriter v0 → v1 API (NewTable with options) - Adapt to karpenter v1.9.0 NodeSelectorRequirementWithMinValues struct change (embedded corev1.NodeSelectorRequirement → flat fields) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
a0d0aa8 to
ec4016c
Compare
containerd v1.7.30 (latest v1.x) is incompatible with runtime-spec v1.3.0 which changed some struct fields from int64 to *int64. Pin runtime-spec to v1.2.1 via a replace directive until containerd v1 is replaced by v2 or the incompatibility is resolved upstream. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The previous commit only pinned runtime-spec to v1.2.1 (int64 Limit), but containerd/cgroups/v3 v3.1.2 expects *int64 (runtime-spec v1.3.0). Pin cgroups/v3 to v3.0.5 which uses int64, and use runtime-spec v1.2.0 (matching cgroups v3.0.5's declared dependency) to ensure both containerd v1.7.30 and cgroups compile correctly. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Files inventory check summaryFile checks results against ancestor b17213fd: Results for datadog-agent_7.79.0~devel.git.528.5b6a1d5.pipeline.106898637-1_amd64.deb:No change detected |
Static quality checks✅ Please find below the results from static quality gates Successful checksInfo
2 successful checks with minimal change (< 2 KiB)
On-wire sizes (compressed)
|
Regression DetectorRegression Detector ResultsMetrics dashboard Baseline: b17213f Optimization Goals: ✅ No significant changes detected
|
| perf | experiment | goal | Δ mean % | Δ mean % CI | trials | links |
|---|---|---|---|---|---|---|
| ➖ | docker_containers_cpu | % cpu utilization | -1.07 | [-4.08, +1.93] | 1 | Logs |
Fine details of change detection per experiment
| perf | experiment | goal | Δ mean % | Δ mean % CI | trials | links |
|---|---|---|---|---|---|---|
| ➖ | quality_gate_logs | % cpu utilization | +2.88 | [+1.26, +4.50] | 1 | Logs bounds checks dashboard |
| ➖ | ddot_metrics | memory utilization | +2.87 | [+2.68, +3.07] | 1 | Logs |
| ➖ | ddot_metrics_sum_cumulative | memory utilization | +2.39 | [+2.24, +2.54] | 1 | Logs |
| ➖ | ddot_metrics_sum_delta | memory utilization | +2.35 | [+2.16, +2.53] | 1 | Logs |
| ➖ | ddot_metrics_sum_cumulativetodelta_exporter | memory utilization | +1.62 | [+1.39, +1.84] | 1 | Logs |
| ➖ | ddot_logs | memory utilization | +0.61 | [+0.55, +0.67] | 1 | Logs |
| ➖ | otlp_ingest_logs | memory utilization | +0.38 | [+0.29, +0.48] | 1 | Logs |
| ➖ | quality_gate_idle_all_features | memory utilization | +0.30 | [+0.26, +0.34] | 1 | Logs bounds checks dashboard |
| ➖ | tcp_syslog_to_blackhole | ingress throughput | +0.10 | [-0.10, +0.30] | 1 | Logs |
| ➖ | otlp_ingest_metrics | memory utilization | +0.06 | [-0.10, +0.22] | 1 | Logs |
| ➖ | file_to_blackhole_100ms_latency | egress throughput | +0.04 | [-0.08, +0.17] | 1 | Logs |
| ➖ | uds_dogstatsd_to_api_v3 | ingress throughput | +0.02 | [-0.17, +0.21] | 1 | Logs |
| ➖ | file_to_blackhole_1000ms_latency | egress throughput | +0.00 | [-0.43, +0.43] | 1 | Logs |
| ➖ | tcp_dd_logs_filter_exclude | ingress throughput | +0.00 | [-0.09, +0.09] | 1 | Logs |
| ➖ | uds_dogstatsd_to_api | ingress throughput | -0.00 | [-0.20, +0.19] | 1 | Logs |
| ➖ | file_to_blackhole_500ms_latency | egress throughput | -0.02 | [-0.42, +0.38] | 1 | Logs |
| ➖ | file_to_blackhole_0ms_latency | egress throughput | -0.07 | [-0.59, +0.45] | 1 | Logs |
| ➖ | quality_gate_metrics_logs | memory utilization | -0.19 | [-0.42, +0.05] | 1 | Logs bounds checks dashboard |
| ➖ | docker_containers_memory | memory utilization | -0.23 | [-0.32, -0.14] | 1 | Logs |
| ➖ | quality_gate_idle | memory utilization | -0.45 | [-0.51, -0.40] | 1 | Logs bounds checks dashboard |
| ➖ | file_tree | memory utilization | -0.75 | [-0.81, -0.69] | 1 | Logs |
| ➖ | uds_dogstatsd_20mb_12k_contexts_20_senders | memory utilization | -0.95 | [-1.01, -0.89] | 1 | Logs |
| ➖ | docker_containers_cpu | % cpu utilization | -1.07 | [-4.08, +1.93] | 1 | Logs |
Bounds Checks: ✅ Passed
| perf | experiment | bounds_check_name | replicates_passed | observed_value | links |
|---|---|---|---|---|---|
| ✅ | docker_containers_cpu | simple_check_run | 10/10 | 702 ≥ 26 | |
| ✅ | docker_containers_memory | memory_usage | 10/10 | 273.25MiB ≤ 370MiB | |
| ✅ | docker_containers_memory | simple_check_run | 10/10 | 599 ≥ 26 | |
| ✅ | file_to_blackhole_0ms_latency | memory_usage | 10/10 | 0.19GiB ≤ 1.20GiB | |
| ✅ | file_to_blackhole_0ms_latency | missed_bytes | 10/10 | 0B = 0B | |
| ✅ | file_to_blackhole_1000ms_latency | memory_usage | 10/10 | 0.23GiB ≤ 1.20GiB | |
| ✅ | file_to_blackhole_1000ms_latency | missed_bytes | 10/10 | 0B = 0B | |
| ✅ | file_to_blackhole_100ms_latency | memory_usage | 10/10 | 0.19GiB ≤ 1.20GiB | |
| ✅ | file_to_blackhole_100ms_latency | missed_bytes | 10/10 | 0B = 0B | |
| ✅ | file_to_blackhole_500ms_latency | memory_usage | 10/10 | 0.22GiB ≤ 1.20GiB | |
| ✅ | file_to_blackhole_500ms_latency | missed_bytes | 10/10 | 0B = 0B | |
| ✅ | quality_gate_idle | intake_connections | 10/10 | 3 = 3 | bounds checks dashboard |
| ✅ | quality_gate_idle | memory_usage | 10/10 | 171.37MiB ≤ 181MiB | bounds checks dashboard |
| ✅ | quality_gate_idle_all_features | intake_connections | 10/10 | 3 = 3 | bounds checks dashboard |
| ✅ | quality_gate_idle_all_features | memory_usage | 10/10 | 488.11MiB ≤ 550MiB | bounds checks dashboard |
| ✅ | quality_gate_logs | intake_connections | 10/10 | 3 ≤ 6 | bounds checks dashboard |
| ✅ | quality_gate_logs | memory_usage | 10/10 | 199.95MiB ≤ 220MiB | bounds checks dashboard |
| ✅ | quality_gate_logs | missed_bytes | 10/10 | 0B = 0B | bounds checks dashboard |
| ✅ | quality_gate_metrics_logs | cpu_usage | 10/10 | 358.63 ≤ 2000 | bounds checks dashboard |
| ✅ | quality_gate_metrics_logs | intake_connections | 10/10 | 3 ≤ 6 | bounds checks dashboard |
| ✅ | quality_gate_metrics_logs | memory_usage | 10/10 | 404.22MiB ≤ 475MiB | bounds checks dashboard |
| ✅ | quality_gate_metrics_logs | missed_bytes | 10/10 | 0B = 0B | bounds checks dashboard |
Explanation
Confidence level: 90.00%
Effect size tolerance: |Δ mean %| ≥ 5.00%
Performance changes are noted in the perf column of each table:
- ✅ = significantly better comparison variant performance
- ❌ = significantly worse comparison variant performance
- ➖ = no significant change in performance
A regression test is an A/B test of target performance in a repeatable rig, where "performance" is measured as "comparison variant minus baseline variant" for an optimization goal (e.g., ingress throughput). Due to intrinsic variability in measuring that goal, we can only estimate its mean value for each experiment; we report uncertainty in that value as a 90.00% confidence interval denoted "Δ mean % CI".
For each experiment, we decide whether a change in performance is a "regression" -- a change worth investigating further -- if all of the following criteria are true:
-
Its estimated |Δ mean %| ≥ 5.00%, indicating the change is big enough to merit a closer look.
-
Its 90.00% confidence interval "Δ mean % CI" does not contain zero, indicating that if our statistical model is accurate, there is at least a 90.00% chance there is a difference in performance between baseline and comparison variants.
-
Its configuration does not mark it "erratic".
CI Pass/Fail Decision
✅ Passed. All Quality Gates passed.
- quality_gate_metrics_logs, bounds check memory_usage: 10/10 replicas passed. Gate passed.
- quality_gate_metrics_logs, bounds check missed_bytes: 10/10 replicas passed. Gate passed.
- quality_gate_metrics_logs, bounds check cpu_usage: 10/10 replicas passed. Gate passed.
- quality_gate_metrics_logs, bounds check intake_connections: 10/10 replicas passed. Gate passed.
- quality_gate_logs, bounds check memory_usage: 10/10 replicas passed. Gate passed.
- quality_gate_logs, bounds check intake_connections: 10/10 replicas passed. Gate passed.
- quality_gate_logs, bounds check missed_bytes: 10/10 replicas passed. Gate passed.
- quality_gate_idle_all_features, bounds check intake_connections: 10/10 replicas passed. Gate passed.
- quality_gate_idle_all_features, bounds check memory_usage: 10/10 replicas passed. Gate passed.
- quality_gate_idle, bounds check intake_connections: 10/10 replicas passed. Gate passed.
- quality_gate_idle, bounds check memory_usage: 10/10 replicas passed. Gate passed.
spf13/viper v1.21.0 (pulled in by go work sync via envoyproxy/gateway v1.7.1) uses cast.ToUintSlice and cast.ToFloat64Slice which do not exist in the DataDog/cast v1.8.0 fork. Downgrade to v1.20.1 which does not require these functions. Also re-run go work sync / dda inv tidy to ensure all modules are fully synchronized. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
spf13/viper v1.21.0 (pulled transitively by envoyproxy/gateway) uses cast.ToUintSlice and cast.ToFloat64Slice from cast v1.10.0, but the workspace replace directive forces DataDog/cast v1.8.0 which lacks these functions. Pin viper to v1.20.1 which only needs cast v1.7.1. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The tablewriter v1 API's Bulk, Render, and Append methods return errors, unlike the v0 API. Discard them explicitly to satisfy the errcheck linter. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- VPA UpdateModeAuto: add nolint + new UpdateModeInPlaceOrRecreate mode - VPA NewSimpleClientset: add nolint (NewClientset not yet generated) - k8serrors.NewGone: add nolint (test needs StatusReasonGone specifically) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Remove 4 config fields from OTel ddflareextension test data that were dropped from the Datadog exporter defaults in the transitive dependency update (send_count_sum_metrics, traces endpoint, peer_service_aggregation, trace_buffer). Also fix gofmt whitespace in vpa.go nolint comment. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Resolve go.mod/go.sum conflicts after merge with main. Take newer go-jose/v3 v3.0.5 from main, keep go-logr/zapr from our branch, and add missing pkg/config/buildschema replace directive. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
| table.SetTablePadding("\t") | ||
|
|
||
| table.AppendBulk(data) | ||
| table.Render() |
There was a problem hiding this comment.
These changes do not seem to be related to dependency update. Are these expected?
There was a problem hiding this comment.
These changes are directly caused by the dependency update. Here's the chain:
Root cause: github.com/aws/karpenter-provider-aws v1.9.0 (upgraded from v1.8.6 for k8s v0.35.3 compatibility) requires github.com/olekukonko/tablewriter v1.1.0. The previous version was v0.0.5. Go's MVS selects v1.1.0 for the whole module, including our code that uses it.
Problem: tablewriter v1.1.0 is a complete rewrite of the library. The module was split into multiple sub-packages (olekukonko/errors, olekukonko/ll, olekukonko/ts, olekukonko/tablewriter/tw, olekukonko/tablewriter/renderer). These new transitive dependencies increased binary size for all agent flavors, including IoT and Heroku which don't use Kubernetes features at all.
Impact: The Static Quality Gates job failed with 5 gates breached (per-PR threshold: 600 KiB on-disk increase):
| Gate | On-disk increase |
|---|---|
| Heroku Agent (AMD64) | 884.82 KiB |
| IoT Agent DEB (AMD64) | 817.75 KiB |
| IoT Agent DEB (ARM64) | 753.72 KiB |
| IoT Agent RPM (AMD64) | 817.75 KiB |
| IoT Agent SUSE (AMD64) | 817.75 KiB |
Note that the main agent, cluster agent, and Docker images all passed their gates — the size increase only exceeded the threshold for the lightweight IoT (~44 MiB total) and Heroku (~320 MiB) flavors where the relative impact is larger.
Fix: Since our two usages (pkg/aggregator/demultiplexer_agent_printer.go and test/fakeintake/cmd/client/cmd/routestats.go) only need simple tab-aligned table output, replacing olekukonko/tablewriter with Go's stdlib text/tabwriter was the straightforward fix: zero external dependencies, same functionality. See commit bb23684812.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 4a5f7901cd
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| func testCollectEvent(t *testing.T, createResource func(*fake.Clientset) error, newStore storeGenerator, expected workloadmeta.EventBundle) { | ||
| // Disable WatchListClient: fake.NewSimpleClientset does not support the watch-list protocol | ||
| // (it never sends the required initial bookmark event), causing the reflector to hang. | ||
| clientfeaturestesting.SetFeatureDuringTest(t, clientfeatures.WatchListClient, false) |
There was a problem hiding this comment.
Avoid shared feature-gate override in parallel test helper
Calling clientfeaturestesting.SetFeatureDuringTest inside this shared helper introduces a cross-test conflict because this API tracks one active override per feature and fails when a different concurrent test tries to set the same feature. Several callers run with t.Parallel() (for example pod_test.go, metadata_test.go, and parallel subtests in deployments_test.go), so this change can cause those tests to fail with feature-override errors instead of exercising the reflector behavior.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Good catch — the callers do use t.Parallel(). Fixed in e9a0370: moved the feature gate disable to TestMain using os.Setenv("KUBE_FEATURE_WatchListClient", "false") which runs once before all tests and avoids the cross-test conflict.
|
|
||
| # Install and configure OCB | ||
| OCB_VERSION="0.147.0" | ||
| OCB_VERSION="0.149.0" |
There was a problem hiding this comment.
Unfortunately there is a bug in OTel 0.149.0 so we don't want to upgrade and are waiting for 0.150.0. Should be released next week
cc @RiantZ
SetFeatureDuringTest tracks one active override per feature globally and fails when a different concurrent test sets the same feature. Since callers (pod_test, metadata_test, deployments_test) use t.Parallel(), the per-helper call would cause cross-test conflicts. Use an env var in TestMain instead, which runs once before all tests and is safe with parallel execution. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
@codex review |
davidor
left a comment
There was a problem hiding this comment.
👍 for container-platform files
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: e9a03705a8
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| func TestMain(m *testing.M) { | ||
| os.Setenv("KUBE_FEATURE_WatchListClient", "false") | ||
| os.Exit(m.Run()) |
There was a problem hiding this comment.
Move TestMain into a _test.go file
TestMain is declared in test_helpers.go, which is not a _test.go file, so go test will compile this function but not execute it as the package test entrypoint. That means KUBE_FEATURE_WatchListClient is never forced to false, so the fake client path this change is trying to protect can still hang under client-go v0.35.3 when these tests run (especially in parallel). Put this TestMain in a _test.go file so the feature gate override is actually applied.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Good catch — moved TestMain to main_test.go in 07a9aa4. The test_helpers.go file (despite having //go:build test) is not a _test.go file, so go test wouldn't recognize it as the package test entrypoint.
TestMain must be in a _test.go file to be recognized by go test as the package test entrypoint. In test_helpers.go (a regular .go file with //go:build test), it was just a regular function that was never called. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
@codex review |
|
Codex Review: Didn't find any major issues. Delightful! ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
Replace the external github.com/olekukonko/tablewriter dependency with Go's standard library text/tabwriter. The two usages (demultiplexer_agent_printer.go and routestats.go) only need simple tab-aligned table output, which text/tabwriter handles natively with zero external dependencies. Cell values are sanitized to replace tabs, newlines and carriage returns with spaces to prevent free-form text fields from corrupting the tabwriter column alignment. This change was originally part of the Kubernetes dependencies upgrade PR (#48796) and has been extracted into a standalone PR as suggested during code review. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
### What does this PR do? Replaces the external `github.com/olekukonko/tablewriter` dependency with Go's standard library `text/tabwriter`. The two usages (`demultiplexer_agent_printer.go` and `routestats.go`) only need simple tab-aligned table output, which `text/tabwriter` handles natively with zero external dependencies. Cell values are sanitized to replace tabs, newlines and carriage returns with spaces to prevent free-form text fields (e.g., service check messages) from corrupting the tabwriter column alignment. ### Motivation This change was originally part of the Kubernetes dependencies upgrade PR (#48796) and has been extracted into a standalone PR as [suggested during code review](#48796 (comment)). The `tablewriter` v1.1.0 upgrade (pulled transitively by `karpenter-provider-aws`) introduced several new transitive dependencies (`olekukonko/errors`, `olekukonko/ll`, `olekukonko/ts`) that increased binary size beyond the static quality gate threshold (600 KiB) for IoT and Heroku agent flavors. Replacing with the stdlib equivalent removes the dependency entirely, regardless of which version is pulled transitively. ### Describe how you validated your changes - `dda inv test --targets=./pkg/aggregator/...` — all 138 tests pass - `dda inv tidy` — go.mod/go.sum files are clean - Verified that `olekukonko/tablewriter` is no longer imported anywhere in the codebase ### Additional Notes The `mattn/go-runewidth` and `clipperhouse/uax29` indirect dependencies in `test/fakeintake/go.mod` were also removed as they were only needed by `tablewriter`. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: lenaic.huard <lenaic.huard@datadoghq.com>
…r` (#49165) ### What does this PR do? Replaces the external `github.com/olekukonko/tablewriter` dependency with Go's standard library `text/tabwriter`. The two usages (`demultiplexer_agent_printer.go` and `routestats.go`) only need simple tab-aligned table output, which `text/tabwriter` handles natively with zero external dependencies. Cell values are sanitized to replace tabs, newlines and carriage returns with spaces to prevent free-form text fields (e.g., service check messages) from corrupting the tabwriter column alignment. ### Motivation This change was originally part of the Kubernetes dependencies upgrade PR (#48796) and has been extracted into a standalone PR as [suggested during code review](#48796 (comment)). The `tablewriter` v1.1.0 upgrade (pulled transitively by `karpenter-provider-aws`) introduced several new transitive dependencies (`olekukonko/errors`, `olekukonko/ll`, `olekukonko/ts`) that increased binary size beyond the static quality gate threshold (600 KiB) for IoT and Heroku agent flavors. Replacing with the stdlib equivalent removes the dependency entirely, regardless of which version is pulled transitively. ### Describe how you validated your changes - `dda inv test --targets=./pkg/aggregator/...` — all 138 tests pass - `dda inv tidy` — go.mod/go.sum files are clean - Verified that `olekukonko/tablewriter` is no longer imported anywhere in the codebase ### Additional Notes The `mattn/go-runewidth` and `clipperhouse/uax29` indirect dependencies in `test/fakeintake/go.mod` were also removed as they were only needed by `tablewriter`. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: lenaic.huard <lenaic.huard@datadoghq.com>
What does this PR do?
Upgrade all Kubernetes Go module dependencies from v0.34.1 to v0.35.3 (Kubernetes 1.35 patch 3), along with related ecosystem modules.
Core k8s.io modules (v0.34.1 → v0.35.3): api, apimachinery, client-go, apiserver, apiextensions-apiserver, component-base, cli-runtime, cri-api, cri-client, kube-aggregator, kubectl, kubelet, metrics, kms, cloud-provider, component-helpers, csi-translation-lib, sample-controller, controller-manager, code-generator.
Ecosystem modules:
k8s.io/autoscaler/vertical-pod-autoscaler: v1.2.2 → v1.6.0sigs.k8s.io/custom-metrics-apiserver: v1.33.0 → v1.35.0sigs.k8s.io/karpenter: v1.8.2 → v1.9.0 (max for Go 1.25.x; v1.10+ requires Go 1.26.1)github.com/aws/karpenter-provider-aws: v1.8.6 → v1.9.0sigs.k8s.io/gateway-api: v1.3.1-pseudo → v1.5.1github.com/envoyproxy/gateway: v1.5.7 → v1.7.1 (for gateway-api v1.5.1 compatibility)Removed replace directives: The
replaceblock that pinned 7 core k8s.io modules to v0.34.1 has been removed. It existed becausekarpenter-provider-awsv1.8.6 required alpha k8s.io versions; v1.9.0 now uses stable releases.Code fixes for breaking API changes:
tablewriterusage from v0 to v1 API (NewTablewith options pattern) — pulled in transitively by karpenter-provider-aws v1.9.0NodeSelectorRequirementWithMinValuesstruct change: the embeddedcorev1.NodeSelectorRequirementfield was flattened to directKey/Operator/ValuesfieldsMotivation
Keep Kubernetes client libraries current (Kubernetes 1.35) and eliminate the version inconsistency where some k8s.io modules were at v0.35.x in
requirebut overridden to v0.34.1 viareplacedirectives.Describe how you validated your changes
dda inv agent.build— passeddda inv cluster-agent.build— passedAdditional Notes
otelgrpcreplace directive is kept (apiserver v0.35.3 still needs otelgrpc v0.60.0)kube-state-metrics/v2fork replace directive is unchanged🤖 Generated with Claude Code