NFS (Network File System) — это простое и надежное решение для предоставления общего файлового хранилища в Kubernetes. В этой статье мы рассмотрим, как развернуть NFS-сервер на RHEL 10.0 и подключить его к кластеру Kubernetes с помощью динамического выделения PV (Persistent Volumes) через nfs-subdir-external-provisioner
.
# Обновление системы
sudo dnf update -y
# Установка NFS-сервера
sudo dnf install -y nfs-utils
# Создание директории для экспорта (желательно чтобы она была на выделенном диске)
mkdir /data
chmod 777 /data # (Настройте права в соответствии с политиками безопасности)
# Настройка экспорта в /etc/exports
cat <<EOF >> /etc/exports
/data 172.16.1.111(rw,sync,no_root_squash,no_subtree_check)
/data 172.16.0.112(rw,sync,no_root_squash,no_subtree_check)
/data 172.16.0.113(rw,sync,no_root_squash,no_subtree_check)
EOF
# Включение и запуск сервисов
sudo systemctl enable --now nfs-server rpcbind
sudo systemctl restart nfs-server
# Применение экспорта
sudo exportfs -ar
Проверка доступности:
showmount -e localhost
Вывод должен содержать /data
с указанными IP-адресами.
На каждом узле Kubernetes, который будет подключаться к NFS, выполните:
sudo dnf install -y nfs-utils
Для динамического создания Persistent Volumes (PV) используем nfs-subdir-external-provisioner:
# Добавление Helm-репозитория
helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner
# Установка provisioner
helm install nfs-subdir-external-provisioner \
nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
--create-namespace \
--namespace nfs-provisioner \
--set nfs.server=172.16.0.121 \ # IP или hostname NFS-сервера
--set nfs.path=/data \
--set storageClass.defaultClass=true # Сделать StorageClass по умолчанию
Проверка storageclass:
kubectl get storageclass
Проверка создания PVC:
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nfs-pvc
spec:
storageClassName: nfs-client # Имя StorageClass из Helm
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
EOF
Проверка состояния PVC:
kubectl get pvc