我们已经从kubernetes Centos集群上的windows服务器上安装了一个smb共享,作为使用这个插件的PVhttps://github.com/juliohm1978/kubernetes-cifs-volumedriver,这基本上只是一个使用的脚本mount.cifs.我们还尝试了微软插件和<-PLHD--2/>,但是他们使用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创建的挂载和pod中的同一挂载之间的“隐藏”层中做的非常可疑的事情。
附加信息:
我们已澄清这不是SMB缓存问题:
我们还在节点上手动安装了共享,并将其作为“本地”持久卷(而不是flexvolume)添加到pod中,问题不再存在。
谢谢
事实证明,问题是在Centos节点中使用Apline映像作为java的基础造成的。将图像更改为基于Centos的解决了这个问题。
我们尝试了这种方式,因为我们发现了一个关于Ubuntu和SMB文件消失的提示(没有docker参与),并认为Apline可能会受到相同问题的影响,这些问题更多地与ubuntu有关,而不是与RHEL/Centos有关
https://bugs.launchpad.net/ubuntu/source/linux/bug/1572132
顺便说一句,在使用noserverino和0777访问权限的线程中提出的解决方案并没有解决我们的问题。
问题内容: 嗨,我是Android编程的新手,我想问的问题可能很简单,但是我对如何使其工作一无所知,请多多包涵。 我从Android开发人员网站安装了android-sdk和相关工具。我按照他们的指示创建了HelloWorld应用,但出现了一些我不理解的错误。 文件MainActivity.java是一个自动生成的文件,在以下位置,我不断出现此文件错误: 因此,我尝试浏览生成的class文件中的l
问题内容: 在从openni编译演示时,我偶然发现了此错误: 我在Mac上执行此操作。我最好的猜测是该文件不在我的java.library.path中 我现在的问题是:这个猜测正确吗,以及如何在netbeans中添加到java.library.path中。 提前Thx 问题答案: 将此添加到projects属性的VM选项中:-Djava.library.path = / Users / olivi
Firebase缺少dSYM文件 我按照指令上传dSYM文件/path/to/pods/directory/firebaseCrashlytics/upload-symbols-gsp/path/to/googleService-info.plist-p ios/path/to/dsyms
我想在我的项目的POM中引用一个jar(即vim25.jar,VMWare VSphere server management)。由于MavenRepository中没有引用此文件,我执行以下步骤: null mvn安装:install-file-dfile=./vim25.jar-dgroupid=manuallyinstalledjars-dartifactid=vim25-dversion=
我试图从我的一个项目中引用logary-js(免责声明:我自己的项目)。 我有这个packages.json文件: 此外,在本例https://github.com/logary/logary-js/tree/master/examples/webpack中,它很好地引用了日志,尽管是通过文件系统而不是Github。 所以问题就变成了;如何从GitHub引用日志?或者我应该在它的package.j
我想将图像上载到子目录(public/uploads)。提交后返回成功,但不保存图像 它返回,这是我需要的,但我找不到上传的文件