.. | ||
Backend | ||
Frontend | ||
deployment.yaml | ||
docker-compose.yml | ||
namespace.yaml | ||
prepare-app.sh | ||
README.md | ||
remove-app.sh | ||
service.yaml | ||
start-app.sh | ||
statefulset.yaml | ||
stop-app.sh |
Expense Tracker - Kubernetes Deployment
Описание приложения
Expense Tracker - это веб-приложение для отслеживания личных финансов и управления расходами. Приложение позволяет пользователям:
- Добавлять новые транзакции с указанием суммы, типа (доход/расход) и категории
- Просматривать историю транзакций
- Анализировать расходы по категориям
- Отслеживать баланс счета
Архитектура приложения
Приложение построено на стеке MERN (MongoDB, Express.js, React, Node.js) и состоит из трех основных компонентов:
- Frontend - клиентская часть, разработанная на React с использованием Vite для быстрой сборки
- Backend - серверная часть, разработанная на Node.js с использованием Express.js
- MongoDB - база данных для хранения информации о транзакциях
Список использованных контейнеров
-
expense-tracker-frontend - контейнер с клиентской частью приложения
- Базовый образ: node:20-bookworm-slim
- Роль: Обслуживает пользовательский интерфейс приложения
- Порт: 5173
-
expense-tracker-backend - контейнер с серверной частью приложения
- Базовый образ: node:20-bookworm-slim
- Роль: Предоставляет API для работы с данными о транзакциях
- Порт: 5000
-
mongo - контейнер с базой данных MongoDB
- Базовый образ: mongo:latest
- Роль: Хранение данных приложения
- Порт: 27017
Kubernetes объекты и их описание
-
Namespace
- Имя: expense-tracker
- Роль: Изолированное пространство имен для всех ресурсов приложения
-
Deployment
- Frontend Deployment: Управляет репликами Pod с клиентской частью приложения
- Backend Deployment: Управляет репликами Pod с серверной частью приложения
-
StatefulSet
- MongoDB StatefulSet: Управляет Pod с базой данных MongoDB, сохраняя состояние и данные
-
Service
- Frontend Service (NodePort): Предоставляет доступ к клиентской части приложения извне кластера
- Backend Service (ClusterIP): Обеспечивает внутрикластерный доступ к API
- MongoDB Service (ClusterIP): Обеспечивает внутрикластерный доступ к базе данных
-
PersistentVolume и PersistentVolumeClaim
- MongoDB PV/PVC: Обеспечивает постоянное хранилище для данных MongoDB
Сетевая инфраструктура
Приложение использует следующие сетевые ресурсы:
-
Services
- Frontend Service (NodePort): Доступен извне кластера через порт, назначаемый Kubernetes (30000-32767)
- Backend Service (ClusterIP): Доступен внутри кластера по имени
backend-service:5000
- MongoDB Service (ClusterIP): Доступен внутри кластера по имени
mongodb-service:27017
-
Внутрикластерная DNS-система
- Позволяет компонентам приложения обращаться друг к другу по именам сервисов вместо IP-адресов
Хранилища данных
Приложение использует постоянное хранилище для базы данных MongoDB:
-
PersistentVolume
- Тип: HostPath (для локальной разработки)
- Размер: 1Gi
- Путь на хосте:
/mnt/data/mongodb
-
PersistentVolumeClaim
- Запрашивает 1Gi постоянного хранилища для MongoDB
Конфигурация контейнеров
-
Frontend
- Environment: Для разработки используется Vite Dev Server с опцией
--host
для доступа извне - Ресурсы: Лимиты CPU: 0.5, Memory: 512Mi; Запросы CPU: 0.2, Memory: 256Mi
- Environment: Для разработки используется Vite Dev Server с опцией
-
Backend
- Environment:
- PORT: 5000
- MONGO_URI: mongodb://mongodb-service:27017/expense-tracker
- Ресурсы: Лимиты CPU: 0.5, Memory: 512Mi; Запросы CPU: 0.2, Memory: 256Mi
- Environment:
-
MongoDB
- Без дополнительной конфигурации, используется стандартный образ
- Данные хранятся в постоянном хранилище
- Ресурсы: Лимиты CPU: 0.5, Memory: 512Mi; Запросы CPU: 0.2, Memory: 256Mi
Инструкция по запуску
Предварительные требования
- Установленный и настроенный Kubernetes кластер (можно использовать Minikube для локальной разработки)
- Установленный и настроенный kubectl
- Docker
Подготовка приложения
-
Выполните скрипт подготовки:
chmod +x prepare-app.sh ./prepare-app.sh
Скрипт выполнит следующие действия:
- Создаст директорию для хранения данных MongoDB
- Соберет Docker-образы для Frontend и Backend
Запуск приложения
-
Выполните скрипт запуска:
chmod +x start-app.sh ./start-app.sh
Скрипт выполнит следующие действия:
- Создаст Namespace expense-tracker
- Применит все конфигурационные файлы Kubernetes
- Дождется запуска всех компонентов
- Выведет URL для доступа к приложению
Остановка приложения
-
Для остановки приложения выполните:
chmod +x stop-app.sh ./stop-app.sh
Скрипт выполнит следующие действия:
- Удалит все развернутые в Kubernetes ресурсы приложения
Доступ к приложению
После успешного запуска вы получите URL для доступа к приложению в выводе скрипта start-app.sh. Обычно это будет что-то вроде:
http://192.168.49.2:30080
где:
- 192.168.49.2 - IP-адрес узла кластера (для Minikube это IP-адрес виртуальной машины)
- 30080 - назначенный NodePort для Frontend-сервиса
Дополнительная информация
-
Для просмотра всех ресурсов в пространстве имен expense-tracker:
kubectl get all -n expense-tracker
-
Для просмотра логов компонентов:
kubectl logs deployment/frontend -n expense-tracker kubectl logs deployment/backend -n expense-tracker kubectl logs statefulset/mongodb -n expense-tracker
-
Для доступа к оболочке контейнеров:
kubectl exec -it deployment/frontend -n expense-tracker -- sh kubectl exec -it deployment/backend -n expense-tracker -- sh kubectl exec -it statefulset/mongodb -n expense-tracker -- sh