CloudKitty: ¿cuánto ha costado?
- Tarifica el uso recogido, periodo a periodo
- Conserva el historial; resúmenes, dataframes, retarificación
- La API de OpenStack, sin cambios para sus clientes
OpenKeel: la solución Cloud soberana, francesa y de alcance europeo, del grupo inherent Descubrir inherent
Arquitectura
Lo que costó un proyecto, lo que costaría y lo que emite: CloudKitty tarifica el uso a posteriori, openkeel-pricing presupuesta coste y carbono al momento, y Skyline muestra ambos.
Series de openstack-exporter (instancias, volúmenes, imágenes) en el Prometheus de la pila de observabilidad
Recoge cada hora el uso de cada proyecto y lo tarifica con reglas hashmap y scripts CEL
Conserva el historial tarificado por proyecto, periodo y servicio
La página FinOps / GreenOps lee los resúmenes; los formularios y la ventana de cuotas leen openkeel-pricing
El servicio de tarificación reescrito en Go a partir de la reverse-spec de stable/2026.2: las mismas 66 operaciones de API (v1, hashmap, pyscripts, v2), códigos de estado, cuerpos de error y políticas.
| Parte | OpenKeel |
|---|---|
API (cloudkitty-api) | Reglas, módulos, resúmenes, dataframes y presupuestos instantáneos; presupuestos calculados en la API con el mismo código de tarificación |
Processor (cloudkitty-processor) | Lista los proyectos (fetcher de Keystone: cada proyecto habilitado), recoge su uso de Prometheus en cada periodo (1 hora), lo tarifica y lo almacena; un único processor activo tiene un Lease de Kubernetes |
| Tarificación | Reglas hashmap (servicios, campos, correspondencias, umbrales) y scripts escritos como expresiones CEL en lugar de Python: sin instrucciones ni E/S, con límites de coste y de tiempo |
| Almacenamiento | InfluxDB 1.x o 2.x (InfluxQL con literales escapados); MariaDB Galera para las reglas y el estado de los scopes |
| Series recogidas | El fichero de métricas upstream sobre openstack-exporter: instancias (openstack_nova_server_status), capacidad de volúmenes (openstack_cinder_limits_volume_used_gb), tamaño de imágenes (openstack_glance_image_bytes), proyectos etiquetados tenant_id |
| Despliegue | Componente opcional: okadm install --components …,cloudkitty --grafana; okadm activa openstack-exporter y dirige el colector al Prometheus de la pila; lab: un processor, InfluxDB 2 GiB |
| Defectos upstream corregidos | Borrados limitados al scope, política de GET /v2/rating/modules, presupuestos con un desc plano, ninguna llamada a Keystone sin verificar, ventanas de retarificación y de reinicio |
Las pruebas, las funciones omitidas y el inventario de la API están en la página del componente CloudKitty.
Las tarifas son recursos de Kubernetes, OpenKeelTenant (CRD instalado por okadm en ambos modos): el llamado default se aplica a todo proyecto sin el suyo propio. openkeel-pricing los vigila en memoria, sin base de datos ni bus.
| Recurso | Unitarias | Tarifa |
|---|---|---|
| cpu | vCPU | coste y carbono al mes |
| ram | GiB | coste y carbono al mes |
| gpu | GPU | coste y carbono al mes |
| disk | GiB | coste y carbono al mes |
| s3 | GiB | coste y carbono al mes |
| dns | dominio | coste y carbono al mes |
| vpn | VPN | coste y carbono al mes |
API: GET /v1/rates (tarifas efectivas y el OpenKeelTenant del que viene cada una) y POST /v1/quotes (un flavor, un número y recursos: líneas y totales de coste y de carbono). Costes en € al mes, carbono en kg CO₂e al mes (× 12 para el año).
Con CloudKitty, okadm install --demo envía un frame tarificado por día para el proyecto demo, desde el primer día del mes pasado hasta ayer (su VM, su volumen, su balanceador, su contenedor y sus IP flotantes con sus identificadores reales, una VM borrada el mes pasado, la imagen base), y crea el estado del scope del proyecto para que el processor lo tarifique desde hoy. La página FinOps / GreenOps muestra los dos meses a la vez.