zkt25/z2
Andrii Pervashov aa03f35ae0 z2 upload
2025-04-10 08:22:24 +02:00
..
Backend z2 upload 2025-04-10 08:22:24 +02:00
Frontend z2 upload 2025-04-10 08:22:24 +02:00
deployment.yaml z2 upload 2025-04-10 08:22:24 +02:00
docker-compose.yml z2 upload 2025-04-10 08:22:24 +02:00
namespace.yaml z2 upload 2025-04-10 08:22:24 +02:00
prepare-app.sh z2 upload 2025-04-10 08:22:24 +02:00
README.md z2 upload 2025-04-10 08:22:24 +02:00
remove-app.sh z2 upload 2025-04-10 08:22:24 +02:00
service.yaml z2 upload 2025-04-10 08:22:24 +02:00
start-app.sh z2 upload 2025-04-10 08:22:24 +02:00
statefulset.yaml z2 upload 2025-04-10 08:22:24 +02:00
stop-app.sh z2 upload 2025-04-10 08:22:24 +02:00

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. Выполните скрипт подготовки:

    chmod +x prepare-app.sh
    ./prepare-app.sh
    

    Скрипт выполнит следующие действия:

    • Создаст директорию для хранения данных MongoDB
    • Соберет Docker-образы для Frontend и Backend

Запуск приложения

  1. Выполните скрипт запуска:

    chmod +x start-app.sh
    ./start-app.sh
    

    Скрипт выполнит следующие действия:

    • Создаст Namespace expense-tracker
    • Применит все конфигурационные файлы Kubernetes
    • Дождется запуска всех компонентов
    • Выведет URL для доступа к приложению

Остановка приложения

  1. Для остановки приложения выполните:

    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