OpenStack 是一个开源的云计算管理平台,由几个主要的组件组合起来完成具体工作。OpenStack 支持几乎所有类型的云环境,项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenStack通过各种互补的服务提供了基础设施即服务(IaaS)的解决方案,每个服务提供API以进行集成。
安装 OpenStack 服务
控制面板 Horizon
Horizon(OpenStack Dashboard Service) 是整套架构的控制面板,可以在 Web 界面中对虚拟机进行控制,例如:建立实例,销毁实例,修改实例等。
先决条件
Horizon 对系统环境有所要求
- Python 2.7 or 3.5 - Python 3.6 支持目前是是试验性的。
- Python 3.7 (及后续版本)暂不支持,需要等待社区的后续支持策略。
 
- Django 1.11 or 2.0 - Django 1.8 to 1.10 从 OpenStack Rocky 后的版本不再支持。
- Django 支持策略请点击此处
 
- 可访问的 KeyStore 终端
本文采用包管理方式进行安装,也可以使用源码方式进行安装。
安装与配置
sudo yum install openstack-dashboard- 修改配置文件 - /etc/openstack-dashboard/local_settings并完成以下操作- 配置控制面板在控制节点中使用 OpenStack 服务
- 允许主机访问控制面板
- 配置 memcached 会话存储服务
- 启用认证 API version 3
- 启用域名支持
- 配置 API 版本
- 配置 Default 作为用户通过面板创建的默认用户域
- 配置 user 作为用户通过面板创建的默认角色
- 如果使用网络模型 Options 1 需要禁用三层网络 (layer-3)服务
- 配置时区
 
OPENSTACK_HOST = "controller"ALLOWED_HOSTS = ['one.example.com', 'two.example.com']小贴士:此参数也可配置为 ['*'] 来允许全部主机访问,这可能对开发工作有所帮助,但是它可能导致一些安全问题,不推荐用于生产环境。
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
CACHES = {
    'default': {
         'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
         'LOCATION': 'controller:11211',
    }
}OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3" % OPENSTACK_HOSTOPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = TrueOPENSTACK_API_VERSIONS = {
    "identity": 3,
    "image": 2,
    "volume": 3,
}OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = "Default"OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user"OPENSTACK_NEUTRON_NETWORK = {
    ...
    'enable_router': False,
    'enable_quotas': False,
    'enable_distributed_router': False,
    'enable_ha_router': False,
    'enable_lb': False,
    'enable_firewall': False,
    'enable_vpn': False,
    'enable_fip_topology_check': False,
}小贴士:仅仅在 Options 1 架构下进行修改,Options 2 (Layer-3) 架构下请勿操作。
TIME_ZONE = "TIME_ZONE"小贴士:使用适当的时区替换 TIME_ZONE ,时区详细列表点击此处。
添加以下一行到配置文件 /etc/httpd/conf.d/openstack-dashboard.conf 中(若不存在的话)
WSGIApplicationGroup %{GLOBAL}完成配置
重启服务
sudo systemctl restart httpd.service memcached.service块存储服务 Cinder
Cinder(OpenStack Block Storage Service) 为用户提供块存储设备,配置和使用方式和底层驱动程序有关,Cinder 支持多种驱动方案:NAS/SAN、NFS、iSCSI、Ceph 等。
块存储 API 和调度程序通常部署于控制节点上,卷服务可以在控制节点、计算节点或者单独的存储节点上运行。
控制节点
先决条件
连接数据库
mysql -u root -p创建 cinder 数据库
MariaDB [(none)]> CREATE DATABASE cinder;创建用户并授权
MariaDB [(none)]> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' \
  IDENTIFIED BY 'CINDER_DBPASS';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' \
  IDENTIFIED BY 'CINDER_DBPASS';小贴士:替换 CINDER_DBPASS 为合适的密码。
获取 admin 令牌使用管理员专用 CLI 命令
. admin-openrc创建服务认证,完成以下操作。
- 创建 cinder 用户
 $ openstack user create --domain default --password-prompt cinder
