OpenStack Epoxy : How to use CloudKitty |
This is how to use OpenStack Rating Service (CloudKitty). This example is based on the environment like follows. ------------+--------------------------+--------------------------+------------
| | |
eth0|10.0.0.30 eth0|10.0.0.50 eth0|10.0.0.51
+-----------+-----------+ +-----------+-----------+ +-----------+-----------+
| [ dlp.srv.world ] | | [ network.srv.world ] | | [ node01.srv.world ] |
| (Control Node) | | (Network Node) | | (Compute Node) |
| | | | | |
| MariaDB RabbitMQ | | Open vSwitch | | Libvirt |
| Memcached Nginx | | Neutron Server | | Nova Compute |
| Keystone httpd | | OVN-Northd | | Open vSwitch |
| Glance Nova API | | Nginx iSCSI Target | | OVN Metadata Agent |
| Cinder API | | Cinder Volume | | OVN-Controller |
| | | Gnocchi httpd | | Ceilometer Compute |
| | | Ceilometer Central | | |
| | | CloudKitty API | | |
+-----------------------+ +-----------------------+ +-----------------------+
|
| [1] | Add [cloudkitty] user in [rating] role for each project you like to rate. |
| root@dlp ~(keystone)# openstack project list +----------------------------------+-----------+ | ID | Name | +----------------------------------+-----------+ | a60814a6c56241edbbdfae6c290f8abc | service | | d5ba291bfcdc4f8982cf5c28922f56be | admin | | ecfa98ba82de421e8f16c3d862b5ab04 | hiroshima | +----------------------------------+-----------+root@dlp ~(keystone)# openstack role add --user cloudkitty --project hiroshima rating |
| [2] | Enable [Hashmap] module. |
| root@dlp ~(keystone)# openstack rating module list +-----------+---------+----------+ | Module | Enabled | Priority | +-----------+---------+----------+ | hashmap | False | 1 | | noop | True | 1 | | pyscripts | False | 1 | +-----------+---------+----------+root@dlp ~(keystone)# openstack rating module enable hashmap +---------+---------+----------+ | Module | Enabled | Priority | +---------+---------+----------+ | hashmap | True | 1 | +---------+---------+----------+root@dlp ~(keystone)# openstack rating module list +-----------+---------+----------+ | Module | Enabled | Priority | +-----------+---------+----------+ | hashmap | True | 1 | | noop | True | 1 | | pyscripts | False | 1 | +-----------+---------+----------+ |
| [3] | Set rate to Instance Uptime. When users in the project set on [1] create and start instances with [flavor_id] you set, target project is charged at the rate you set every interval of the [period] you set in [cloudkitty.conf]. |
# add service matching rule root@dlp ~(keystone)# openstack rating hashmap service create instance +----------+--------------------------------------+ | Name | Service ID | +----------+--------------------------------------+ | instance | 8d994128-c542-4df2-ad55-554921dec58e | +----------+--------------------------------------+ # add field matching rule root@dlp ~(keystone)# openstack rating hashmap field create 8d994128-c542-4df2-ad55-554921dec58e flavor_id +-----------+--------------------------------+---------------------------------+ | Name | Field ID | Service ID | +-----------+--------------------------------+---------------------------------+ | flavor_id | dde7f54e-9e54-403d-993d- | 8d994128-c542-4df2-ad55- | | | 070c7aa7b2a3 | 554921dec58e | +-----------+--------------------------------+---------------------------------+root@dlp ~(keystone)# openstack flavor list +----+-----------+-------+------+-----------+-------+-----------+ | ID | Name | RAM | Disk | Ephemeral | VCPUs | Is Public | +----+-----------+-------+------+-----------+-------+-----------+ | 1 | m1.tiny | 2048 | 10 | 0 | 1 | True | | 2 | m1.small | 4096 | 10 | 0 | 2 | True | | 3 | m1.medium | 8192 | 10 | 0 | 4 | True | | 4 | m1.large | 16384 | 10 | 0 | 8 | True | | 5 | m2.medium | 8192 | 10 | 10 | 4 | True | +----+-----------+-------+------+-----------+-------+-----------+ # add mapping rule # set a cost of [0.5] to instances with [flavor_id] = [2] root@dlp ~(keystone)# openstack rating hashmap mapping create 0.5 \ --field-id dde7f54e-9e54-403d-993d-070c7aa7b2a3 \ --value 2 -t flat +------------+-------+----------+------+----------+------------+----------+------------+ | Mapping ID | Value | Cost | Type | Field ID | Service ID | Group ID | Project ID | +------------+-------+----------+------+----------+------------+----------+------------+ | ee0e2b5d- | 2 | 0.500000 | flat | dde7f54e | None | None | None | | 1ded-4593- | | 00000000 | | -9e54- | | | | | b43d- | | 00000000 | | 403d- | | | | | 03b9c3763f | | 000000 | | 993d- | | | | | 59 | | | | 070c7aa7 | | | | | | | | | b2a3 | | | | +------------+-------+----------+------+----------+------------+----------+------------+ |
| [4] | Verify settings with an user who is in the project you set on [1] to create or start an instance. |
| debian@dlp ~(keystone)$ openstack server list +----------------+-----------+---------+-----------------+----------+----------+ | ID | Name | Status | Networks | Image | Flavor | +----------------+-----------+---------+-----------------+----------+----------+ | 2deabceb-e220- | Debian-13 | SHUTOFF | private=10.0.0. | Debian13 | m1.small | | 4e5c-b8dd- | | | 249, | | | | 320683d0bf0b | | | 192.168.100.39 | | | +----------------+-----------+---------+-----------------+----------+----------+ debian@dlp ~(keystone)$ openstack server start Debian-13 # after a certain period of time, costs are charged debian@dlp ~(keystone)$ openstack rating summary get +-----------------+---------------+------+-----------------+-----------------+ | Tenant ID | Resource Type | Rate | Begin Time | End Time | +-----------------+---------------+------+-----------------+-----------------+ | ecfa98ba82de421 | ALL | 0.5 | 2025-09- | 2025-10- | | e8f16c3d862b5ab | | | 01T00:00:00 | 01T00:00:00 | | 04 | | | | | +-----------------+---------------+------+-----------------+-----------------+ # if the instance continues to run, costs are charged every [period] of time debian@dlp ~(keystone)$ openstack rating summary get +-----------------+---------------+------+-----------------+-----------------+ | Tenant ID | Resource Type | Rate | Begin Time | End Time | +-----------------+---------------+------+-----------------+-----------------+ | ecfa98ba82de421 | ALL | 1.0 | 2025-09- | 2025-10- | | e8f16c3d862b5ab | | | 01T00:00:00 | 01T00:00:00 | | 04 | | | | | +-----------------+---------------+------+-----------------+-----------------+ # display data frames debian@dlp ~(keystone)$ openstack rating dataframes get +------------------+------------------+------------------+---------------------+
| Begin | End | Project ID | Resources |
+------------------+------------------+------------------+---------------------+
| 2025-09- | 2025-09- | ecfa98ba82de421e | [{'rating': '0.0', |
| 03T02:00:00 | 03T02:10:00 | 8f16c3d862b5ab04 | 'service': |
| | | | 'volume.size', |
| | | | 'desc': |
| | | | {'volume_type': 'f6 |
| | | | 6013e5-42fd-4894- |
| | | | 9abb-5d765afdc988', |
| | | | 'id': '406a36d6- |
| | | | 97b6-4240-b688- |
| | | | b868c144903d', |
| | | | 'project_id': 'ecfa |
| | | | 98ba82de421e8f16c3d |
| | | | 862b5ab04', |
| | | | 'user_id': 'da64c3c |
| | | | 335434563b66eb2e8af |
| | | | 260392', |
| | | | 'week_of_the_year': |
| | | | '35', |
| | | | 'day_of_the_year': |
| | | | '246', 'month': |
| | | | '9', 'year': |
| | | | '2025', |
| | | | 'tenant_id': 'ecfa9 |
| | | | 8ba82de421e8f16c3d8 |
| | | | 62b5ab04'}, |
| | | | 'volume': '1E+1', |
| | | | 'rate_value': |
| | | | '0.0000'}] |
| 2025-09- | 2025-09- | ecfa98ba82de421e | [{'rating': '0.5', |
| 03T02:30:00 | 03T02:40:00 | 8f16c3d862b5ab04 | 'service': |
| | | | 'instance', 'desc': |
| | | | {'flavor_name': |
| | | | 'm1.small', |
| | | | 'flavor_id': '2', |
| | | | 'vcpus': '', 'id': |
| | | | '2deabceb-e220- |
| | | | 4e5c-b8dd- |
| | | | 320683d0bf0b', |
| | | | 'project_id': 'ecfa |
| | | | 98ba82de421e8f16c3d |
| | | | 862b5ab04', |
| | | | 'user_id': 'da64c3c |
| | | | 335434563b66eb2e8af |
| | | | 260392', |
| | | | 'week_of_the_year': |
| | | | '35', |
| | | | 'day_of_the_year': |
| | | | '246', 'month': |
| | | | '9', 'year': |
| | | | '2025', |
| | | | 'tenant_id': 'ecfa9 |
| | | | 8ba82de421e8f16c3d8 |
| | | | 62b5ab04'}, |
| | | | 'volume': '1', |
| | | | 'rate_value': |
| | | | '0.5000'}] |
| 2025-09- | 2025-09- | ecfa98ba82de421e | [{'rating': '0.5', |
| 03T02:40:00 | 03T02:50:00 | 8f16c3d862b5ab04 | 'service': |
| | | | 'instance', 'desc': |
| | | | {'flavor_name': |
| | | | 'm1.small', |
| | | | 'flavor_id': '2', |
| | | | 'vcpus': '', 'id': |
| | | | '2deabceb-e220- |
| | | | 4e5c-b8dd- |
| | | | 320683d0bf0b', |
| | | | 'project_id': 'ecfa |
| | | | 98ba82de421e8f16c3d |
| | | | 862b5ab04', |
| | | | 'user_id': 'da64c3c |
| | | | 335434563b66eb2e8af |
| | | | 260392', |
| | | | 'week_of_the_year': |
| | | | '35', |
| | | | 'day_of_the_year': |
| | | | '246', 'month': |
| | | | '9', 'year': |
| | | | '2025', |
| | | | 'tenant_id': 'ecfa9 |
| | | | 8ba82de421e8f16c3d8 |
| | | | 62b5ab04'}, |
| | | | 'volume': '1', |
| | | | 'rate_value': |
| | | | '0.5000'}] |
+------------------+------------------+------------------+---------------------+
|
| [5] | Set rate to Volume Size. When users in the project set on [1] create cinder volumes, target project is charged at the rate you set per gigabyte. |
# add service matching rule root@dlp ~(keystone)# openstack rating hashmap service create volume.size +-------------+--------------------------------------+ | Name | Service ID | +-------------+--------------------------------------+ | volume.size | e05f36be-9dfb-487b-be37-b45985bbd831 | +-------------+--------------------------------------+ # add mapping rule # set a cost of [1.5] per gigabyte root@dlp ~(keystone)# openstack rating hashmap mapping create 1.5 \ -s e05f36be-9dfb-487b-be37-b45985bbd831 \ -t flat +------------+-------+----------+------+----------+------------+----------+------------+ | Mapping ID | Value | Cost | Type | Field ID | Service ID | Group ID | Project ID | +------------+-------+----------+------+----------+------------+----------+------------+ | 1cc134d4- | None | 1.500000 | flat | None | e05f36be- | None | None | | 94d1-4dfd- | | 00000000 | | | 9dfb-487b- | | | | 963b- | | 00000000 | | | be37- | | | | 20eee0a954 | | 000000 | | | b45985bbd8 | | | | a4 | | | | | 31 | | | +------------+-------+----------+------+----------+------------+----------+------------+ # set a 10% discount on over 30 GB volumes root@dlp ~(keystone)# openstack rating hashmap threshold create 30 0.90 \ -s e05f36be-9dfb-487b-be37-b45985bbd831 \ -t rate +--------------+----------+----------+------+----------+------------+----------+------------+ | Threshold ID | Level | Cost | Type | Field ID | Service ID | Group ID | Project ID | +--------------+----------+----------+------+----------+------------+----------+------------+ | 54f5ef08- | 30.00000 | 0.900000 | rate | None | e05f36be- | None | None | | b048-41af- | 000 | 00000000 | | | 9dfb-487b- | | | | 8179- | | 00222044 | | | be37- | | | | 529b2f20a872 | | 604925 | | | b45985bbd8 | | | | | | | | | 31 | | | +--------------+----------+----------+------+----------+------------+----------+------------+ |
| [6] | Verify settings with an user who is in the project you set on [1] to create volumes. |
| debian@dlp ~(keystone)$ openstack rating summary get +-----------------+---------------+------+-----------------+-----------------+
| Tenant ID | Resource Type | Rate | Begin Time | End Time |
+-----------------+---------------+------+-----------------+-----------------+
| ecfa98ba82de421 | ALL | 3.5 | 2025-09- | 2025-10- |
| e8f16c3d862b5ab | | | 01T00:00:00 | 01T00:00:00 |
| 04 | | | | |
+-----------------+---------------+------+-----------------+-----------------+
debian@dlp ~(keystone)$ openstack volume create --size 10 disk01
debian@dlp ~(keystone)$ openstack volume list +------------------------------------+--------+-----------+------+-------------+ | ID | Name | Status | Size | Attached to | +------------------------------------+--------+-----------+------+-------------+ | 118d6b57-b831-437a-869e- | disk01 | available | 10 | | | 572ecef3637f | | | | | +------------------------------------+--------+-----------+------+-------------+ # after a certain period of time, costs are charged debian@dlp ~(keystone)$ openstack rating summary get +-----------------+---------------+------+-----------------+-----------------+ | Tenant ID | Resource Type | Rate | Begin Time | End Time | +-----------------+---------------+------+-----------------+-----------------+ | ecfa98ba82de421 | ALL | 18.5 | 2025-09- | 2025-10- | | e8f16c3d862b5ab | | | 01T00:00:00 | 01T00:00:00 | | 04 | | | | | +-----------------+---------------+------+-----------------+-----------------+debian@dlp ~(keystone)$ openstack rating dataframes get +------------------+------------------+------------------+---------------------+
| Begin | End | Project ID | Resources |
+------------------+------------------+------------------+---------------------+
| 2025-09- | 2025-09- | ecfa98ba82de421e | [{'rating': '0.5', |
| 03T03:30:00 | 03T03:40:00 | 8f16c3d862b5ab04 | 'service': |
| | | | 'instance', 'desc': |
| | | | {'flavor_name': |
| | | | 'm1.small', |
| | | | 'flavor_id': '2', |
| | | | 'vcpus': '', 'id': |
| | | | '2deabceb-e220- |
| | | | 4e5c-b8dd- |
| | | | 320683d0bf0b', |
| | | | 'project_id': 'ecfa |
| | | | 98ba82de421e8f16c3d |
| | | | 862b5ab04', |
| | | | 'user_id': 'da64c3c |
| | | | 335434563b66eb2e8af |
| | | | 260392', |
| | | | 'week_of_the_year': |
| | | | '35', |
| | | | 'day_of_the_year': |
| | | | '246', 'month': |
| | | | '9', 'year': |
| | | | '2025', |
| | | | 'tenant_id': 'ecfa9 |
| | | | 8ba82de421e8f16c3d8 |
| | | | 62b5ab04'}, |
| | | | 'volume': '1', |
| | | | 'rate_value': |
| | | | '0.5000'}] |
| 2025-09- | 2025-09- | ecfa98ba82de421e | [{'rating': '15.0', |
| 03T03:40:00 | 03T03:50:00 | 8f16c3d862b5ab04 | 'service': |
| | | | 'volume.size', |
| | | | 'desc': |
| | | | {'volume_type': |
| | | | '__DEFAULT__', |
| | | | 'id': '118d6b57- |
| | | | b831-437a-869e- |
| | | | 572ecef3637f', |
| | | | 'project_id': 'ecfa |
| | | | 98ba82de421e8f16c3d |
| | | | 862b5ab04', |
| | | | 'user_id': 'da64c3c |
| | | | 335434563b66eb2e8af |
| | | | 260392', |
| | | | 'week_of_the_year': |
| | | | '35', |
| | | | 'day_of_the_year': |
| | | | '246', 'month': |
| | | | '9', 'year': |
| | | | '2025', |
| | | | 'tenant_id': 'ecfa9 |
| | | | 8ba82de421e8f16c3d8 |
| | | | 62b5ab04'}, |
| | | | 'volume': '1E+1', |
| | | | 'rate_value': |
| | | | '1.5000'}] |
+------------------+------------------+------------------+---------------------+
debian@dlp ~(keystone)$ openstack volume create --size 30 disk02 debian@dlp ~(keystone)$ openstack volume list +------------------------------------+--------+-----------+------+-------------+ | ID | Name | Status | Size | Attached to | +------------------------------------+--------+-----------+------+-------------+ | 1cc8ffd5-26e2-4466-81fe- | disk02 | available | 30 | | | 6af515557c91 | | | | | | 118d6b57-b831-437a-869e- | disk01 | available | 10 | | | 572ecef3637f | | | | | +------------------------------------+--------+-----------+------+-------------+ # after a certain period of time, costs are charged # 1.5 x 30 x 0.9 = 40.5 debian@dlp ~(keystone)$ openstack rating summary get +----------------+---------------+------+----------------+-------------------+ | Tenant ID | Resource Type | Rate | Begin Time | End Time | +----------------+---------------+------+----------------+-------------------+ | ecfa98ba82de42 | ALL | 59.0 | 2025-09- | 2025-10- | | 1e8f16c3d862b5 | | | 01T00:00:00 | 01T00:00:00 | | ab04 | | | | | +----------------+---------------+------+----------------+-------------------+debian@dlp ~(keystone)$ openstack rating dataframes get +------------------+------------------+------------------+---------------------+
| Begin | End | Project ID | Resources |
+------------------+------------------+------------------+---------------------+
| 2025-09- | 2025-09- | ecfa98ba82de421e | [{'rating': '0.5', |
| 03T03:30:00 | 03T03:40:00 | 8f16c3d862b5ab04 | 'service': |
| | | | 'instance', 'desc': |
| | | | {'flavor_name': |
| | | | 'm1.small', |
| | | | 'flavor_id': '2', |
| | | | 'vcpus': '', 'id': |
| | | | '2deabceb-e220- |
| | | | 4e5c-b8dd- |
| | | | 320683d0bf0b', |
| | | | 'project_id': 'ecfa |
| | | | 98ba82de421e8f16c3d |
| | | | 862b5ab04', |
| | | | 'user_id': 'da64c3c |
| | | | 335434563b66eb2e8af |
| | | | 260392', |
| | | | 'week_of_the_year': |
| | | | '35', |
| | | | 'day_of_the_year': |
| | | | '246', 'month': |
| | | | '9', 'year': |
| | | | '2025', |
| | | | 'tenant_id': 'ecfa9 |
| | | | 8ba82de421e8f16c3d8 |
| | | | 62b5ab04'}, |
| | | | 'volume': '1', |
| | | | 'rate_value': |
| | | | '0.5000'}] |
| 2025-09- | 2025-09- | ecfa98ba82de421e | [{'rating': '15.0', |
| 03T04:20:00 | 03T04:30:00 | 8f16c3d862b5ab04 | 'service': |
| | | | 'volume.size', |
| | | | 'desc': |
| | | | {'volume_type': 'f6 |
| | | | 6013e5-42fd-4894- |
| | | | 9abb-5d765afdc988', |
| | | | 'id': '118d6b57- |
| | | | b831-437a-869e- |
| | | | 572ecef3637f', |
| | | | 'project_id': 'ecfa |
| | | | 98ba82de421e8f16c3d |
| | | | 862b5ab04', |
| | | | 'user_id': 'da64c3c |
| | | | 335434563b66eb2e8af |
| | | | 260392', |
| | | | 'week_of_the_year': |
| | | | '35', |
| | | | 'day_of_the_year': |
| | | | '246', 'month': |
| | | | '9', 'year': |
| | | | '2025', |
| | | | 'tenant_id': 'ecfa9 |
| | | | 8ba82de421e8f16c3d8 |
| | | | 62b5ab04'}, |
| | | | 'volume': '1E+1', |
| | | | 'rate_value': |
| | | | '1.5000'}] |
| 2025-09- | 2025-09- | ecfa98ba82de421e | [{'rating': '40.5', |
| 03T04:20:00 | 03T04:30:00 | 8f16c3d862b5ab04 | 'service': |
| | | | 'volume.size', |
| | | | 'desc': |
| | | | {'volume_type': |
| | | | '__DEFAULT__', |
| | | | 'id': '1cc8ffd5- |
| | | | 26e2-4466-81fe- |
| | | | 6af515557c91', |
| | | | 'project_id': 'ecfa |
| | | | 98ba82de421e8f16c3d |
| | | | 862b5ab04', |
| | | | 'user_id': 'da64c3c |
| | | | 335434563b66eb2e8af |
| | | | 260392', |
| | | | 'week_of_the_year': |
| | | | '35', |
| | | | 'day_of_the_year': |
| | | | '246', 'month': |
| | | | '9', 'year': |
| | | | '2025', |
| | | | 'tenant_id': 'ecfa9 |
| | | | 8ba82de421e8f16c3d8 |
| | | | 62b5ab04'}, |
| | | | 'volume': '3E+1', |
| | | | 'rate_value': |
| | | | '1.3500'}] |
+------------------+------------------+------------------+---------------------+
|
Matched Content
No comments:
Post a Comment