@TOC

前言

什么是CloudKitty?
CloudKitty是OpenStack等的评级即服务项目。该我的项目旨在成为云的退款和评级的通用解决方案。从历史上看,它只能在OpenStack上下文中运行它,但当初能够在独立模式下运行CloudKitty。

CloudKitty容许进行基于指标的评级:它轮询终端节点以检索无关特定指标的度量值和元数据,将评级规定利用于收集的数据,并将评级数据推送到其存储后端。

CloudKitty是高度模块化的,这使得增加新性能变得容易。

架构

CloudKitty能够分为四大局部:

  • Data retrieval (API) 数据检索
  • Data collection (cloudkitty-processor) 数据收集
  • Data rating 数据评级
  • Data storage 数据存储

这些局部由两个过程解决:和 。数据检索局部由过程解决,其余局部由 解决。cloudkitty-apicloudkitty-processorcloudkitty-apicloudkitty-processor

以下是 CloudKitty 架构的概述:

装置

yum install openstack-cloudkitty-api openstack-cloudkitty-processor openstack-cloudkitty-ui

配置

编辑/etc/cloudkitty/cloudkitty.conf以配置 CloudKitty

[DEFAULT]verbose = Truelog_dir = /var/log/cloudkitty[oslo_messaging_rabbit]rabbit_userid = openstackrabbit_password = RABBIT_PASSWORDrabbit_hosts = RABBIT_HOST[auth]username = cloudkittypassword = CK_PASSWORDtenant = serviceregion = RegionOneurl = http://localhost:5000/v2.0[keystone_authtoken]username = cloudkittypassword = CK_PASSWORDproject_name = serviceregion = RegionOneauth_url = http://localhost:5000/v2.0auth_plugin = password[database]connection = mysql://cloudkitty:CK_DBPASS@localhost/cloudkitty[keystone_fetcher]username = adminpassword = ADMIN_PASSWORDtenant = adminregion = RegionOneurl = http://localhost:5000/v2.0[ceilometer_collector]username = cloudkittypassword = CK_PASSWORDtenant = serviceregion = RegionOneurl = http://localhost:5000

设置数据库和存储后端

[root@controller ~]# mysql -uroot -p000000Welcome to the MariaDB monitor.  Commands end with ; or \g.Your MariaDB connection id is 374Server version: 10.1.20-MariaDB MariaDB ServerCopyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.MariaDB [(none)]> CREATE DATABASE cloudkitty;Query OK, 1 row affected (0.00 sec)MariaDB [(none)]> GRANT ALL PRIVILEGES ON cloudkitty.* TO 'cloudkitty'@'localhost' IDENTIFIED BY '000000';Query OK, 0 rows affected (0.00 sec)MariaDB [(none)]> GRANT ALL PRIVILEGES ON cloudkitty.* TO 'cloudkitty'@'%' IDENTIFIED BY '000000';Query OK, 0 rows affected (0.00 sec)

运行数据库同步脚本

[root@controller ~]# cloudkitty-dbsync upgradeINFO  [alembic.runtime.migration] Context impl MySQLImpl.INFO  [alembic.runtime.migration] Will assume non-transactional DDL.INFO  [alembic.runtime.migration] Running upgrade  -> 464e951dc3b8, Initial migrationINFO  [alembic.runtime.migration] Running upgrade 464e951dc3b8 -> 2ac2217dcbd9, Added support for meta collectorINFO  [alembic.runtime.migration] Running upgrade 2ac2217dcbd9 -> 385e33fef139, Added priority to modules_state.INFO  [alembic.runtime.migration] Context impl MySQLImpl.INFO  [alembic.runtime.migration] Will assume non-transactional DDL.INFO  [alembic.runtime.migration] Running upgrade  -> 3dd7e13527f3, Initial migrationINFO  [alembic.runtime.migration] Running upgrade 3dd7e13527f3 -> 4fa888fd7eda, Added threshold support.INFO  [alembic.runtime.migration] Running upgrade 4fa888fd7eda -> 54cc17accf2c, Fixed constraint name.INFO  [alembic.runtime.migration] Running upgrade 54cc17accf2c -> 10d2738b67df, Rename mapping table to hashmap_mappings.INFO  [alembic.runtime.migration] Running upgrade 10d2738b67df -> f8c799db4aa0, Fix unnamed constraints.INFO  [alembic.runtime.migration] Running upgrade f8c799db4aa0 -> c88a06b1cfce, Clean hashmap fields constraints./usr/lib64/python2.7/site-packages/sqlalchemy/engine/default.py:507: Warning: Duplicate index `uniq_field_per_service`. This is deprecated and will be disallowed in a future release.  cursor.execute(statement, parameters)INFO  [alembic.runtime.migration] Running upgrade c88a06b1cfce -> 4da82e1c11c8, Add per tenant hashmap supportINFO  [alembic.runtime.migration] Context impl MySQLImpl.INFO  [alembic.runtime.migration] Will assume non-transactional DDL.INFO  [alembic.runtime.migration] Running upgrade  -> 4f9efa4601c0, Initial migration.

