我们正在GKE群集(Windows节点池)上对dotnet应用程序进行容器化。我们有一个要求,其中多个Pod可以访问相同的共享空间(永久卷)。它还应支持“ ReadWriteMany” AccessMode。我们探索了以下选项:
我们正在寻找其他符合我们要求的选项。请帮忙。
答案 0 :(得分:0)
您说对了,至少Windows尚不支持NFS,内置客户端v4尚不支持。因此,只要不支持NFS v4,Kubernetes团队就无法在k8s中启动这项工作。 source
在这种限制下,我只能看到Filestore.
答案 1 :(得分:0)
我一直在尝试解决相同的问题-从2个Windows Pod(IIS +控制台应用程序上的ASP.NET应用程序)访问共享文件系统。我无法使用文件存储,因为它需要NFSClient(Install-WindowsFeature NFS-Client
),并且由于需要重新启动计算机,所以无法将其安装到容器中(在容器构建或运行时),也许我丢失了在这里。
我找到的选项:
如果需要创建一个可以在单个VM上运行的简单临时演示应用程序,则可以在单个实例上运行两个Pod,创建一个永久磁盘,并使用gcloud compute instances attach-disk
,RDP将其附加到实例实例中,装入磁盘并将磁盘作为hostPath提供给Pod。
那就是我现在正在使用的解决方案。
创建SMB共享(在单独的VM上或使用Docker容器https://hub.docker.com/r/dperson/samba/
,并使用New-SmbMapping -LocalPath $shareletter -RemotePath $dhcpshare -Username $shareuser -Password $sharepasswd -Persistent $true
从pod进行访问。此解决方案适用于我的控制台应用程序,但Web应用程序无法使用(即使我已将IIS上的应用程序池设置为作为本地系统运行)也无法访问文件。也可以使用New-SmbGlobalMapping
从实例挂载SMB-flexvolume可以执行https://github.com/microsoft/K8s-Storage-Plugins/tree/master/flexvolume/windows我还没有探讨过该选项,但我认为它会有同样的问题(IIS无法看到文件)。
我认为最好的(最安全和可靠的)解决方案是在单独的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/ 但这似乎并不容易。