Commit Graph

15059 Commits

Author SHA1 Message Date
Patrick Ohly
299ecde5cc DRA quota: add ResourceClaim v1.ResourceQuota limits
Dynamic resource allocation is similar to storage in the sense that users
create ResourceClaim objects to request resources, same as with persistent
volume claims. The actual resource usage is only known when allocating claims,
but some limits can already be enforced at admission time:

- "count/resourceclaims.resource.k8s.io" limits the number of ResourceClaim objects in
  a namespace; this is a generic feature that is already supported also without
  this commit.

- "resourceclaims" is *not* an alias - use "count/resourceclaims.resource.k8s.io"
  instead.

- <device-class-name>.deviceclass.resource.k8s.io/devices limits the number of
  ResourceClaim objects in a namespace such that the number of devices
  requested through those objects with that class does not exceed the limit.

A single request may cause the allocation of multiple devices. For exact
counts, the quota limit is based on the sum of those exact counts. For requests
asking for "all" matching devices, the maximum number of allocated devices per
claim is used as a worst-case upper bound.

Requests asking for "admin access" contribute to the quota.

DRA quota: remove admin mode exception
2024-07-23 18:52:34 +02:00
Patrick Ohly
b5c94966bd DRA e2e: fix the quota name
The actual name has the k8s.io suffix.
2024-07-23 18:52:33 +02:00
Kubernetes Prow Robot
d21b17264e Merge pull request #125488 from pohly/dra-1.31
DRA for 1.31
2024-07-22 11:45:55 -07:00
Patrick Ohly
357a2926a1 DRA e2e: update VAP for a kubelet plugin
This fixes the message (node name and "cluster-scoped" were switched) and
simplifies the VAP:
- a single matchCondition short circuits completely unless they're a user
  we care about
- variables to extract the userNodeName and objectNodeName once
  (using optionals to gracefully turn missing claims and fields into empty strings)
- leaves very tiny concise validations

Co-authored-by: Jordan Liggitt <liggitt@google.com>
2024-07-22 18:09:34 +02:00
Patrick Ohly
9f36c8d718 DRA: add DRAControlPlaneController feature gate for "classic DRA"
In the API, the effect of the feature gate is that alpha fields get dropped on
create. They get preserved during updates if already set. The
PodSchedulingContext registration is *not* restricted by the feature gate.
This enables deleting stale PodSchedulingContext objects after disabling
the feature gate.

The scheduler checks the new feature gate before setting up an informer for
PodSchedulingContext objects and when deciding whether it can schedule a
pod. If any claim depends on a control plane controller, the scheduler bails
out, leading to:

    Status:       Pending
    ...
      Warning  FailedScheduling             73s   default-scheduler  0/1 nodes are available: resourceclaim depends on disabled DRAControlPlaneController feature. no new claims to deallocate, preemption: 0/1 nodes are available: 1 Preemption is not helpful for scheduling.

The rest of the changes prepare for testing the new feature separately from
"structured parameters". The goal is to have base "dra" jobs which just enable
and test those, then "classic-dra" jobs which add DRAControlPlaneController.
2024-07-22 18:09:34 +02:00
Patrick Ohly
599fe605f9 DRA scheduler: adapt to v1alpha3 API
The structured parameter allocation logic was written from scratch in
staging/src/k8s.io/dynamic-resource-allocation/structured where it might be
useful for out-of-tree components.

Besides the new features (amount, admin access) and API it now supports
backtracking when the initial device selection doesn't lead to a complete
allocation of all claims.

Co-authored-by: Ed Bartosh <eduard.bartosh@intel.com>
Co-authored-by: John Belamaric <jbelamaric@google.com>
2024-07-22 18:09:34 +02:00
Patrick Ohly
c526d7796e DRA e2e: use VAP to control "admin access" permissions
The advantages of using a validation admission policy (VAP) are that no changes
are needed in Kubernetes and that admins have full flexibility if and how they
want to control which users are allowed to use "admin access" in their
requests.

The downside is that without admins taking actions, the feature is enabled
out-of-the-box in a cluster. Documentation for DRA will have to make it very
clear that something needs to be done in multi-tenant clusters.

The test/e2e/testing-manifests/dra/admin-access-policy.yaml shows how to do
this. The corresponding E2E tests ensures that it actually works as intended.

For some reason, adding the namespace to the message expression leads to a
type check errors, so it's currently commented out.
2024-07-22 18:09:34 +02:00
Patrick Ohly
0b62bfb690 DRA e2e: adapt to v1alpha3 API 2024-07-22 18:09:34 +02:00
Dr. Stefan Schimanski
834cd7ca4a aggregator: split availability controller into local and remote part
Signed-off-by: Dr. Stefan Schimanski <stefan.schimanski@gmail.com>
2024-07-21 17:31:24 +02:00
Patrick Ohly
8a629b9f15 DRA: remove "sharable" from claim allocation result
Now all claims are shareable up to the limit imposed by the size of the
"reserverFor" array.

This is one of the agreed simplifications for 1.31.
2024-07-21 17:28:14 +02:00
Patrick Ohly
de5742ae83 DRA: remove immediate allocation
As agreed in https://github.com/kubernetes/enhancements/pull/4709, immediate
allocation is one of those features which can be removed because it makes no
sense for structured parameters and the justification for classic DRA is weak.
2024-07-21 17:28:14 +02:00
Patrick Ohly
b51d68bb87 DRA: bump API v1alpha2 -> v1alpha3
This is in preparation for revamping the resource.k8s.io completely. Because
there will be no support for transitioning from v1alpha2 to v1alpha3, the
roundtrip test data for that API in 1.29 and 1.30 gets removed.

Repeating the version in the import name of the API packages is not really
required. It was done for a while to support simpler grepping for usage of
alpha APIs, but there are better ways for that now. So during this transition,
"resourceapi" gets used instead of "resourcev1alpha3" and the version gets
dropped from informer and lister imports. The advantage is that the next bump
to v1beta1 will affect fewer source code lines.

Only source code where the version really matters (like API registration)
retains the versioned import.
2024-07-21 17:28:13 +02:00
Kubernetes Prow Robot
f2428d66cc Merge pull request #125163 from pohly/dra-kubelet-api-version-independent-no-rest-proxy
DRA: make kubelet independent of the resource.k8s.io API version
2024-07-18 17:47:48 -07:00
Patrick Ohly
7701a48bd6 dra kubelet: bump gRPC API to v1alpha4
The previous changes are an API break, therefore we need a new version.
2024-07-18 23:30:09 +02:00
Patrick Ohly
ee3205804b dra e2e: demonstrate how to use RBAC + VAP for a kubelet plugin
In reality, the kubelet plugin of a DRA driver is meant to be deployed as a
daemonset with a service account that limits its
permissions. https://kubernetes.io/docs/reference/access-authn-authz/service-accounts-admin/#additional-metadata-in-pod-bound-tokens
ensures that the node name is bound to the pod, which then can be used
in a validating admission policy (VAP) to ensure that the operations are
limited to the node.

