本文参考:OpenStack安装指南
指南中提到指南不适用于生产系统安装,而是为了学习OpenStack而创建最小概念验证。
指南中要求的硬件:
1个控制节点,拥有1-2CPU,8G RAM,100GB存储,2NIC
至少一个计算节点,每个节点拥有2-4+CPU,8+G RAM,100+GB存储,2NIC
可选1个块存储节点,拥有1-2CPU,4G RAM,100+GB存储,1NIC
可选多个对象存储节点,每个节点拥有1-2CPU,4+GB RAM,100+GB存储,1NIC
网络,提供商网络 / 自助服务网络,二选一,自助服务网络基于提供商网络,但更复杂。
指南中提到的最低硬件要求:
控制节点:1个处理器,4 GB内存和5 GB存储
计算节点:1个处理器,2 GB内存和10 GB存储
指南中提到的密码引用地址
0 本文操作时的环境
本文所有系统均为VMware Workstation 15 Pro中的Ubuntu Server 18.04.2虚拟机
本文仅选择控制节点和计算节点,存储使用本地存储,不使用存储节点
控制节点:2核CPU,4G RAM,100GB存储,2网络接口(ens33:192.168.2.50,ens38:192.168.2.52)
计算节点:4核CPU,4G RAM,100GB存储,2网络接口(ens33:192.168.2.51,ens38:192.168.2.53)
网络:VMware虚拟网络
1 安装前配置
1.1 配置网络接口
1.1.1 控制节点
配置第一个接口作为管理接口:
IP地址:192.168.2.50
网络掩码:255.255.255.0(或/24)
默认网关:192.168.2.1
Ubuntu静态IP配置就不举例了,我这里直接DHCP服务器绑定了MAC地址和IP。
1.1.2 计算节点
差不多与控制节点完全一样
配置第一个接口作为管理接口:
IP地址:192.168.2.51
网络掩码:255.255.255.0(或/ 24)
默认网关:192.168.2.1
1.2 配置名称解析
1.2.1 控制节点
将节点的主机名设置为controller。
编辑/etc/hosts文件,添加以下内容
#controller
192.168.2.50 controller
#compute1
192.168.2.51 compute1
#下面是块存储和对象存储的示例,有的话才需要
#block1
10.0.0.41 block1#object1
10.0.0.51 object1#object2
10.0.0.52 object2
1.2.2 计算节点
将节点的主机名设置为compute1。
编辑/etc/hosts文件,添加以下内容
#controller
192.168.2.50 controller
#compute1
192.168.2.51 compute1
#下面是块存储和对象存储的示例,有的话才需要
#block1
10.0.0.41 block1#object1
10.0.0.51 object1#object2
10.0.0.52 object2
1.3 验证连接
都ping通了就算成功了
1.3.1 控制节点
| 1 | ping -c 4 docs.openstack.org | 
1.3.2 计算节点
| 1 | ping -c 4 openstack.org | 
1.4 NTP网络时间协议
控制节点使用网络上的NTP服务器同步时间,其它节点使用控制节点同步时间
1.4.1 控制节点
安装chrony
| 1 | apt-get install chrony | 
修改/etc/chrony/chrony.conf,
使用cn.ntp.org.cn,添加以下内容
server cn.ntp.org.cn iburst
允许其它节点连接控制节点,添加以下内容
allow 192.168.2.0/24
重启NTP服务
| 1 | service chrony restart | 
1.4.2 计算节点
安装chrony
| 1 | apt-get install chrony | 
修改/etc/chrony/chrony.conf,
使用cn.ntp.org.cn,添加以下内容
server controller iburst
注释掉其它的服务器
pool ntp.ubuntu.com iburst maxsources 4
ool 0.ubuntu.pool.ntp.org iburst maxsources 1
ool 1.ubuntu.pool.ntp.org iburst maxsources 1
ool 2.ubuntu.pool.ntp.org iburst maxsources 2
重启NTP服务
| 1 | service chrony restart | 
1.5 验证NTP设置
1.5.1 控制节点
| 1 | chronyc sources | 
1.5.2 计算节点
| 1 | chronyc sources | 
2 安装环境
2.1 为Ubuntu Cloud Archive启用存储库
2.1.1 这应该是所有节点都要做的
添加存储库
| 1 | add-apt-repository cloud-archive:stein | 
2.2 安装OpenStack客户端
2.2.1 这应该是所有节点都要做的
更新,如果升级中包含新内核,需要重启
| 1 | apt-get update && apt-get dist-upgrade | 
安装
| 1 | apt-get install python3-openstackclient | 
2.3 数据库的安装与配置
2.3.1 数据库仅需要在控制节点安装
安装
| 1 | apt-get install mariadb-server python-pymysql | 
创建并编辑/etc/mysql/mariadb.conf.d/99-openstack.cnf文件,并将bind-address 密钥设置为控制器节点的管理IP地址,以允许其他节点通过管理网络进行访问。设置其他键以启用有用选项和UTF-8字符集:
[mysqld]
bind-address = 192.168.2.50
default-storage-engine = innodb
innodb_file_per_table = on
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8
重启数据库
| 1 | service mysql restart | 
数据库初始化设置
| 1 | mysql_secure_installation | 
2.4 消息队列
2.4.1 消息队列仅在控制节点运行
安装
| 1 | apt-get install rabbitmq-server | 
添加openstack用户
| 1 | rabbitmqctl add_user openstack 用户密码 | 
允许用户进行配置,写入和读取访问 openstack
| 1 | rabbitmqctl set_permissions openstack ".*" ".*" ".*" | 
2.5 Memcached(身份验证)
2.5.1 Memcached仅在控制节点运行
安装
| 1 | apt-get install memcached python-memcache | 
编辑/etc/memcached.conf文件并配置服务以使用控制器节点的管理IP地址
| 1 | vim /etc/memcached.conf | 
改变现有行
-l 192.168.2.50
重启memcached服务
| 1 | service memcached restart | 
2.6 Etcd(分布式键值对数据存储系统)
2.6.1 Etcd仅在控制节点运行
安装
| 1 | apt-get install etcd | 
编辑/etc/default/etcd文件并设置ETCD_INITIAL_CLUSTER, ETCD_INITIAL_ADVERTISE_PEER_URLS,ETCD_ADVERTISE_CLIENT_URLS, ETCD_LISTEN_CLIENT_URLS控制器节点
ETCD_NAME=”controller”
ETCD_DATA_DIR=”/var/lib/etcd”
ETCD_INITIAL_CLUSTER_STATE=”new”
ETCD_INITIAL_CLUSTER_TOKEN=”etcd-cluster-01”
ETCD_INITIAL_CLUSTER=”controller=http://192.168.2.50:2380"
ETCD_INITIAL_ADVERTISE_PEER_URLS=”http://192.168.2.50:2380"
ETCD_ADVERTISE_CLIENT_URLS=”http://192.168.2.50:2379"
ETCD_LISTEN_PEER_URLS=”http://0.0.0.0:2380"
ETCD_LISTEN_CLIENT_URLS=”http://192.168.2.50:2379"
启动启用服务
| 1 | systemctl enable etcd | 
3 安装OpenStack服务
Stein的最小部署
至少需要安装以下服务。按以下指定的顺序安装服务:
身份服务 – keystone installation for Stein
映像服务 – glance installation for Stein
安置服务 – placement installation for Stein
计算服务 – nova installation for Stein
网络服务 – neutron installation for Stein
指南建议在安装最小部署服务后也安装以下组件:
仪表盘 – horizon installation for Stein
块存储服务 – cinder installation for Stein
Stein所有的服务
https://docs.openstack.org/stein/install/
3.1 身份服务
3.1.1 身份服务仅在控制节点上运行
3.1.1.1 先决条件(创建数据库)
- 使用数据库访问客户端以 - root用户身份连接到数据库服务器:- 1 - mysql 
- 创建 - keystone数据库:- 1 - CREATE DATABASE keystone; 
- 授予对 - keystone数据库的适当访问权限:- 1 
 2
 3
 4- GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \ 
 IDENTIFIED BY 'KEYSTONE_DBPASS';
 GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \
 IDENTIFIED BY 'KEYSTONE_DBPASS';
