9-Openstack 控制面板服务 Horizon
1. Horizon 简介
horizon 是 openstack 的管理其他组件的图形显示和操作界面,通过~ 和其他服务进行通 讯,如镜像服务、计算服务和网络服务等结合使用,horizon 基于 python django 开发,通过 Apache 的 wsgi 模块进行 web 访问通信,Horizon 只需要更改配置文件连接到 keyston 即可
Horizon作为OpenStack的Web界面 , 它提供了对OpenStack各个模块的可视化操作。Horizon允许用户通过浏览器来访问OpenStack , 而无需使用命令行工具以及其他客户端。

Horizon是一个基于Django框架的Web应用程序 , 它是OpenStack的一个关键部分。使用Horizon , 用户可以自由地管理云平台、云硬件设施以及虚拟化资源。
2. Horizon 功能框架
功能框架

Horizon主要由三个dashboard组成: 用户dashboard、系统dashboard和设置dashboard。用户
dashboard
系统
dashboard
设置
dashboard
3. 概念理解
区域(
Region)地理上的概念 , 可以理解为一个独立的数据中心 , 每个所定义的区域有自己独立的
Endpoint;区域之间是完全隔离的 , 但多个区域之间共享同一个
Keystone和Dashboard(目前Openstack中的Dashboard还不支持多个区域) ;除了提供隔离的功能 , 区域的设计更多侧重地理位置的概念 , 用户可以选择离自己更新的区域来部署自己的服务,选择不同的区域主要是考虑那个区域更靠近自己 , 如用户在美国 , 可以选择离美国更近的区域 ;
区域的概念是由
Amazon在AWS中提出,主要是解决容错能力和可靠性 ;
可用性区域(
Availability Zone)AZ是在Region范围内的再次切分 , 例如可以把一个机架上的服务器划分为一个AZ, 划分AZ是为了提高容灾能力和提供廉价的隔离服务 ;AZ主要是通过冗余来解决可用性的问题 , 在Amazon的声明中 ,Instance不可用是指用户所有AZ中的同一个Instance都不可达才表明不可用 ;AZ是用户可见的一个概念 , 并可选择 , 是物理隔离的 , 一个AZ不可用不会影响其他的AZ, 用户在创建Instance的时候可以选择创建到那些AZ中 ;
Host Aggreates一组具有共同属性的节点集合 , 如以
CPU作为区分类型的一个属性 , 以磁盘(SSD\SAS\SATA) 作为区分类型的一个属性 , 以OS(Windows\Linux) 为作区分类型的一个属性 ;
Cellnova为了增加横向扩展以及分布式、大规模( 地理位置级别) 部署的能力 , 同时又不增加数据库和消息中间件的复杂度 , 引入了cell的概念 , 并引入了nova-cell服务。
主要是用来解决
OpenStack的扩展性和规模瓶颈 ;每个
Cell都有自己独立的DB和AMQP, 不与其他模块共用DB和AMQP,解决了大规模环境中DB和AMQP的瓶颈问题 ;Cell实现了树形结构( 通过消息路由) 和分级调度( 过滤算法和权重算法) ,Cell之间通过RPC通讯 , 解决了扩展性问题 ;
4. Horizon 界面功能
Horizon作为OpenStack的Web界面 , 提供了丰富的可视化功能 , 让用户可以更加轻松地操作OpenStack平台。其中 , 主要包含如下功能:
用户认证:
Horizon支持基于用户名和密码的认证方式 , 还提供了基于令牌的用户认证方式。虚拟机管理:
Horizon允许用户创建、启动、停止、重启虚拟机等操作 , 还提供了虚拟机列表、虚拟机快照等功能。云存储管理:
Horizon支持对云存储的创建、管理和删除操作 , 未来还会提供更多功能。网络管理:
Horizon可以对网络进行配置、控制和监控 , 从而提供完整的网络管理功能。负载平衡器管理:
Horizon提供了负载平衡器的创建、配置和监控等功能。
Horizon为两种用户提供了两种不同的功能界面:
云管理员: 提供了一个整体的视图可以总览整个云的资源大小及运行状况 , 可以创建终端用户和项目 , 向终端用户分配项目并进行项目的资源配额管理 ;
终端用户: 提供了一个自主服务的门户 , 可以在管理员分配的项目中 , 在不超过额定配额的限制内 , 自由操作、使用和 存储网络资源 ;
总之 , Horizon提供了全面的OpenStack管理功能 , 并且具有良好的可维护性和扩展性。
5. 安装和配置Horizon
dashboard这个服务可以运行在控制节点 , 也可以运行在其他一个单独的节点上 , 但是运行在单独的一个节点上 , 请提前配置好yum仓库 , 时间同步 , 以及主机名解析等等 ; 这里用一台独立的服务安装dashboard服务。节点环境的准备可以按照之前的文档来操作
安装软件
[root@node04 ~]# dnf --enablerepo crb install openstack-dashboard编辑
/etc/openstack-dashboard/local_settings文件并完成以下操作:在
dashboard节点上配置controller节点 , 以方便dashboard服务可以使用openstack服务。使用示例:OPENSTACK_HOST = "controller"OPENSTACK_HOST = "192.168.71.11"配置任何主机都允许访问
dashboard服务。使用示例:ALLOWED_HOSTS = ['horizon.example.com', 'localhost']ALLOWED_HOSTS = ['*']*表示通配所有主机;配置存储
session的服务为memcached, 并配置memcached的地址SESSION_ENGINE = 'django.contrib.sessions.backends.cache' CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': 'openstack-vip.net:11211', } }启用
Identity API版本3OPENSTACK_KEYSTONE_URL = "http://%s/identity/v3" % OPENSTACK_HOST如果你的
Keystone运行在5000端口上 , 那么在这里你也应该指定Keystone的端口 ,OPENSTACK_KEYSTONE_URL = "http://%s:5000/identity/v3" % OPENSTACK_HOST启用对域的支持
OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True配置
API版本:OPENSTACK_API_VERSIONS = { "identity": 3, "image": 2, "volume": 3, }配置
default域为用户的默认域OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = "Default"配置创建用户的角色默认为
user角色OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user"配置网络相关参数 , 如果
openstack中的neutron服务配置的的是provider network, 需要禁用对三层网络的支持 , 如果是self-service network保持默认即可如果选用的是
provider network这种网络模型 , 配置是OPENSTACK_NEUTRON_NETWORK = { ... 'enable_router': False, 'enable_quotas': False, 'enable_distributed_router': False, 'enable_ha_router': False, 'enable_fip_topology_check': False, }配置时区
TIME_ZONE = "Asia/Shanghai"设置浏览器访问时的根目录
WEBROOT = "/dashboard/"
在
/etc/httpd/conf.d/openstack-dashboard.conf配置文件导入以下配置WSGIApplicationGroup %{GLOBAL}
这里原本的
/etc/httpd/conf.d/openstack-dashboard.conf文件如下WSGIDaemonProcess dashboard WSGIProcessGroup dashboard WSGISocketPrefix run/wsgi WSGIApplicationGroup %{GLOBAL} WSGIScriptAlias /dashboard /usr/share/openstack-dashboard/openstack_dashboard/wsgi/django.wsgi Alias /dashboard/static /usr/share/openstack-dashboard/static <Directory /usr/share/openstack-dashboard/openstack_dashboard/wsgi> Options All AllowOverride All Require all granted </Directory> <Directory /usr/share/openstack-dashboard/static> Options All AllowOverride All Require all granted </Directory>由于新版本里面没有文件
/usr/share/openstack-dashboard/openstack_dashboard/wsgi/django.wsgi, 新版本里面用/usr/share/openstack-dashboard/openstack_dashboard/wsgi.py替换了这个文件 , 修改之后的文件内容如下WSGIDaemonProcess dashboard WSGIProcessGroup dashboard WSGISocketPrefix run/wsgi WSGIApplicationGroup %{GLOBAL} #修改下面内容, 保证可以识别到脚本文件 WSGIScriptAlias /dashboard /usr/share/openstack-dashboard/openstack_dashboard/wsgi.py Alias /dashboard/static /usr/share/openstack-dashboard/static #由于原本的文件不见了, 这里修改脚本目录位置, <Directory /usr/share/openstack-dashboard/openstack_dashboard/> Options All AllowOverride All Require all granted </Directory> <Directory /usr/share/openstack-dashboard/static> Options All AllowOverride All Require all granted </Directory>启动
httpd服务 , 并将其设置为开机启动systemctl restart httpd.service安装连接
memcached驱动yum install python3-memcached
以此dashboard已经安装完成
如果访问过程中需要直接使用IP而不是IP/dashboard加/dashboard后缀的方式访问。则需要去掉之前在文件/etc/openstack-dashboard/local_settings添加的WEBROOT = "/dashboard/"。
另外修改文件/etc/httpd/conf.d/openstack-dashboard.conf,修改内容如下
[root@node04 ~]# cat /etc/httpd/conf.d/openstack-dashboard.conf
WSGIDaemonProcess dashboard
WSGIProcessGroup dashboard
WSGISocketPrefix run/wsgi
WSGIApplicationGroup %{GLOBAL}
WSGIScriptAlias / /usr/share/openstack-dashboard/openstack_dashboard/wsgi.py
Alias /static /usr/share/openstack-dashboard/static
<Directory /usr/share/openstack-dashboard/openstack_dashboard/>
Options All
AllowOverride All
Require all granted
</Directory>
<Directory /usr/share/openstack-dashboard/static>
Options All
AllowOverride All
Require all granted
</Directory>或者直接运行命令手动生成对应的文件内容。生成的配置文件默认根目录为/
[root@node04 ~]#cd /usr/share/openstack-dashboard
[root@node04 openstack-dashboard]# python manage.py make_web_conf --apache > /etc/httpd/conf.d/openstack-dashboard.conf
[root@node04 ~]# cat /etc/httpd/conf.d/openstack-dashboard.conf
<VirtualHost *:80>
ServerAdmin webmaster@openstack.org
ServerName openstack_dashboard
DocumentRoot /usr/share/openstack-dashboard/
LogLevel warn
ErrorLog /var/log/httpd/openstack_dashboard-error.log
CustomLog /var/log/httpd/openstack_dashboard-access.log combined
WSGIScriptReloading On
WSGIDaemonProcess openstack_dashboard_website processes=5
WSGIProcessGroup openstack_dashboard_website
WSGIApplicationGroup %{GLOBAL}
WSGIPassAuthorization On
WSGIScriptAlias / /usr/share/openstack-dashboard/openstack_dashboard/wsgi.py
<Location "/">
Require all granted
</Location>
Alias /static /usr/share/openstack-dashboard/static
<Location "/static">
SetHandler None
</Location>
</Virtualhost>这里如果需要手动生成的.conf的httpd配置文件的访问后缀为/dashboard, 则需要手动修改对应配置文件, 修改之后的文件内容如下
[root@node04 ~]# cat /etc/httpd/conf.d/openstack-dashboard.conf
<VirtualHost *:80>
ServerAdmin webmaster@openstack.org
ServerName openstack_dashboard
DocumentRoot /usr/share/openstack-dashboard/
LogLevel warn
ErrorLog /var/log/httpd/openstack_dashboard-error.log
CustomLog /var/log/httpd/openstack_dashboard-access.log combined
WSGIScriptReloading On
WSGIDaemonProcess openstack_dashboard_website processes=5
WSGIProcessGroup openstack_dashboard_website
WSGIApplicationGroup %{GLOBAL}
WSGIPassAuthorization On
WSGIScriptAlias /dashboard /usr/share/openstack-dashboard/openstack_dashboard/wsgi.py
<Location "/dashboard">
Require all granted
</Location>
Alias /dashboard/static /usr/share/openstack-dashboard/static
<Location "/dashboard/static">
SetHandler None
</Location>
</Virtualhost>用浏览器访问httpd所在服务器ip地址+/dashboard , 看看是否能够访问到dashboard?

