Commit Graph

7068 Commits

Author SHA1 Message Date
Patrick Ohly
c69259cb71 DRA device taints: switch to workqueue in controller
The approach copied from node taint eviction was to fire off one goroutine per
pod the intended time. This leads to the "thundering herd" problem: when a
single taint causes eviction of several pods and those all have no or the same
toleration grace period, then they all get deleted concurrently at the same
time.

For node taint eviction that is limited by the number of pods per node, which
is typically ~100. In an integration test, that already led to problems with
watchers:

   cacher.go:855] cacher (pods): 100 objects queued in incoming channel.
   cache_watcher.go:203] Forcing pods watcher close due to unresponsiveness: key: "/pods/", labels: "", fields: "". len(c.input) = 10, len(c.result) = 10, graceful = false

It also causes spikes in memory consumption (mostly the 2KB stack per goroutine
plus closure) with no upper limit.

Using a workqueue makes concurrency more deterministic because there is an
upper limit. In the integration test, 10 workers kept the watch active.

Another advantage is that failures to evict the pod get retried with
exponential backoff per affected pod forever. Previously, evicting was tried a
few times with a fixed rate and then the controller gave up. If the apiserver
was down long enough, pods didn't get evicted.
2025-10-31 18:11:19 +01:00
Patrick Ohly
e5fcd20a26 DRA device taints: tighten controller test
We know how often the controller should get a pod, let's check it.
Must run before we do our own GET call.
2025-10-31 18:11:18 +01:00
Patrick Ohly
6ebd853f17 DRA: implementation of none taint effect
While at it, ensure that future unknown effects are treating like
the None effect.
2025-10-31 18:11:18 +01:00
Patrick Ohly
e4dda7b282 DRA device taints: fix DeviceTaintRule + missing slice case
When the ResourceSlice no longer exists, the ResourceSlice tracker didn't and
couldn't report the tainted devices even if they are allocated and in use. The
controller must keep track of DeviceTaintRules itself and handle this scenario.

In this scenario it is impossible to evaluation CEL expressions because the
necessary device attributes aren't available. We could:
- Copy them in the allocation result: too large, big change.
- Limit usage of CEL expressions to rules with no eviction: inconsistent.
- Remove the fields which cannot be supported well.

The last option is chosen.

The tracker is now no longer needed by the eviction controller. Reading
directly from the informer means that we cannot assume that pointers are
consistent. We have to track ResourceSlices by their name, not their pointer.
2025-10-31 18:11:18 +01:00
Patrick Ohly
2e543d151b DRA device taints: convert unit test to synctest
The immediate benefit is that the time required for running the package's unit
test goes down from ~10 seconds (because of required real-world delays) to ~0.5
seconds (depending on the CPU performance of the host). It can also make
writing tests easier because after a `Wait` there is no need for locking before
accessing internal state (all background goroutines are known to be blocked
waiting for the main goroutine).

What somewhat ruins the perfect determinism is the polling for informer cache
syncs: that can take an unknown number of loop iterations. Probably could be
fixed by making the waiting block on channels (requires work in client-go).

