OpenStack-Placement组件部署
创建数据库实例和数据库用户
[ root@ct ~]
创建Placement服务用户和API的endpoint
创建placement用户
[ root@ct ~]
+---------------------+----------------------------------+
| Field | Value |
+---------------------+----------------------------------+
| domain_id | default |
| enabled | True |
| id | e2fd74e3578f4d47a1f1ab30fff76d80 |
| name | placement |
| options | { } |
| password_expires_at | None |
+---------------------+----------------------------------+
给与placement用户对service项目拥有admin权限
[ root@ct ~]
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | Placement API |
| enabled | True |
| id | 6332d10b09144e509971822c6749a267 |
| name | placement |
| type | placement |
+-------------+----------------------------------+
注册API端口到placement的service中;注册的信息会写入到mysql中
[ root@ct ~]
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | 296458b3da894b318f7ee10018480da3 |
| interface | public |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 6332d10b09144e509971822c6749a267 |
| service_name | placement |
| service_type | placement |
| url | http://ct:8778 |
+--------------+----------------------------------+[ root@ct ~]
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | 569d80ebf9cc4587b03e203c1037cf73 |
| interface | internal |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 6332d10b09144e509971822c6749a267 |
| service_name | placement |
| service_type | placement |
| url | http://ct:8778 |
+--------------+----------------------------------+
[ root@ct~] +--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | 565c7960765f4431859639949cb7b5d2 |
| interface | admin |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 6332d10b09144e509971822c6749a267 |
| service_name | placement |
| service_type | placement |
| url | http://ct:8778 |
+--------------+----------------------------------+
安装placement服务
[ root@ct ~]
[ root@ct ~]
placement.conf 修改placement配置文件
[ root@ct ~]
[ root@ct ~]
[ root@ct ~]
[ root@ct ~]
[ root@ct ~]
[ root@ct ~]
[ root@ct ~]
[ root@ct ~]
[ root@ct ~]
[ root@ct ~]
[ root@ct ~]
[ root@ct placement]
[ DEFAULT]
[ api]
auth_strategy = keystone
[ cors]
[ keystone_authtoken]
auth_url = http://ct:5000/v3
memcached_servers = ct:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = placement
password = PLACEMENT_PASS
[ oslo_policy]
[ placement]
[ placement_database]
connection = mysql+pymysql://placement:PLACEMENT_DBPASS@ct/placement
[ profiler]
导入数据库
su -s /bin/sh -c "placement-manage db sync" placement
修改Apache配置文件: 00-placemenct-api.conf
安装完placement服务后会自动创建该文件-虚拟主机配置
[ root@ct ~]
[ root@ct conf.d]
< /Location>
< Directory /usr/bin>
< IfVersion > = 2 .4 > Require all granted
< /IfVersion>
< IfVersion < 2 .4 > Order allow,deny Allow from all
< /IfVersion>
< /Directory>
重新启动apache
[ root@ct placement]
测试
① curl 测试访问
[ root@ct placement]
{ "versions" : [ { "status" : "CURRENT" , "min_version" : "1.0" , "max_version" : "1.36" , "id" : "v1.0" , "links" : [ { "href" : "" , "rel" : "self" } ] } ] }
② 查看端口占用(netstat、lsof)
[ root@ct placement]
tcp6 0 0 :::8778 :::* LISTEN 72994 /httpd ③ 检查placement状态
[ root@ct placement]
+----------------------------------+
| Upgrade Check Results |
+----------------------------------+
| Check: Missing Root Provider IDs |
| Result: Success |
| Details: None |
+----------------------------------+
| Check: Incomplete Consumers |
| Result: Success |
| Details: None |
+----------------------------------+
计算节点Nova服务配置
创建nova数据库,并执行授权操作
[ root@ct ~]
MariaDB [ ( none) ] > CREATE DATABASE nova_api;
MariaDB [ ( none) ] > CREATE DATABASE nova;
MariaDB [ ( none) ] > CREATE DATABASE nova_cell0;
MariaDB [ ( none) ] > grant all privileges on nova_api.* to 'nova' @'localhost' identified by 'NOVA_DBPASS' ;
MariaDB [ ( none) ] > grant all privileges on nova_api.* to 'nova' @'%' identified byy 'NOVA_DBPASS' ;
MariaDB [ ( none) ] > grant all privileges on nova.* to 'nova' @'localhost' identified by 'NOVA_DBPASS' ;
MariaDB [ ( none) ] > grant all privileges on nova.* to 'nova' @'%' identified by 'NOOVA_DBPASS' ;
MariaDB [ ( none) ] > grant all privileges on nova_cell0.* to 'nova' @'localhost' ideentified by 'NOVA_DBPASS' ;
MariaDB [ ( none) ] > grant all privileges on nova_cell0.* to 'nova' @'%' identified by 'NOVA_DBPASS' ;
Query OK, 0 rows affected ( 0.000 sec)
MariaDB [ ( none) ] > flush privileges;
MariaDB [ ( none) ] > exit
管理Nova用户及服务
[ root@ct ~]
+---------------------+----------------------------------+
| Field | Value |
+---------------------+----------------------------------+
| domain_id | default |
| enabled | True |
| id | dcf3b5df290c42638de1f41a834d4284 |
| name | nova |
| options | { } |
| password_expires_at | None |
+---------------------+----------------------------------+[ root@ct ~]
创建nova服务
[ root@ct ~]
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | OpenStack Compute |
| enabled | True |
| id | d1f76108c8484212a8f296467508aa49 |
| name | nova |
| type | compute |
+-------------+----------------------------------+给Nova服务关联endpoint(端点)
[ root@ct ~]
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | 4bdb48b8c8c549609c157fcbab532bd7 |
| interface | public |
| region | RegionOne |
| region_id | RegionOne |
| service_id | d1f76108c8484212a8f296467508aa49 |
| service_name | nova |
| service_type | compute |
| url | http://ct:8774/v2.1 |
+--------------+----------------------------------+
[ root@ct ~]
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | 4509b03c2767491580ac064df598d9e7 |
| interface | internal |
| region | RegionOne |
| region_id | RegionOne |
| service_id | d1f76108c8484212a8f296467508aa49 |
| service_name | nova |
| service_type | compute |
| url | http://ct:8774/v2.1 |
+--------------+----------------------------------+[ root@ct ~]
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | e6c30360730f448ca21b20666f18a7a4 |
| interface | admin |
| region | RegionOne |
| region_id | RegionOne |
| service_id | d1f76108c8484212a8f296467508aa49 |
| service_name | nova |
| service_type | compute |
| url | http://ct:8774/v2.1 |
+--------------+----------------------------------+
安装nova组件、修改nova配置文件(nova.conf)
[ root@ct ~]
[ root@ct ~]
[ root@ct nova]
[ root@ct nova] openstack-config --set /etc/nova/nova.conf DEFAULT enabled_apis osapi_compute,metadataopenstack-config --set /etc/nova/nova.conf DEFAULT my_ip 192.168 .100.120 openstack-config --set /etc/nova/nova.conf DEFAULT use_neutron true openstack-config --set /etc/nova/nova.conf DEFAULT firewall_driver nova.virt.firewall.NoopFirewallDriveropenstack-config --set /etc/nova/nova.conf DEFAULT transport_url rabbit://openstack:RABBIT_PASS@ctopenstack-config --set /etc/nova/nova.conf api_database connection mysql+pymysql://nova:NOVA_DBPASS@ct/nova_apiopenstack-config --set /etc/nova/nova.conf database connection mysql+pymysql://nova:NOVA_DBPASS@ct/novaopenstack-config --set /etc/nova/nova.conf placement_database connection mysql+pymysql://placement:PLACEMENT_DBPASS@ct/placementopenstack-config --set /etc/nova/nova.conf api auth_strategy keystoneopenstack-config --set /etc/nova/nova.conf keystone_authtoken auth_url http://ct:5000/v3openstack-config --set /etc/nova/nova.conf keystone_authtoken memcached_servers ct:11211openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_type passwordopenstack-config --set /etc/nova/nova.conf keystone_authtoken project_domain_name Defaultopenstack-config --set /etc/nova/nova.conf keystone_authtoken user_domain_name Defaultopenstack-config --set /etc/nova/nova.conf keystone_authtoken project_name service openstack-config --set /etc/nova/nova.conf keystone_authtoken username novaopenstack-config --set /etc/nova/nova.conf keystone_authtoken password NOVA_PASSopenstack-config --set /etc/nova/nova.conf vnc enabled true openstack-config --set /etc/nova/nova.conf vnc server_listen ' $my_ip ' openstack-config --set /etc/nova/nova.conf vnc server_proxyclient_address ' $my_ip ' openstack-config --set /etc/nova/nova.conf glance api_servers http://ct:9292openstack-config --set /etc/nova/nova.conf oslo_concurrency lock_path /var/lib/nova/tmpopenstack-config --set /etc/nova/nova.conf placement region_name RegionOneopenstack-config --set /etc/nova/nova.conf placement project_domain_name Defaultopenstack-config --set /etc/nova/nova.conf placement project_name service openstack-config --set /etc/nova/nova.conf placement auth_type passwordopenstack-config --set /etc/nova/nova.conf placement user_domain_name Defaultopenstack-config --set /etc/nova/nova.conf placement auth_url http://ct:5000/v3openstack-config --set /etc/nova/nova.conf placement username placementopenstack-config --set /etc/nova/nova.conf placement password PLACEMENT_PASS
[ root@ct nova]
[ DEFAULT]
enabled_apis = osapi_compute,metadata
my_ip = 192.168 .100.120
use_neutron = true
firewall_driver = nova.virt.firewall.NoopFirewallDriver
transport_url = rabbit://openstack:RABBIT_PASS@ct
[ api]
auth_strategy = keystone
[ api_database]
connection = mysql+pymysql://nova:NOVA_DBPASS@ct/nova_api
[ barbican]
[ cache]
[ cinder]
[ compute]
[ conductor]
[ console]
[ consoleauth]
[ cors]
[ database]
connection = mysql+pymysql://nova:NOVA_DBPASS@ct/nova
[ devices]
[ ephemeral_storage_encryption]
[ filter_scheduler]
[ glance]
api_servers = http://ct:9292
[ guestfs]
[ healthcheck]
[ hyperv]
[ ironic]
[ key_manager]
[ keystone]
[ keystone_authtoken]
auth_url = http://ct:5000/v3
memcached_servers = ct:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = nova
password = NOVA_PASS
[ libvirt]
[ metrics]
[ mks]
[ neutron]
[ notifications]
[ osapi_v21]
[ oslo_concurrency]
lock_path = /var/lib/nova/tmp
[ oslo_messaging_amqp]
[ oslo_messaging_kafka]
[ oslo_messaging_notifications]
[ oslo_messaging_rabbit]
[ oslo_middleware]
[ oslo_policy]
[ pci]
[ placement]
region_name = RegionOne
project_domain_name = Default
project_name = service
auth_type = password
user_domain_name = Default
auth_url = http://ct:5000/v3
username = placement
password = PLACEMENT_PASS
[ powervm]
[ privsep]
[ profiler]
[ quota]
[ rdp]
[ remote_debug]
[ scheduler]
[ serial_console]
[ service_user]
[ spice]
[ upgrade_levels]
[ vault]
[ vendordata_dynamic_auth]
[ vmware]
[ vnc]
enabled = true
server_listen = $my_ip
server_proxyclient_address = $my_ip
[ workarounds]
[ wsgi]
[ xenserver]
[ xvp]
[ zvm]
[ placement_database]
初始化数据库
①:初始化nova_api数据库
[ root@ct ~]
②:注册cell0数据库;nova服务内部把资源划分到不同的cell中,把计算节点划分到不同的cell中;openstack内部基于cell把计算节点进行逻辑上的分组
[ root@ct ~]
③:创建cell1单元格;
[ root@ct ~]
269a515f-5d1a-4acc-be6b-26f3146b0ec6
④:初始化nova数据库;可以通过 /var/log/nova/nova-manage.log 日志判断是否初始化成功
[ root@ct ~]
/usr/lib/python2.7/site-packages/pymysql/cursors.py:170: Warning: ( 1831 , u'Duplicate index ` block_device_mapping_instance_uuid_virtual_name_device_name_idx` . This is deprecated and will be disallowed in a future release' ) result = self._query( query)
/usr/lib/python2.7/site-packages/pymysql/cursors.py:170: Warning: ( 1831 , u'Duplicate index ` uniq_instances0uuid` . This is deprecated and will be disallowed in a future release' ) result = self._query( query)
⑤:可使用以下命令验证cell0和cell1是否注册成功
su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova +-------+--------------------------------------+----------------------------+-----------------------------------------+----------+
| 名称 | UUID | Transport URL | 数据库连接 | Disabled |
+-------+--------------------------------------+----------------------------+-----------------------------------------+----------+
| cell0 | 00000000-0000-0000-0000-000000000000 | none:/ | mysql+pymysql://nova:****@ct/nova_cell0 | False |
| cell1 | 269a515f-5d1a-4acc-be6b-26f3146b0ec6 | rabbit://openstack:****@ct | mysql+pymysql://nova:****@ct/nova | False |
+-------+--------------------------------------+----------------------------+-----------------------------------------+----------+
启动Nova服务
[ root@ct ~]
[ root@ct ~]
①:检查nova服务端口
[ root@ct ~]
tcp 0 0 0.0 .0.0:8775 0.0 .0.0:* LISTEN 48566 /python2
tcp 0 0 0.0 .0.0:8774 0.0 .0.0:* LISTEN 48566 /python2
[ root@ct ~]
计算节点配置Nova服务
c1、c2安装nova-compute组件
yum -y install openstack-nova-compute
修改配置文件nova.conf
cp -a /etc/nova/nova.conf{ ,.bak}
grep -Ev '^$|#' /etc/nova/nova.conf.bak > /etc/nova/nova.conf
c1节点:
openstack-config --set /etc/nova/nova.conf DEFAULT enabled_apis osapi_compute,metadata
openstack-config --set /etc/nova/nova.conf DEFAULT transport_url rabbit://openstack:RABBIT_PASS@ct
openstack-config --set /etc/nova/nova.conf DEFAULT my_ip 192.168 .100.121
openstack-config --set /etc/nova/nova.conf DEFAULT use_neutron true
openstack-config --set /etc/nova/nova.conf DEFAULT firewall_driver nova.virt.firewall.NoopFirewallDriver
openstack-config --set /etc/nova/nova.conf api auth_strategy keystone
openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_url http://ct:5000/v3
openstack-config --set /etc/nova/nova.conf keystone_authtoken memcached_servers ct:11211
openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_type password
openstack-config --set /etc/nova/nova.conf keystone_authtoken project_domain_name Default
openstack-config --set /etc/nova/nova.conf keystone_authtoken user_domain_name Default
openstack-config --set /etc/nova/nova.conf keystone_authtoken project_name service
openstack-config --set /etc/nova/nova.conf keystone_authtoken username nova
openstack-config --set /etc/nova/nova.conf keystone_authtoken password NOVA_PASS
openstack-config --set /etc/nova/nova.conf vnc enabled true
openstack-config --set /etc/nova/nova.conf vnc server_listen 0.0 .0.0
openstack-config --set /etc/nova/nova.conf vnc server_proxyclient_address ' $my_ip '
openstack-config --set /etc/nova/nova.conf vnc novncproxy_base_url http://192.168.10.101:6080/vnc_auto.html
openstack-config --set /etc/nova/nova.conf glance api_servers http://ct:9292
openstack-config --set /etc/nova/nova.conf oslo_concurrency lock_path /var/lib/nova/tmp
openstack-config --set /etc/nova/nova.conf placement region_name RegionOne
openstack-config --set /etc/nova/nova.conf placement project_domain_name Default
openstack-config --set /etc/nova/nova.conf placement project_name service
openstack-config --set /etc/nova/nova.conf placement auth_type password
openstack-config --set /etc/nova/nova.conf placement user_domain_name Default
openstack-config --set /etc/nova/nova.conf placement auth_url http://ct:5000/v3
openstack-config --set /etc/nova/nova.conf placement username placement
openstack-config --set /etc/nova/nova.conf placement password PLACEMENT_PASS
openstack-config --set /etc/nova/nova.conf libvirt virt_type qemu
[ root@c1 nova]
[ DEFAULT]
enabled_apis = osapi_compute,metadata
transport_url = rabbit://openstack:RABBIT_PASS@ct
my_ip = 192.168 .100.121
use_neutron = true
firewall_driver = nova.virt.firewall.NoopFirewallDriver
[ api]
auth_strategy = keystone
[ api_database]
[ barbican]
[ cache]
[ cinder]
[ compute]
[ conductor]
[ console]
[ consoleauth]
[ cors]
[ database]
[ devices]
[ ephemeral_storage_encryption]
[ filter_scheduler]
[ glance]
api_servers = http://ct:9292
[ guestfs]
[ healthcheck]
[ hyperv]
[ ironic]
[ key_manager]
[ keystone]
[ keystone_authtoken]
auth_url = http://ct:5000/v3
memcached_servers = ct:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = nova
password = NOVA_PASS
[ libvirt]
virt_type = qemu
[ metrics]
[ mks]
[ neutron]
[ notifications]
[ osapi_v21]
[ oslo_concurrency]
lock_path = /var/lib/nova/tmp
[ oslo_messaging_amqp]
[ oslo_messaging_kafka]
[ oslo_messaging_notifications]
[ oslo_messaging_rabbit]
[ oslo_middleware]
[ oslo_policy]
[ pci]
[ placement]
region_name = RegionOne
project_domain_name = Default
project_name = service
auth_type = password
user_domain_name = Default
auth_url = http://ct:5000/v3
username = placement
password = PLACEMENT_PASS
[ powervm]
[ privsep]
[ profiler]
[ quota]
[ rdp]
[ remote_debug]
[ scheduler]
[ serial_console]
[ service_user]
[ spice]
[ upgrade_levels]
[ vault]
[ vendordata_dynamic_auth]
[ vmware]
[ vnc]
enabled = true
server_listen = 0.0 .0.0
server_proxyclient_address = $my_ip
novncproxy_base_url = http://192.168.100.121:6080/vnc_auto.html
[ workarounds]
[ wsgi]
[ xenserver]
[ xvp]
[ zvm]
开启服务
systemctl enable libvirtd.service openstack-nova-compute.servicesystemctl start libvirtd.service openstack-nova-compute.service以上操作计算节点-c2与c1相同(除IP地址不同)
controller节点操作
查看compute节点是否注册到controller上,通过消息队列;需要在controller节点执行
[ root@ct ~]
+----+--------------+------+------+---------+-------+----------------------------+
| ID | Binary | Host | Zone | Status | State | Updated At |
+----+--------------+------+------+---------+-------+----------------------------+
| 8 | nova-compute | c1 | nova | enabled | up | 2021 -08-26T13:29:30.000000 |
| 9 | nova-compute | c2 | nova | enabled | up | 2021 -08-26T13:29:33.000000 |
+----+--------------+------+------+---------+-------+----------------------------+
扫描当前openstack中有可用的计算节点,发现后会把计算节点创建到cell中,后面就可以在cell中创建虚拟机;相当于openstack内部对计算节点进行分组,把计算节点分配到不同的cell中
[ root@ct ~]
Found 2 cell mappings.
Skipping cell0 since it does not contain hosts.
Getting computes from cell 'cell1' : 269a515f-5d1a-4acc-be6b-26f3146b0ec6
Checking host mapping for compute host 'c1' : 77c14ea3-41e4-4008-81b2-4b18565796ec
Creating host mapping for compute host 'c1' : 77c14ea3-41e4-4008-81b2-4b18565796ec
Checking host mapping for compute host 'c2' : 5398f1e7-ee65-471a-bb7c-357764c357a1
Creating host mapping for compute host 'c2' : 5398f1e7-ee65-471a-bb7c-357764c357a1
Found 2 unmapped computes in cell: 269a515f-5d1a-4acc-be6b-26f3146b0ec6
默认每次添加个计算节点,在控制端就需要执行一次扫描,这样会很麻烦,所以可以修改控制端nova的主配置文件
[ root@ct ~]
[ scheduler]
discover_hosts_in_cells_interval = 300 [ root@ct ~]
验证计算节点服务
[ root@ct ~]
+----+----------------+------+----------+---------+-------+----------------------------+
| ID | Binary | Host | Zone | Status | State | Updated At |
+----+----------------+------+----------+---------+-------+----------------------------+
| 4 | nova-scheduler | ct | internal | enabled | up | 2021 -08-26T13:34:17.000000 |
| 7 | nova-conductor | ct | internal | enabled | up | 2021 -08-26T13:34:19.000000 |
| 8 | nova-compute | c1 | nova | enabled | up | 2021 -08-26T13:34:20.000000 |
| 9 | nova-compute | c2 | nova | enabled | up | 2021 -08-26T13:34:13.000000 |
+----+----------------+------+----------+---------+-------+----------------------------+[ root@ct ~]
+-----------+-----------+---------------------------------+
| Name | Type | Endpoints |
+-----------+-----------+---------------------------------+
| placement | placement | RegionOne |
| | | public: http://ct:8778 |
| | | RegionOne |
| | | admin: http://ct:8778 |
| | | RegionOne |
| | | internal: http://ct:8778 |
| | | |
| glance | image | RegionOne |
| | | public: http://ct:9292 |
| | | RegionOne |
| | | admin: http://ct:9292 |
| | | RegionOne |
| | | internal: http://ct:9292 |
| | | |
| keystone | identity | RegionOne |
| | | admin: http://ct:5000/v3/ |
| | | RegionOne |
| | | internal: http://ct:5000/v3/ |
| | | RegionOne |
| | | public: http://ct:5000/v3/ |
| | | |
| nova | compute | RegionOne |
| | | internal: http://ct:8774/v2.1 |
| | | RegionOne |
| | | public: http://ct:8774/v2.1 |
| | | RegionOne |
| | | admin: http://ct:8774/v2.1 |
| | | |
+-----------+-----------+---------------------------------+[ root@ct ~] +--------------------------------------+--------+--------+
| ID | Name | Status |
+--------------------------------------+--------+--------+
| ca02269b-9b20-4a03-9b35-5c889b624db8 | cirros | active |
+--------------------------------------+--------+--------+
[ root@ct ~]
+--------------------------------+
| Upgrade Check Results |
+--------------------------------+
| Check: Cells v2 |
| Result: Success |
| Details: None |
+--------------------------------+
| Check: Placement API |
| Result: Success |
| Details: None |
+--------------------------------+
| Check: Ironic Flavor Migration |
| Result: Success |
| Details: None |
+--------------------------------+
| Check: Cinder API |
| Result: Success |
| Details: None |
+--------------------------------+