用default域demo用户帐号和密码 , 登录dashbroad

查看demo用户启动的虚拟机实例 , 看看是否能够看到之前我们启动的实例?

管理实例 , 连接实例控制台


6. 基本操作
6.1 修改密码
点击设置->更改密码


6.2 创建实例
创建实例前需要准备好三个工作:镜像、网络、实例类型。
6.2.1 实例类型(flavor)
在管理员-->计算-->实例类型中创建需要的实例类型

看到这个图应该很容易理解了 , 就是定义一种资源类型 , 后面创建实例的时候 , 根据这个配置去创建。

6.2.2 镜像(image)
镜像的来源可以有很多种 :
一是各大系统厂商会发布自己云镜像。注意:不是
ISO镜像 , 用ISO镜像是无法直接创建实例的 , 通常是以img、qcow2结尾的文件 ; ( 最为方便的方式 , 但是不支持密码登录和ssh连接等 , 在创建实例时要准备好脚本做对应的修改) ;二是自定义镜像。使用
KVM先通过ISO镜像生成一个虚拟机 , 然后进行一些自定义的操作 , 完成之后将QCOW2作为镜像上传到openstack使用 ;
下面演示使用云镜像创建实例 :
上传镜像


上传已经下载好的云镜像 , 无论是
img还是qcow2的文件 , 在镜像格式时都选择QCOW2 - QEMU模拟器 , 其他可以不需要选择 , 然后点击创建镜像即可 , 等待上传。创建新的实例类型

创建实例



实例类型就是配置,黄色的感叹号是表示此项目下分配的内核数量不够了,不能创建这个配置了。

这里网络是默认已经之前实验中已经创建好的

可以选择相关的安全组规则,事先可以先定义安全组及其规则。


密钥登录,会生成一对密钥对,让你下载公钥,云镜像创建的实例部进行配置的话,就只能进行公钥免密登录。


之后直接创建实例

参考链接
玩转企业云计算平台系列( 七) : Openstack 控制面板服务 Horizon (qq.com)