Выполнение домашнего задания по теме "13.2. разделы и монтирование"
Q/A
Приложение запущено и работает, но время от времени появляется необходимость передавать между бекендами данные. А сам бекенд генерирует статику для фронта. Нужно оптимизировать это. Для настройки NFS сервера можно воспользоваться следующей инструкцией (производить под пользователем на сервере, у которого есть доступ до kubectl):
- установить helm: curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
- добавить репозиторий чартов: helm repo add stable https://charts.helm.sh/stable && helm repo update
- установить nfs-server через helm: helm install nfs-server stable/nfs-server-provisioner
В конце установки будет выдан пример создания PVC для этого сервера.
Задание 1
В stage окружении часто возникает необходимость отдавать статику бекенда сразу фронтом. Проще всего сделать это через общую папку. Требования:
- в поде подключена общая папка между контейнерами (например, /static);
- после записи чего-либо в контейнере с беком файлы можно получить из контейнера с фронтом.
Для деплоя приложения будет использована спецификация из предыдущего домашнего задания с некоторыми отличиями:
-
В deployment
testing-appдобавлен томemptyDirс названиемshared-volumevolumes: - name: test-shared-volume emptyDir: {} -
В контейнеры
netology-frontendиnetology-backendдобавлена точка монтирования в/staticдля данного томаvolumeMounts: - mountPath: "/static" name: test-shared-volume
Итоговая конфигурация расположена в файле testing/deployment.yml.
Применение конфигурации:
kubectl apply -f testing/deployment.yml
Чтобы проверить, что файлы, созданные в одном контейнере будут видны в другом, нужно выполнить следующие шаги:
-
Записать данные в новый файл
/static/42.txtkubectl exec testing-app-85d8f9d7bc-x5cbm -c netology-backend -- sh -c "echo '42' > /static/42.txt" -
Проверить, что файл доступен из данного контейнера
kubectl exec testing-app-85d8f9d7bc-x5cbm -c netology-backend -- sh -c "cat /static/42.txt"42 -
Проверить, что файл доступен из другого контейнера
kubectl exec testing-app-85d8f9d7bc-x5cbm -c netology-frontend -- sh -c "cat /static/42.txt"42
Задание 2
Поработав на stage, доработки нужно отправить на прод. В продуктиве у нас контейнеры крутятся в разных подах, поэтому потребуется PV и связь через PVC. Сам PV должен быть связан с NFS сервером. Требования:
- все бекенды подключаются к одному PV в режиме ReadWriteMany;
- фронтенды тоже подключаются к этому же PV с таким же режимом;
- файлы, созданные бекендом, должны быть доступны фронту.
Перед выполнением задания необходимо установить плагин nfs, для этого:
-
Необходимо установить
helm:curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash helm versionversion.BuildInfo{Version:"v3.10.2", GitCommit:"50f003e5ee8704ec937a756c646870227d7c8b58", GitTreeState:"clean", GoVersion:"go1.18.8"} -
Добавить основной репозиторий
helmhelm repo add stable https://charts.helm.sh/stable && helm repo update -
Установить
nfs-серверhelm install nfs-server stable/nfs-server-provisioner -
Установить на всех нодах необходимую утилиту:
sudo apt install nfs-common
Для деплоя приложения будет использована спецификация из предыдущего домашнего задания с некоторыми отличиями:
- Создан отдельный манифест для создания общего динамичного хранилища: production/volume.yml
- В deployment для
backendиfrontendдобавлен томshared-volumeи точка его монтирования в/shared
Порядок деплоя:
-
Создание динамичного
pvckubectl apply -f production/volume.yml kubectl get pvcNAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE pvc Bound pvc-fd56d76a-a856-41e6-90a6-8ee4ca1a6439 1Gi RWO nfs 7s -
Деплой БД:
kubectl apply -f production/database.yml -
Деплой backend:
kubectl apply -f production/backend.yml -
Деплой frontend:
kubectl apply -f production/frontend.yml -
Проверка, что всё работает:
kubectl get podsNAME READY STATUS RESTARTS AGE nfs-server-nfs-server-provisioner-0 1/1 Running 0 10m prod-app-backend-755859df77-lcst2 1/1 Running 0 26s prod-app-frontend-5967548577-dvzxc 1/1 Running 0 18s testing-db-0 1/1 Running 0 5m58s
Чтобы проверить, что файлы, созданные в одном поде будут видны в другом, нужно выполнить следующие шаги:
-
Записать данные в новый файл
/shared/42.txtkubectl exec prod-app-backend-755859df77-lcst2 -c netology-backend -- sh -c "echo '42' > /shared/42.txt" -
Проверить, что файл доступен из данного пода
kubectl exec prod-app-backend-755859df77-lcst2 -c netology-backend -- sh -c "cat /shared/42.txt"42 -
Проверить, что файл доступен из другого пода
kubectl exec prod-app-frontend-5967548577-dvzxc -c netology-frontend -- sh -c "cat /shared/42.txt"42