Подключение NFS-хранилища к Kubernetes через dynamic provisioner

Подключение NFS-хранилища к Kubernetes через dynamic provisioner

В этой заметке показан простой способ подключить NFS-хранилище к кластеру Kubernetes и включить динамическое создание PersistentVolume с помощью провиженера nfs-subdir-external-provisioner. Более подробная информация о том, что такое PVC, PV и архитектуре хранения данных в кластере kubernetes, вы можете прочитать в этой статье.

Такой подход позволяет приложениям автоматически получать хранилище через PVC, без ручного создания PV. Для дальнейшей настройки у вас уже должен быть развернут кластер k8s и добавлен еще один хост с диском большого объема для организации на нем NFS.

Архитектура

Application Pod

     │

PersistentVolumeClaim

     │

StorageClass

     │

nfs-subdir-external-provisioner

     │

NFS Server

Когда приложение создаёт PVC, provisioner автоматически создаёт каталог на NFS и привязывает его к Pod.

1. Подготовка NFS сервера

Установить NFS сервер:

sudo apt update

sudo apt install -y nfs-kernel-server

Создать директорию для Kubernetes:

sudo mkdir -p /srv/nfs/k8s

sudo chmod 777 /srv/nfs/k8s

Добавить экспорт в /etc/exports:

/srv/nfs/k8s *(rw,sync,no_subtree_check,no_root_squash)

Применить конфигурацию:

sudo exportfs -rav

sudo systemctl restart nfs-kernel-server

Проверить:

showmount -e <NFS_IP>

 

2. Установка NFS клиента на ноды Kubernetes

Каждая worker-нода должна иметь NFS клиент, иначе kubelet не сможет смонтировать volume.

Ubuntu / Debian:

sudo apt install -y nfs-common

RHEL / CentOS:

sudo yum install -y nfs-utils

3. Установка provisioner через Helm

Для установки используется пакетный менеджер Helm.

Добавить репозиторий:

helm repo add nfs-subdir-external-provisioner \

https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner

 

helm repo update

Установить provisioner:

helm install nfs-provisioner \

nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \

--set nfs.server=<NFS_IP> \

--set nfs.path=/srv/nfs/k8s \

--set storageClass.name=nfs-storage

Проверить pod:

kubectl get pods

 

4. Проверка StorageClass

После установки появится StorageClass:

kubectl get storageclass

Пример:

При необходимости сделать его default:

kubectl patch storageclass nfs-storage \

-p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'

5. Проверка через PVC

Создать файл pvc.yaml:

apiVersion: v1

kind: PersistentVolumeClaim

metadata:
name: test-pvc

spec:
accessModes:
- ReadWriteMany

storageClassName: nfs-storage

resources:
requests:
 storage: 1Gi

Применить:

kubectl apply -f pvc.yaml

Проверить статус:

kubectl get pvc

Результат:

На NFS сервере появится директория:

/srv/nfs/k8s/pvc-xxxxxxx

Итог

После установки:

  • приложения создают PVC

  • Kubernetes автоматически выделяет PersistentVolume

  • provisioner создаёт каталог на NFS

  • Pod монтирует storage как обычный volume

Это позволяет централизованно использовать сетевое хранилище и упростить управление данными в кластере Kubernetes.

  • k8s, kubernetes, nfs, PV, PVC
  • 0 Users Found This Useful
Was this answer helpful?

Related Articles

NFS node management and PV creation

  Advantages of using NFS in Kubernetes   Using existing storage. You can mount an existing...

Managing a Kubernetes cluster

Overview Learn the basic commands that allow users to create, manage, and delete Kubernetes...

Introduction to CSE

The Container Service Extension (CSE) is an extension to VMware Cloud Director (VCD) that helps...

How to create a Kubernetes cluster via vCloud Director

To create the cluster, you need to log in to a personal tenant with an administrator user at...

How to Deploy a Kubernetes Cluster by Using the CLI

To deploy and manage Kubernetes in vCloud, you can use the Container Service Extensions tool. An...