Пример приложения «Погода» на Python
Пример веб-приложения «Погода» на Python (Flask), созданный для портфолио. Архитектура повторяет статью Yandex Cloud «Развертывание приложения в кластере Managed Service for Kubernetes».
Исходный код: examples/weather-app/
Что умеет приложение
- REST API —
GET /api/v1/weather?city=moscowвозвращает данные о погоде в JSON. - Веб-интерфейс — страница с формой выбора города и карточкой текущей погоды.
- Проба готовности —
GET /healthzиспользуется в Kubernetes для проверок.
Данные генерируются детерминированно (на основе города и даты), поэтому приложение не зависит от внешних сервисов и работает офлайн.
Структура примера
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. Ключевые шаги:
- Собрать Docker-образ приложения.
- Загрузить образ в Container Registry.
- Создать объекты Kubernetes: Deployment, Service, Ingress.
- Открыть доступ к приложению через 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"
}