The only change required in the implementation is avoiding the sleep when
deleting a pod failed for the last time in the loop (a useful, albeit minor
improvement by itself): the test proceeds after having blocked that last Delete
call, in which case synctest expects the background goroutine to exit without
delay.
2025-10-30 17:29:58 +01:00
Kubernetes Prow Robot
808d320de1 Merge pull request #134956 from yliaog/blockowner
removed BlockOwnerDeletion
2025-10-30 01:26:11 -07:00
yliao
4f647b3f3d removed BlockOwnerDeletion 2025-10-29 22:41:10 +00:00
Kubernetes Prow Robot
3ec2d82da5 Merge pull request #134784 from michaelasp/svm_beta2
SVM: bump the API to beta, remove unused fields
2025-10-29 13:56:02 -07:00
Michael Aspinwall
3b72759d1b Update SVM to Beta
Co-authored-by: Stanislav Láznička <stlaz.devel@proton.me>
2025-10-29 19:36:11 +00:00
Ondra Kupka
ad2c6b443d controller/validatingadmissionpolicystatus: Improve goroutine mgmt
Make sure all threads are terminated when Run returns.
2025-10-29 19:07:10 +01:00
Ondra Kupka
a51285e1f2 controller/servicecidrs: Improve goroutine mgmt
Make sure all threads are terminated when Run returns.
2025-10-29 19:07:10 +01:00
Ondra Kupka
63c15cbe83 controller/resourceclaim: Improve goroutine mgmt
Make sure all threads are terminated when Run returns.
2025-10-29 19:07:10 +01:00
Ondra Kupka
5f423d7ba8 controller/podautoscaler: Improve goroutine mgmt
Make sure all threads are terminated when Run returns.
2025-10-29 19:04:38 +01:00
Ondra Kupka
51ef94c547 controller/nodelifecycle: Improve goroutine mgmt
Make sure all threads are terminated when Run returns.
2025-10-29 19:04:38 +01:00
Ondra Kupka
34e688eb3d controller/nodeipam: Improve goroutine mgmt
Make sure all threads are terminated when Run returns.
2025-10-29 19:04:38 +01:00
Ondra Kupka
a265769245 controller/ttlafterfinished: Improve goroutine mgmt
Make sure all threads are terminated when Run returns.
2025-10-29 19:04:37 +01:00
Ondra Kupka
821a3f5aff controller/storageversionmigrator: Improve goroutine mgmt
Make sure all threads are terminated when Run returns.
2025-10-29 19:04:37 +01:00
Ondra Kupka
7240649e4f controller/ttl: Improve goroutine mgmt
Make sure all threads are terminated when Run returns.
2025-10-29 19:04:37 +01:00
Ondra Kupka
3ee8c53e53 controller/podgc: Improve goroutine mgmt
Make sure all threads are terminated when Run returns.
2025-10-29 19:04:37 +01:00
Ondra Kupka
1635a139b8 controller/storageversiongc: Improve goroutine mgmt
Make sure all threads are terminated when Run returns.
2025-10-29 19:04:37 +01:00
Ondra Kupka
502186ca93 controller/statefulset: Improve goroutine mgmt
Make sure all threads are terminated when Run returns.
2025-10-29 19:04:37 +01:00
Ondra Kupka
91cf8253a2 controller/replicaset: Improve goroutine mgmt
Make sure all threads are terminated when Run returns.
2025-10-29 19:04:37 +01:00
Ondra Kupka
5f48a52bf8 controller/namespace: Improve goroutine mgmt
Make sure all threads are terminated when Run returns.
2025-10-29 19:04:37 +01:00
Ondra Kupka
cb4ad79102 controller/endpointslicemirroring: Improve goroutine mgmt
Make sure all threads are terminated when Run returns.
2025-10-29 19:04:37 +01:00
Ondra Kupka
cd73e8777b controller/endpointslice: Improve goroutine mgmt
Make sure all threads are terminated when Run returns.
2025-10-29 19:00:31 +01:00
Ondra Kupka
ccd35f7c5e controller/endpoint: Improve goroutine mgmt
Make sure all threads are terminated when Run returns.
2025-10-29 19:00:31 +01:00
Ondra Kupka
d9ba92ba3b controller/disruption: Improve goroutine mgmt
Make sure all threads are terminated when Run returns.
2025-10-29 19:00:31 +01:00
Ondra Kupka
6e0a4da2f6 controller/deployment: Improve goroutine mgmt
Make sure all threads are terminated when Run returns.
2025-10-29 19:00:31 +01:00
Ondra Kupka
e8b0f27456 controller/daemon: Improve goroutine mgmt
Make sure all threads are terminated when Run returns.
2025-10-29 19:00:30 +01:00
Ondra Kupka
575e9eb64c controller/job: Improve goroutine mgmt
Make sure all threads are terminated when Run returns.
2025-10-29 19:00:30 +01:00
Ondra Kupka
7bf52d74d0 controller/cronjob: Improve goroutine mgmt
Make sure all threads are terminated when Run returns.
2025-10-29 19:00:30 +01:00
Ondra Kupka
d1eccb2377 controller/clusterroleaggregation: Improve goroutine mgmt
Make sure all threads are terminated when Run returns.
2025-10-29 19:00:30 +01:00
Ondra Kupka
5f3f39edc1 controller/certificates: Improve goroutine mgmt
Make sure all threads are terminated when Run returns.
2025-10-29 19:00:30 +01:00
Ondra Kupka
3a50f28ff8 controller/bootstrap: Improve goroutine mgmt
Make sure all threads are terminated when Run returns.
2025-10-29 18:55:53 +01:00
Kubernetes Prow Robot
a8a43a5e25 Merge pull request #134795 from aditigupta96/fix-runwithcontext-controller-tests
pkg/controller: Use informer.RunWithContext in tests
2025-10-29 07:14:04 -07:00
Kubernetes Prow Robot
3ff6a1ec16 Merge pull request #134469 from vikasbolla/fix_131745_UT
Fix controller setup in storage version unit testcases
2025-10-28 13:00:00 -07:00
Kubernetes Prow Robot
f051670a47 Merge pull request #133087 from atiratree/terminating-replicas-beta
promote DeploymentReplicaSetTerminatingReplicas to Beta
2025-10-27 04:47:37 -07:00
Kubernetes Prow Robot
82e2a3e117 Merge pull request #134763 from jpbetz/api-machinery-controller-owners
Clean up OWNERS for all api machinery owned controllers
2025-10-24 12:15:34 -07:00
Kubernetes Prow Robot
60e1f61a63 Merge pull request #133511 from BenTheElder/no-md5
eliminate md5 usage, block new usage
2025-10-24 10:59:35 -07:00
Joe Betz
0e7d42dd45 Clean up OWNERS for all api machinery owned controllers 2025-10-24 13:38:10 -04:00
Kubernetes Prow Robot
3c4a7184d8 Merge pull request #134231 from michaelasp/svmRobustness
feat: Improve the robustness of SVM
2025-10-24 10:09:38 -07:00
Ahmet Alp Balkan
5f083e3b9f controller: duplicate utility method cleanup
It appears one of these methods in deployment controller is redundant now that
we always emit Events during scaling.
2025-10-23 22:04:21 -07:00
Kubernetes Prow Robot
ee58e792cc Merge pull request #134812 from skitt/enable-gocritic-unlambda
Avoid no-change lambdas
2025-10-23 15:43:34 -07:00
Kubernetes Prow Robot
57c243f33c Merge pull request #134450 from mayank-agrwl/controller-contextual-logs
Replace HandleCrash and HandleError calls to use context-aware alternatives
2025-10-23 00:49:02 -07:00
Stephen Kitt
1e2817d589 Avoid no-change lambdas
This replaces functions that wrap another function with no change with
a direct reference to the wrapped function.

Signed-off-by: Stephen Kitt <skitt@redhat.com>
2025-10-23 09:46:15 +02:00
Aditi Gupta
fa59ed7f82 pkg/controller: Use informer.RunWithContext in tests 2025-10-22 14:13:30 -07:00
Benjamin Elder
a99a5c4bdc avoid updating when endpoint subsets are merely sorted differently 2025-10-22 08:07:19 -07:00
Kubernetes Prow Robot
497ed03ae7 Merge pull request #134525 from omerap12/hpa-monitor-test-flake
Remove flaky HPA deletion assertion in TestMultipleHPAs
2025-10-22 06:36:41 -07:00
Kubernetes Prow Robot
0ba43e9f5e Merge pull request #134739 from shyamjvs/epslice-controller-fix
Introduce pod queuing in endpoint/slice controllers
2025-10-22 00:44:39 -07:00
Shyam Jeedigunta
8346bed9e7 Introduce pod queuing in endpoint/slice controllers 2025-10-21 17:08:01 -07:00