kubernetes cifs smb flexvolume缺少文件

时间:2018-07-31 09:14:08

标签: docker kubernetes mount smb cifs

我们使用此插件https://github.com/juliohm1978/kubernetes-cifs-volumedriver从kubernetes Centos群集上的Windows服务器上的Windows服务器上安装了smb共享,该插件基本上是使用mount.cifs的脚本。我们还尝试了Microsoft插件和https://github.com/fstab/cifs,但它们使用mount.cifs进行相同的操作。

该安装程序在小型项目上运行良好,但是一旦开始在写密集型活动中使用它,就会遇到一种非常奇怪的模式,即丢失刚编写的文件。

我们创建了一个简单的Java程序,该程序在foreach循环中写入900-1000个文件之间的随机数。 所有文件都包含相同的随机字节,并以此行创建

byte[] data = org.apache.commons.lang3.RandomUtils.nextBytes(1024 * 50);

然后尝试列出已写入文件的目录,并且列表中的文件数始终为丢失文件。

即使文件名包含随机部分,丢失的文件在序列中也总是相同的。

我们编写的文件名包含foreach索引,但也包含一个随机部分,以便可以检查每次重试,而不会受到前者的干扰。

[smb-cache-test-6db94b688-jw8cx] 2018-07-31 07:27:24.331  start write file total=971
[smb-cache-test-6db94b688-jw8cx] 2018-07-31 07:27:39.771  end write file total=971
[smb-cache-test-6db94b688-jw8cx] 2018-07-31 07:27:40.041  count files=937
[smb-cache-test-6db94b688-jw8cx] 2018-07-31 07:27:40.043  missing files=34
[smb-cache-test-6db94b688-jw8cx] 2018-07-31 07:27:40.044  missing file=smb-cache-test-0025-yUaWG4aYTIrqFPBE93WZXzgnmBBy5Wl4.tmp
[smb-cache-test-6db94b688-jw8cx] 2018-07-31 07:27:40.044  missing file=smb-cache-test-0051-yUaWG4aYTIrqFPBE93WZXzgnmBBy5Wl4.tmp
[smb-cache-test-6db94b688-jw8cx] 2018-07-31 07:27:40.044  missing file=smb-cache-test-0077-yUaWG4aYTIrqFPBE93WZXzgnmBBy5Wl4.tmp
[smb-cache-test-6db94b688-jw8cx] 2018-07-31 07:27:40.044  missing file=smb-cache-test-0109-yUaWG4aYTIrqFPBE93WZXzgnmBBy5Wl4.tmp
[smb-cache-test-6db94b688-jw8cx] 2018-07-31 07:27:40.044  missing file=smb-cache-test-0135-yUaWG4aYTIrqFPBE93WZXzgnmBBy5Wl4.tmp
[smb-cache-test-6db94b688-jw8cx] 2018-07-31 07:27:40.044  missing file=smb-cache-test-0161-yUaWG4aYTIrqFPBE93WZXzgnmBBy5Wl4.tmp
[...]

[smb-cache-test-6db94b688-jw8cx] 2018-07-31 07:30:16.113  start write file total=995
[smb-cache-test-6db94b688-jw8cx] 2018-07-31 07:30:30.808  end write file total=995
[smb-cache-test-6db94b688-jw8cx] 2018-07-31 07:30:31.065  count files=960
[smb-cache-test-6db94b688-jw8cx] 2018-07-31 07:30:31.066  missing files=35
[smb-cache-test-6db94b688-jw8cx] 2018-07-31 07:30:31.066  missing file=smb-cache-test-0025-hjvVQG6JdnC0KBI5xfsBldZkCHWZQ0Fr.tmp
[smb-cache-test-6db94b688-jw8cx] 2018-07-31 07:30:31.066  missing file=smb-cache-test-0051-hjvVQG6JdnC0KBI5xfsBldZkCHWZQ0Fr.tmp
[smb-cache-test-6db94b688-jw8cx] 2018-07-31 07:30:31.066  missing file=smb-cache-test-0077-hjvVQG6JdnC0KBI5xfsBldZkCHWZQ0Fr.tmp
[smb-cache-test-6db94b688-jw8cx] 2018-07-31 07:30:31.066  missing file=smb-cache-test-0109-hjvVQG6JdnC0KBI5xfsBldZkCHWZQ0Fr.tmp
[smb-cache-test-6db94b688-jw8cx] 2018-07-31 07:30:31.067  missing file=smb-cache-test-0135-hjvVQG6JdnC0KBI5xfsBldZkCHWZQ0Fr.tmp
[smb-cache-test-6db94b688-jw8cx] 2018-07-31 07:30:31.067  missing file=smb-cache-test-0161-hjvVQG6JdnC0KBI5xfsBldZkCHWZQ0Fr.tmp
[...]

我们检查了Pod内的安装路径,它具有相同的问题,而在flexvolume mount dirs内部访问的节点上的相同安装是可以的,因此它不仅是Java,还处于Pod OS级别。 这是在同一运行中两个装载的文件计数的示例,第一个在pod内,后者在托管pod的节点中

/fileserver # pwd
/fileserver
/fileserver # ls -l _smb-cache-test/ | wc -l
938

[root@k8s-node-03 wind3-speech-file-extractor-pre-pv]# pwd
/var/lib/kubelet/pods/b4dd4252-9492-11e8-8796-000c299d5d24/volumes/juliohm~cifs/wind3-speech-file-extractor-pre-pv
[root@k8s-node-03 wind3-speech-file-extractor-pre-pv]# ls -l _smb-cache-test/ | wc -l
972

这是docker或kubernetes,它们在节点上的flexvolume创建的安装与吊舱中的相同安装之间的“隐藏”层中做得非常棘手。

其他信息:

我们已经澄清,这不是SMB缓存问题:

  • 我们尝试使用smb v1.0,v2.0,v2.1和v3.0。
  • 我们还尝试通过cifs选项cache = none禁用缓存。
  • 我们已通过注册表黑客禁用Windows上的缓存服务器端,以将缓存超时设置为0。
  • 我们在共享主机名上使用了未记录的$ NOCSC $后缀。 问题仍然存在。

我们还手动将共享安装在节点上并添加了它 作为“本地” persistedVolume而不是flexvolume持久化到容器中,问题不再存在。

谢谢

1 个答案:

答案 0 :(得分:0)

原来,该问题是由Apline图像用作Centos节点中java的基础引起的。将图像更改为基于Centos即可解决此问题。

我们之所以尝试这种方式,是因为我们发现了有关Ubuntu和SMB的文件消失的提示(不涉及docker),并认为Apline可能受到同一问题的影响,而该问题与ubuntu的关系更多,而与RHEL / Centos无关。 / p>

https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1572132

顺便说一句,在线程中使用noserverino和0777访问权限的建议解决方案未能解决我们的问题。