当前位置: 首页 > 知识库问答 >
问题:

kubernetes cifs smb flexvolume缺少文件

左丘昊天
2023-03-14

我们已经从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缓存问题:

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

我们还在节点上手动安装了共享,并将其作为“本地”持久卷(而不是flexvolume)添加到pod中,问题不再存在。

谢谢

共有1个答案

堵凯
2023-03-14

事实证明,问题是在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)。提交后返回成功,但不保存图像 它返回,这是我需要的,但我找不到上传的文件