簡體   English   中英

GKE 集群上的網絡文件共享訪問 - Windows 節點池

[英]Network File share access on GKE cluster - Windows node pool

我們正在 GKE 集群(Windows 節點池)上容器化 dotnet 應用程序。 我們有一個要求,多個 pod 可以訪問同一個共享空間(持久卷)。 它還應該支持“ReadWriteMany”訪問模式。 我們探索了以下選項:

  1. GCE Persistent 磁盤由 Persistent 卷訪問。(不支持 ReadWriteMany。只有一個 pod 可以訪問該磁盤)。
  2. 網絡文件共享 (NFS)。 目前不支持 windows 節點池。
  3. Filestore 適合解決方案,但價格昂貴且由谷歌管理。

我們正在尋找其他選擇來滿足我們的要求。 請幫忙。

您說 Windows 尚不支持 NFS 是對的,至少對於內置客戶端 v4 不支持。 所以只要不支持 NFS v4,Kubernetes 團隊就無法在 k8s 中啟動這項工作。 資源

有了這個約束,我能看到的唯一解決方案仍然是Filestore。

我一直在嘗試解決同樣的問題 - 從 2 個 Windows pod(IIS 上的 ASP.NET 應用程序 + 控制台應用程序)訪問共享文件系統。 我無法使用 Filestore,因為它需要 NFSClient ( Install-WindowsFeature NFS-Client ),並且我無法將它安裝到容器中(在容器構建或運行時),因為它需要重新啟動計算機 - 也許我是在這里想念某事。

我發現的選項:

  1. 如果您需要創建一個可以在單個 VM 上運行的簡單臨時演示應用程序,您可以在單個實例上運行兩個 pod,創建一個 Persistent Disk,使用gcloud compute instances attach-disk將其附加到實例,RDP 到實例中,掛載磁盤並將磁盤作為 hostPath 提供給 pod。 這就是我現在使用的解決方案。

  2. Create an SMB share (on a separate VM or using a Docker container https://hub.docker.com/r/dperson/samba/ and access it from the pods using New-SmbMapping -LocalPath $shareletter -RemotePath $dhcpshare -Username $shareuser -Password $sharepasswd -Persistent $true 。此解決方案適用於我的控制台應用程序,但 web 應用程序無法訪問文件(即使我已將 IIS 上的應用程序池設置為作為本地系統運行)。SMB 可以也可以使用New-SmbGlobalMapping從實例安裝 - flexvolume 可以做到https://github.com/microsoft/K8s-Storage-Plugins/tree/master/flexvolume/windows 。我還沒有探索過這個選項,我認為它會有同樣的問題(IIS 沒有看到文件)。

  3. 我認為最好(最安全和可靠)的解決方案是在單獨的 VM 上設置 Active Directory 域 Controller 和 SMB 共享,並使用 gMSA 提供對容器的訪問權限: https://docs.microsoft.com/en-us /virtualization/windowscontainers/manage-containers/manage-serviceaccounts https://kubernetes.io/docs/tasks/configure-pod-container/configure-gmsa/但這似乎並不容易。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM