【问题标题】:kubernetes cifs smb flexvolume is missing fileskubernetes cifs smb flexvolume 缺少文件
【发布时间】:2018-07-31 09:14:07
【问题描述】:

我们已经使用这个插件https://github.com/juliohm1978/kubernetes-cifs-volumedriver,从 Windows 服务器在 kubernetes Centos 集群上挂载了一个 smb 共享作为 PV,这基本上只是一个使用 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 挂载目录中访问的节点上的相同挂载是可以的,所以它不仅仅是 java,它在 pod 操作系统级别。 这是同一运行的两个挂载上的文件计数的示例,第一个在 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 选项 cache=none 禁用缓存。
  • 我们已禁用 Windows 上的缓存服务器端,并通过注册表破解将缓存超时设置为 0。
  • 我们在共享主机名上使用了未记录的 $NOCSC$ 后缀。 问题仍然存在。

我们还在节点上手动挂载了共享并添加了它 作为“本地”persistedVolume 而不是 flexvolume 到 pod,问题不再存在。

谢谢

【问题讨论】:

    标签: docker kubernetes mount smb cifs


    【解决方案1】:

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

    我们尝试这种方式是因为我们发现有关 Ubuntu 和 SMB 的文件同样消失的提示(不涉及 docker),并认为 Apline 可能会受到与 ubuntu 相关的问题的影响,而不是 RHEL/Centos

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

    顺便说一句,线程中提出的使用 noserverino 和 0777 访问权限的解决方案并没有解决我们的问题。

    【讨论】:

      猜你喜欢
      • 2016-11-02
      • 2021-12-05
      • 1970-01-01
      • 2017-11-21
      • 2011-04-15
      • 1970-01-01
      • 2020-02-26
      • 2013-07-21
      • 1970-01-01
      相关资源
      最近更新 更多