PV控制器添加注解volume.beta.kubernetes.io/storage-provisioner花费了太长时间,

cedebl8k  于 6个月前  发布在  Kubernetes
关注(0)|答案(6)|浏览(75)

发生了什么?

在我所在的集群中,大约有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

安装工具

容器运行时(CRI)及其版本(如适用)

相关插件(CNI,CSI等)及其版本(如适用)

tp5buhyn

tp5buhyn4#

我们是否应该仅在队列积压时重新同步未绑定的pvc和pv?@liggitt@jsafrane

vhmi4jdf

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

相关问题