zkt25/z2/README.md
Andrii Pervashov aa03f35ae0 z2 upload
2025-04-10 08:22:24 +02:00

174 lines
8.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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