User Password:
Repeat User Password:
+---------------------+----------------------------------+
| Field               | Value                            |
+---------------------+----------------------------------+
| domain_id           | default                          |
| enabled             | True                             |
| id                  | 9d7e33de3e1a498390353819bc7d245d |
| name                | cinder                           |
| options             | {}                               |
| password_expires_at | None                             |
+---------------------+----------------------------------+- 为 cinder 用户添加 admin 角色
$ openstack role add --project service --user cinder admin- 创建 cinderv2 和 cinderv3 服务实例
 $ openstack service create --name cinderv2 \
  --description "OpenStack Block Storage" volumev2
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack Block Storage          |
| enabled     | True                             |
| id          | eb9fd245bdbc414695952e93f29fe3ac |
| name        | cinderv2                         |
| type        | volumev2                         |
+-------------+----------------------------------+ $ openstack service create --name cinderv3 \
  --description "OpenStack Block Storage" volumev3
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack Block Storage          |
| enabled     | True                             |
| id          | ab3bbbef780845a1a283490d281e7fda |
| name        | cinderv3                         |
| type        | volumev3                         |
+-------------+----------------------------------+创建用户块存储 API Endpoints
$ openstack endpoint create --region RegionOne \
  volumev2 public http://controller:8776/v2/%\(project_id\)s
+--------------+------------------------------------------+
| Field        | Value                                    |
+--------------+------------------------------------------+
| enabled      | True                                     |
| id           | 513e73819e14460fb904163f41ef3759         |
| interface    | public                                   |
| region       | RegionOne                                |
| region_id    | RegionOne                                |
| service_id   | eb9fd245bdbc414695952e93f29fe3ac         |
| service_name | cinderv2                                 |
| service_type | volumev2                                 |
| url          | http://controller:8776/v2/%(project_id)s |
+--------------+------------------------------------------+
$ openstack endpoint create --region RegionOne \
  volumev2 internal http://controller:8776/v2/%\(project_id\)s
+--------------+------------------------------------------+
| Field        | Value                                    |
+--------------+------------------------------------------+
| enabled      | True                                     |
| id           | 6436a8a23d014cfdb69c586eff146a32         |
| interface    | internal                                 |
| region       | RegionOne                                |
| region_id    | RegionOne                                |
| service_id   | eb9fd245bdbc414695952e93f29fe3ac         |
| service_name | cinderv2                                 |
| service_type | volumev2                                 |
| url          | http://controller:8776/v2/%(project_id)s |
+--------------+------------------------------------------+
$ openstack endpoint create --region RegionOne \
  volumev2 admin http://controller:8776/v2/%\(project_id\)s
+--------------+------------------------------------------+
| Field        | Value                                    |
+--------------+------------------------------------------+
| enabled      | True                                     |
| id           | e652cf84dd334f359ae9b045a2c91d96         |
| interface    | admin                                    |
| region       | RegionOne                                |
| region_id    | RegionOne                                |
| service_id   | eb9fd245bdbc414695952e93f29fe3ac         |
| service_name | cinderv2                                 |
| service_type | volumev2                                 |
| url          | http://controller:8776/v2/%(project_id)s |
+--------------+------------------------------------------+$ openstack endpoint create --region RegionOne \
  volumev3 public http://controller:8776/v3/%\(project_id\)s
+--------------+------------------------------------------+
| Field        | Value                                    |
+--------------+------------------------------------------+
| enabled      | True                                     |
| id           | 03fa2c90153546c295bf30ca86b1344b         |
| interface    | public                                   |
| region       | RegionOne                                |
| region_id    | RegionOne                                |
| service_id   | ab3bbbef780845a1a283490d281e7fda         |
| service_name | cinderv3                                 |
| service_type | volumev3                                 |
| url          | http://controller:8776/v3/%(project_id)s |
+--------------+------------------------------------------+
$ openstack endpoint create --region RegionOne \
  volumev3 internal http://controller:8776/v3/%\(project_id\)s
