Проблемы с NFS на Kubernetes (Talos Linux)

Вопрос или проблема

У меня есть некоторые проблемы с моим кластером Talos Linux. В данный момент я запускаю 2 машины (1 контрольная и 1 рабочая) на Virtualbox, обе машины имеют 4 ГБ оперативной памяти и 4 единицы CPU. У меня также есть сервер TrueNas для предоставления NFS-ресурсов, nfsv4 включен на TrueNas, и ресурс доступен на других компьютерах с Linux (проверено на Ubuntu 20.04 и Kali Linux), и, конечно, у всех машин есть подключение к сети. Я установил драйвер NFS-CSI, как предлагает документация Kubernetes. Я пытаюсь развернуть Helm-чарт Moodle от Bitnami, и он работает, когда я не включаю постоянство, но когда я его включаю, я получаю следующую ошибку:

MountVolume.SetUp не удалось для тома “kube-nfs-pv2”: ошибка монтирования: статус выхода 32 Команда монтирования: mount Аргументы монтирования: -t nfs 172.20.4.114:/mnt/Pool1/Kubernetes-Storage /var/lib/kubelet/pods/2e9dd58c-923e-4788-8caa-2203a7c972ec/volumes/kubernetes.io~nfs/kube-nfs-pv2 Вывод: mount.nfs: монтирование 172.20.4.114:/mnt/Pool1/Kubernetes-Storage не удалось, причина, указанная сервером: Нет такого файла или директории

Вот мой файл класса хранения:

kind: StorageClass
metadata:
  name: hdd-nfs
provisioner: nfs.csi.k8s.io
parameters:
  server: 172.20.4.114
  path: /mnt/Pool1/Kubernetes-Storage 
  readOnly: "false"
mountOptions:
  - hard
  - nfsvers=4

А вот мой файл постоянного тома:

kind: PersistentVolume
metadata:
  name: kube-nfs-pv1
spec:
  storageClassName: hdd-nfs
  capacity:
    storage: 30Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  nfs:
    server: 172.20.4.114
    path: "/mnt/Pool1/Kubernetes-Storage"

Я не знаю, что мне делать, чтобы решить эту проблему, любая помощь будет очень полезна.

Ответ или решение

Для решения проблемы с использованием NFS в вашем кластере Kubernetes на Talos Linux, давайте разберём основные моменты, которые могут быть причиной ошибки, а также предложим шаги по устранению неполадок.

Проблема

Вы указали, что при использовании персистентного хранилища для Helm-чарта Moodle на основе nfs.csi.k8s.io получаете ошибку:

mount.nfs: mounting 172.20.4.114:/mnt/Pool1/Kubernetes-Storage failed, reason given by server: No such file or directory

Эта ошибка обычно указывает на то, что заданный путь к NFS-ресурсу не существует или недоступен для монтирования.

Шаги по устранению неполадок

  1. Проверьте доступность NFS-ресурса:

    Убедитесь, что NFS-ресурс доступен не только с вашего TrueNAS, но и с вашего кластера Talos. Попробуйте выполнить следующую команду на одном из узлов вашего кластера:

    showmount -e 172.20.4.114

    Это должно отобразить доступные экспортированные системы файлов. Убедитесь, что ваш путь /mnt/Pool1/Kubernetes-Storage указан среди экспортируемых.

  2. Проверьте экспортируемый путь:

    Убедитесь, что папка /mnt/Pool1/Kubernetes-Storage действительно существует на сервере TrueNAS и имеет права доступа для вашего NFS-клиента. Проверить это можно, выполнив команду:

    ls -ld /mnt/Pool1/Kubernetes-Storage

    Убедитесь, что права доступа к директории достаточно для монтирования (рекомендуется, чтобы права были 755 или 777).

  3. Параметры NFS:

    Проверьте настройки вашего NFS-сервера для настройки экспорта. Конфигурация должна позволять клиентам из вашей сети монтировать ресурсы. Например, в файле /etc/exports на сервере TrueNAS убедитесь, что добавлена соответствующая строка:

    /mnt/Pool1/Kubernetes-Storage *(rw,sync,no_subtree_check)

    Затем выполните команду exportfs -ra для применения изменений.

  4. Проверьте конфигурацию StorageClass и PersistentVolume:

    Убедитесь, что в конфигурации StorageClass и PersistentVolume указаны правильные параметры. Путь должен быть указан без дополнительных пробелов или ошибочных символов.

    Для вашего PersistentVolume правильной конфигурацией будет:

    kind: PersistentVolume
    metadata:
     name: kube-nfs-pv1
    spec:
     storageClassName: hdd-nfs
     capacity:
       storage: 30Gi
     volumeMode: Filesystem
     accessModes:
       - ReadWriteOnce
     nfs:
       server: 172.20.4.114
       path: /mnt/Pool1/Kubernetes-Storage
  5. Логи сообщений:

    Если ошибка сохраняется, просмотрите логи kubelet на узлах вашего кластера Talos для получения дополнительной информации. Логи можно проверить следующей командой:

    journalctl -u kubelet

    Обратите внимание на сообщения, связанные с NFS-накладными расходами.

Заключение

Если, после всех этих проверок, проблема всё еще сохраняется, возможно, стоит рассмотреть вариант использования другого метода для реализации персистентного хранилища, например, использовать другой провайдер хранилища или проверить настройки сети между вашим кластером и NFS-сервером.

Если у вас останутся вопросы или понадобятся дополнительные пояснения, не стесняйтесь задавать их.

Оцените материал
Добавить комментарий

Капча загружается...