发生了什么?
在审查KEP和实施过程中,我注意到了免除优先级级别从其他级别借用的方式之间的差异。在KEP中,我们在https://github.com/kubernetes/enhancements/tree/master/keps/sig-api-machinery/1040-priority-and-fairness#dispatching(这个材料是在kubernetes/enhancements#3906中添加的)中看到了以下定义。
MinCurrentCL(i) = max( MinCL(i), min( NominalCL(i), HighSeatDemand(i) ) ) -- if non-exempt
MinCurrentCL(i) = max( MinCL(i), HighSeatDemand(i) ) -- if exempt
但是在实现中(
kubernetes/staging/src/k8s.io/apiserver/pkg/util/flowcontrol/apf_controller.go
第407行 in 3dedb8e
| | minCurrentCL:=math.Max(float64(plState.minCL), math.Min(float64(plState.nominalCL), plState.seatDemandStats.highWatermark)) |
,在#118782中引入)没有对免除的特殊处理。它通过与非免除级别的相同公式计算其MinCurrentCL。在默认配置(其中免除优先级级别具有名义并发限制为零)中,这意味着免除优先级级别获得MinCurrentCL=0。
KEP继续提出了一些关于如果免除优先级级别想要使用整个服务器并发限制或足够多以防止非免除优先级级别获得最小分配量时应如何操作的考虑。这些也从实现中缺失——自然地,因为这些情况在当前实现中不会发生。
你期望会发生什么?
一致性
我们如何尽可能精确地重现它?
这是根据上面的代码和文档检查得出的。
我们需要了解的其他信息吗?
- 无响应*
Kubernetes版本
1.28.0及更高版本。
云提供商
N/A
OS版本
N/A
5条答案
按热度按时间lnvxswe21#
简短的区别是:KEP表示,免除优先级可以得到它想要的一切,而其他级别则在服务器的并发限制之外竞争,而实现中,免除优先级与其他级别在一个公平的竞争环境中竞争。
b0zn9rqh2#
/cc @tkashem
/cc @wojtek-t
/cc @deads2k
3b6akqbq3#
58wvjzkj4#
我认为我们应该修复这个问题,使其符合KEP的描述。最终,所有来自免除的请求都会被执行,因此假装它们不占用资源只是欺骗自己...
我认为我们应该修改代码以反映KEP中的描述。
kq0g1dla5#
/triage accepted