更新时间:2022-05-12 GMT+08:00
分享

安装配置并验证Nova

安装 QEMU

使用的是 qemu-4.0.0版本。该arm版本暂不支持虚拟机热迁移功能(支持冷迁移),该问题鲲鹏openEuler已解决,若有虚拟机热迁移需求,推荐换用openEuler操作系统。

在计算节点执行以下操作。

  1. 安装依赖包。

    1
    yum -y install glib2-devel zlib-devel pixman-devel librbd1-devel libaio-devel
    

  2. 下载源码。

  3. 编译安装。

    1. 解压并进入QEMU目录。
      1
      2
      tar -xvf qemu-4.0.0.tar.xz
      cd qemu-4.0.0
      
    2. 配置安装。
      1
      ./configure --enable-rbd --enable-linux-aio
      

      1
      2
      make -j 50
      make install
      

  4. 添加lib库。

    1
    sed -i  '$ainclude /usr/local/lib' /etc/ld.so.conf
    

  5. 使配置生效。

    1
    ldconfig
    

安装libvirt

使用的是 libvirt 5.6版本。该arm版本暂不支持虚拟机热迁移功能(支持冷迁移),该问题鲲鹏openEuler已解决,若有虚拟机热迁移需求,推荐换用openEuler操作系统。

在计算节点执行以下操作。

  1. 安装edk2。

    • 在线安装

      执行如下命令在线安装edk2,如图1所示。

      1
      2
      wget https://www.kraxel.org/repos/firmware.repo -O /etc/yum.repos.d/firmware.repo
      yum -y install edk2.git-aarch64
      
      图1 在线安装edk2
    • 离线安装

      在有外网的环境下访问https://www.kraxel.org/repos/,获取rpm包并拷贝至目标服务器系统相应位置。执行如下命令离线安装edk2,如图2所示。

      1
      rpm -ivh edk2.git-aarch64*.rpm
      
      图2 离线安装edk2

      安装edk2时会有ssl校验,需关闭。 vim /etc/yum.conf 添加sslverify=false。

  2. 安装依赖包。

    1
    yum -y install gnutls-devel libnl-devel libxml2-devel yajl-devel device-mapper-devel libpciaccess-devel
    

  3. 安装libvirt-5.6.0 (源码编译安装方式)。

    1. 下载源码。
      1
      wget https://libvirt.org/sources/libvirt-5.6.0-1.fc30.src.rpm -O /root/libvirt-5.6.0-1.fc30.src.rpm
      
    2. 编译,按照如下步骤依次完成:
      1
      2
      3
      4
      cd /root/
      rpm -i libvirt-5.6.0-1.fc30.src.rpm
      yum -y install libxml2-devel readline-devel ncurses-devel libtasn1-devel gnutls-devel libattr-devel libblkid-devel augeas systemd-devel libpciaccess-devel yajl-devel sanlock-devel libpcap-devel libnl3-devel libselinux-devel dnsmasq radvd cyrus-sasl-devel libacl-devel parted-devel device-mapper-devel xfsprogs-devel librados2-devel librbd1-devel glusterfs-api-devel glusterfs-devel numactl-devel libcap-ng-devel fuse-devel netcf-devel libcurl-devel audit-libs-devel systemtap-sdt-devel nfs-utils dbus-devel scrub numad qemu-img rpm-build iscsi-initiator-utils
      rpmbuild -ba ~/rpmbuild/SPECS/libvirt.spec
      

      如果出错则可以使用另外一种方法编译:

      1
      rpmbuild --rebuild /root/libvirt-5.6.0-1.fc30.src.rpm
      
    3. 安装。
      1
      yum install -y /root/rpmbuild/RPMS/aarch64/*.rpm
      
    4. 重启libvirt服务。
      1
      systemctl restart libvirtd
      

      若源码编译安装方式编译失败,可替换为使用另一种方式编译安装:

      1
      wget https://libvirt.org/sources/libvirt-5.6.0.tar.xz -O /root/libvirt-5.6.0.tar.xz
      
      1
      2
      3
      4
      5
      tar -xvf /root/libvirt-5.6.0.tar.xz
      cd /root/libvirt-5.6.0/
      ./autogen.sh --system
      make -j 50
      make install
      
      1
      systemctl restart libvirtd
      

  4. 修改配置文件“/etc/libvirt/qemu.conf”。

    1. 添加AAVMF内容。
      1
      nvram = ["/usr/share/AAVMF/AAVMF_CODE.fd:/usr/share/AAVMF/AAVMF_VARS.fd","/usr/share/edk2.git/aarch64/QEMU_EFI-pflash.raw:/usr/share/edk2.git/aarch64/vars-template-pflash.raw"]
      

    2. 打开权限。

      找到user = "root" group = "root"并取消注释。

    3. 检验libvirt和QEMU版本。
      1
      virsh version
      

      其中libvirt 版本为5.6.0,如果安装了QEMU,则QEMU应该为 4.0.0,否则为默认版本2.12.0。

创建Nova数据库

在控制节点执行以下操作。

  1. 使用root用户连接数据库。

    1
    mysql -u root -p
    

  2. 创建nova,nova_api,nova_cell0数据库。

    1
    2
    3
    CREATE DATABASE nova_api;
    CREATE DATABASE nova;
    CREATE DATABASE nova_cell0;
    

  3. 授予对数据库的适当访问权限。

     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 '<PASSWORD>';
    GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' \
    IDENTIFIED BY '<PASSWORD>';
    
    GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' \
    IDENTIFIED BY '<PASSWORD>';
    GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' \
    IDENTIFIED BY '<PASSWORD>';
    
    GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' \
    IDENTIFIED BY '<PASSWORD>';
    GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' \
    IDENTIFIED BY '<PASSWORD>';
    

  4. 退出数据库。

    1
    exit
    

OpenStack Rocky版本需添加Placement数据库,Stein版本已在单独的Placement组件添加,请忽略。

CREATE DATABASE placement;
GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'localhost' IDENTIFIED BY '<PASSWORD>'; 
GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'%' IDENTIFIED BY '<PASSWORD>';

创建角色和用户

在控制节点执行以下操作。

  1. 使用admin用户登录OpenStack 命令行。

    1
    source /etc/keystone/admin-openrc
    

  2. 创建nova用户。

    1
    openstack user create --domain default --password-prompt nova
    

  3. 为nova用户创建密码。
  4. 将admin角色添加到nova用户。

    1
    openstack role add --project service --user nova admin
    

  5. 创建nova实体。

    1
    openstack service create --name nova --description "OpenStack Compute" compute
    

  6. 创建compute API服务端点。

    1
    2
    3
    openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1
    openstack endpoint create --region RegionOne compute internal http://controller:8774/v2.1
    openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1
    

OpenStack Rocky版本需添加placement用户,Stein版本已在单独的Placement组件添加,请忽略。

  1. 创建用户placement并设置密码。
    openstack user create --domain default --password-prompt placement
  2. 添加角色。
    openstack role add --project service --user placement admin 
  3. 创建Placement API用户和服务端点。
    openstack service create --name placement --description "Placement API" placement
    openstack endpoint create --region RegionOne placement public http://controller:8778 
    openstack endpoint create --region RegionOne placement internal http://controller:8778 
    openstack endpoint create --region RegionOne placement admin http://controller:8778

安装和配置Nova(控制节点)

在控制节点执行以下操作。

  1. 安装组件。

    1
    yum -y install openstack-nova-api openstack-nova-conductor openstack-nova-novncproxy openstack-nova-scheduler
    

    OpenStack Rocky版本需在这里安装placement,Stein版本已在单独的placement组件安装,请忽略。

    yum -y install openstack-nova-placement-api

  2. 配置Nova, 编辑“/etc/nova/nova.conf”文件。

    1. 启用计算和元数据API,配置RabbitMQ消息队列访问以及启用网络服务的支持。
      1
      2
      3
      4
      5
      6
      7
      [DEFAULT]
      enabled_apis = osapi_compute,metadata
      transport_url = rabbit://openstack:<PASSWORD>@controller
      my_ip = 172.168.201.11
      use_neutron = true
      firewall_driver = nova.virt.firewall.NoopFirewallDriver
      allow_resize_to_same_host = true
      

      my_ip为控制节点的管理IP,<PASSWORD>为rabbitmq服务为用户openstack设置的密码。

    2. 配置数据库访问。
      1
      2
      3
      4
      [api_database]
      connection = mysql+pymysql://nova:<PASSWORD>@controller/nova_api
      [database]
      connection = mysql+pymysql://nova:<PASSWORD>@controller/nova
      
    3. 配置身份服务访问。
       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      [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 = <PASSWORD>
      
    4. 配置“/etc/nova/nova.conf”的[neutron]部分,启用元数据代理并配置密码。
       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
      [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 = <PASSWORD>
      service_metadata_proxy = true
      metadata_proxy_shared_secret = <PASSWORD>
      
    5. 配置VNC代理以使用控制器节点的管理接口IP地址。
      1
      2
      3
      4
      5
      6
      7
      [vnc]
      enabled = true
      server_listen = $my_ip
      server_proxyclient_address = $my_ip
      novncproxy_host=0.0.0.0
      novncproxy_port=6080
      novncproxy_base_url=http://172.168.201.11:6080/vnc_auto.html
      

      注意将172.168.201.11改成相应的控制节点管理IP。

    6. 配置Image服务API的位置。
      1
      2
      [glance]
      api_servers = http://controller:9292
      
    7. 配置锁定路径。
      1
      2
      [oslo_concurrency]
      lock_path = /var/lib/nova/tmp
      
    8. 配置对Placement服务的访问。
      1
      2
      3
      4
      5
      6
      7
      8
      9
      [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 = <PASSWORD>
      

      OpenStack Rocky版本,在[placement_database]部分中,配置数据库访问,<PASSWPRD>修改为为数据库设置的密码,Stein版本请忽略。

      1. 编辑“/etc/nova/nova.conf”文件。
        [placement_database]
        connection = mysql+pymysql://placement:<PASSWORD>@controller/placement
      2. 修改配置文件“/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>

      3. 重启HTTP服务。
        systemctl restart httpd
    9. 配置元数据代理。
      1. 编辑“/etc/neutron/metadata_agent.ini”,新增如下配置:
        1
        2
        3
        [DEFAULT]
        nova_metadata_host = controller
        metadata_proxy_shared_secret = <PASSWORD>
        
      2. 填充nova-api数据库。
        1
        2
        3
        4
        su -s /bin/sh -c "nova-manage api_db sync" nova
        su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
        su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova
        su -s /bin/sh -c "nova-manage db sync" nova
        
    10. 验证cell0和cell1是否正确注册。
      1
      su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova
      

    11. 启动compute服务并设置为系统引导时启动。
      1
      2
      3
      4
      systemctl enable openstack-nova-api.service openstack-nova-scheduler.service \
      openstack-nova-conductor.service openstack-nova-novncproxy.service
      systemctl start openstack-nova-api.service openstack-nova-scheduler.service \
      openstack-nova-conductor.service openstack-nova-novncproxy.service
      

安装和配置Nova(计算节点)

在计算节点执行以下操作。

  1. 安装组件。

    1
    yum -y install openstack-nova-compute
    

  2. 编辑文件“/etc/nova/nova.conf”。

    1. 启用计算和元数据API。
      1
      2
      3
      4
      5
      6
      [DEFAULT]
      enabled_apis = osapi_compute,metadata
      transport_url = rabbit://openstack:<PASSWORD>@controller
      my_ip = 172.168.201.12
      use_neutron = true
      firewall_driver = nova.virt.firewall.NoopFirewallDriver
      

      此处的my_ip 设置为 计算节点的管理IP。

    2. 配置身份服务访问。
       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      [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 = <PASSWORD>
      
    3. 配置“/etc/nova/nova.conf”的[neutron]部分,在 [neutron]部分,添加如下信息。
       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      [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 = <PASSWORD>
      
    4. 启用并配置远程控制台访问。
      1
      2
      3
      4
      5
      6
      [vnc]
      enabled = true
      server_listen = 0.0.0.0
      server_proxyclient_address = $my_ip
      novncproxy_base_url = http://controller:6080/vnc_auto.html
      vncserver_proxyclient_address = $my_ip
      
    5. 配置Image服务API的位置。
      1
      2
      [glance]
      api_servers = http://controller:9292
      
    6. 配置锁定路径。
      1
      2
      [oslo_concurrency]
      lock_path = /var/lib/nova/tmp
      
    7. 配置Placement API。
      1
      2
      3
      4
      5
      6
      7
      8
      9
      [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 = <PASSWORD>
      
    8. 在[libvirt]模块添加如下信息。
      1
      virt_type = kvm
      

      上述配置文件nova.conf默认创建的虚拟机pci为6,若要修改虚拟机的pci数量,可在计算节点修改配置文件nova.conf,更改num_pcie_ports参数,最多支持设置15个。

      1
      vim /etc/nova/nova.conf
      

      打开注释并修改以下参数:

      1
      num_pcie_ports=15
      

      重启虚拟机后进入虚拟机执行lspci可查看

  3. 启动Compute服务及其依赖项,并将它们配置为在系统引导时自动启动。

    1
    2
    systemctl enable libvirtd.service openstack-nova-compute.service
    systemctl start libvirtd.service openstack-nova-compute.service
    

将计算节点添加到单元数据库

在控制节点执行以下操作。

  1. 使用admin用户登录OpenStack命令行。

    1
    source /etc/keystone/admin-openrc
    

  2. 查看数据库的主机。

    1
    openstack compute service list --service nova-compute
    

  3. 发现主机。

    1
    su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova
    

    注意添加新计算节点时,需要在控制器节点执行以下命令,以注册这些新计算节点。

    1
    nova-manage cell_v2 discover_hosts
    

    或者,在以下位置设置适当的间隔 ,让控制节点周期性发现计算节点。

    1
    vim /etc/nova/nova.conf
    
    1
    2
    [scheduler]
    discover_hosts_in_cells_interval = 300
    

验证Nova

在控制节点执行以下操作。

  1. 使用admin用户登录OpenStack 命令行。

    1
    source /etc/keystone/admin-openrc
    

  2. 列出服务组件。

    1
    openstack compute service list
    

  3. 列出Identity服务中的API端点以验证与Identity服务的连接。

    1
    openstack catalog list
    

  4. 列出Glance服务中的Image。

    1
    openstack image list
    

  5. 检查单元格和放置API是否正常运行以及其他必要的先决条件是否到位。

    1
    nova-status upgrade check
    

Nova常用命令

命令行

功能描述

openstack flavor create <flavor-name> --vcpus 4 --ram 8192 --disk 20

创建指定规格的flavor

openstack server create --flavor m1.nano --image cirros \

--nic net-id=provider --security-group default \

--key-name mykey provider-vm

创建虚拟机实例

openstack server start provider-vm

启动实例

openstack server list

查看所有实例

openstack server stop vm1

关闭实例

openstack server delete vm1

删除所选的实例

分享:

    相关文档

    相关产品

close