Skip to content

Latest commit

 

History

4 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

Backend + Frontend в Kubernetes

Пример деплоя стека: Flask‑backend с Postgres и лёгкий frontend на Express, который проксирует запросы к backend. Все манифесты лежат в k8s/ и используют imagePullPolicy: IfNotPresent, поэтому можно работать с локально собранными образами.

Состав

  • Backend (app/): Flask API, эндпоинты /healthz и /contacts, подключается к Postgres.
  • Frontend (frontend/): Express‑сервис, слушает внешний порт и отправляет запросы на backend (GET / -> /contacts, GET /healthz -> /healthz).
  • Postgres (postgres:16-alpine): инициализируется скриптом init-db.sql из k8s/db.yaml, таблица contacts с тестовыми данными.
  • K8s: Deployment/Service для каждой части. Frontend Service — LoadBalancer, backend — ClusterIP, база — ClusterIP.

Подготовка образов

# Собрать локальные образы
docker build -t cloud-hw-backend:latest ./app
docker build -t cloud-hw-frontend:latest ./frontend

# Если используете minikube/kind, загрузите локальные образы в кластер
minikube image load cloud-hw-backend:latest
minikube image load cloud-hw-frontend:latest

Деплой в Kubernetes

# Применить все манифесты
kubectl apply -f k8s/db.yaml \
  -f k8s/backend-deployment.yaml -f k8s/backend-service.yaml \
  -f k8s/frontend-deployment.yaml -f k8s/frontend-service.yaml

# Проверить, что поды поднялись
kubectl get pods
kubectl get svc
  • Backend развернут в 2 репликах, доступен по сервису backend:8000 только внутри кластера.
  • Frontend доступен снаружи через сервис frontend (LoadBalancer на порту 80). В кластерах без внешнего LB используйте kubectl port-forward service/frontend 8080:80 или minikube service frontend --url.

Тесты и проверки

# Порт‑форвард, если нет внешнего IP
kubectl port-forward service/frontend 8080:80

# Проверить маршруты frontend (проверяет backend и БД)
curl http://localhost:8080/
curl http://localhost:8080/healthz

# Проверить backend напрямую (изнутри кластера или через port-forward)
kubectl port-forward service/backend 18000:8000
curl http://localhost:18000/contacts

Структура манифестов

  • k8s/db.yaml — PVC + ConfigMap с init-db.sql + Deployment Postgres + Service db.
  • k8s/backend-deployment.yaml — Deployment backend (2 реплики, liveness/readiness /healthz).
  • k8s/backend-service.yaml — ClusterIP сервис backend:8000.
  • k8s/frontend-deployment.yaml — Deployment frontend (переменная BACKEND_URL=http://backend:8000).
  • k8s/frontend-service.yaml — LoadBalancer сервис для внешнего доступа (порт 80 -> 8080).

Остановка

kubectl delete -f k8s/frontend-service.yaml -f k8s/frontend-deployment.yaml \
  -f k8s/backend-service.yaml -f k8s/backend-deployment.yaml \
  -f k8s/db.yaml

Дополнительно

  • Настройки базы: POSTGRES_USER=cloud, POSTGRES_PASSWORD=cloudpass, POSTGRES_DB=contacts. Backend берет их из переменных окружения (DB_*).

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages