Пример приложения «Погода» на Python

Пример веб-приложения «Погода» на Python (Flask), созданный для портфолио. Архитектура повторяет статью Yandex Cloud «Развертывание приложения в кластере Managed Service for Kubernetes».

Исходный код: examples/weather-app/

Что умеет приложение

Данные генерируются детерминированно (на основе города и даты), поэтому приложение не зависит от внешних сервисов и работает офлайн.

Структура примера

examples/weather-app/
├── app.py                 # Flask-приложение
├── requirements.txt       # Зависимости (flask, gunicorn)
├── Dockerfile             # Сборка образа
├── .dockerignore
└── k8s/
    ├── deployment.yaml    # Deployment: 2 реплики, пробы, ресурсы
    ├── service.yaml       # Service: ClusterIP, порт 80 → 8080
    └── ingress.yaml       # Ingress: публичный доступ через ALB

Как это соотносится со статьёй Yandex Cloud

В статье рассматривается развертывание приложения в кластере Managed Service for Kubernetes. Ключевые шаги:

  1. Собрать Docker-образ приложения.
  2. Загрузить образ в Container Registry.
  3. Создать объекты Kubernetes: Deployment, Service, Ingress.
  4. Открыть доступ к приложению через Application Load Balancer.

Пример повторяет эту схему: в каталоге k8s/ лежат готовые манифесты, а команды для локального запуска и деплоя описаны в README.md примера.

Быстрый старт

Локально

cd examples/weather-app
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
python app.py

Откройте http://localhost:8080.

В Docker

docker build -t weather-app:v1 examples/weather-app
docker run --rm -p 8080:8080 weather-app:v1

В Kubernetes

kubectl apply -f examples/weather-app/k8s/deployment.yaml
kubectl apply -f examples/weather-app/k8s/service.yaml
kubectl apply -f examples/weather-app/k8s/ingress.yaml
Примечание. Перед деплоем укажите адрес вашего образа в k8s/deployment.yaml (поле image), например cr.yandex/<registry-id>/weather-app:v1.

Пример запроса к API

curl "http://localhost:8080/api/v1/weather?city=moscow"
{
  "city": "Москва",
  "date": "2025-01-01",
  "temperature": -5.2,
  "feels_like": -8.1,
  "humidity": 84,
  "wind_speed": 3.4,
  "condition": "облачно",
  "source": "demo"
}

Полезные ссылки