K8S 的 NFS 问题

K8S 的 NFS 问题

我们在 k8s 集群上运行了一堆 gitlab。为了持久化,我们使用 NFS 挂载,具体来说,我们有一个由所有 gitlab 共享的 NFS 导出。目前,我们已将其挂载在所有集群节点上,然后绑定挂载到 pod,但我们也尝试了一个 NFS 卷,然后挂载子路径。我们遇到的问题没有改变。

我们看到的情况是这样的:时不时地(没有明显的规律),一些 gitlab 开始挂起(这主要是那些在特定节点上运行的 gitlab)。这些 gitlab 无法在另一个节点上启动,直到它们最初挂起的节点重新启动。

然后,这个有问题的节点开始显示非常高的负载,以及大量的 nfs RPC 请求,主要是针对两个方法:“OpenNoattr”和“TestStateId”。来自此节点的 RPC 请求总数增加了约 20 倍,并且直到机器重新启动后才停止。

作为安装选项,我们尝试了一些调整,但它对问题没有明显的影响,我们目前正在使用

rw,relatime,vers=4.1,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,local_lock=none

nfsstat 读取:

Server rpc stats:
calls      badcalls   badclnt    badauth    xdrcall
166383963   19392      0          19392      0

Server nfs v4:
null         compound
12        0% 166383895 99%

看起来,出于某种原因,我们得到了过期的锁,这些锁直到机器重新启动才会过期。这怎么会发生?这一切都发生在 VMWare 集群内……因此“坏交换机”的可能性不大。

另外,我不明白“badauth”和两种 RPC 方法的含义。有人能告诉我吗?

---- 编辑:一些细节 -----

uname -a
Linux [all machines] 3.10.0-957.27.2.el7.x86_64 #1 SMP Mon Jul 29 17:46:05 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

rpm -qa |grep nfs-utils
nfs-utils-1.3.0-0.61.el7.x86_64

我们得出结论,这很可能与容器内的 postgresql 有关,gitlab 的一份咨询报告中也提到了这一点,并建议

sysctl -w fs.leases-enable=0

在服务器端作为一种解决方法。我们这样做了。

相关内容