Доступ к сетевому файлу в кластере GKE - пул узлов Windows
Мы контейнеризуем приложение dotnet в кластере GKE (пул узлов Windows). У нас есть требование, согласно которому несколько модулей могут получить доступ к одному и тому же общему пространству (постоянному тому). Также он должен поддерживать режим доступа "ReadWriteMany". Мы рассмотрели вариант ниже:
- Постоянный диск GCE, к которому обращается постоянный том.(Он не поддерживает ReadWriteMany. Доступ к диску может иметь только один модуль).
- Общий сетевой файловый ресурс (NFS). В настоящее время не поддерживается для пулов узлов Windows.
- Filestore подходит для решений, но дорого и управляется Google.
Мы ищем другие варианты, соответствующие нашим требованиям. Пожалуйста помоги.
2 ответа
Я пытался решить ту же проблему - доступ к общей файловой системе из двух модулей Windows (приложение ASP.NET в консольном приложении IIS +). Мне не удалось использовать Filestore, потому что для этого требуется NFSClient (Install-WindowsFeature NFS-Client
), и я не смог установить его в контейнеры (во время сборки контейнера или во время выполнения), так как он требует перезагрузки компьютера - возможно, мне здесь не хватает чего-то.
Варианты, которые я нашел:
Если вам нужно создать простое временное демонстрационное приложение, которое может работать на одной виртуальной машине, вы можете запустить оба модуля на одном экземпляре, создать постоянный диск, присоединить его к экземпляру с помощью
gcloud compute instances attach-disk
, RDP в экземпляр, смонтируйте диск и предоставьте диск модулям в качестве hostPath. Это решение, которое я использую сейчас.Создайте общий ресурс SMB (на отдельной виртуальной машине или с помощью контейнера 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 не видит файлы).Я думаю, что лучшим (наиболее безопасным и надежным) решением было бы настроить контроллер домена Active Directory и общий ресурс SMB на отдельной виртуальной машине и предоставить к нему доступ к контейнерам с помощью gMSA: https://docs.microsoft.com/en-us/virtualization/windowscontainers/manage-containers/manage-serviceaccountshttps://kubernetes.io/docs/tasks/configure-pod-container/configure-gmsa/ Это непросто.