In E2E testing, we emulate that via impersonation. This ensures that the plugin
does not accidentally depend on additional permissions.
2024-07-18 23:30:09 +02:00
Kubernetes Prow Robot
f82030111f Merge pull request #126198 from aojea/flaku_lb
e2e: fix flake on loadbalancer tests
2024-07-18 13:41:45 -07:00
Kubernetes Prow Robot
c4bd05df1c Merge pull request #126181 from bitoku/refactor-kubeletseparatediskgc
[sig-testing] refactor KubeletSeparateDiskGC nodefeature
2024-07-18 10:39:25 -07:00
Kubernetes Prow Robot
601eb7e9cf Merge pull request #122922 from marosset/windows-memory-eviction
Add support for Windows memory-pressure eviction
2024-07-18 10:39:06 -07:00
Kubernetes Prow Robot
3adafc6a50 Merge pull request #126194 from mimowo/job-e2e-tests-cleanup
Format helper scripts in Job e2e tests as multiline for readability
2024-07-18 09:33:39 -07:00
Kubernetes Prow Robot
dda657b598 Merge pull request #126191 from p0lyn0mial/upstream-revert-promote-watch-list-to-beta
Revert "Promote WatchList feature to Beta"
2024-07-18 07:39:28 -07:00
Antonio Ojea
fdbe6912d2 e2e: fix flake on loadbalancer tests
validating that one endpoint is reachable from one part of the cluster
is not enough condition to consider it will be reachable from any node,
as different Services proxies on different nodes will have different
propagation delays for the EndpointSlices and Services information.
2024-07-18 12:54:54 +00:00
Kubernetes Prow Robot
a491ea7af4 Merge pull request #126092 from pacoxu/fix-node-lease
fix node lease e2e flakes
2024-07-18 02:44:43 -07:00
Michal Wozniak
2d680054c1 Format helper scripts in Job e2e tests as multiline for readability 2024-07-18 11:05:36 +02:00
Ayato Tokubi
662ed5a42d refactor nodefeature
Signed-off-by: Ayato Tokubi <atokubi@redhat.com>
2024-07-18 08:45:52 +00:00
Lukasz Szaszkiewicz
367401cd85 Revert "e2e/apimachinery/watchlist: always run WatchList e2e tests"
This reverts commit be00cded2d.
2024-07-18 09:29:46 +02:00
Patrick Ohly
348f94ab55 DRA: read ResourceClaim in DRA drivers
This is the second and final step towards making kubelet independent of the
resource.k8s.io API versioning because it now doesn't need to copy structs
defined by that API from the driver to the API server.
2024-07-18 09:09:20 +02:00
Patrick Ohly
616a014347 DRA: move ResourceSlice publishing into DRA drivers
This is a first step towards making kubelet independent of the resource.k8s.io
API versioning because it now doesn't need to copy structs defined by that API
from the driver to the API server. The next step is removing the other
direction (reading ResourceClaim status and passing the resource handle to
drivers).

The drivers must get deployed so that they have their own connection to the API
server. Securing at least the writes via a validating admission policy should
be possible.

As before, the kubelet removes all ResourceSlices for its node at startup, then
DRA drivers recreate them if (and only if) they start up again. This ensures
that there are no orphaned ResourceSlices when a driver gets removed while the
kubelet was down.

While at it, logging gets cleaned up and updated to use structured, contextual
logging as much as possible. gRPC requests and streams now use a shared,
per-process request ID and streams also get logged.
2024-07-18 09:09:19 +02:00
Mark Rossetti
3683010a7c Adding e2e test to validate memory-pressure eviction on Windows
Signed-off-by: Mark Rossetti <marosset@microsoft.com>
2024-07-17 15:11:30 -07:00
Michal Wozniak
25d938b481 Promote JobPodFailurePolicy and PodDisruptionConditions e2e tests to Conformance 2024-07-17 18:13:08 +02:00
Kubernetes Prow Robot
ad72be434d Merge pull request #125417 from bitoku/splitfs
KEP-4191: Split Image Filesystem add end-to-end tests
2024-07-16 23:27:06 -07:00
Kubernetes Prow Robot
a00c834ebf Merge pull request #123303 from haircommander/proc-mount-e2e-tests
KEP-4265: add e2e tests for ProcMountType
2024-07-16 19:37:05 -07:00
Peter Hunt
4f57a1448d test/e2e: add test to ensure proc mount is stripped from windows pods
Signed-off-by: Peter Hunt <pehunt@redhat.com>
2024-07-16 17:46:23 -04:00
Peter Hunt
d6ee9ca860 test/e2e_node: add proc mount tests
including one Alpha only test, as the feature is in alpha

