Подключение 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 کاربر این را مفید یافتند
آیا این پاسخ به شما کمک کرد؟

مقالات مربوطه

Управление нодой NFS и создание PV

Основные преимущества использования NFS в Kubernetes   Использовать существующее хранилище, вы...

Управление кластером kubernetes

Обзор На этой странице представлены основные команды, которые позволяют пользователям создавать,...

Введение в CSE

Описание Container Service Extension (CSE) - это расширение VMware Cloud Director (VCD), которое...

Создание кластера Kubernetes через vCloud Director

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

Развёртывание кластера kubernetes c помощью CLI

Для развёртывания и управления kubernetes в vCloud можно воспользоваться инструментом container...