From e48a6ae8eab8bc31933d92cb5be5d601b75b4566 Mon Sep 17 00:00:00 2001 From: Andrii Pervashov Date: Thu, 10 Apr 2025 07:43:48 +0000 Subject: [PATCH] Update z2/README.md --- z2/README.md | 282 +++++++++++++++++++++++++++++---------------------- 1 file changed, 158 insertions(+), 124 deletions(-) diff --git a/z2/README.md b/z2/README.md index 63adaf6..bf3be0a 100644 --- a/z2/README.md +++ b/z2/README.md @@ -1,173 +1,207 @@ -# Expense Tracker - Kubernetes Deployment +Sledovanie výdavkov - nasadenie Kubernetes +========================================== -## Описание приложения +Popis aplikácie +--------------- -Expense Tracker - это веб-приложение для отслеживания личных финансов и управления расходами. Приложение позволяет пользователям: -- Добавлять новые транзакции с указанием суммы, типа (доход/расход) и категории -- Просматривать историю транзакций -- Анализировать расходы по категориям -- Отслеживать баланс счета +Expense Tracker je webová aplikácia na sledovanie osobných financií a správu výdavkov. Aplikácia umožňuje používateľom: -## Архитектура приложения +- Pridávať nové transakcie s uvedením sumy, typu (príjem/výdavok) a kategórie +- Zobraziť históriu transakcií +- Analyzovať výdavky podľa kategórií +- Sledovať zostatok na účte -Приложение построено на стеке MERN (MongoDB, Express.js, React, Node.js) и состоит из трех основных компонентов: +Architektúra aplikácie +---------------------- -1. **Frontend** - клиентская часть, разработанная на React с использованием Vite для быстрой сборки -2. **Backend** - серверная часть, разработанная на Node.js с использованием Express.js -3. **MongoDB** - база данных для хранения информации о транзакциях +Aplikácia je postavená na zásobníku MERN (MongoDB, Express.js, React, Node.js) a pozostáva z troch hlavných komponentov: -## Список использованных контейнеров +1. **Frontend** - klientska strana vyvinutá v Reacte pomocou Vite na rýchle zostavovanie +2. **Backend** - strana servera vyvinutá v Node.js pomocou Express.js +3. **MongoDB** - databáza na ukladanie informácií o transakciách -1. **expense-tracker-frontend** - контейнер с клиентской частью приложения - - Базовый образ: node:20-bookworm-slim - - Роль: Обслуживает пользовательский интерфейс приложения - - Порт: 5173 +Zoznam použitých kontajnerov +---------------------------- -2. **expense-tracker-backend** - контейнер с серверной частью приложения - - Базовый образ: node:20-bookworm-slim - - Роль: Предоставляет API для работы с данными о транзакциях - - Порт: 5000 +1. **expense-tracker-frontend** - kontajner s klientskou časťou aplikácie -3. **mongo** - контейнер с базой данных MongoDB - - Базовый образ: mongo:latest - - Роль: Хранение данных приложения - - Порт: 27017 + - Základný obraz: node:20-bookworm-slim + - Úloha: Slúži ako používateľské rozhranie aplikácie + - Port: 5173 +2. **expense-tracker-backend** - kontajner so serverovou časťou aplikácie -## Kubernetes объекты и их описание + - Základný obraz: node:20-bookworm-slim + - Úloha: Poskytuje API na prácu s údajmi o transakciách + - Port: 5000 +3. **mongo** - kontajner s databázou MongoDB -1. **Namespace** - - Имя: expense-tracker - - Роль: Изолированное пространство имен для всех ресурсов приложения + - Základný obraz: mongo:latest + - Úloha: Ukladá údaje aplikácie + - Port: 27017 -2. **Deployment** - - Frontend Deployment: Управляет репликами Pod с клиентской частью приложения - - Backend Deployment: Управляет репликами Pod с серверной частью приложения +Objekty Kubernetes a ich popis +------------------------------ -3. **StatefulSet** - - MongoDB StatefulSet: Управляет Pod с базой данных MongoDB, сохраняя состояние и данные +1. **Namespace** -4. **Service** - - Frontend Service (NodePort): Предоставляет доступ к клиентской части приложения извне кластера - - Backend Service (ClusterIP): Обеспечивает внутрикластерный доступ к API - - MongoDB Service (ClusterIP): Обеспечивает внутрикластерный доступ к базе данных + - Názov: expense-tracker + - Úloha: Izolovaný menný priestor pre všetky zdroje aplikácie +2. **Deployment** -5. **PersistentVolume и PersistentVolumeClaim** - - MongoDB PV/PVC: Обеспечивает постоянное хранилище для данных MongoDB + - Frontend Deployment: Spravuje repliky Pod s klientskou stranou aplikácie + - Backend Deployment: Spravuje repliky Pod so serverovou časťou aplikácie +3. **StatefulSet** -## Сетевая инфраструктура + - MongoDB StatefulSet: Spravuje Pod s databázou MongoDB, ukladá stav a údaje +4. **Service** -Приложение использует следующие сетевые ресурсы: + - Frontend Service (NodePort): Poskytuje prístup ku klientskej strane aplikácie z prostredia mimo klastra + - Backend Service (ClusterIP): Poskytuje prístup k rozhraniu API v rámci klastra + - Služba MongoDB (ClusterIP): Poskytuje prístup k databáze v rámci klastra +5. **PersistentVolume a PersistentVolumeClaim** -1. **Services** - - Frontend Service (NodePort): Доступен извне кластера через порт, назначаемый Kubernetes (30000-32767) - - Backend Service (ClusterIP): Доступен внутри кластера по имени `backend-service:5000` - - MongoDB Service (ClusterIP): Доступен внутри кластера по имени `mongodb-service:27017` + - MongoDB PV/PVC: Poskytuje trvalé ukladanie údajov MongoDB -2. **Внутрикластерная DNS-система** - - Позволяет компонентам приложения обращаться друг к другу по именам сервисов вместо IP-адресов +Sieťová infraštruktúra +---------------------- -## Хранилища данных +Aplikácia využíva nasledujúce sieťové prostriedky: -Приложение использует постоянное хранилище для базы данных MongoDB: +1. **Služby** -1. **PersistentVolume** - - Тип: HostPath (для локальной разработки) - - Размер: 1Gi - - Путь на хосте: `/mnt/data/mongodb` + - Frontend Service (NodePort): Prístup z vonkajšej strany klastra cez port pridelený systémom Kubernetes (30000-32767) + - Backend Service (ClusterIP): Prístup zvnútra klastra cez `backend-service:5000` + - MongoDB Service (ClusterIP): Prístupné v rámci clusteru pod názvom `mongodb-service:27017` +2. **Intra-cluster DNS System** -2. **PersistentVolumeClaim** - - Запрашивает 1Gi постоянного хранилища для MongoDB + - Umožňuje aplikačným komponentom odkazovať na seba navzájom pomocou názvov služieb namiesto IP adries -## Конфигурация контейнеров +Úložiská údajov +--------------- -1. **Frontend** - - Environment: Для разработки используется Vite Dev Server с опцией `--host` для доступа извне - - Ресурсы: Лимиты CPU: 0.5, Memory: 512Mi; Запросы CPU: 0.2, Memory: 256Mi +Aplikácia používa trvalé úložisko pre databázu MongoDB: -2. **Backend** - - Environment: - - PORT: 5000 - - MONGO_URI: mongodb://mongodb-service:27017/expense-tracker - - Ресурсы: Лимиты CPU: 0.5, Memory: 512Mi; Запросы CPU: 0.2, Memory: 256Mi +1. **PersistentVolume** -3. **MongoDB** - - Без дополнительной конфигурации, используется стандартный образ - - Данные хранятся в постоянном хранилище - - Ресурсы: Лимиты CPU: 0.5, Memory: 512Mi; Запросы CPU: 0.2, Memory: 256Mi + - Typ: HostPath (pre lokálny vývoj) + - Veľkosť: 1Gi + - HostPath: `/mnt/data/mongodb` +2. **PersistentVolumeClaim** -## Инструкция по запуску + - Požaduje 1Gi trvalého úložiska -### Предварительные требования +Konfigurácia kontajnera +----------------------- -1. Установленный и настроенный Kubernetes кластер (можно использовать Minikube для локальной разработки) -2. Установленный и настроенный kubectl -3. Docker +1. **Frontend** -### Подготовка приложения + - Prostredie: Na vývoj sa používa Vite Dev Server s možnosťou `--host` pre externý prístup + - Zdroje: Limity CPU: 0,5, Pamäť: 512Mi; Požiadavky CPU: 0,2, Pamäť: 256Mi +2. **Backend** -1. Выполните скрипт подготовки: - ```bash - chmod +x prepare-app.sh - ./prepare-app.sh - ``` + - Prostredie: + - PORT: 5000 + - MONGO_URI: mongodb://mongodb-service:27017/expense-tracker + - Zdroje: Limity CPU: 0,5, Pamäť: 512Mi; Požiadavky CPU: 0,2, Pamäť: 256Mi +3. **MongoDB** - Скрипт выполнит следующие действия: - - Создаст директорию для хранения данных MongoDB - - Соберет Docker-образы для Frontend и Backend + - Žiadna ďalšia konfigurácia, používa sa štandardný obraz + - Údaje sú uložené v trvalom úložisku + - Zdroje: Limity CPU: 0,5, Pamäť: 512Mi; Požiadavky CPU: 0,2, Pamäť: 256Mi -### Запуск приложения +Pokyny na spustenie +------------------- -1. Выполните скрипт запуска: - ```bash - chmod +x start-app.sh - ./start-app.sh - ``` +### Predpoklady - Скрипт выполнит следующие действия: - - Создаст Namespace expense-tracker - - Применит все конфигурационные файлы Kubernetes - - Дождется запуска всех компонентов - - Выведет URL для доступа к приложению +1. Nainštalovaný a nakonfigurovaný klaster Kubernetes (na lokálny vývoj môžete použiť Minikube) +2. Nainštalovaný a nakonfigurovaný kubectl +3. Docker -### Остановка приложения +### Príprava aplikácie -1. Для остановки приложения выполните: - ```bash - chmod +x stop-app.sh - ./stop-app.sh - ``` +1. Spustite prípravný skript: - Скрипт выполнит следующие действия: - - Удалит все развернутые в Kubernetes ресурсы приложения + ``` + chmod +x prepare-app.sh + ./prepare-app.sh -### Доступ к приложению + ``` + + Skript vykoná nasledujúce činnosti: + + - Vytvorí adresár na uloženie údajov MongoDB + - Vytvorí obrazy Docker pre Frontend a Backend + +### Spustenie aplikácie + +1. Spustite spúšťací skript: + + ``` + chmod +x start-app.sh + ./start-app.sh + + ``` + + Skript vykoná nasledujúce kroky: + + - Vytvorí menný priestor pre sledovanie výdavkov + - Použije všetky konfiguračné súbory Kubernetes + - Počká na spustenie všetkých komponentov + - Vypíše adresu URL na prístup k aplikácii + +### Zastavenie aplikácie + +1. Ak chcete zastaviť aplikáciu, vykonajte: + + ``` + chmod +x stop-app.sh + ./stop-app.sh + + ``` + + Skript vykoná nasledujúce činnosti: + + - Odstráni všetky aplikačné zdroje nasadené v systéme Kubernetes + +### Prístup k aplikácii + +Po úspešnom spustení získate vo výstupe skriptu start-app.sh adresu URL na prístup k aplikácii. Zvyčajne to bude niečo také: -После успешного запуска вы получите URL для доступа к приложению в выводе скрипта start-app.sh. Обычно это будет что-то вроде: ``` http://192.168.49.2:30080 + ``` -где: -- 192.168.49.2 - IP-адрес узла кластера (для Minikube это IP-адрес виртуальной машины) -- 30080 - назначенный NodePort для Frontend-сервиса +Kde: -## Дополнительная информация +- 192.168.49.2 - IP adresa uzla klastra (pre Minikube je to IP adresa virtuálneho počítača) +- 30080 - pridelený NodePort pre službu Frontend -- Для просмотра всех ресурсов в пространстве имен expense-tracker: - ```bash - kubectl get all -n expense-tracker - ``` +Ďalšie informácie +----------------- -- Для просмотра логов компонентов: - ```bash - kubectl logs deployment/frontend -n expense-tracker - kubectl logs deployment/backend -n expense-tracker - kubectl logs statefulset/mongodb -n expense-tracker - ``` +- Zobrazenie všetkých zdrojov v mennom priestore sledovača výdavkov: -- Для доступа к оболочке контейнеров: - ```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 - ``` + ``` + kubectl get all -n expense-tracker + + ``` + +- Zobrazenie protokolov komponentov: + + ``` + kubectl logs deployment/frontend -n expense-tracker + kubectl logs deployment/backend -n expense-tracker + kubectl logs statefulset/mongodb -n expense-tracker + + ``` + +- Prístup do kontajnerového shellu: + + ``` + 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 + + ``` \ No newline at end of file