初始化存储后端

[root@controller ~]# cloudkitty-storage-initNo handlers could be found for logger "cloudkitty.utils"INFO  [alembic.runtime.migration] Context impl MySQLImpl.INFO  [alembic.runtime.migration] Will assume non-transactional DDL.INFO  [alembic.runtime.migration] Running upgrade  -> 17fd1b237aa3, Initial migrationINFO  [alembic.runtime.migration] Running upgrade 17fd1b237aa3 -> 792b438b663, added tenant informationsINFO  [alembic.runtime.migration] Running upgrade 792b438b663 -> 307430ab38bc, improve qty precisionINFO  [alembic.runtime.migration] Running upgrade 307430ab38bc -> c703a1bad612, improve_qty_digit

CloudKitty 应用 Keystone 进行身份验证,并提供rating服务。

[root@controller ~]# openstack user create --domain demo --password 000000 cloudkitty+---------------------+----------------------------------+| Field               | Value                            |+---------------------+----------------------------------+| domain_id           | d5db5c4ee4a14492b69408f63107d11f || enabled             | True                             || id                  | f1dea9309b834edba3aa4c1b8607dc16 || name                | cloudkitty                       || options             | {}                               || password_expires_at | None                             |+---------------------+----------------------------------+
[root@controller ~]# openstack role add --project service --user cloudkitty admin

对于应由 CloudKitty解决的每个租户,将rating角色赋予 cloudkitty :

[root@controller ~]# openstack role create rating+-----------+----------------------------------+| Field     | Value                            |+-----------+----------------------------------+| domain_id | None                             || id        | ee01d36a397b4b0ebcb579044c32a73c || name      | rating                           |+-----------+----------------------------------+

创立rating服务及其端点:

[root@controller ~]# openstack service create --name cloudkitty --description "OpenStack rating" rating+-------------+----------------------------------+| Field       | Value                            |+-------------+----------------------------------+| description | OpenStack rating                 || enabled     | True                             || id          | 78f3d51cf74843cd8d325b790e0c2b1c || name        | cloudkitty                       || type        | rating                           |+-------------+----------------------------------+
openstack endpoint create --region RegionOne rating public http://controller:9292openstack endpoint create --region RegionOne rating internal http://controller:9292openstack endpoint create --region RegionOne rating admin http://controller:9292
[root@controller ~]# openstack endpoint create --region RegionOne rating public http://controller:9292+--------------+----------------------------------+| Field        | Value                            |+--------------+----------------------------------+| enabled      | True                             || id           | 48b75b9d2d764b56a5bee00ff75b03b1 || interface    | public                           || region       | RegionOne                        || region_id    | RegionOne                        || service_id   | 78f3d51cf74843cd8d325b790e0c2b1c || service_name | cloudkitty                       || service_type | rating                           || url          | http://controller:9292           |+--------------+----------------------------------+[root@controller ~]# openstack endpoint create --region RegionOne rating internal http://controller:9292+--------------+----------------------------------+| Field        | Value                            |+--------------+----------------------------------+| enabled      | True                             || id           | b4f7fffa539441a68506db90b3ae89ce || interface    | internal                         || region       | RegionOne                        || region_id    | RegionOne                        || service_id   | 78f3d51cf74843cd8d325b790e0c2b1c || service_name | cloudkitty                       || service_type | rating                           || url          | http://controller:9292           |+--------------+----------------------------------+[root@controller ~]# openstack endpoint create --region RegionOne rating admin http://controller:9292+--------------+----------------------------------+| Field        | Value                            |+--------------+----------------------------------+| enabled      | True                             || id           | a607a077f119417d9e650c16dcd61f10 || interface    | admin                            || region       | RegionOne                        || region_id    | RegionOne                        || service_id   | 78f3d51cf74843cd8d325b790e0c2b1c || service_name | cloudkitty                       || service_type | rating                           || url          | http://controller:9292           |+--------------+----------------------------------+

启动

[root@controller ~]# systemctl start cloudkitty-processor.service[root@controller ~]# cloudkitty-api -p 8889  #长期启动APINo handlers could be found for logger "cloudkitty.utils"/usr/lib/python2.7/site-packages/pecan/__init__.py:122: RuntimeWarning: `static_root` is only used when `debug` is True, ignoring  RuntimeWarning********************************************************************************STARTING test server cloudkitty.api.app.build_wsgi_appAvailable at http://controller:8889/DANGER! For testing only, do not use in production********************************************************************************192.168.200.1 - - [29/Apr/2022 15:06:41] "GET / HTTP/1.1" 200 209

检索并装置 CloudKitty 的仪表板

git clone https://opendev.org/openstack/cloudkitty-dashboard.gitpython setup.py installyum install -y wgetwget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repoyum -y install python-pipPY_PACKAGES_PATH=`pip --version | cut -d' ' -f4`ln -s $PY_PACKAGES_PATH/cloudkittydashboard/enabled/_[0-9]*.py /usr/share/openstack-dashboard/openstack_dashboard/enabled/
[root@controller bin]# systemctl restart httpd.service memcached.service