Cluster information:
Версия Kubernetes: 1.19.11
Используемое облако: Azure
Метод установки: создание вручную в онлайн-интерфейсе Azure / Azure CLI.
ОС хоста: Linux
CNI и версия: сетевой интерфейс контейнера Azure, последний
Привет всем! Я относительно новый пользователь Kubernetes, но думаю, что у меня есть основы. В основном я пытаюсь понять более сложную функцию совместного использования файлов.
По сути, я пытаюсь использовать JupyterHub в Kubernetes для общей среды разработки для команды из примерно десятка пользователей (мы можем расширить это до более крупных / других команд позже, но сейчас я хочу, чтобы это работало только для нашей команды), и одна функция, которая была бы чрезвычайно полезна и выглядит выполнимой, - это наличие общего каталога для записных книжек, файлов и данных. Я думаю, что довольно близок к тому, чтобы получить эту настройку, но я сталкиваюсь с растущей проблемой, которую не могу решить. Сначала я быстро объясню свою настройку, а затем расскажу о проблеме. Я буду очень признателен за любую помощь / комментарии / подсказки, которые есть у кого-нибудь!
Setup
В настоящее время все эти настройки находятся в кластере Kubernetes в Azure или других службах, размещенных в Azure. У нас есть группа ресурсов с кластером kubernetes, доменом службы приложений, зоной DNS, виртуальной сетью, реестром контейнеров (для наших пользовательских образов докеров) и учетной записью хранения. Все работает нормально, за исключением того, что в учетной записи хранения у меня есть общий файловый ресурс Azure NFS (и простой SMB, если необходимо), который я пытался подключить через PV и PVC к серверу JupyterHub, но безрезультатно.
Чтобы создать PV, я настроил общий файловый ресурс NFS в Azure и создал соответствующий секрет кубернетов следующим образом:
# Get storage account key
STORAGE_KEY=$(az storage account keys list --resource-group $resourceGroupName --account-name $storageAccountName --query "[0].value" -o tsv)
kubectl create secret generic azure-secret \
--from-literal=azurestorageaccountname=$storageAccountName \
--from-literal=azurestorageaccountkey=$STORAGE_KEY
Затем я попытался создать PV с помощью этого файла YAML:
apiVersion: v1
kind: PersistentVolume
metadata:
name: shared-nfs-pv
spec:
capacity:
storage: 100Gi
accessModes:
- ReadWriteMany
azureFile:
secretName: azure-secret
shareName: aksshare
readOnly: false
nfs:
server: wintermutessd.file.core.windows.net:/wintermutessd/wintermutessdshare
path: /home/shared
readOnly: false
storageClassName: premium-nfs
mountOptions:
- dir_mode=0777
- file_mode=0777
- uid=1000
- gid=1000
- mfsymlinks
- nobrl
Issue
Во время создания PV выдает ошибку Failed to create the persistentvolume 'shared-nfs-pv'. Error: Invalid (422) : PersistentVolume "shared-nfs-pv" is invalid: spec.azureFile: Forbidden: may not specify more than 1 volume type
. Удаление azureFile
параметров решает эту ошибку, но я чувствую, что необходимо указать секрет кубернетов, который я создал. Если я удалю параметры azureFile
, он успешно создаст и привяжет PV. Затем я создал соответствующий PVC с
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: shared-nfs-pvc
spec:
accessModes:
- ReadWriteMany
# Match name of PV
volumeName: shared-nfs-pv
storageClassName: premium-nfs
resources:
requests:
storage: 50Gi
который также успешно связан. Однако, когда я добавляю конфигурацию в свою конфигурацию Helm для JupyterHub с
singleuser:
storage:
extraVolumes:
- name: azure
persistentVolumeClaim:
claimName: azurefile
extraVolumeMounts:
- name: azure
mountPath: /home/shared
Я получаю следующую ошибку, когда сервер jupyterhub пытается создать и смонтировать PVC:
На всякий случай, если это актуально, общий файловый ресурс NFS azure доступен только через частную конечную точку, но это должно быть нормально, поскольку мой кластер kubernetes работает в той же виртуальной сети. Фактически, Azure говорит мне, что я могу просто смонтировать этот общий ресурс NFS в Linux с помощью
sudo apt-get -y update
sudo apt-get install nfs-common
sudo mkdir -p /mount/wintermutessd/wintermutessdshare
sudo mount -t nfs wintermutessd.file.core.windows.net:/wintermutessd/wintermutessdshare /mount/wintermutessd/wintermutessdshare -o vers=4,minorversion=1,sec=sys
Но когда я добавляю это в свой Dockerfile для образа докера, который я использую в своем контейнере, сборка завершается ошибкой и сообщает мне, что systemctl
не установлен. Попытка добавить это через apt-get install systemd
также не решает проблему.
Просматривая другие сообщения с дискурсом K8s, я нашел этот (Файловый обмен данными между модулями и набором демонов - Общие обсуждения - Обсудить Kubernetes), который выглядел полезным и имел полезная ссылка для развертывания сервера NSF, но я думаю, что тот факт, что мой сервер NFS является файловым ресурсом Azure, делает этот сценарий немного другим.
Если у кого-то есть идеи или предложения, я буду очень признателен!
P.S. Ранее я размещал здесь дискурс JupyterHub (Монтирование общего файлового ресурса Azure SMB или NFT на JupyterHub на кубернетах для общего каталога - JupyterHub - Форум сообщества Jupyter), но было предложено что моя проблема больше связана с k8s, чем с JupyterHub. Я также просмотрел этот другой пост о stackoverflow, но даже хотя я открыт для общего доступа к файлам SMB, он должен делать больше с виртуальными машинами, а не с PV / PVC на кубернетах.
Спасибо! :)