@@ -74,6 +74,7 @@ SIG Architecture for cross-cutting KEPs).
74
74
- [ Scheduler improvements] ( #scheduler-improvements )
75
75
- [ Kubelet-initiated pod eviction] ( #kubelet-initiated-pod-eviction )
76
76
- [ Default and limits] ( #default-and-limits )
77
+ - [ Cluster autoscaler] ( #cluster-autoscaler )
77
78
- [ API objects for resources and classes] ( #api-objects-for-resources-and-classes )
78
79
- [ Proposal] ( #proposal )
79
80
- [ User Stories (Optional)] ( #user-stories-optional )
@@ -221,7 +222,9 @@ resources.
221
222
This KEP identifies two technologies that can immediately be enabled with
222
223
QoS-class resources. However, these are just two examples and the proposed
223
224
changes are generic (and not tied to these two QoS-class resource types in any
224
- way), making it easier to implement new QoS-class resource types.
225
+ way), making it easier to implement new QoS-class resource types. For example,
226
+ the [ NRI API] [ nri-api ] would be good mechanism to implement new QoS-class
227
+ resources.
225
228
226
229
[ Intel RDT] [ intel-rdt ] implements a class-based mechanism for controlling the
227
230
cache and memory bandwidth QoS of applications. All processes in the same
@@ -251,28 +254,24 @@ annotations on a Kubernetes Pod. The goal of this KEP is to get these types of
251
254
resources first class citizens and properly supported in Kubernetes, providing
252
255
visibility, a well-defined user interface, and permission controls.
253
256
254
-
255
-
256
- We can identify two types, container-level and pod-level QoS-class resources.
257
- Container-level resources enable QoS on per-container granularity, for example
258
- container-level cgroups in Linux or cache and memory bandwidth control
259
- technologies. Examples for pod-level QoS include e.g. pod-level cgroups or
260
- network QoS that cannot support per-container granularity.
257
+ Two types of QoS-class resources are identified, container-level and pod-level
258
+ QoS-class resources. Container-level resources enable QoS on per-container
259
+ granularity, for example container-level cgroups in Linux or cache and memory
260
+ bandwidth control technologies. Examples for pod-level QoS include e.g.
261
+ pod-level cgroups or network QoS that cannot support per-container granularity.
261
262
262
263
### Goals
263
264
264
- - Make it possible to request QoS-class resources
265
- - Support RDT class assignment of containers. This is already supported by
266
- the containerd and CRI-O runtime and part of the OCI runtime-spec
267
- - Support blockio class assignment of containers.
268
- - Support Pod-level (sandbox-level) QoS-class resources
269
- - Make the API to support updating QoS-class resource assignment of running containers
270
- - Make the extensions flexible, enabling simple addition of other QoS-class
271
- resource types in the future.
272
- - Make QoS-class resources opaque (as possible) to the CRI client
273
- - Discovery of the available QoS-class resources
274
- - Resource status/capacity
265
+ - Make it possible to request QoS-class resources from the PodSpec
266
+ - Container-level QoS-class resources
267
+ - Pod-level (sandbox-level) QoS-class resources
268
+ - Make it simple to implement new types QoS-class resource
269
+ - Make QoS-class resources opaque (as possible) to Kubernetes
270
+ - Support automatic discovery of the available QoS-class resources
271
+ - Support per-node status/capacity of QoS-class resources
275
272
- Access control ([ future work] ( #future-work ) )
273
+ - Support updating QoS-class resource assignment of running containers
274
+ ([ future work] ( #in-place-pod-vertical-scaling ) )
276
275
277
276
### Non-Goals
278
277
@@ -479,6 +478,13 @@ Use field name `Ceiling` instead `Capacity` in QOSResourceClassLimit.
479
478
Not supporting Max (i.e. only supporting Default) in LimitRanges could simplify
480
479
the API.
481
480
481
+ #### Cluster autoscaler
482
+
483
+ The cluster autoscaler support will be extended to support QoS-class resources.
484
+ The behavior will be comparable to extended resources. The expectation would be
485
+ that all nodes in a node group would have an identical set of QoS-class
486
+ resources.
487
+
482
488
#### API objects for resources and classes
483
489
484
490
` <<[UNRESOLVED]>> `
@@ -585,7 +591,8 @@ spec:
585
591
As a vendor I want to implement custom QoS controls as an extension of the
586
592
container runtime. I want my QoS control to be visible in the cluster and
587
593
integrated e.g. in the Kubernetes sheduler and not rely e.g. on Pod annotations
588
- to communicate QoS requests.
594
+ to communicate QoS requests. I will implement my QoS-class resources as an
595
+ [ NRI API] [ nri-api ] plugin.
589
596
590
597
#### Defaults and limits
591
598
@@ -1458,19 +1465,17 @@ Container QoS resources:
1458
1465
1459
1466
# ## Container runtimes
1460
1467
1461
- Currently, there is support (container-level QoS-class resources) for Intel RDT
1462
- and blockio in CRI-O and containerd runtimes :
1463
-
1464
- - cri-o :
1465
- - [~~Add support for Intel RDT~~](https://github.com/cri-o/cri-o/pull/4830)
1466
- - [~~Support for cgroups blockio~~](https://github.com/cri-o/cri-o/pull/4873)
1467
- - containerd :
1468
- - [~~Support Intel RDT~~](https://github.com/containerd/containerd/pull/5439)
1469
- - [~~Support for cgroups blockio~~](https://github.com/containerd/containerd/pull/5490)
1468
+ There is support (container-level QoS-class resources) for Intel RDT
1469
+ and blockio in CRI-O ([~~#4830~~](https://github.com/cri-o/cri-o/pull/4830),
1470
+ [~~#4873~~](https://github.com/cri-o/cri-o/pull/4873)) and containerd
1471
+ ([~~#5439~~](https://github.com/containerd/containerd/pull/5439),
1472
+ [~~#5490~~](https://github.com/containerd/containerd/pull/5490)) runtimes.
1473
+ The current user interface is provided through pod and container annotations.
1474
+ The plan is to start using QoS-class resources instead of annotations.
1470
1475
1471
- The design paradigm here is that the container runtime configures the QoS-class
1472
- resources according to a given configuration file. Enforcement on containers is
1473
- done via OCI. User interface is provided through pod and container annotations .
1476
+ The plan is also to extend the [NRI API][nri-api]
1477
+ (Node Resource Interface) to support QoS-class resources, allowing for example
1478
+ the implementation of new types of QoS-class resources as NRI plugins .
1474
1479
1475
1480
Container runtimes will be updated to support the
1476
1481
[CRI API extensions](#cri-api)
@@ -2347,3 +2352,4 @@ required.
2347
2352
[oci-runtime-rdt] : https://github.com/opencontainers/runtime-spec/blob/v1.0.2/config-linux.md#IntelRdt
2348
2353
[pod-qos-class] : https://kubernetes.io/docs/concepts/workloads/pods/pod-qos/
2349
2354
[dra-kep] : https://github.com/kubernetes/enhancements/tree/master/keps/sig-node/3063-dynamic-resource-allocation
2355
+ [nri-api] : https://github.com/containerd/nri
0 commit comments