当前,我最近将PostgreSQL集群从简单的“裸机”(vms)工作负载切换为容器化的K8s集群(也在vms上)。
当前,我们运行zalando-incubator/postgres-operator
并将本地卷与volumeMode: FileSystem
配合使用,该卷本身是安装在主机上的“简单” xfs卷。
但是,我们实际上看到k8s内的postgres集群性能下降了50%。 实际上,一些繁重的连接工作负载的性能要比完全不使用容器的旧集群差。
是否有一种方法可以调整行为或至少测量I / O的性能以找到实际的瓶颈(即什么是测量I / O的好方法,等等)
答案 0 :(得分:1)
有没有办法调整行为
要意识到可能会影响群集内行为的两件事:高速缓存抖动增加以及在节点上运行并发容器的固有问题。如果您尚未尝试过,则可能要使用污点和公差将PG Pods与其他Pod隔离开,看看是否有帮助。
什么是衡量I / O等的好方法。
我希望可以使用与iostat
相同的Node
工具,因为无论发生多少内核名称空间欺骗,它仍然是Linux内核。
普罗米修斯(可能还有很多其他此类玩具)会针对容器提供一些特定于I / O的指标,并且我认为它们处于刮擦粒度,这意味着您可以提高刮擦频率,同时要考虑到观察成本的影响您的指标:-(
它显示为new docker daemons ship with Prom metrics,尽管我不知道哪个版本引入了该功能。 a separate page讨论了高频度量收集的含义。除了a Prometheus exporter之外,似乎还有PostgreSQL specific exporter用于监视任意进程。
了解我的看法,与ext4和非传统FS(例如xfs
)并肩作战可能是一个非常合理的实验。我什至无法理解ext4带来了多少额外的生产经验,仅仅因为默认情况下星球上几乎所有Linux都在上面部署了Linux。您可能有使用xfs的充分理由,但我只是想确保您至少考虑了xfs可能具有的性能特征,使其在像kubernetes集群这样的共享环境中出现问题。