替换KEYSTONE_DBPASS为合适的密码。
- 退出数据库
3.1.1.2 安装和配置组件
- 安装软件包,如果包管理提示依赖问题,就把 - keyston单独安装- 1 - apt-get install keystone apache2 libapache2-mod-wsgi 
- 编辑 - /etc/keystone/keystone.conf文件并完成以下操作- 在该[database]`部分中,配置数据库访问: - [database] 
 connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone- 替换 - KEYSTONE_DBPASS为您为数据库选择的密码。- 在该 - [token]部分中,配置Fernet令牌提供程序:- [token] 
 provider = fernet
- 填充Identity服务数据库: - 1 - su -s /bin/sh -c "keystone-manage db_sync" keystone 
4.初始化Fernet密钥存储库:
| 1 | keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone | 
5.引导身份服务:
| 1 | keystone-manage bootstrap --bootstrap-password ADMIN_PASS \ | 
替换ADMIN_PASS为管理用户的合适密码。
3.1.1.3 配置Apache HTTP服务器
编辑/etc/apache2/apache2.conf文件并配置ServerName引用控制器节点的 选项:
ServerName controller
SSL
这里没说
3.1.1.4 完成安装
重启Apache服务
| 1 | service apache2 restart | 
配置管理帐户
| 1 | export OS_USERNAME=admin | 
替换ADMIN_PASS为3.1.1.2中keystone-manage bootstrap命令中使用的密码。
3.1.1.5 创建域,项目,用户和角色
创建新域
| 1 | openstack domain create --description "An Example Domain" example | 
创建服务项目
| 1 | openstack project create --domain default \ | 
创建myproject项目
| 1 | openstack project create --domain default \ | 
创建myuser 用户
| 1 | openstack user create --domain default \ | 
创建myrole角色
| 1 | openstack role create myrole | 
将myrole角色添加到myproject项目和myuser用户:
| 1 | openstack role add --project myproject --user myuser myrole | 
3.1.1.6 验证操作
- 取消设置临时 变量 - OS_AUTH_URL和- OS_PASSWORD环境变量:- 1 - unset OS_AUTH_URL OS_PASSWORD 
- 作为 - admin用户,请求身份验证令牌:- 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15- openstack --os-auth-url http://controller:5000/v3 \ 
 --os-project-domain-name Default --os-user-domain-name Default \
 --os-project-name admin --os-username admin token issue
 输出
 Password:
 +------------+-----------------------------------------------------------------+
 | Field | Value |
 +------------+-----------------------------------------------------------------+
 | expires | 2019-07-18T03:19:00+0000 |
 | id | gAAAAABdL9cUXCY-Lk7j9qkxXHOIihLju5ruoWM4vzdcJEPSCBakUB-V9u0z4lU |
 | | nEZGimv6_wR6zdPndtV7BzyMV52vhEVBkyXLaa7AMuJ545yyME1lDGyHESGcmVi |
 | |4kNan6QYsNL3B_AidXqxejFohgm81oDFJ8X4vIlucpLnk4ogA-C1amJbU |
 | project_id | ddab7b9e10d14c59a64143a8f04ac045 |
 | user_id | 835091030b714480b7ec1bbe9c3a9f15 |
 +------------+-----------------------------------------------------------------+- 注意,此命令使用 - admin用户的密码。
- 正如 - myuser用户在上一个中创建的那样,请求一个身份验证令牌:- 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15- openstack --os-auth-url http://controller:5000/v3 \ 
 --os-project-domain-name Default --os-user-domain-name Default \
 --os-project-name myproject --os-username myuser token issue
 输出
 Password:
 +------------+-----------------------------------------------------------------+
 | Field | Value |
 +------------+-----------------------------------------------------------------+
 | expires | 2019-07-18T03:22:46+0000 |
 | id | gAAAAABdL9f2pKqTes1RBP8tiqtAWbd2_GHXvFVLCJ4Hc1XSDQRqpTJxt2XorNc |
 | | 2HeaKCo8ZzlUsA_CFCYwsX02vtlvVFoAFs5Q6xFvI9tageBtJpxewSeL8Qq5kmC |
 | | kaUIMdGgNlMGNf0GSsq9qOfZuyXuw0NEofb37KV8UlrGtjYGfebjjUORI |
 | project_id | 497005cae90144ab83a557650e1cb8b1 |
 | user_id | 375d48d3283e42d5918a5b51b950cfe1 |
 +------------+-----------------------------------------------------------------+
3.1.1.7 创建OpenStack客户端环境脚本
创建客户端环境的脚本admin和demo 项目和用户。本指南的后续部分引用这些脚本来加载客户端操作的适当凭据。
注意,客户端环境脚本的路径不受限制。为方便起见,您可以将脚本放在任何位置,但请确保它们可以访问并位于适合部署的安全位置,因为它们包含敏感凭据。
- 创建和编辑 - admin-openrc文件并添加以下内容:- 注意,OpenStack客户端还支持使用 - clouds.yaml文件。有关更多信息,请参阅os-client-config。- 1 
 2
 3
 4
 5
 6
 7
 8- export OS_PROJECT_DOMAIN_NAME=Default 
 export OS_USER_DOMAIN_NAME=Default
 export OS_PROJECT_NAME=admin
 export OS_USERNAME=admin
 export OS_PASSWORD=ADMIN_PASS
 export OS_AUTH_URL=http://controller:5000/v3
 export OS_IDENTITY_API_VERSION=3
 export OS_IMAGE_API_VERSION=2- 替换 - ADMIN_PASS为您- admin在Identity服务中为用户选择的密码。
- 创建和编辑 - demo-openrc文件并添加以下内容:- 1 
 2
 3
 4
 5
 6
 7
 8- export OS_PROJECT_DOMAIN_NAME=Default 
 export OS_USER_DOMAIN_NAME=Default
 export OS_PROJECT_NAME=myproject
 export OS_USERNAME=myuser
 export OS_PASSWORD=MYUSER_PASS
 export OS_AUTH_URL=http://controller:5000/v3
 export OS_IDENTITY_API_VERSION=3
 export OS_IMAGE_API_VERSION=2- 替换 - DEMO_PASS为您- demo在Identity服务中为用户选择的密码。
3.1.1.8 使用脚本
要将客户端作为特定项目和用户运行,只需在运行它们之前加载关联的客户端环境脚本即可。例如:
- 加载 - admin-openrc文件以使用Identity服务的位置以及- admin项目和用户凭据填充环境变量:- 1 - source admin-openrc 
- 请求身份验证令牌: - 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12- openstack token issue 
 +------------+-----------------------------------------------------------------+
 | Field | Value |
 +------------+-----------------------------------------------------------------+
 | expires | 2019-07-18T04:27:59+0000 |
 | id | gAAAAABdL-c_Q5A7MjnZek0qb9o8jdvSw2ljIKqyZp14dXwjRyNGQpJSiQSAvyZ |
 | | E-WhjVPc9e1jTtjFKu3UjW_FAhs9ayNRHiNBLRAWdp_RY7Hsb5GHzOF8Q88r8qS |
 | | R_k4-9wkAKDP7wwNWP5WZXOBNbl-GRfWqkYYdEEhrpbMywjUJbw-17vsk |
 | project_id | ddab7b9e10d14c59a64143a8f04ac045 |
 | user_id | 835091030b714480b7ec1bbe9c3a9f15 |
 +------------+-----------------------------------------------------------------+
3.2 映像服务
3.2.1 映像服务仅在控制节点运行
3.2.1.1 先决条件
- 要创建数据库,请完成以下步骤: - 使用数据库访问客户端以 - root用户身份连接到数据库服务器:- 1 - mysql - 创建 - glance数据库:- 1 - CREATE DATABASE glance; - 授予对 - glance数据库的适当访问权限:- 1 
 2
 3
 4- GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' \ 
 IDENTIFIED BY 'GLANCE_DBPASS';
 GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' \
 IDENTIFIED BY 'GLANCE_DBPASS';- 替换 - GLANCE_DBPASS为合适的密码。- 退出数据库访问客户端。 
- 来源 - admin凭据来访问仅管理员CLI命令:- 1 - source admin-openrc 
- 要创建服务凭据,请完成以下步骤: - 创建 - glance用户:- 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14- openstack user create --domain default --password-prompt glance 
 输出
 User Password:
 Repeat User Password:
 +---------------------+----------------------------------+
 | Field | Value |
 +---------------------+----------------------------------+
 | domain_id | default |
 | enabled | True |
 | id | 5f9f2a8cb21f4116882df5d8f6ddc529 |
 | name | glance |
 | options | {} |
 | password_expires_at | None |
 +---------------------+----------------------------------+- 将 - admin角色添加到- glance用户和- service项目:- 1 - openstack role add --project service --user glance admin - 创建 - glance服务实体:- 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12- openstack service create --name glance \ 
 --description "OpenStack Image" image
 输出
 +-------------+----------------------------------+
 | Field | Value |
 +-------------+----------------------------------+
 | description | OpenStack Image |
 | enabled | True |
 | id | a76799e303334fb7baec59a104547e86 |
 | name | glance |
 | type | image |
 +-------------+----------------------------------+
- 创建Image服务API端点: - 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50- openstack endpoint create --region RegionOne \ 
 image public http://controller:9292
 输出
 +--------------+----------------------------------+
 | Field | Value |
 +--------------+----------------------------------+
 | enabled | True |
 | id | b96227302a474289af3d47184e2682c1 |
 | interface | public |
 | region | RegionOne |
 | region_id | RegionOne |
 | service_id | a76799e303334fb7baec59a104547e86 |
 | service_name | glance |
 | service_type | image |
 | url | http://controller:9292 |
 +--------------+----------------------------------+
 openstack endpoint create --region RegionOne \
 image internal http://controller:9292
 输出
 +--------------+----------------------------------+
 | Field | Value |
 +--------------+----------------------------------+
 | enabled | True |
 | id | 2f5de2bd8fb84143a3370d7c0c6daf4e |
 | interface | internal |
 | region | RegionOne |
 | region_id | RegionOne |
 | service_id | a76799e303334fb7baec59a104547e86 |
 | service_name | glance |
 | service_type | image |
 | url | http://controller:9292 |
 +--------------+----------------------------------+
 openstack endpoint create --region RegionOne \
 image admin http://controller:9292
 输出
 +--------------+----------------------------------+
 | Field | Value |
 +--------------+----------------------------------+
 | enabled | True |
 | id | 8b88c34bbaf34bda9856c6de2d9b31d6 |
 | interface | admin |
 | region | RegionOne |
 | region_id | RegionOne |
 | service_id | a76799e303334fb7baec59a104547e86 |
 | service_name | glance |
 | service_type | image |
 | url | http://controller:9292 |
 +--------------+----------------------------------+
3.2.1.2 安装和配置组件
- 安装包: - 1 - apt-get install glance 
- 编辑 - /etc/glance/glance-api.conf文件并完成以下操作:- 在该 - [database]部分中,配置数据库访问:- [database] - connection = mysql+pymysql://glance:GLANCE_DBPASS@controller/glance - 替换 - GLANCE_DBPASS为您为Image服务数据库选择的密码。- 在 - [keystone_authtoken]和- [paste_deploy]部分中,配置身份服务访问:- [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 = glance
 password = GLANCE_PASS- [paste_deploy] - flavor = keystone - 替换 - GLANCE_PASS为您- glance在Identity服务中为用户选择的密码 。
 注意,注释掉或删除该- [keystone_authtoken]部分中的任何其他选项 。- 在该 - [glance_store]部分中,配置本地文件系统存储和映像文件的位置:- [glance_store] - stores = file,http 
 default_store = file
 filesystem_store_datadir = /var/lib/glance/images/
- 编辑 - /etc/glance/glance-registry.conf文件并完成以下操作:
 在该- [database]部分中,配置数据库访问:- [database] - connection = mysql+pymysql://glance:GLANCE_DBPASS@controller/glance - 替换 - GLANCE_DBPASS为您为Image服务数据库选择的密码。- 在 - [keystone_authtoken]和- [paste_deploy]部分中,配置身份服务访问:- [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 = glance
 password = GLANCE_PASS- [paste_deploy] 
 flavor = keystone- 替换 - GLANCE_PASS为您- glance在Identity服务中为用户选择的密码 。
 注意,注释掉或删除该- [keystone_authtoken]部分中的任何其他选项 。
- 填充Image服务数据库: - 1 - su -s /bin/sh -c "glance-manage db_sync" glance - 注意,忽略此输出中的任何弃用消息。 
3.2.1.3 完成安装
重启Image服务
| 1 | service glance-registry restart #此行报错没有此服务,下面的验证操作也没问题,怀疑没有需要运行此行 | 
3.2.1.4 验证操作
- 来源 - admin凭据来访问仅管理员CLI命令:- 1 - source admin-openrc 
- 下载源图像: - 1 - wget http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img 
- 使用QCOW2磁盘格式,裸 容器格式和公共可见性将映像上载到映像服务 ,以便所有项目都可以访问它: - 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30- openstack image create "cirros" \ 
 --file cirros-0.4.0-x86_64-disk.img \
 --disk-format qcow2 --container-format bare \
 --public
 #输出
 +------------------+------------------------------------------------------+
 | Field | Value |
 +------------------+------------------------------------------------------+
 | checksum | 443b7623e27ecf03dc9e01ee93f67afe |
 | container_format | bare |
 | created_at | 2019-07-18T03:52:36Z |
 | disk_format | qcow2 |
 | file | /v2/images/643f8b18-6272-4333-9983-0fb650ebf0c9/file |
 | id | 643f8b18-6272-4333-9983-0fb650ebf0c9 |
 | min_disk | 0 |
 | min_ram | 0 |
 | name | cirros |
 | owner | ddab7b9e10d14c59a64143a8f04ac045 |
 | protected | os_hash_algo='sha512', os_hash_value='6513f21e44aa3d |
 | | a349f248188a44bc304a3653a04122d8fb4535423c8e1d14cd6a |
 | | 153f735bb0982e2161b5b5186106570c17a9e58b64dd39390617 |
 | | cd5a350f78', os_hidden='False' |
 | schema | /v2/schemas/image |
 | size | 12716032 |
 | status | active |
 | tags | |
 | updated_at | 2019-07-18T03:52:36Z |
 | virtual_size | None |
 | visibility | public |
 +------------------+------------------------------------------------------+- 有关信息OpenStack的图像创建参数,请参阅 Create or update an image (glance) - 有关磁盘和容器的图像格式的信息,请参阅 Disk and container formats for images - 注意,OpenStack动态生成ID,因此您将在示例命令输出中看到不同的值。 
- 确认上传图像并验证属性: - 1 
 2
 3
 4
 5
 6
 7- openstack image list 
 输出
 +--------------------------------------+--------+--------+
 | ID | Name | Status |
 +--------------------------------------+--------+--------+
 | 643f8b18-6272-4333-9983-0fb650ebf0c9 | cirros | active |
 +--------------------------------------+--------+--------+
3.3 安置服务
3.3.1 安置服务仅运行在控制节点
3.3.1.1 先决条件
在安装和配置放置服务之前,必须创建数据库,服务凭据和API端点。
创建数据库
- 要创建数据库,请完成以下步骤:
 使用数据库访问客户端以root用户身份连接到数据库服务器:1 mysql 
   创建placement数据库:
   1
CREATE DATABASE placement;
   授予对数据库的适当访问权限:
   1
2
3
4GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'localhost' \
  IDENTIFIED BY 'PLACEMENT_DBPASS';
GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'%' \
  IDENTIFIED BY 'PLACEMENT_DBPASS';
   替换PLACEMENT_DBPASS为合适的密码。
   退出数据库访问客户端。
配置用户和端点
- 来源 - admin凭据来访问仅管理员CLI命令:- 1 - source admin-openrc 
- 使用您选择的创建Placement服务用户 - PLACEMENT_PASS:- 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14- openstack user create --domain default --password-prompt placement 
 输出
 User Password:
 Repeat User Password:
 +---------------------+----------------------------------+
 | Field | Value |
 +---------------------+----------------------------------+
 | domain_id | default |
 | enabled | True |
 | id | 365658358d934c1e91f204ca14bcaee1 |
 | name | placement |
 | options | {} |
 | password_expires_at | None |
 +---------------------+----------------------------------+
- 使用admin角色将Placement用户添加到服务项目: - 1 - openstack role add --project service --user placement admin 
- 在服务目录中创建Placement API条目: - 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12- openstack service create --name placement \ 
 --description "Placement API" placement
 输出
 +-------------+----------------------------------+
 | Field | Value |
 +-------------+----------------------------------+
 | description | Placement API |
 | enabled | True |
 | id | d6988c6dc2bd4a03a50970585c2e342f |
 | name | placement |
 | type | placement |
 +-------------+----------------------------------+
- 创建Placement API服务端点: 
 注意,根据您的环境,端点的URL将根据端口(可能是8780而不是8778,或根本没有端口)和主机名而有所不同。您有责任确定正确的URL。- 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50- openstack endpoint create --region RegionOne \ 
 placement public http://controller:8778
 输出
 +--------------+----------------------------------+
 | Field | Value |
 +--------------+----------------------------------+
 | enabled | True |
 | id | cba1769b76cc4abab3f19b61ad3c7513 |
 | interface | public |
 | region | RegionOne |
 | region_id | RegionOne |
 | service_id | d6988c6dc2bd4a03a50970585c2e342f |
 | service_name | placement |
 | service_type | placement |
 | url | http://controller:8778 |
 +--------------+----------------------------------+
 
 openstack endpoint create --region RegionOne \
 placement internal http://controller:8778
 输出
 +--------------+----------------------------------+
 | Field | Value |
 +--------------+----------------------------------+
 | enabled | True |
 | id | bd6c0ea2b16343c7a595dcd42a3b6153 |
 | interface | internal |
 | region | RegionOne |
 | region_id | RegionOne |
 | service_id | d6988c6dc2bd4a03a50970585c2e342f |
 | service_name | placement |
 | service_type | placement |
 | url | http://controller:8778 |
 +--------------+----------------------------------+
 
 openstack endpoint create --region RegionOne \
 placement admin http://controller:8778
 输出
 +--------------+----------------------------------+
 | Field | Value |
 +--------------+----------------------------------+
 | enabled | True |
 | id | f37fe946cc0b45d280893d4a47e1eacc |
 | interface | admin |
 | region | RegionOne |
 | region_id | RegionOne |
 | service_id | d6988c6dc2bd4a03a50970585c2e342f |
 | service_name | placement |
 | service_type | placement |
 | url | http://controller:8778 |
 +--------------+----------------------------------+
3.3.1.2 安装和配置组件
- 安装包: - 1 - apt-get install placement-api 
- 编辑 - /etc/placement/placement.conf文件并完成以下操作:- 在该 - [placement_database]部分中,配置数据库访问:- [placement_database] - connection = mysql+pymysql://placement:PLACEMENT_DBPASS@controller/placement - 替换 - PLACEMENT_DBPASS为您为放置数据库选择的密码。- 在 - [api]和- [keystone_authtoken]部分中,配置身份服务访问:- [api] - auth_strategy = keystone - [keystone_authtoken] - auth_url = http://controller:5000/v3 
 memcached_servers = controller:11211
 auth_type = password
 project_domain_name = default
 user_domain_name = default
 project_name = service
 username = placement
 password = PLACEMENT_PASS
替换PLACEMENT_PASS为您placement在Identity服务中为用户选择的密码 。
   注意,注释掉或删除该[keystone_authtoken] 部分中的任何其他选项。
- 填充 - placement数据库:- 1 - su -s /bin/sh -c "placement-manage db sync" placement - 注意,忽略此输出中的任何弃用消息。 
3.3.1.3 完成安装
重新加载Web服务器
| 1 | service apache2 restart | 
3.3.1.4 验证安装
- 来源 - admin凭据来访问仅管理员CLI命令:- 1 - source admin-openrc 
- 执行状态检查以确保一切正常: - 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13- placement-status upgrade check #这里需要sudo,不然可能出不来正确结果 
 输出
 +----------------------------------+
 | Upgrade Check Results |
 +----------------------------------+
 | Check: Missing Root Provider IDs |
 | Result: Success |
 | Details: None |
 +----------------------------------+
 | Check: Incomplete Consumers |
 | Result: Success |
 | Details: None |
 +----------------------------------+- 该命令的输出因发布而异。有关详细信息,请参阅placement-status upgrade check 
- 针对展示位置API运行一些命令: 
 安装osc-placement插件:
 注意,此示例使用PyPI和pip,但如果您使用的是分发包,则可以从其存储库中安装该包。- 1 
 2- apt-get install python-pip #ubuntu没这个插件也就算了,pip还得自己装 
 pip install osc-placement
列出可用的资源类和特征:
| 1 | openstack --os-placement-api-version 1.2 resource class list --sort-column name | 
3.4 计算服务
3.4.1 安装和配置控制节点
3.4.1.1 先决条件
- 要创建数据库,请完成以下步骤: - 使用数据库访问客户端以 - root用户身份连接到数据库服务器:- 1 - mysql - 创建 - nova_api,- nova和- nova_cell0数据库:- 1 
 2
 3- CREATE DATABASE nova_api; 
 CREATE DATABASE nova;
 CREATE DATABASE nova_cell0;- 授予对数据库的适当访问权限: - 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14- GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' \ 
 IDENTIFIED BY 'NOVA_DBPASS';
 GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' \
 IDENTIFIED BY 'NOVA_DBPASS';
 
 GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' \
 IDENTIFIED BY 'NOVA_DBPASS';
 GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' \
 IDENTIFIED BY 'NOVA_DBPASS';
 
 GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' \
 IDENTIFIED BY 'NOVA_DBPASS';
 GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' \
 IDENTIFIED BY 'NOVA_DBPASS';- 替换 - NOVA_DBPASS为合适的密码。- 退出数据库访问客户端。 
- 来源 - admin凭据来访问仅管理员CLI命令:- 1 - source admin-openrc 
- 创建Compute服务凭据: - 创建 - nova用户:- 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14- openstack user create --domain default --password-prompt nova 
 输出
 User Password:
 Repeat User Password:
 +---------------------+----------------------------------+
 | Field | Value |
 +---------------------+----------------------------------+
 | domain_id | default |
 | enabled | True |
 | id | 83842db153d34caebf79ac9e6a38196e |
 | name | nova |
 | options | {} |
 | password_expires_at | None |
 +---------------------+----------------------------------+- 将 - admin角色添加到- nova用户:- 1 - openstack role add --project service --user nova admin - 创建 - nova服务实体:- 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12- openstack service create --name nova \ 
 --description "OpenStack Compute" compute
 输出
 +-------------+----------------------------------+
 | Field | Value |
 +-------------+----------------------------------+
 | description | OpenStack Compute |
 | enabled | True |
 | id | 6a65433a36d54660a41a39d1aa37fca9 |
 | name | nova |
 | type | compute |
 +-------------+----------------------------------+
- 创建Compute API服务端点: - 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50- openstack endpoint create --region RegionOne \ 
 compute public http://controller:8774/v2.1
 输出
 +--------------+----------------------------------+
 | Field | Value |
 +--------------+----------------------------------+
 | enabled | True |
 | id | fcdb5eae3e144778b72e4810372a94f0 |
 | interface | public |
 | region | RegionOne |
 | region_id | RegionOne |
 | service_id | 6a65433a36d54660a41a39d1aa37fca9 |
 | service_name | nova |
 | service_type | compute |
 | url | http://controller:8774/v2.1 |
 +--------------+----------------------------------+
 openstack endpoint create --region RegionOne \
 compute internal http://controller:8774/v2.1
 输出
 +--------------+----------------------------------+
 | Field | Value |
 +--------------+----------------------------------+
 | enabled | True |
 | id | a5721cd78b2f4c7a8b8f52f50d5213f3 |
 | interface | internal |
 | region | RegionOne |
 | region_id | RegionOne |
 | service_id | 6a65433a36d54660a41a39d1aa37fca9 |
 | service_name | nova |
 | service_type | compute |
 | url | http://controller:8774/v2.1 |
 +--------------+----------------------------------+
 openstack endpoint create --region RegionOne \
 compute admin http://controller:8774/v2.1
 输出
 +--------------+----------------------------------+
 | Field | Value |
 +--------------+----------------------------------+
 | enabled | True |
 | id | f08c35a57bb7492f875eed0be5759bbf |
 | interface | admin |
 | region | RegionOne |
 | region_id | RegionOne |
 | service_id | 6a65433a36d54660a41a39d1aa37fca9 |
 | service_name | nova |
 | service_type | compute |
 | url | http://controller:8774/v2.1 |
 +--------------+----------------------------------+
3.4.1.2 安装和配置组件
- 安装包: - 1 
 2- apt-get install nova-api nova-conductor \ 
 nova-novncproxy nova-scheduler
- 编辑 - /etc/nova/nova.conf文件并完成以下操作:
 在- [api_database]和- [database]部分中,配置数据库访问:- [api_database] - connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova_api - [database] - connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova - 替换 - NOVA_DBPASS为您为Compute数据库选择的密码。- 在该 - [DEFAULT]部分中,配置- RabbitMQ消息队列访问:- [DEFAULT] - transport_url = rabbit://openstack:RABBIT_PASS@controller - 替换 - RABBIT_PASS为您为- openstack帐户选择的密码- RabbitMQ。- 在 - [api]和- [keystone_authtoken]部分中,配置身份服务访问:- [api] - auth_strategy = keystone - [keystone_authtoken] - auth_url = http://controller:5000/v3 
 memcached_servers = controller:11211
 auth_type = password
 project_domain_name = Default
 user_domain_name = Default
 project_name = service
 username = nova
 password = NOVA_PASS- 替换 - NOVA_PASS为您- nova在Identity服务中为用户选择的密码。
 注意,注释掉或删除该- [keystone_authtoken]部分中的任何其他选项。- 在该 - [DEFAULT]部分中,配置- my_ip选项以使用控制器节点的管理接口IP地址:- [DEFAULT] - my_ip = 192.168.2.50 - 在该 - [DEFAULT]部分中,启用对网络服务的支持:- [DEFAULT] - use_neutron = true 
 firewall_driver = nova.virt.firewall.NoopFirewallDriver- 注意,默认情况下,Compute使用内部防火墙驱动程序。由于Networking服务包含防火墙驱动程序,因此必须使用 - nova.virt.firewall.NoopFirewallDriver防火墙驱动程序禁用Compute防火墙驱动 程序。- 配置/etc/nova/nova.conf的 - [neutron]部分。 有关更多信息,请参阅网络服务安装指南。- 在该 - [vnc]部分中,配置VNC代理以使用控制器节点的管理接口IP地址:- [vnc] 
 enabled = true- server_listen = $my_ip 
 server_proxyclient_address = $my_ip- 在该 - [glance]部分中,配置Image服务API的位置:- [glance] - api_servers = http://controller:9292 - 在该 - [oslo_concurrency]部分中,配置锁定路径:- [oslo_concurrency] - lock_path = /var/lib/nova/tmp - 由于包装错误,请从 - [DEFAULT]部分中删除- log_dir选项 。
 在该- [placement]部分中,配置对Placement服务的访问权限:- [placement] - region_name = RegionOne 
 project_domain_name = Default
 project_name = service
 auth_type = password
 user_domain_name = Default
 auth_url = http://controller:5000/v3
 username = placement
 password = PLACEMENT_PASS
替换PLACEMENT_PASS为您placement在安装Placement时为服务用户 选择的密码 。注释掉或删除该[placement]部分中的任何其他选项。
- 填充 - nova-api数据库:- 1 - su -s /bin/sh -c "nova-manage api_db sync" nova - 注意,忽略此输出中的任何弃用消息。 
- 注册 - cell0数据库:- 1 - su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova 
- 创建 - cell1单元格:- 1 
 2
 3- su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova 
 输出
 245a3d9b-1074-487a-bbe9-8b1baa634a9e
- 填充新星数据库: - 1 - su -s /bin/sh -c "nova-manage db sync" nova 
- 验证nova cell0和cell1是否正确注册: - 1 
 2
 3
 4
 5
 6
 7
 8- su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova 
 输出
 +-------+--------------------------------------+右边还有3栏,放不下
 | Name | UUID |
 +-------+--------------------------------------+
 | cell0 | 00000000-0000-0000-0000-000000000000 |
 | cell1 | 245a3d9b-1074-487a-bbe9-8b1baa634a9e |
 +-------+--------------------------------------+
3.4.1.3 完成安装
重启Compute服务:
| 1 | service nova-api restart | 
3.4.2 安装并配置计算节点
3.4.2.1 安装和配置组件
- 安装包: - 1 - apt-get install nova-compute 
- 编辑 - /etc/nova/nova.conf文件并完成以下操作:
 在该- [DEFAULT]部分中,配置- RabbitMQ消息队列访问:- [DEFAULT] - transport_url = rabbit://openstack:RABBIT_PASS@controller - 替换 - RABBIT_PASS为您为- openstack帐户选择的密码- RabbitMQ。- 在 - [api]和- [keystone_authtoken]部分中,配置身份服务访问:- [api] - auth_strategy = keystone - [keystone_authtoken] - auth_url = http://controller:5000/v3 
 memcached_servers = controller:11211
 auth_type = password
 project_domain_name = Default
 user_domain_name = Default
 project_name = service
 username = nova
 password = NOVA_PASS- 替换 - NOVA_PASS为您- nova在Identity服务中为用户选择的密码。
 注意,注释掉或删除该- [keystone_authtoken]部分中的任何其他选项 。- 在该 - [DEFAULT]部分中,配置- my_ip选项:- [DEFAULT] - my_ip = 192.168.2.51 - 在该 - [DEFAULT]部分中,启用对网络服务的支持:- [DEFAULT] - use_neutron = true 
 firewall_driver = nova.virt.firewall.NoopFirewallDriver
注意,默认情况下,Compute使用内部防火墙服务。由于Networking包含防火墙服务,因此必须使用nova.virt.firewall.NoopFirewallDriver防火墙驱动程序禁用Compute防火墙服务。
配置/etc/nova/nova.conf的[neutron]部分。 有关更多详细信息,请参阅网络服务安装指南。
在该[vnc]部分中,启用并配置远程控制台访问:
[vnc]
enabled = true
server_listen = 0.0.0.0
server_proxyclient_address = $my_ip
novncproxy_base_url = http://controller:6080/vnc_auto.html
服务器组件侦听所有IP地址,并且代理组件仅侦听计算节点的管理接口IP地址。基本URL指示您可以使用Web浏览器访问此计算节点上的实例的远程控制台的位置。
注意,如果要访问远程控制台的Web浏览器驻留在无法解析controller主机名的主机上,则必须controller使用控制器节点的管理接口IP地址替换 。
在该[glance]部分中,配置Image服务API的位置:
[glance]
api_servers = http://controller:9292
在该[oslo_concurrency]部分中,配置锁定路径:
[oslo_concurrency]
lock_path = /var/lib/nova/tmp
在该[placement]部分中,配置Placement API:
[placement]
region_name = RegionOne
project_domain_name = Default
project_name = service
auth_type = password
user_domain_name = Default
auth_url = http://controller:5000/v3
username = placement
password = PLACEMENT_PASS
替换PLACEMENT_PASS为您placement在Identity服务中为用户选择的密码 。注释掉该[placement]部分中的任何其他选项。
3.4.2.2 完成安装
- 确定您的计算节点是否支持虚拟机的硬件加速: - 1 - egrep -c '(vmx|svm)' /proc/cpuinfo - 如果此命令返回值是 - 1或更高,则计算节点支持硬件加速,通常不需要其他配置。- 如果此命令返回值 - 0,则您的计算节点不支持硬件加速,您必须配置- libvirt为使用QEMU而不是KVM。- 编辑文件中的 - [libvirt]部分,- /etc/nova/nova-compute.conf如下所示:- [libvirt] - virt_type = qemu 
- 重新启动Compute服务: - 1 - service nova-compute restart 
3.4.3 到控制节点将计算节点添加到单元数据库
- 获取管理员凭据以启用仅管理员CLI命令,然后确认数据库中是否存在计算主机: - 1 
 2
 3
 4
 5
 6
 7
 8- source admin-openrc 
 openstack compute service list --service nova-compute
 输出
 +----+--------------+----------+------+---------+-------+----------------------------+
 | ID | Binary | Host | Zone | Status | State | Updated At |
 +----+--------------+----------+------+---------+-------+----------------------------+
 | 8 | nova-compute | compute1 | nova | enabled | up | 2019-07-19T08:22:57.000000 |
 +----+--------------+----------+------+---------+-------+----------------------------+
- 发现计算主机: - 1 
 2
 3
 4
 5
 6- su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova 
 输出 #也有可能不一样,我后来复查了这里,所以我这里可能不是新装的样子
 Found 2 cell mappings.
 Skipping cell0 since it does not contain hosts.
 Getting computes from cell 'cell1': 245a3d9b-1074-487a-bbe9-8b1baa634a9e
 Found 0 unmapped computes in cell: 245a3d9b-1074-487a-bbe9-8b1baa634a9e
   注意,添加新计算节点时,必须在控制器节点上运行nova-manage cell_v2 discover_hosts 以注册这些新计算节点。或者,您可以在以下位置设置适当的间隔 :/etc/nova/nova.conf
[scheduler]
discover_hosts_in_cells_interval = 300
3.4.4 验证操作
3.4.4.1 验证操作仅需在控制节点运行
- 来源 - admin凭据来访问仅管理员CLI命令:- 1 - source admin-openrc 
- 列出服务组件以验证每个进程的成功启动和注册: - 1 
 2
 3
 4
 5
 6
 7
 8
 9- openstack compute service list 
 输出 #最后一栏受限于文章宽度,省略了时间
 +----+----------------+------------+----------+---------+-------+--------------+
 | ID | Binary | Host | Zone | Status | State | Updated At |
 +----+----------------+------------+----------+---------+-------+--------------+
 | 1 | nova-scheduler | controller | internal | enabled | up | 2019-07-19 --|
 | 7 | nova-conductor | controller | internal | enabled | up | 2019-07-19 --|
 | 8 | nova-compute | compute1 | nova | enabled | up | 2019-07-19 --|
 +----+----------------+------------+----------+---------+-------+--------------+- 注意,此输出应指示在控制器节点上启用的两个服务组件以及在计算节点上启用的一个服务组件。 
- 列出Identity服务中的API端点以验证与Identity服务的连接: - 注意,端点列表可能会有所不同,具体取决于OpenStack组件的安装。 - 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34- openstack catalog list 
 输出
 +-----------+-----------+-----------------------------------------+
 | Name | Type | Endpoints |
 +-----------+-----------+-----------------------------------------+
 | nova | compute | RegionOne |
 | | | internal: http://controller:8774/v2.1 |
 | | | RegionOne |
 | | | admin: http://controller:8774/v2.1 |
 | | | RegionOne |
 | | | public: http://controller:8774/v2.1 |
 | | | |
 | glance | image | RegionOne |
 | | | internal: http://controller:9292 |
 | | | RegionOne |
 | | | admin: http://controller:9292 |
 | | | RegionOne |
 | | | public: http://controller:9292 |
 | | | |
 | placement | placement | RegionOne |
 | | | internal: http://controller:8778 |
 | | | RegionOne |
 | | | public: http://controller:8778 |
 | | | RegionOne |
 | | | admin: http://controller:8778 |
 | | | |
 | keystone | identity | RegionOne |
 | | | public: http://controller:5000/v3/ |
 | | | RegionOne |
 | | | admin: http://controller:5000/v3/ |
 | | | RegionOne |
 | | | internal: http://controller:5000/v3/ |
 | | | |
 +-----------+-----------+-----------------------------------------+- 注意,忽略此输出中的任何警告。 
- 列出Image服务中的图像以验证与Image服务的连接: - 1 
 2
 3
 4
 5
 6
 7- openstack image list 
 输出
 +--------------------------------------+--------+--------+
 | ID | Name | Status |
 +--------------------------------------+--------+--------+
 | 643f8b18-6272-4333-9983-0fb650ebf0c9 | cirros | active |
 +--------------------------------------+--------+--------+
- 检查单元格和放置API是否正常运行以及其他必要的先决条件是否到位: - 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27- nova-status upgrade check 
 输出
 +--------------------------------------------------------------------+
 | Upgrade Check Results |
 +--------------------------------------------------------------------+
 | Check: Cells v2 |
 | Result: Success |
 | Details: No host mappings or compute nodes were found. Remember to |
 | run command 'nova-manage cell_v2 discover_hosts' when new |
 | compute hosts are deployed. |
 +--------------------------------------------------------------------+
 | Check: Placement API |
 | Result: Success |
 | Details: None |
 +--------------------------------------------------------------------+
 | Check: Ironic Flavor Migration |
 | Result: Success |
 | Details: None |
 +--------------------------------------------------------------------+
 | Check: Request Spec Migration |
 | Result: Success |
 | Details: None |
 +--------------------------------------------------------------------+
 | Check: Console Auths |
 | Result: Success |
 | Details: None |
 +--------------------------------------------------------------------+
3.5 网络服务
重新配置网络接口将中断网络连接,因此建议使用本地终端会话来执行这些过程。
3.5.1 主机网络
emmm。。。这部分重复了一下标题1.1-1.3的内容,就不说了
3.5.2 安装和配置控制节点
3.5.2.1 先决条件
在配置OpenStack Networking(neutron)服务之前,必须创建数据库,服务凭据和API端点。
- 要创建数据库,请完成以下步骤: - 使用数据库访问客户端以 - root用户身份连接到数据库服务器:- 1 - mysql -u root -p - 创建 - neutron数据库:- 1 - CREATE DATABASE neutron; - 授予对 - neutron数据库的适当访问权限,替换- NEUTRON_DBPASS为合适的密码:- 1 
 2
 3
 4- GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' \ 
 IDENTIFIED BY 'NEUTRON_DBPASS';
 GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' \
 IDENTIFIED BY 'NEUTRON_DBPASS';- 退出数据库访问客户端。 
- 来源 - admin凭据来访问仅管理员CLI命令:- 1 - source admin-openrc 
- 要创建服务凭据,请完成以下步骤: - 创建 - neutron用户:- 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14- openstack user create --domain default --password-prompt neutron 
 输出
 User Password:
 Repeat User Password:
 +---------------------+----------------------------------+
 | Field | Value |
 +---------------------+----------------------------------+
 | domain_id | default |
 | enabled | True |
 | id | e195545b47324d1fb56c81cd80561d11 |
 | name | neutron |
 | options | {} |
 | password_expires_at | None |
 +---------------------+----------------------------------+- 将 - admin角色添加到- neutron用户:- 1 - openstack role add --project service --user neutron admin - 注意,此命令不提供输出。 - 创建 - neutron服务实体:- 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12- openstack service create --name neutron \ 
 --description "OpenStack Networking" network
 输出
 +-------------+----------------------------------+
 | Field | Value |
 +-------------+----------------------------------+
 | description | OpenStack Networking |
 | enabled | True |
 | id | d819e88f42e642c8867c8db49e32c6ef |
 | name | neutron |
 | type | network |
 +-------------+----------------------------------+
- 创建网络服务API端点: - 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50- openstack endpoint create --region RegionOne \ 
 network public http://controller:9696
 输出
 +--------------+----------------------------------+
 | Field | Value |
 +--------------+----------------------------------+
 | enabled | True |
 | id | a925a892d81345689578481717a54d7e |
 | interface | public |
 | region | RegionOne |
 | region_id | RegionOne |
 | service_id | d819e88f42e642c8867c8db49e32c6ef |
 | service_name | neutron |
 | service_type | network |
 | url | http://controller:9696 |
 +--------------+----------------------------------+
 openstack endpoint create --region RegionOne \
 network internal http://controller:9696
 输出
 +--------------+----------------------------------+
 | Field | Value |
 +--------------+----------------------------------+
 | enabled | True |
 | id | 4d32d47c2fee4f2fa9b81f0a906a5d3c |
 | interface | internal |
 | region | RegionOne |
 | region_id | RegionOne |
 | service_id | d819e88f42e642c8867c8db49e32c6ef |
 | service_name | neutron |
 | service_type | network |
 | url | http://controller:9696 |
 +--------------+----------------------------------+
 openstack endpoint create --region RegionOne \
 network admin http://controller:9696
 输出
 +--------------+----------------------------------+
 | Field | Value |
 +--------------+----------------------------------+
 | enabled | True |
 | id | fcb3a04b0915449691dcff6eb2f3cf86 |
 | interface | admin |
 | region | RegionOne |
 | region_id | RegionOne |
 | service_id | d819e88f42e642c8867c8db49e32c6ef |
 | service_name | neutron |
 | service_type | network |
 | url | http://controller:9696 |
 +--------------+----------------------------------+
配置网络选项
您可以使用选项1和2表示的两种体系结构之一来部署网络服务。
选项1部署了最简单的架构,该架构仅支持将实例附加到提供商(外部)网络。没有自助(私有)网络,路由器或浮动IP地址。只有该admin特权用户或其他特权用户才能管理提供商网络。
选项2使用支持将实例附加到自助服务网络的第3层服务来增强选项1。该demo非特权用户或其他非特权用户可以管理自助服务网络,包括提供自助服务和提供商网络之间连接的路由器。此外,浮动IP地址提供与使用来自外部网络(如Internet)的自助服务网络的实例的连接。
自助服务网络通常使用覆盖网络。诸如VXLAN之类的覆盖网络协议包括额外的报头,这些报头增加了开销并减少了有效载荷或用户数据的可用空间。在不了解虚拟网络基础结构的情况下,实例尝试使用1500字节的默认以太网最大传输单元(MTU)来发送分组。Networking服务自动通过DHCP为实例提供正确的MTU值。但是,某些云映像不使用DHCP或忽略DHCP MTU选项,并且需要使用元数据或脚本进行配置。
注意,选项2还支持将实例附加到提供商网络。
选择以下网络选项之一以配置特定于其的服务。
我这里选择自助服务网络,功能更强大了,看起来也不是很复杂
安装组件
| 1 | apt-get install neutron-server neutron-plugin-ml2 \ | 
配置服务器组件
编辑/etc/neutron/neutron.conf文件并完成以下操作:
在该[database]部分中,配置数据库访问:
[database]
connection = mysql+pymysql://neutron:NEUTRON_DBPASS@controller/neutron
替换NEUTRON_DBPASS为您为数据库选择的密码。
注意,注释掉或删除[database]部分中connection的任何其他选项 。
在该[DEFAULT]部分中,启用模块化第2层(ML2)插件,路由器服务和重叠的IP地址:
[DEFAULT]
core_plugin = ml2
service_plugins = router
allow_overlapping_ips = true
在该[DEFAULT]部分中,配置RabbitMQ 消息队列访问:
[DEFAULT]
transport_url = rabbit://openstack:RABBIT_PASS@controller
  替换RABBIT_PASS为您openstack在RabbitMQ中为帐户选择的密码 。
在[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 = neutron
password = NEUTRON_PASS
替换NEUTRON_PASS为您neutron 在Identity服务中为用户选择的密码。
注意,注释掉或删除该[keystone_authtoken]部分中的任何其他选项 。
在[DEFAULT]和[nova]部分中,配置网络以通知Compute网络拓扑更改:
[DEFAULT]
notify_nova_on_port_status_changes = true
notify_nova_on_port_data_changes = true[nova]
auth_url = http://controller:5000
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = nova
password = NOVA_PASS
替换NOVA_PASS为您nova 在Identity服务中为用户选择的密码。
在该[oslo_concurrency]部分中,配置锁定路径:
[oslo_concurrency]
lock_path = /var/lib/neutron/tmp
配置模块化第2层(ML2)插件¶
ML2插件使用Linux桥接机制为实例构建第2层(桥接和交换)虚拟网络基础架构。
编辑/etc/neutron/plugins/ml2/ml2_conf.ini文件并完成以下操作:
在该[ml2]部分中,启用flat,VLAN和VXLAN网络:
[ml2]
type_drivers = flat,vlan,vxlan
在该[ml2]部分中,启用VXLAN自助服务网络:
[ml2]
tenant_network_types = vxlan
在该[ml2]部分中,启用Linux桥和第2层填充机制:
[ml2]
mechanism_drivers = linuxbridge,l2population
警告,配置ML2插件后,删除type_drivers选项中的值 可能会导致数据库不一致。
注意,Linux网桥代理仅支持VXLAN重叠网络。
在该[ml2]部分中,启用端口安全性扩展驱动程序:
[ml2]
extension_drivers = port_security
在该[ml2_type_flat]部分中,将提供商虚拟网络配置为扁平网络:
[ml2_type_flat]
flat_networks = provider
在该[ml2_type_vxlan]部分中,为自助服务网络配置VXLAN网络标识符范围:
[ml2_type_vxlan]
vni_ranges = 1:1000
在该[securitygroup]部分中,启用ipset以提高安全组规则的效率:
[securitygroup]
enable_ipset = true
配置Linux桥代理
Linux网桥代理为实例构建第2层(桥接和交换)虚拟网络基础架构并处理安全组。
编辑/etc/neutron/plugins/ml2/linuxbridge_agent.ini文件并完成以下操作:
在该[linux_bridge]部分中,将提供者虚拟网络映射到提供者物理网络接口:
[linux_bridge]
physical_interface_mappings = provider:ens38
替换ens38为基础提供程序物理网络接口的名称。有关 更多信息,请参阅主机网络
在该[vxlan]部分中,启用VXLAN重叠网络,配置处理覆盖网络的物理网络接口的IP地址,并启用第2层填充:
[vxlan]
enable_vxlan = true
local_ip = 192.168.2.52
l2_population = true
替换192.168.2.52为处理覆盖网络的基础物理网络接口的IP地址。示例体系结构使用管理接口将流量隧道传输到其他节点。因此,请替换OVERLAY_INTERFACE_IP_ADDRESS为控制器节点的管理IP地址。有关更多信息,请参阅 主机网络
在该[securitygroup]部分中,启用安全组并配置Linux网桥iptables防火墙驱动程序:
[securitygroup]
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
通过验证以下所有sysctl值都设置为1:确保您的Linux操作系统内核支持网桥过滤器:
| 1 | sysctl net.bridge.bridge-nf-call-iptables | 
要启用网络桥接支持,通常br_netfilter需要加载内核模块,Ubuntu Server 18.04应该是默认加载的。
| 1 | modprobe br_netfilter | 
配置第3层代理
第3层(L3)代理为自助服务虚拟网络提供路由和NAT服务。
编辑/etc/neutron/l3_agent.ini文件并完成以下操作:
在本[DEFAULT]节中,配置Linux桥接接口驱动程序和外部网桥:
[DEFAULT]
interface_driver = linuxbridge
配置DHCP代理
DHCP代理为虚拟网络提供DHCP服务。
编辑/etc/neutron/dhcp_agent.ini文件并完成以下操作:
在本[DEFAULT]节中,配置Linux桥接接口驱动程序,Dnsmasq DHCP驱动程序,并启用隔离的元数据,以便提供商网络上的实例可以通过网络访问元数据:
[DEFAULT]
interface_driver = linuxbridge
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = true
配置元数据代理
元数据代理提供配置信息,例如实例的凭证。
编辑/etc/neutron/metadata_agent.ini文件并完成以下操作:
在该[DEFAULT]部分中,配置元数据主机和共享密钥:
[DEFAULT]
nova_metadata_host = controller
metadata_proxy_shared_secret = METADATA_SECRET
替换METADATA_SECRET为元数据代理的适当秘密。
配置Compute服务以使用Networking服务
注意,必须安装Nova计算服务才能完成此步骤。有关更多详细信息,请参阅docs网站的“ 安装指南”部分 下的计算安装指南 。
编辑/etc/nova/nova.conf文件并执行以下操作:
在该[neutron]部分中,配置访问参数,启用元数据代理并配置密码:
[neutron]
url = http://controller:9696
auth_url = http://controller:5000
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = neutron
password = NEUTRON_PASS
service_metadata_proxy = true
metadata_proxy_shared_secret = METADATA_SECRET
替换NEUTRON_PASS为您neutron 在Identity服务中为用户选择的密码。
替换METADATA_SECRET为您为元数据代理选择的秘密。
完成安装
填充数据库:
| 1 | su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf \ | 
注意,数据库填充稍后会出现在网络中,因为该脚本需要完整的服务器和插件配置文件。
- 重新启动Compute API服务: - 1 - service nova-api restart 
- 重新启动网络服务。 - 1 
 2
 3
 4
 5- service neutron-server restart 
 service neutron-linuxbridge-agent restart
 service neutron-dhcp-agent restart
 service neutron-metadata-agent restart
 service neutron-l3-agent restart
3.5.3 安装和配置计算节点
安装组件
| 1 | apt-get install neutron-linuxbridge-agent | 
配置公共组件
Networking公共组件配置包括身份验证机制,消息队列和插件。
注意,默认配置文件因分发而异。您可能需要添加这些部分和选项,而不是修改现有的部分和选项。此外,...配置片段中的省略号()表示您应保留的潜在默认配置选项。
编辑/etc/neutron/neutron.conf文件并完成以下操作:
在该[database]部分中,注释掉任何connection选项,因为计算节点不直接访问数据库。
在该[DEFAULT]部分中,配置RabbitMQ 消息队列访问:
[DEFAULT]
transport_url = rabbit://openstack:RABBIT_PASS@controller
替换RABBIT_PASS为您openstack 在RabbitMQ中为帐户选择的密码。
在[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 = neutron
password = NEUTRON_PASS
替换NEUTRON_PASS为您neutron 在Identity服务中为用户选择的密码。
注意,注释掉或删除该[keystone_authtoken]部分中的任何其他选项 。
在该[oslo_concurrency]部分中,配置锁定路径:
[oslo_concurrency]
lock_path = /var/lib/neutron/tmp
配置网络选项
选择为控制器节点选择的相同网络选项,以配置特定于其的服务。然后,返回此处并继续 配置计算服务以使用网络服务。
这里依旧是选择第二个选项
配置Linux桥代理
Linux网桥代理为实例构建第2层(桥接和交换)虚拟网络基础架构并处理安全组。
编辑/etc/neutron/plugins/ml2/linuxbridge_agent.ini文件并完成以下操作:
在该[linux_bridge]部分中,将提供者虚拟网络映射到提供者物理网络接口:
[linux_bridge]
physical_interface_mappings = provider:ens38
替换ens38为基础提供程序物理网络接口的名称。有关 更多信息,请参阅主机网络
在该[vxlan]部分中,启用VXLAN重叠网络,配置处理覆盖网络的物理网络接口的IP地址,并启用第2层填充:
[vxlan]
enable_vxlan = true
local_ip = 192.168.2.53
l2_population = true
替换192.168.2.53为处理覆盖网络的基础物理网络接口的IP地址。
在该[securitygroup]部分中,启用安全组并配置Linux网桥iptables防火墙驱动程序:
[securitygroup]
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
通过验证以下所有sysctl值都设置为1:确保您的Linux操作系统内核支持网桥过滤器:
| 1 | sysctl net.bridge.bridge-nf-call-iptables | 
要启用网络桥接支持,通常br_netfilter需要加载内核模块,Ubuntu Server 18.04应该是默认加载的。
| 1 | modprobe br_netfilter | 
配置Compute服务以使用Networking服务
编辑/etc/nova/nova.conf文件并完成以下操作:
在该[neutron]部分中,配置访问参数:
[neutron]
url = http://controller:9696
auth_url = http://controller:5000
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = neutron
password = NEUTRON_PASS
替换NEUTRON_PASS为您neutron 在Identity服务中为用户选择的密码。
完成安装
- 重新启动Compute服务: - 1 - service nova-compute restart 
- 重新启动Linux桥代理: - 1 - service neutron-linuxbridge-agent restart 
3.6 仪表盘
3.6.1 仪表盘仅在控制节点安装运行
安装和配置组件
- 安装包: - 1 - apt-get install openstack-dashboard 
- 编辑 - /etc/openstack-dashboard/local_settings.py文件并完成以下操作:- 配置仪表板以在 - controller节点上使用OpenStack服务 :- OPENSTACK_HOST = “controller” - 在仪表板配置部分中,允许主机访问仪表板: - ALLOWED_HOSTS = [‘one.example.com’, ‘two.example.com’] - 注意,不要 - ALLOWED_HOSTS在Ubuntu配置部分下编辑参数。- ALLOWED_HOSTS也可以- ['*']接受所有主机。这可能对开发工作有用,但可能不安全,不应在生产中使用。有关详细信息,请参阅 Django文档。- 配置 - memcached会话存储服务:- SESSION_ENGINE = ‘django.contrib.sessions.backends.cache’ - CACHES = { - 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': 'controller:11211', }- } 
注意,注释掉任何其他会话存储配置。
启用Identity API版本3:
OPENSTACK_KEYSTONE_URL = “http://%s:5000/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”
如果选择网络选项1,请禁用对第3层网络服务的支持:
OPENSTACK_NEUTRON_NETWORK = {
'enable_router': False, 'enable_quotas': False, 'enable_ipv6': False, 'enable_distributed_router': False, 'enable_ha_router': False, 'enable_lb': False, 'enable_firewall': False, 'enable_vpn': False, 'enable_fip_topology_check': False, }
(可选)配置时区:
TIME_ZONE = “Asia/Shanghai”
替换TIME_ZONE为适当的时区标识符。有关更多信息,请参阅时区列表。
- /etc/apache2/conf-available/openstack-dashboard.conf如果未包含,请添加以下行 。- WSGIApplicationGroup %{GLOBAL} 
完成安装
重新加载Web服务器配置:
| 1 | service apache2 reload | 
验证操作
使用Web浏览器访问仪表板 http://controller/horizon。
使用admin或demo用户和default域凭据进行身份验证。