Доступ к общему сетевому файлу в кластере GKE - Windows пул узлов - PullRequest
0 голосов
/ 28 мая 2020

Мы контейнеризуем приложение do tnet в кластере GKE (Windows пул узлов). У нас есть требование, согласно которому несколько модулей могут получить доступ к одному и тому же общему пространству (постоянному тому). Также он должен поддерживать режим доступа «ReadWriteMany». Мы рассмотрели вариант ниже:

  1. Постоянный диск GCE, доступ к которому осуществляется постоянным томом. (Он не поддерживает ReadWriteMany. Доступ к диску может иметь только один модуль).
  2. Общий сетевой файловый ресурс ( NFS). В настоящее время не поддерживается для пулов узлов windows.
  3. Файловое хранилище соответствует решениям, но дорого и управляется Google.

Мы ищем другие варианты, соответствующие нашим требованиям. Пожалуйста, помогите.

Ответы [ 2 ]

0 голосов
/ 30 мая 2020

Я пытался решить ту же проблему - доступ к общей файловой системе из 2 Windows модулей (приложение ASP. NET в консольном приложении IIS +). Я не смог использовать Filestore, потому что для него требуется NFSClient (Install-WindowsFeature NFS-Client), и я не мог установить его в контейнеры (во время сборки контейнера или во время выполнения), так как он требует перезагрузки компьютера - возможно, мне здесь не хватает sth .

Варианты, которые я нашел:

  1. Если вам нужно создать простое временное демонстрационное приложение, которое может работать на одной виртуальной машине, вы можете запустить оба модуля на одной Например, создайте постоянный диск, подключите его к экземпляру с помощью gcloud compute instances attach-disk, подключите RDP к экземпляру, смонтируйте диск и предоставьте диск модулям как hostPath. Это решение, которое я использую сейчас.

  2. Создайте общий ресурс 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 не видит файлы).

  3. Я думаю, что лучшим (наиболее безопасным и надежным) решением было бы установить контроллер домена 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/ Это кажется непростым.

0 голосов
/ 28 мая 2020

Вы правы, говоря, что NFS еще не поддерживается на Windows, по крайней мере, не для встроенного клиента v4. Так что пока нет поддержки NFS v4, команда Kubernetes не могла начать эту работу в k8s. источник

С этим ограничением единственное решение, которое я вижу, остается Filestore.

...