Что такое OpenCost
OpenCost — это открытый проект, ориентированный на мониторинг и расчёт стоимости ресурсов, используемых в кластерах Kubernetes. Он собирает метрики о потреблении CPU, памяти и дискового пространства на уровне нод, подов и PersistentVolumeClaim (PVC), сопоставляет их с тарифами и формирует детализированные отчёты о затратах. Изначально разработанный в рамках Kubecost, проект был передан в CNCF и теперь поддерживает работу как в публичных облаках, так и в on‑premise‑окружениях.
Принципы работы и архитектура
Сбор данных
OpenCost использует несколько источников для построения полной картины потребления:
| Источник | Что собирает |
|---|---|
| kube‑state‑metrics | Состояние объектов Kubernetes (pods, deployments, PVC, node). |
| cAdvisor | Точные метрики CPU и памяти на уровне контейнеров. |
| Prometheus | Хранилище временных рядов, позволяющее агрегировать данные по заданным интервалам. |
Эти данные проходят через компонент cost‑allocation, который сопоставляет их с тарифными планами и формирует стоимость по каждому измерителю (namespace, label, deployment и т.д.).
Тарифные модели
OpenCost поддерживает два типа тарифов:
- Стандартные цены – фиксированные ставки за единицу ресурса (например, $0.01 за 1 vCPU‑hour).
- Кастомные цены – пользовательские правила, позволяющие задавать цены в зависимости от региона, типа инстанса, уровня поддержки и других параметров.
Тарифы задаются в виде YAML‑файла и могут быть обновлены без перезапуска кластера.
Выдача метрик и API
После расчёта стоимость публикуется в виде метрик Prometheus (opencost_*) и доступна через HTTP‑API. Это упрощает интеграцию с системами визуализации (Grafana, Kibana) и автоматизации (alertmanager, CI/CD‑pipeline).
Интеграция с Yandex Cloud
Yandex Cloud предоставляет собственный набор цен на ресурсы (CPU, RAM, SSD/HDD, сетевой трафик). OpenCost в Yandex Cloud использует эти тарифы для расчёта расходов в реальном времени.
Подключение тарифов Yandex Cloud
- Экспорт цен – Yandex Cloud публикует цены в JSON‑формате через публичный endpoint.
- Импорт в OpenCost – скрипт
yc-pricing-importerскачивает актуальные цены, преобразует их в YAML‑структуру, совместимую с OpenCost, и сохраняет в ConfigMap. - Обновление – процесс автоматизирован: cron‑job раз в сутки проверяет изменения цен и обновляет ConfigMap без потери текущих метрик.
Особенности расчёта
- Региональная дифференциация – цены зависят от выбранного зоны (москва, сибирь и т.д.). Тарифный файл содержит отдельные секции для каждой зоны, а при расчёте учитывается
regionlabel, автоматически добавляемый к нодам Yandex Cloud. - Сетевой трафик – OpenCost учитывает как входящий, так и исходящий трафик, применяя соответствующие ставки (внутренний, межзональный, внешний). Метки
traffic_directionпозволяют разбивать расходы на отдельные категории. - Скидки и предоплата – при наличии
reserved_instanceметки OpenCost применяет скидочный коэффициент, указанный в тарифном файле, тем самым отражая реальную стоимость по договору.
Настройка кастомных тарифов
Для гибкой подгонки под бизнес‑модели Yandex Cloud предоставляет возможность задавать собственные цены через сервис Billing. OpenCost принимает такие цены в том же формате, что и публичные тарифы, и позволяет:
- Определять цены за GPU – если в кластере используются GPU‑инстансы, их стоимость указывается в отдельной секции
gpu_price_per_hour. - Включать стоимость лицензий – например, за использование Windows Server или специализированных DB‑движков.
- Учитывать стоимость резервного хранилища – отдельные ставки за snapshots и backup‑хранилища.
Все эти параметры задаются в том же YAML‑файле, что и базовые цены, и могут быть переопределены на уровне namespace, что удобно при мульти‑тенанте.
Визуализация и API
Grafana‑дашборды
OpenCost поставляется с готовыми дашбордами для Grafana, которые включают:
- Общий обзор расходов – суммарные затраты по кластерам, сравнение текущего месяца с предыдущим.
- Топ‑10 namespace – распределение расходов по пространствам имён, позволяющее быстро выявить «тяжёлые» проекты.
- Тренды по ресурсам – графики потребления CPU, RAM и диска в контексте их стоимости.
- Трафик и storage – отдельные панели для сетевого трафика и хранилища, отображающие их долю в общих расходах.
HTTP‑API
OpenCost предоставляет набор эндпоинтов:
| Метод | Путь | Описание |
|---|---|---|
GET | /costs | Сводка расходов за указанный период (параметры start, end). |
GET | /costs/namespace/{ns} | Расходы конкретного namespace. |
GET | /costs/label/{key}/{value} | Расходы по произвольному лейблу. |
GET | /metrics | Метрики Prometheus (для автоматической интеграции). |
API поддерживает аутентификацию через токен, совместимый с IAM‑сервисом Yandex Cloud, что упрощает построение кастомных интеграций (например, отправка данных в финансовую систему компании).
Практические сценарии использования
- Оптимизация расходов – регулярный мониторинг позволяет выявлять «прокачанные» поды, неиспользуемые PVC и перенастраивать ресурсы под реальные нагрузки.
- Бюджетирование – с учётом точных тарифов Yandex Cloud можно формировать прогнозы расходов на квартал, автоматически учитывая планируемый рост кластера.
- Контроль за мульти‑тенант средой – разделение расходов по namespace и лейблам упрощает выставление счетов внутри организации или клиентам.
- Автоматическое масштабирование – интеграция OpenCost API с Horizontal Pod Autoscaler (HPA) позволяет учитывать стоимость при принятии решений о масштабировании, предотвращая рост расходов без бизнес‑выгоды.
Перспективы развития
OpenCost уже поддерживает основные облачные провайдеры, однако в контексте Yandex Cloud ожидается расширение функционала:
- Поддержка новых сервисов – расчёт стоимости Serverless Functions, Managed Service for PostgreSQL и других управляемых сервисов Yandex Cloud.
- Глубокая интеграция с Billing API – автоматическое согласование расходов OpenCost с официальными счётами, что позволит построить единый финансовый дашборд.
- Аналитика «cost‑per‑feature» – возможность привязывать затраты к бизнес‑фичам (feature flags), что улучшит оценку ROI новых функций.
В результате OpenCost в Yandex Cloud превращается в мощный инструмент не только для DevOps‑инженеров, но и для финансовых отделов, позволяя контролировать и оптимизировать расходы на Kubernetes‑инфраструктуру с точностью до отдельного пода.