Storage - Kulichanin/speedtest GitHub Wiki

Data speedtest

Хранение данных

Проблема!

Приложению нужно отдать статику вебсерву caddy

Решение!

Развернуть nfs сервер

Настройка nfs сервера

Для Ubuntu/Debian:

sudo apt update
sudo apt install nfs-kernel-server

Для CentOS/RHEL:

sudo dnf install nfs-utils

Создание каталога для экспорта

Выберите или создайте каталог, который будет экспортироваться клиентам.

sudo mkdir -p /data/shared
sudo chmod 777 /data/shared

Настройка экспорта

Отредактируйте файл /etc/exports, чтобы указать, какие каталоги экспортировать и какие права предоставлять.

Пример строки в /etc/exports:

/srv/nfs/shared 192.168.1.0/24(rw,sync,no_root_squash,no_subtree_check)

Да, no_root_squash является небезопасной настройкой, но без этой настройки mysql сервер в каталоге не сможет получить права для работы с файлами

/srv/nfs/shared — каталог для экспорта. 192.168.1.0/24 — подсеть, которой разрешен доступ.

Параметры: rw — разрешение на чтение и запись. sync — синхронизация записи на диск (безопаснее). no_subtree_check — отключение проверки подпапок (повышает производительность). После изменения файла примените настройки:

sudo exportfs -ra

Запуск и включение службы NFS

Запустите службу NFS и настройте её автозапуск:

Для Ubuntu/Debian:

sudo systemctl start nfs
sudo systemctl enable nfs

Для CentOS/RHEL:

sudo systemctl start nfs-server
sudo systemctl enable nfs-server

Настройка брандмауэра

Убедитесь, что порты NFS открыты:

NFS использует порты: 2049 (TCP/UDP), 111 (для RPC). Для настройки брандмауэра:

Для UFW (Ubuntu/Debian):

sudo ufw allow from 192.168.1.0/24 to any port nfs

Для Firewalld (CentOS/RHEL):

sudo firewall-cmd --permanent --add-service=nfs
sudo firewall-cmd --reload

Проверка экспорта

Проверьте список экспортируемых каталогов:

sudo exportfs -v

Теперь ваш NFS-сервер готов к использованию! Если что-то не работает, проверьте журналы:

sudo journalctl -xe

Настройка клиента (на другой машине)

Важно!

Обратить внимание, что для монтирования nfs на нодах k8s должен быть установлен пакет nfs-common.

Также необходим nfs provisioner

[On CentOS/RHEL]

dnf install nfs-utils nfs4-acl-tools 

[On Debian/Ubuntu]

apt install nfs-common nfs4-acl-tools 

Папку которую нужно смонтировать вы можете получить командой

showmount -e адрес_nfs_сервера

Смонтируйте удалённый каталог если требуется

sudo mount 192.168.1.10:/srv/nfs/shared /mnt

(где 192.168.1.10 — IP-адрес NFS-сервера, /mnt — точка монтирования на клиенте). Для автоматического монтирования добавьте запись в /etc/fstab: plaintext

192.168.1.10:/srv/nfs/shared /mnt nfs defaults 0 0

Настройка nfs kuber

To note copy, you must already have an NFS Server.

With Helm

helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
helm install --namespace nfs-provisioner --create-namespace nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
    --set nfs.server=x.x.x.x \
    --set nfs.path=/exported/path 

Connecting nfs storage to deployment

Let's create PVC for data storage using sc.

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: pvc-app
spec:
  storageClassName: nfs-client
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1Gi

Use it to connect to the container

spec:      
  volumes:
  - name: static-app
    persistentVolumeClaim:
      claimName: pvc-app  
  containers:
  - name: speedtest
    image: harbor.nip.io/speedtest/app:0.1 
    volumeMounts:
      - name: static-app
        mountPath: /var/www/html

Warning! For database use securityContext other error create container: cannot create directory '/var/lib/mysql/': File exists change sycurity context

securityContext:
  runAsUser: 1001
  runAsGroup: 1001
  runAsNonRoot: true

Using configmaps for webserver settings

Let's create configmaps from the caddy config

kubectl create configmap caddyconfigmap --from-file=.infra/caddy/Caddyfile
kubectl create configmap servers-list --from-file=servers.json