+--------------+------------------------------------------+
| Field        | Value                                    |
+--------------+------------------------------------------+
| enabled      | True                                     |
| id           | 94f684395d1b41068c70e4ecb11364b2         |
| interface    | internal                                 |
| region       | RegionOne                                |
| region_id    | RegionOne                                |
| service_id   | ab3bbbef780845a1a283490d281e7fda         |
| service_name | cinderv3                                 |
| service_type | volumev3                                 |
| url          | http://controller:8776/v3/%(project_id)s |
+--------------+------------------------------------------+
$ openstack endpoint create --region RegionOne \
  volumev3 admin http://controller:8776/v3/%\(project_id\)s
+--------------+------------------------------------------+
| Field        | Value                                    |
+--------------+------------------------------------------+
| enabled      | True                                     |
| id           | 4511c28a0f9840c78bacb25f10f62c98         |
| interface    | admin                                    |
| region       | RegionOne                                |
| region_id    | RegionOne                                |
| service_id   | ab3bbbef780845a1a283490d281e7fda         |
| service_name | cinderv3                                 |
| service_type | volumev3                                 |
| url          | http://controller:8776/v3/%(project_id)s |
+--------------+------------------------------------------+安装和配置组件
安装以下包
sudo yum install openstack-cinder修改 /etc/cinder/cinder.conf 配置文件完成以下操作
- 在 [database] 标签中配置数据库访问权限
[database]
# ...
connection = mysql+pymysql://cinder:CINDER_DBPASS@controller/cinder小贴士:替换 CINDER_DBPASS 为 块存储数据库设置的密码。
- 在 [DEFAULT] 标签下配置 RabbitMQ 消息队列访问权限
[DEFAULT]
# ...
transport_url = rabbit://openstack:RABBIT_PASS@controller小贴士:替换 RABBIT_PASS 为 RabbitMQ 中 OpenStack 账户的密码。
- 在 [DEFAULT] 和 [keystone_authtoken] 标签中配置认证服务访问权限
[DEFAULT]
# ...
auth_strategy = keystone
[keystone_authtoken]
# ...
www_authenticate_uri = http://controller:5000
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = cinder
password = CINDER_PASS小贴士:替换 CINDER_PASS 为在认证服务中 cinder 用户的密码。
- 在 [DEFAULT] 标签中,配置自身地址 my_ip 去使用控制节点的管理接口
[DEFAULT]
# ...
my_ip = 10.0.0.11在 [oslo_concurrency] 标签中,配置锁路径。
[oslo_concurrency]
# ...
lock_path = /var/lib/cinder/tmp填充块存储数据库
sudo su -s /bin/sh -c "cinder-manage db sync" cinder配置计算服务使用块存储
修改配置文件 /etc/nova/nova.conf 并完成以下操作
[cinder]
os_region_name = RegionOne完成安装
重启计算 API 服务
sudo systemctl restart openstack-nova-api.service启动块存储服务并配置自启动
sudo systemctl enable openstack-cinder-api.service openstack-cinder-scheduler.service
sudo systemctl start openstack-cinder-api.service openstack-cinder-scheduler.service存储节点
先决条件
安装底层支持包
- 安装 LVM 包
sudo yum install lvm2 device-mapper-persistent-data- 启动 LVM 元数据服务并配置自启动
sudo systemctl enable lvm2-lvmetad.service
sudo systemctl start lvm2-lvmetad.service创建 LVM 物理卷 /dev/sdb
sudo pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created创建 LVM 卷组 cinder-volumes
sudo vgcreate cinder-volumes /dev/sdb
Volume group "cinder-volumes" successfully created仅提供实例访问块存储卷,但是默认情况下, LVM 卷扫描工具会对 /dev 目录进行扫描发现包含卷的块存储设备,如果项目在卷上使用 LVM ,则扫描工具会对这些卷尝试进行缓存,这可能导致底层系统和卷出现问题。因此必须重新配置 LVM 仅扫描包含 cinder-volumes 卷设备,编辑 /etc/lvm/lvm.conf 配置文件并完成以下操作。
- 在 devices 标签中,添加过滤器去仅允许 /dev/sdb 设备并拒绝其他设备
devices {
...
filter = [ "a/sdb/", "r/.*/"]如果存储节点的系统磁盘使用了 LVM 卷,则必须将系统也添加到过滤器中,例如:/dev/sda
filter = [ "a/sda/", "a/sdb/", "r/.*/"]安装和配置组件
安装以下包
sudo yum install openstack-cinder targetcli python-keystone修改配置文件 /etc/cinder/cinder.conf 并完成以下操作
- 在 [database] 标签中配置数据库访问权限
[database]
# ...
connection = mysql+pymysql://cinder:CINDER_DBPASS@controller/cinder小贴士:替换 CINDER_DBPASS 为合适的密码。
- 在 [DEFAULT] 标签中,配置 RabbitMQ 消息队列访问权限
[DEFAULT]
# ...
transport_url = rabbit://openstack:RABBIT_PASS@controller小贴士:替换 RABBIT_PASS 为在 RabbitMQ 中为 openstack 用账户的密码。
- 在 [DEFAULT] 和 [keystone_authtoken] 标签下配置认证服务访问权限
[DEFAULT]
# ...
auth_strategy = keystone
[keystone_authtoken]
# ...
www_authenticate_uri = http://controller:5000
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = cinder
password = CINDER_PASS小贴士:替换 CINDER_PASS 为认证服务中 cinder 用户的密码。
- 在 [DEFAULT] 标签中配置 my_ip 选项
[DEFAULT]
# ...
my_ip = MANAGEMENT_INTERFACE_IP_ADDRESS小贴士:替换 MANAGEMENT_INTERFACE_IP_ADDRESS 为管理节点的管理入口,比如 10.0.0.41 为存储集群的第一个节点。
- 在 [lvm] 标签中,配置 LVM 后端及驱动程序 cinder-volume 卷组 iSCSI 协议及设备,如果这个标签不存在就手动添加此标签
[lvm]
volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
volume_group = cinder-volumes
target_protocol = iscsi
target_helper = lioadm- 在 [DEFAULT] 标签中,启动 LVM 后端
[DEFAULT]
# ...
enabled_backends = lvm- 在 [DEFAULT] 标签中,配置本地镜像服务 API
[DEFAULT]
# ...
glance_api_servers = http://controller:9292- 在 [oslo_concurrency] 标签中配置程序锁路径
[oslo_concurrency]
# ...
lock_path = /var/lib/cinder/tmp完成安装
启动块存储卷服务并配置自启动
sudo systemctl enable openstack-cinder-volume.service target.service
sudo systemctl start openstack-cinder-volume.service target.service验证操作
获取 admin 令牌使用管理员专用 CLI 命令
. admin-openrc列出并验证卷存储服务
openstack volume service list
+------------------+------------+------+---------+-------+----------------------------+
| Binary           | Host       | Zone | Status  | State | Updated_at                 |
+------------------+------------+------+---------+-------+----------------------------+
| cinder-scheduler | controller | nova | enabled | up    | 2016-09-30T02:27:41.000000 |
| cinder-volume    | block@lvm  | nova | enabled | up    | 2016-09-30T02:27:46.000000 |
| cinder-backup    | controller | nova | enabled | up    | 2016-09-30T02:27:41.000000 |
+------------------+------------+------+---------+-------+----------------------------+附录
相关链接
参考链接
            本文由 柒 创作,采用 知识共享署名4.0
            国际许可协议进行许可。
转载本站文章前请注明出处,文章作者保留所有权限。
最后编辑时间: 2023-10-05  20:00 PM        