Signed-off-by: Peter Hunt <pehunt@redhat.com>
Co-authored-by: Sohan Kunkerkar <sohank2602@gmail.com>
2024-07-16 17:45:26 -04:00
Kubernetes Prow Robot
fc3abdaf2d Merge pull request #125470 from everpeace/kep-3619-SupplementalGroupsPolicy-e2e
KEP-3619: Add NodeStatus.Features.SupplementalGroupsPolicy API and e2e
2024-07-16 13:57:06 -07:00
Kubernetes Prow Robot
7e1cfca8af Merge pull request #126110 from chengjoey/docs/e2e-pod-traffic
add some notes for e2e preserve source pod ip test
2024-07-16 09:20:57 -07:00
Shingo Omura
a89bb017a3 KEP-3619: implement e2e test for SupplementalGroupsPolicy 2024-07-16 12:36:00 +09:00
joey
47133919e7 add some notes for e2e preserve source pod ip test
Signed-off-by: joey <zchengjoey@gmail.com>
2024-07-16 10:18:05 +08:00
Kubernetes Prow Robot
06ec6ba05d Merge pull request #125305 from p0lyn0mial/upstream-dynamic-client-uses-watch-list
dynamic client: add support for API streaming
2024-07-15 10:05:12 -07:00
Lukasz Szaszkiewicz
ba160f6ed3 test/apimachinery/watchlist: add scenario for dynamic client's List method 2024-07-15 11:56:02 +02:00
Lukasz Szaszkiewicz
951d325111 test/apimachinery/watchlist: move common functionality to separate functions 2024-07-15 11:56:02 +02:00
Paco Xu
8720d94785 fix node lease e2e flakes 2024-07-15 11:59:44 +08:00
Antonio Ojea
93736f268e use node.status.addresses to obtain hostnetwork pods hostnames 2024-07-14 19:02:14 +00:00
Kubernetes Prow Robot
0a3330d6c9 Merge pull request #125510 from mimowo/extend-job-conditions
Delay setting terminal Job conditions until all pods are terminal
2024-07-12 08:12:46 -07:00
Kevin Hannon
950781a342 add e2e tests for split filesystem
Signed-off-by: Ayato Tokubi <atokubi@redhat.com>
2024-07-12 14:19:17 +00:00
Michal Wozniak
0acffd6f2c Extend the e2e tests 2024-07-12 11:16:21 +02:00
Jan Safranek
dd655f7cc0 Remove static PV topology test
With cloud providers removed from k/k, e2e tests have no way how to create a
static AWS EBS, GCE PD, Azure Disk or other cloud volume. Test
"[sig-storage] Multi-AZ Cluster Volumes should schedule pods in the same
zones as statically provisioned PVs" constantly fails with "provider does
not support volume creation".

There is no upstream e2e job that would run the test and show the error.
We noticed it downstream in OpenShift.
2024-07-12 09:49:26 +02:00
Kubernetes Prow Robot
1080554307 Merge pull request #124969 from RomanBednar/pv-phase-transition-time-ga
graduate PersistentVolumeLastPhaseTransitionTime to GA in 1.31
2024-07-11 15:29:19 -07:00
Michal Wozniak
1b13b55945 do not assert in e2e tests 2024-07-11 21:00:58 +02:00
Michal Wozniak
f999dd0490 Verify the Job status active, ready and terminating are 0
Signed-off-by: Michal Wozniak <michalwozniak@google.com>
2024-07-11 20:54:15 +02:00
Michal Wozniak
fb7704ba03 Delay setting terminal Job conditions until all pods are terminal
Fix the integration test typecheck

Fix after rebase

# Conflicts:
#	pkg/controller/job/job_controller_test.go
2024-07-11 20:54:09 +02:00