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