0

我们正在 GKE 集群(Windows 节点池)上容器化 dotnet 应用程序。我们有一个要求,多个 pod 可以访问同一个共享空间(持久卷)。它还应该支持“ReadWriteMany”访问模式。我们探索了以下选项:

  1. GCE Persistent 磁盘由 Persistent 卷访问。(不支持 ReadWriteMany。只有一个 pod 可以访问该磁盘)。
  2. 网络文件共享 (NFS)。当前不支持 Windows 节点池。
  3. Filestore 适合解决方案,但价格昂贵且由谷歌管理。

我们正在寻找其他选择来满足我们的要求。请帮忙。

4

2 回答 2

0

我一直在尝试解决同样的问题 - 从 2 个 Windows pod(IIS 上的 ASP.NET 应用程序 + 控制台应用程序)访问共享文件系统。我无法使用 Filestore,因为它需要 NFSClient ( Install-WindowsFeature NFS-Client),并且我无法将其安装到容器中(在容器构建或运行时),因为它需要重新启动计算机 - 也许我在这里遗漏了一些东西。

我发现的选项:

  1. 如果您需要创建一个可以在单个 VM 上运行的简单临时演示应用程序,您可以在单个实例上运行两个 pod,创建一个持久磁盘,将其附加到实例gcloud compute instances attach-disk,RDP 到实例中,挂载磁盘并提供磁盘到 pod 作为 hostPath。这就是我现在使用的解决方案。

  2. 创建一个 SMB 共享(在单独的 VM 上或使用 Docker 容器https://hub.docker.com/r/dperson/samba/,并使用New-SmbMapping -LocalPath $shareletter -RemotePath $dhcpshare -Username $shareuser -Password $sharepasswd -Persistent $true. IIS 作为本地系统运行)。SMB 也可以使用从实例挂载New-SmbGlobalMapping- flexvolume 会这样做https://github.com/microsoft/K8s-Storage-Plugins/tree/master/flexvolume/windows。我没有'没有探索那个选项,我认为它会有同样的问题(IIS 没有看到文件)。

  3. 我认为最好(最安全和可靠)的解决方案是在单独的 VM 上设置 Active Directory 域控制器和 SMB 共享,并使用 gMSA 提供对容器的访问:https ://docs.microsoft.com/en-us /virtualization/windowscontainers/manage-containers/manage-serviceaccounts https://kubernetes.io/docs/tasks/configure-pod-container/configure-gmsa/ 但这似乎并不容易。

于 2020-05-30T08:38:02.723 回答
0

您说对了,Windows 上尚不支持 NFS,至少内置客户端 v4 不支持 NFS。所以只要不支持 NFS v4,Kubernetes 团队就无法在 k8s 中启动这项工作。资源

有了这个约束,我能看到的唯一解决方案仍然是Filestore。

于 2020-05-28T13:50:44.810 回答