我们使用此插件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缓存问题:
我们还手动将共享安装在节点上并添加了它 作为“本地” persistedVolume而不是flexvolume持久化到容器中,问题不再存在。
谢谢
答案 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访问权限的建议解决方案未能解决我们的问题。