6.9 KiB
Инструкция: Анализ хранилища Kubernetes и настройка NFS
Цель
Проанализировать текущую конфигурацию хранилища Kubernetes и подготовить план внедрения NFS StorageClass для сохранения данных при удалении namespace.
1. Собрать информацию о кластере
1.1. Версия Kubernetes и тип дистрибутива
kubectl version --short
# или
kubectl version
Определить, используется ли k3s, k8s, microk8s и т.д.:
# Проверить наличие k3s
which k3s
# Проверить процесс
ps aux | grep -E 'kube|k3s'
1.2. StorageClass
kubectl get storageclass -o wide
Запомнить:
PROVISIONER— какой драйвер используетсяRECLAIMPOLICY— Delete или Retain- Какой StorageClass помечен как
(default)
1.3. Существующие PV и PVC
kubectl get pv -o wide
kubectl get pvc --all-namespaces
Посмотреть, какие PVC привязаны к каким PV, и какой reclaimPolicy у PV.
1.4. Нода и диски
# Список нод
kubectl get nodes -o wide
# На каждой ноде (через ssh или локально):
lsblk
df -h
cat /etc/fstab
Определить:
- Есть ли отдельный раздел/диск для данных
- Куда смонтированы разделы
- Сколько свободного места
- Есть ли монтирование NTFS-разделов (как
/media/forust/Programs)
1.5. Где local-path хранит данные (для k3s)
ls -la /var/lib/rancher/k3s/storage/ 2>/dev/null
# или для microk8s
ls -la /var/snap/microk8s/common/ 2>/dev/null
2. Анализ: сохраняются ли данные при удалении namespace?
| Сценарий | Результат |
|---|---|
kubectl delete ns <ns> |
Все PVC в namespace удаляются |
PVC → PV c reclaimPolicy: Delete |
PV и данные удалены |
PVC → PV c reclaimPolicy: Retain |
PV остаётся (статус Released), данные целы |
Вывод: Если reclaimPolicy в StorageClass = Delete, то данные пропадут. Если Retain — сохранятся.
3. План внедрения NFS
3.1. Проверить, установлен ли NFS
which nfsstat exportfs mount.nfs
systemctl status nfs-server 2>/dev/null || systemctl status nfs-kernel-server 2>/dev/null
3.2. Выбрать директорию для NFS-экспорта
Варианты (выбрать подходящий):
/var/lib/k8s-nfs/— на корневом разделе<путь к отдельному разделу>/k8s-nfs/— если есть отдельный диск/раздел- Не рекомендуется использовать NTFS-раздел (проблемы с правами и производительностью)
Требования:
- Файловая система: ext4 или xfs (не ntfs!)
- Достаточно свободного места
- Права:
755, владелец root
3.3. Установить NFS-сервер
# Debian/Ubuntu
apt update && apt install -y nfs-kernel-server
# RHEL/Fedora
dnf install -y nfs-utils
3.4. Настроить экспорт
Создать директорию:
mkdir -p /var/lib/k8s-nfs
chmod 755 /var/lib/k8s-nfs
Добавить в /etc/exports:
/var/lib/k8s-nfs *(rw,sync,no_subtree_check,no_root_squash)
Применить:
exportfs -rav
Проверить:
showmount -e localhost
3.5. Выбрать способ интеграции с Kubernetes
Вариант A: nfs-subdir-external-provisioner (проще)
helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
helm install nfs-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
--namespace kube-system \
--set nfs.server=127.0.0.1 \
--set nfs.path=/var/lib/k8s-nfs \
--set storageClass.name=nfs \
--set storageClass.defaultClass=false \
--set storageClass.reclaimPolicy=Retain
Вариант B: NFS CSI Driver
helm repo add csi-driver-nfs https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/charts
helm install csi-driver-nfs csi-driver-nfs/csi-driver-nfs --namespace kube-system
После установки CSI драйвера создать StorageClass:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: nfs
provisioner: nfs.csi.k8s.io
parameters:
server: 127.0.0.1
share: /var/lib/k8s-nfs
reclaimPolicy: Retain
volumeBindingMode: Immediate
3.6. Проверить результат
kubectl get storageclass
kubectl get pods -n kube-system | grep -E 'nfs|provisioner'
4. Итоговая конфигурация
После внедрения в кластере будет два StorageClass:
| Имя | Provisioner | ReclaimPolicy | Назначение |
|---|---|---|---|
local-path (default) |
rancher.io/local-path | Delete | Временные данные, stateless |
nfs |
nfs-subdir-external-provisioner или nfs.csi.k8s.io | Retain | Данные, которые нужно сохранять |
Главное преимущество: PVC c storageClassName: nfs при удалении namespace сохраняют данные на диске, так как NFS-провизор использует reclaimPolicy: Retain или файлы физически остаются в NFS-экспорте.
5. Ответы на частые вопросы
В: Не упадёт ли local-path при установке NFS? О: Нет, они независимы. local-path продолжает работать как обычно.
В: Данные NFS и local-path будут на одном диске? О: Да, можно настроить оба на одном разделе, в разных каталогах.
В: Что если у меня несколько нод? О: NFS сервер нужно поднять на одной ноде, а с других нод должна быть доступна шари. Для multi-node лучше использовать отдельный сервер или distributed storage (Longhorn, Rook/Ceph).
В: Можно ли использовать существующий NTFS-раздел для NFS? О: Не рекомендуется — NTFS не поддерживает права Linux (no_root_squash не сработает корректно), возможны проблемы с блокировками и производительностью.