• A05. openstack架构实战-nova服务控制节点安装


    使用OpenStack Compute托管和管理云计算系统。OpenStack Compute是基础架构即服务(IaaS)系统的主要部分。主要模块是用Python实现的。

    OpenStack Compute与OpenStack Identity交互以进行身份​​验证;用于磁盘和服务器映像的OpenStack映像服务;和用于用户和管理界面的OpenStack仪表板。图像访问受项目和用户的限制;每个项目都限制配额(例如,实例数)。OpenStack Compute可以在标准硬件上水平扩展,并下载映像以启动实例。

    OpenStack计算服务由下列组件所构成:(下列只是标识常用组件)

    nova-api 服务接受并响应最终用户的计算API调用。该服务支持OpenStack Compute API。它执行一些策略并启动大多数编排活动,例如运行实例。(管理虚拟机云主机的生命周期)

    nova-compute(computer节点多个) 服务通过守护程序API创建和终止虚拟机实例的辅助程序守护程序。(真正用来管理虚拟机)nova-compute调用libvirt管理虚拟机,例如:

    • 适用于XenServer / XCP的XenAPI
    • 用于KVM或QEMU的libvirt
    • 适用于VMware的VMwareAPI

    nova-scheduler 服务从队列中获取虚拟机实例请求,并确定它在哪台计算服务器主机上运行。(如果同时创建多个云主机的时候,nova-scheduler会根据(nova-compute创建虚拟机之后,存放在数据库中剩余的cpu,内存等)挑选最合适的nova-compute进行创建虚拟机)

    由于nova-compute需要连接数据库,而且nova-compute是有多个节点的,如果每个节点都配置数据库连接,都有数据的账号和密码,这样一但数据库被泄露,会照成很大的不安全,这是为了安全nova有一个专门帮助computer连接数据库的插件nova-conductor

    nova-conductor 是问了协助nova-compute服务与数据库之间的交互它消除了该nova-compute服务对云数据库的直接访问不安全的问题 nova-conductor模块水平缩放。但是,请勿将其部署在nova-compute运行服务的节点上。(nova-computer和nova-conductor之间是通过消息队列来实时通信)

    nova-consoleauth 守护程序为控制台代理提供的用户授权令牌。该服务必须正在运行,控制台代理才能起作用。您可以在集群配置中针对单个nova-consoleauth服务运行这两种类型的代理。

    nova-novncproxy 守护程序提供用于通过VNC连接访问正在运行的实例的代理。支持基于浏览器的novnc客户端。

    nova-api-metadata 服务接受来自实例的元数据请求。nova-api-metadata当您在nova-network 安装时以多主机模式运行时,通常会使用服务。配合neutron-metadata-agent来虚拟机定制化

    nova服务安装

    1:在控制节点上数据库进行授权:

    有关于cell0数据库的信息请查看该连接:

    https://blog.csdn.net/huyoufu200920201078/article/details/78133167(转载)

    MariaDB [keystone]> CREATE DATABASE nova_api;
    Query OK, 1 row affected (0.00 sec)

    MariaDB [keystone]> CREATE DATABASE nova;
    Query OK, 1 row affected (0.00 sec)

    MariaDB [keystone]> CREATE DATABASE nova_cell0;
    Query OK, 1 row affected (0.00 sec)

    2:对数据库进行正确的授权:

    MariaDB [keystone]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost'
    -> IDENTIFIED BY 'huayun';
    Query OK, 0 rows affected (0.00 sec)

    MariaDB [keystone]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%'
    -> IDENTIFIED BY 'huayun';
    Query OK, 0 rows affected (0.00 sec)

    MariaDB [keystone]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost'
    -> IDENTIFIED BY 'huayun';
    Query OK, 0 rows affected (0.00 sec)

    MariaDB [keystone]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'huayun';
    Query OK, 0 rows affected (0.00 sec)

    MariaDB [keystone]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost'
    -> IDENTIFIED BY 'huayun';
    Query OK, 0 rows affected (0.00 sec)

    MariaDB [keystone]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%'
    -> IDENTIFIED BY 'huayun';
    Query OK, 0 rows affected (0.00 sec)

    3:在keystone中创建计算服务凭据:

    创建nova用户:

    [root@controller01 ~]# openstack user create --domain default --password-prompt nova
    User Password:
    Repeat User Password:
    +---------------------+----------------------------------+
    | Field | Value |
    +---------------------+----------------------------------+
    | domain_id | default |
    | enabled | True |
    | id | c4969df6d7f94b2a9e1f070d4fbe4b21 |
    | name | nova |
    | options | {} |
    | password_expires_at | None |
    +---------------------+----------------------------------+

    添加admin角色到nova用户中:

    [root@controller01 ~]# openstack role add --project service --user nova admin

    创建nova服务:

    [root@controller01 ~]# openstack service create --name nova
    > --description "OpenStack Compute" compute
    +-------------+----------------------------------+
    | Field | Value |
    +-------------+----------------------------------+
    | description | OpenStack Compute |
    | enabled | True |
    | id | 4789449b79b744ed8f1f73510c790717 |
    | name | nova |
    | type | compute |
    +-------------+----------------------------------+

    创建compute 的API接口

    [root@controller01 ~]# openstack endpoint create --region RegionOne
    > compute public http://controller01:8774/v2.1
    +--------------+----------------------------------+
    | Field | Value |
    +--------------+----------------------------------+
    | enabled | True |
    | id | e3297f3039934f32aa5ebdad8947c03e |
    | interface | public |
    | region | RegionOne |
    | region_id | RegionOne |
    | service_id | 4789449b79b744ed8f1f73510c790717 |
    | service_name | nova |
    | service_type | compute |
    | url | http://controller01:8774/v2.1 |
    +--------------+----------------------------------+

    [root@controller01 ~]# openstack endpoint create --region RegionOne
    > compute internal http://controller01:8774/v2.1
    +--------------+----------------------------------+
    | Field | Value |
    +--------------+----------------------------------+
    | enabled | True |
    | id | 50c9f6f56c6245d1afda96d3e4551a8d |
    | interface | internal |
    | region | RegionOne |
    | region_id | RegionOne |
    | service_id | 4789449b79b744ed8f1f73510c790717 |
    | service_name | nova |
    | service_type | compute |
    | url | http://controller01:8774/v2.1 |
    +--------------+----------------------------------+

    [root@controller01 ~]# openstack endpoint create --region RegionOne
    > compute admin http://controller01:8774/v2.1
    +--------------+----------------------------------+
    | Field | Value |
    +--------------+----------------------------------+
    | enabled | True |
    | id | 452b26e7185f4693a99d2a6e82263d02 |
    | interface | admin |
    | region | RegionOne |
    | region_id | RegionOne |
    | service_id | 4789449b79b744ed8f1f73510c790717 |
    | service_name | nova |
    | service_type | compute |
    | url | http://controller01:8774/v2.1 |
    +--------------+----------------------------------+

    创建placement :

    Nova在 Newton 14.0.0版中引入Placement API。这是一个比较独立的Rest API 栈,建立该数据模型是为了追踪记录resources provider目录和resource使用情况。例如,resource provider可以是一个计算节点、共享存储池或是IP地址池。placement 服务追踪每种resource provider的服务目录,使用情况(意思就是,可以从placement API获取resource provider目录,并获取resource provider的资源使用情况)。例如一个新建的instance是 某个compute node resource provider的消费者,消费RAM,CPU资源,也是外部存储资源池的消费者,也是IP resource provider的消费者。

    创建placement用户

    [root@controller01 ~]# openstack user create --domain default --password-prompt placement
    User Password:
    Repeat User Password:
    +---------------------+----------------------------------+
    | Field | Value |
    +---------------------+----------------------------------+
    | domain_id | default |
    | enabled | True |
    | id | 33459699cd5b40a5b20f9db6e6d1acd2 |
    | name | placement |
    | options | {} |
    | password_expires_at | None |
    +---------------------+----------------------------------+

    添加admin角色到placement用户

    [root@controller01 ~]# openstack role add --project service --user placement admin

    在keystone上创建placemen服务:

    [root@controller01 ~]# openstack service create --name placement --description "Placement API" placement
    +-------------+----------------------------------+
    | Field | Value |
    +-------------+----------------------------------+
    | description | Placement API |
    | enabled | True |
    | id | 13842265b6224256ab09e2c0dbc90447 |
    | name | placement |
    | type | placement |
    +-------------+----------------------------------+

    创建placement api 服务接口

    [root@controller01 ~]# openstack endpoint create --region RegionOne placement public http://controller01:8778
    +--------------+----------------------------------+
    | Field | Value |
    +--------------+----------------------------------+
    | enabled | True |
    | id | 858dcee61bbb4d9b87362b7f44be2fff |
    | interface | public |
    | region | RegionOne |
    | region_id | RegionOne |
    | service_id | 13842265b6224256ab09e2c0dbc90447 |
    | service_name | placement |
    | service_type | placement |
    | url | http://controller01:8778 |
    +--------------+----------------------------------+
    [root@controller01 ~]# openstack endpoint create --region RegionOne placement internal http://controller01:8778
    +--------------+----------------------------------+
    | Field | Value |
    +--------------+----------------------------------+
    | enabled | True |
    | id | ea6c0b4fa5f642139fa81961e73f672b |
    | interface | internal |
    | region | RegionOne |
    | region_id | RegionOne |
    | service_id | 13842265b6224256ab09e2c0dbc90447 |
    | service_name | placement |
    | service_type | placement |
    | url | http://controller01:8778 |
    +--------------+----------------------------------+
    [root@controller01 ~]# openstack endpoint create --region RegionOne placement admin http://controller01:8778
    +--------------+----------------------------------+
    | Field | Value |
    +--------------+----------------------------------+
    | enabled | True |
    | id | dfcd70404c194c7ebd9125b41746d8e8 |
    | interface | admin |
    | region | RegionOne |
    | region_id | RegionOne |
    | service_id | 13842265b6224256ab09e2c0dbc90447 |
    | service_name | placement |
    | service_type | placement |
    | url | http://controller01:8778 |
    +--------------+----------------------------------+

    安装和配置nova服务:

    1:安装软件包:

    [root@controller01 ~]# yum install  -y openstack-nova-api openstack-nova-conductor
    > openstack-nova-console openstack-nova-novncproxy
    > openstack-nova-scheduler openstack-nova-placement-api

    2:编辑/etc/nova/nova.conf文件并完成以下操作:

    在此[DEFAULT]部分中,仅启用计算和元数据API:

    [DEFAULT]
    enabled_apis = osapi_compute,metadata

    配置api_database和database的数据库访问

    [api_database]
    connection = mysql+pymysql://nova:huayun@controller01/nova_api

    [database]

    connection = mysql+pymysql://nova:huayun@controller01/nova

    在该[DEFAULT]部分中,配置RabbitMQ消息队列访问:

    [DEFAULT]
    enabled_apis = osapi_compute,metadata
    transport_url = rabbit://openstack:huayun@controller01

    [api][keystone_authtoken]部分中,配置身份服务访问:

    [api]
    auth_strategy = keystone

    [keystone_authtoken]

    auth_url = http://controller01:5000/v3
    memcached_servers = controller01:11211
    auth_type = password
    project_domain_name = default
    user_domain_name = default
    project_name = service
    username = nova
    password = huayun

    在该[DEFAULT]部分中,配置my_ip选项以使用控制器节点的管理接口IP地址:

    [DEFAULT]
    enabled_apis = osapi_compute,metadata
    transport_url = rabbit://openstack:huayun@controller01

    my_ip = 10.100.201.201

    在本[DEFAULT]节中,启用对网络服务的支持:

    注意:默认情况下,Compute使用内部防火墙驱动程序。由于网络服务包含防火墙驱动程序,因此必须使用nova.virt.firewall.NoopFirewallDriver防火墙驱动程序禁用计算防火墙驱动 程序。

    [DEFAULT]
    ................

    use_neutron = True
    firewall_driver = nova.virt.firewall.NoopFirewallDriver

    在该[vnc]部分中,将VNC代理配置为使用控制器节点的管理接口IP地址:

    [vnc]
    enabled = true

    server_listen = $my_ip
    server_proxyclient_address = $my_ip

    在该[glance]部分中,配置镜像服务API的位置:

    [glance]
    api_servers = http://controller01:9292

    在该[oslo_concurrency]部分中,配置锁定路径:(防止脚本重复运行

    [oslo_concurrency]
    lock_path = /var/lib/nova/tmp

    在该[placement]部分中,配置Placement API:

    [placement]
    os_region_name = RegionOne
    project_domain_name = Default
    project_name = service
    auth_type = password
    user_domain_name = Default
    auth_url = http://controller01:5000/v3
    username = placement
    password = huayun

    由于安装包有bug,您必须通过将以下配置添加到来启用对Placement API的访问 /etc/httpd/conf.d/00-nova-placement-api.conf

    <Directory /usr/bin>
    <IfVersion >= 2.4>
    Require all granted
    </IfVersion>
    <IfVersion < 2.4>
    Order allow,deny
    Allow from all
    </IfVersion>
    </Directory>

    修改完之后重新启动httpd

    [root@controller01 ~]# systemctl restart httpd

    nova数据库同步

    nova-api数据库同步:

    [root@controller01 ~]# su -s /bin/sh -c "nova-manage api_db sync" nova

    注册cell0数据库同步:

    [root@controller01 ~]# su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova

    创建cell1单元格:

    [root@controller01 ~]# su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova
    f6a79410-c689-466c-ad20-705a87170ea9

    nova数据库同步:

    [root@controller01 ~]# su -s /bin/sh -c "nova-manage db sync" nova
    /usr/lib/python2.7/site-packages/pymysql/cursors.py:166: 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:166: Warning: (1831, u'Duplicate index `uniq_instances0uuid`. This is deprecated and will be disallowed in a future release.')
    result = self._query(query)

    验证nova cell0和cell1是否正确注册:

    [root@controller01 ~]# nova-manage cell_v2 list_cells
    +-------+--------------------------------------+--------------------------------------+---------------------------------------------------+
    | Name | UUID | Transport URL | Database Connection |
    +-------+--------------------------------------+--------------------------------------+---------------------------------------------------+
    | cell0 | 00000000-0000-0000-0000-000000000000 | none:/ | mysql+pymysql://nova:****@controller01/nova_cell0 |
    | cell1 | f6a79410-c689-466c-ad20-705a87170ea9 | rabbit://openstack:****@controller01 | mysql+pymysql://nova:****@controller01/nova |
    +-------+--------------------------------------+--------------------------------------+---------------------------------------------------+

    启动nova服务:

    [root@controller01 ~]# systemctl enable openstack-nova-api.service
     openstack-nova-consoleauth.service openstack-nova-scheduler.service
     openstack-nova-conductor.service openstack-nova-novncproxy.service

    [root@controller01 ~]# systemctl start openstack-nova-api.service
    > openstack-nova-consoleauth.service openstack-nova-scheduler.service
    > openstack-nova-conductor.service openstack-nova-novncproxy.service

    检测服务是否启动:

    [root@controller01 ~]# nova service-list
    +--------------------------------------+------------------+--------------+----------+---------+-------+----------------------------+-----------------+-------------+
    | Id | Binary | Host | Zone | Status | State | Updated_at | Disabled Reason | Forced down |
    +--------------------------------------+------------------+--------------+----------+---------+-------+----------------------------+-----------------+-------------+
    | 0e8b6f12-b821-4a76-abfe-843df06d381a | nova-consoleauth | controller01 | internal | enabled | up | 2020-05-24T09:27:56.000000 | - | False |
    | 59db69dc-fb44-4341-ac4a-ddf6cb32348e | nova-conductor | controller01 | internal | enabled | up | 2020-05-24T09:27:56.000000 | - | False |
    | 7d8c598b-f5ac-4e5e-bd54-19e40e993fcd | nova-scheduler | controller01 | internal | enabled | up | 2020-05-24T09:27:56.000000 | - | False |
    +--------------------------------------+------------------+--------------+----------+---------+-------+----------------------------+-----------------+-------------+

    查看nova 服务表首先查看的是调用nova-api的服务:

    检测openstack-nova-novncproxy是否正常:

    [root@controller01 ~]# netstat -tunpl | grep 6080
    tcp 0 0 0.0.0.0:6080 0.0.0.0:* LISTEN 30416/python2

    [root@controller01 ~]# ps -ef | grep 30416
    nova 30416 1 0 17:23 ? 00:00:03 /usr/bin/python2 /usr/bin/nova-novncproxy --web /usr/share/novnc/
    root 30998 18811 0 17:31 pts/0 00:00:00 grep --color=auto 30416

  • 相关阅读:
    C语言枚举类型(C语言enum用法)详解
    基础练习 报时助手
    怎么将CAD转JPG?教你两种CAD转JPG方法
    CAD图纸怎么看?这两种方法值得看
    某酒店建筑设计CAD施工图
    CAD怎么算面积?这种方法你要知道
    怎么将DWG转PDF?分享一个在线转换方法
    如何使用CAD删除命令?怎么删除图纸中线段
    CAD制图软件哪个好?试试这两个就知道了
    CAD制图初学入门如何学好CAD?CAD大神总结5点诀窍,必须收藏
  • 原文地址:https://www.cnblogs.com/zhaopei123/p/12951688.html
Copyright © 2020-2023  润新知