===========================
OpenStack Skyline APIServer
===========================
`English <./README.rst>`__ \| 简体中文
Skyline 是一个经过 UI 和 UE 优化过的 OpenStack 仪表盘,支持 OpenStack
Train 及以上版本。Skyline 拥有现代化的技术栈和生态,更易于开发者维护和
使用者操作,以及更高的并发性能。
Skyline 的吉祥物是九色鹿。九色鹿源自于敦煌壁画《九色鹿本生》,其寓意是佛理
因果和知恩图报,这与九州云自创办以来秉持的拥抱和反馈社区理念一致。我们也希望
Skyline 像九色鹿一样,轻巧、优雅,而又能力强大,为 OpenStack 社区和用户
提供更优质的 Dashboard。
|image0|
**目录**
- `Skyline API Server <#skyline-api-server>`__
- `资源 <#资源>`__
- `快速开始 <#快速开始>`__
- `先决条件 <#先决条件>`__
- `配置 <#配置>`__
- `部署 - 数据库使用 Sqlite <#部署---数据库使用-sqlite>`__
- `部署 - 数据库使用 MariaDB <#部署---数据库使用-mariadb>`__
- `访问测试 <#访问测试>`__
- `开发 Skyline-apiserver <#开发-skyline-apiserver>`__
- `依赖工具 <#依赖工具>`__
- `安装和运行 <#安装和运行>`__
- `Devstack 集成 <#devstack-集成>`__
- `Kolla Ansible 部署 <#kolla-ansible-部署>`__
资源
----
- `开发者手册 `__
- `发布小结 `__
- `Wiki `__
- `Bug 跟踪器 `__
快速开始
--------
先决条件
~~~~~~~~
- 一个至少运行核心组件的 OpenStack 环境, 并能通过 Keystone endpoint
访问 OpenStack 组件
- 一个安装有容器引擎的
(`docker `__ 或
`podman `__) 的 Linux
服务器
配置
~~~~
1. 在 Linux 服务器中编辑 ``/etc/skyline/skyline.yaml`` 文件
可以参考 `sample file `__,
并根据实际的环境修改以下参数
- database_url
- keystone_url
- default_region
- interface_type
- system_project_domain
- system_project
- system_user_domain
- system_user_name
- system_user_password
部署 - 数据库使用 Sqlite
~~~~~~~~~~~~~~~~~~~~~~~~
如果从 dockerhub 拉取镜像失败可以从阿里镜像仓库中拉取,阿里镜像仓库中的镜像会每小时同步一下,镜像地址如下
- registry.cn-shanghai.aliyuncs.com/99cloud-sh/skyline:zed
- registry.cn-shanghai.aliyuncs.com/99cloud-sh/skyline:latest
1. 运行 skyline_bootstrap 容器进行初始化引导
.. code:: bash
rm -rf /tmp/skyline && mkdir /tmp/skyline
docker run -d --name skyline_bootstrap -e KOLLA_BOOTSTRAP="" -v /etc/skyline/skyline.yaml:/etc/skyline/skyline.yaml -v /tmp/skyline:/tmp --net=host 99cloud/skyline:latest
# Check bootstrap is normal `exit 0`
docker logs skyline_bootstrap
2. 初始化引导完成后运行 skyline 服务
.. code:: bash
docker rm -f skyline_bootstrap
如果需要修改 skyline 端口号,则在以下命令中添加 ``-e LISTEN_ADDRESS=``
``LISTEN_ADDRESS`` 默认为 ``0.0.0.0:9999``
如果需要修改某个 service 的 policy 规则,则在以下命令中添加 ``-v /etc/skyline/policy:/etc/skyline/policy``
将对应的 policy yaml 文件重命名为 ``_policy.yaml``, 并放其在 ``/etc/skyline/policy`` 文件夹下
.. code:: bash
docker run -d --name skyline --restart=always -v /etc/skyline/skyline.yaml:/etc/skyline/skyline.yaml -v /tmp/skyline:/tmp --net=host 99cloud/skyline:latest
部署 - 数据库使用 MariaDB
~~~~~~~~~~~~~~~~~~~~~~~~~
参考:https://docs.openstack.org/skyline-apiserver/latest/install/docker-install-ubuntu.html
1. 连接 OpenStack 环境的数据库, 并创建 ``skyline`` 数据库
.. code:: bash
$ mysql -u root -p
MariaDB [(none)]> CREATE DATABASE IF NOT EXISTS skyline DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
Query OK, 1 row affected (0.001 sec)
2. 授予对数据库的适当访问权限
用合适的密码替换 ``SKYLINE_DBPASS``
.. code:: bash
MariaDB [(none)]> GRANT ALL PRIVILEGES ON skyline.* TO 'skyline'@'localhost' IDENTIFIED BY 'SKYLINE_DBPASS';
Query OK, 0 rows affected (0.001 sec)
MariaDB [(none)]> GRANT ALL PRIVILEGES ON skyline.* TO 'skyline'@'%' IDENTIFIED BY 'SKYLINE_DBPASS';
Query OK, 0 rows affected (0.001 sec)
3. 创建 skyline 服务凭证
.. code:: bash
# Source the admin credentials
$ source admin-openrc
# Create the skyline user
$ openstack user create --domain default --password-prompt skyline
User Password:
Repeat User Password:
+---------------------+----------------------------------+
| Field | Value |
+---------------------+----------------------------------+
| domain_id | default |
| enabled | True |
| id | 1qaz2wsx3edc4rfv5tgb6yhn7ujm8ikl |
| name | skyline |
| options | {} |
| password_expires_at | 2020-08-08T08:08:08.123456 |
+---------------------+----------------------------------+
# Add the admin role to the skyline user:
$ openstack role add --project service --user skyline admin
4. 运行 skyline_bootstrap 容器进行初始化引导
.. code:: bash
docker run -d --name skyline_bootstrap -e KOLLA_BOOTSTRAP="" -v /etc/skyline/skyline.yaml:/etc/skyline/skyline.yaml --net=host 99cloud/skyline:latest
# Check bootstrap is normal `exit 0`
docker logs skyline_bootstrap
5. 初始化引导完成后运行 skyline 服务
.. code:: bash
docker rm -f skyline_bootstrap
如果需要修改 skyline 端口号,则在以下命令中添加 ``-e LISTEN_ADDRESS=``
``LISTEN_ADDRESS`` 默认为 ``0.0.0.0:9999``
如果需要修改某个 service 的 policy 规则,则在以下命令中添加 ``-v /etc/skyline/policy:/etc/skyline/policy``
将对应的 policy yaml 文件重命名为 ``_policy.yaml``, 并放其在 ``/etc/skyline/policy`` 文件夹下
.. code:: bash
docker run -d --name skyline --restart=always -v /etc/skyline/skyline.yaml:/etc/skyline/skyline.yaml --net=host 99cloud/skyline:latest
API Doc
~~~~~~~~~
你可以使用 ``https://:9999/api/openstack/skyline/docs`` 来访问 API doc
访问测试
~~~~~~~~
现在你可以访问仪表盘: ``https://:9999``
开发 Skyline-apiserver
----------------------
**支持 Linux 和 Mac 操作系统 (推荐 Linux 操作系统) (由于 uvloop 和 cython 库)**
依赖工具
~~~~~~~~
python 使用了 3.7 版本的新特性 Context Variables 以及 uvloop (0.15.0+
需要 python 3.7+),考虑大部分系统不支持 python 3.7 ,所以选择支持
python 3.8 及以上版本
- make >= 3.82
- python >= 3.8
- node >= 10.22.0 (可选,只开发 API 就用不到)
- yarn >= 1.22.4 (可选,只开发 API 就用不到)
安装和运行
~~~~~~~~~~
1. 安装依赖包
.. code:: bash
tox -e venv
2. 配置 ``skyline.yaml`` 文件
.. code:: bash
cp etc/skyline.yaml.sample etc/skyline.yaml
export OS_CONFIG_DIR=$(pwd)/etc
可能你需要根据实际的环境修改以下参数:
.. code:: yaml
- database_url
- keystone_url
- default_region
- interface_type
- system_project_domain
- system_project
- system_user_domain
- system_user_name
- system_user_password
如果你为 ``database_url`` 设置了类似 ``sqlite:////tmp/skyline.db``
,只需要执行以下操作。 如果你为 ``database_url`` 设置了类似
``mysql://root:root@localhost:3306/skyline`` ,你应该先参考
``部署 - 数据库使用 MariaDB`` 一章中的 ``1`` 和 ``2`` 步骤。
3. 初始化 skyline 数据库
.. code:: bash
source .tox/venv/bin/activate
make db_sync
deactivate
4. 运行 skyline-apiserver
.. code:: console
$ source .tox/venv/bin/activate
$ uvicorn --reload --reload-dir skyline_apiserver --port 28000 --log-level debug skyline_apiserver.main:app
INFO: Uvicorn running on http://127.0.0.1:28000 (Press CTRL+C to quit)
INFO: Started reloader process [154033] using statreload
INFO: Started server process [154037]
INFO: Waiting for application startup.
INFO: Application startup complete.
此时你可访问在线 API 文档:\ ``http://127.0.0.1:28000/docs``\ 。
如果用 vscode 调试的话,可以通过 ``.vscode/launch.json`` 启动调试器。
5. 构建镜像
.. code:: bash
make build
Devstack 集成
-------------
`与 Devstack 快速集成,搭建环境。 <./devstack/README.rst>`__
Kolla Ansible 部署
------------------
`使用 Kolla Ansible 部署环境。 <./kolla/README-zh_CN.md>`__
|image1|
.. |image0| image:: doc/source/images/logo/OpenStack_Project_Skyline_horizontal.png
.. |image1| image:: doc/source/images/logo/nine-color-deer-64.png