发生了什么?
在我所在的集群中,大约有3000个PVC和7000个PV。当我创建一个PVC时,它需要超过20分钟的时间才能让PV开始创建。
通过在更高层次分析日志,发现PV控制器每15秒将所有PVC和PV重新添加到队列以进行同步。当PV和PVC的数量达到一定阈值时,队列中的数据无法完全处理,导致新添加的PVC和PV持续积压。我想了解一下为什么有必要定期将所有PVC和PV添加到队列以进行处理?
https://github.com/kubernetes/kubernetes/blob/master/pkg/controller/volume/persistentvolume/pv_controller_base.go#L620
你期望会发生什么?
无论现有PVC和PV的数量如何,新的PVC和PV都可以快速创建。
我们如何尽可能精确地重现它?
在创建大量PVC和PV之后,您可以使用StorageClass检查创建PV所需的时间。
我们需要了解其他信息吗?
- 无响应*
Kubernetes版本
$ kubectl version
# paste output here
1.27.2
云提供商
无
OS版本
# On Linux:
$ cat /etc/os-release
# paste output here
$ uname -a
# paste output here
# On Windows:
C:\> wmic os get Caption, Version, BuildNumber, OSArchitecture
# paste output here
6条答案
按热度按时间nkoocmlb1#
/sig apps
wmvff8tz2#
/sig storage
fhity93d3#
/assign
tp5buhyn4#
我们是否应该仅在队列积压时重新同步未绑定的pvc和pv?@liggitt@jsafrane
vhmi4jdf5#
这基本上是#85661的重复内容。我们每隔15秒同步一次的主要原因是:如果在PVC之后创建了PV,并且没有涉及动态配置,那么PV处理器将不会绑定它。只有PVC处理器试图为PVC找到PV。我们需要以某种方式从PV处理器中重新排队所有未绑定的PVC。但是,如果你创建了7000个PV,那么所有的3000个PVC都会被7000次排队。因此,需要一些速率限制。或者我们可以改进绑定,并从PV处理器中也进行操作。
我们是否应该仅在队列积压时才重新同步未绑定的pvc&pv?
是的,肯定如此。我需要检查一下,也许我们甚至不需要定期同步PV,只需要同步PVC。也就是说,我们可以在PV队列中有一个定期的指数退避策略,在PVC队列中有一个指数退避策略,以及一个每隔X秒将每个未绑定的PVC加入队列的goroutine。
还请考虑#85659。
欢迎提出PR!
/triage-accepted
fnvucqvd6#
/triage accepted