Пост

Добавление NFS как StorageClass в K8S

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

Шаг 1: Настройка NFS Сервера

  1. Установка NFS сервера: На вашем сервере Linux выполните следующие команды для установки NFS:

    1
    2
    
    sudo apt-get update
    sudo apt-get install nfs-kernel-server
    
  2. Настройка экспорта NFS: Создайте директорию, которая будет использоваться для NFS экспорта, и настройте экспорт.

    1
    2
    3
    
    sudo mkdir -p /nfs/k8s
    sudo chown nobody:nogroup /nfs/k8s
    sudo chmod 777 /nfs/k8s
    

    Добавьте следующую строку в файл /etc/exports, чтобы разрешить доступ к этой папке:

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

    Затем перезапустите службу NFS:

    1
    2
    
    sudo exportfs -ra
    sudo systemctl restart nfs-kernel-server
    

Шаг 2: Развертывание NFS Client Provisioner в Kubernetes

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

  1. Добавление Helm репозитория:

    1
    
    helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
    
  2. Установка через Helm:

    Установите nfs-subdir-external-provisioner в вашем кластере Kubernetes, используя Helm:

    1
    2
    3
    
    helm install nfs-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
      --set nfs.server=<NFS_SERVER_IP> \
      --set nfs.path=/nfs/k8s
    

    Замените <NFS_SERVER_IP> на IP адрес или имя хоста вашего NFS сервера.

Примеры

Для nfs-ssd

1
2
3
4
5
6
helm install nfs-ssd-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
  --set nfs.server=10.0.0.104 \
  --set nfs.path=/nfs-ssd/k8s \
  --set storageClass.defaultClass=true \
  --set nfs.volumeName=nfs-ssd \
  --set storageClass.name=nfs-ssd

Для nfs-HDD

1
2
3
4
5
helm install nfs-hdd-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
  --set nfs.server=10.0.0.104 \
  --set nfs.path=/nfs-hdd/k8s \
  --set nfs.volumeName=nfs-ssd \
  --set storageClass.name=nfs-hdd

Шаг 3: Создание StorageClass для NFS

  1. Создайте манифест StorageClass:

    1
    2
    3
    4
    5
    6
    7
    
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: nfs
      annotations:
        storageclass.kubernetes.io/is-default-class: "true"
    provisioner: nfs-subdir-external-provisioner # убедитесь, что это соответствует имени, указанному при установке через Helm
    
  2. Примените манифест:

    Выполните kubectl apply -f <имя-файла>.yaml для создания StorageClass в вашем кластере.

После выполнения этих шагов у вас будет настроен NFS сервер, установлен NFS Client Provisioner в кластере Kubernetes и создан StorageClass, который можно использовать для динамического провиженинга персистентных томов через NFS.

Авторский пост защищен лицензией CC BY 4.0 .