Installing OpenStack on a Single Node via Packstack

Getting Started with Napatech Link-Virtualization™ Software

Platform
Napatech SmartNIC
Content Type
Getting Started
Getting Started Guide
Capture Software Version
Link-Virtualization™ Software 4.5

The Packstack scripts deploy an OpenStack environment on one node.

Before you begin

  • Update the SmartNIC with an appropriate FPGA image. See Updating the FPGA image.
  • Start with a clean installation of a Linux system.
    Note: Choose Server on the Base Environment list for Software Selection at the Installation Summary screen.
    Note: Packstack will download and install all the additional dependencies.
  • Place the provided Napatech package on the director node.
Note: According to the Packstack official documentation, there is no process to uninstall OpenStack in general. You must reinstall the base OS to uninstall and reinstall OpenStack.

About this task

The installation process includes the following steps:
  • Install required packages on the director node.
  • Generate an SSH key pair and copy the generated key to the target server.
  • Edit configuration files.
  • Run the deployment tool.

Procedure

  1. Install required packages on the director node.
    dnf install ansible-core.x86_64
    ansible-galaxy collection install ansible.posix
  2. Generate an SSH key pair with no passphrase on the director node.
    ssh-keygen -f /root/.ssh/id_rsa
    An output example:
    Generating public/private rsa key pair.
    Enter passphrase (empty for no passphrase):
    Create a key with no passphrase.
    Enter same passphrase again:
    Your identification has been saved in /root/.ssh/id_rsa.
    Your public key has been saved in /root/.ssh/id_rsa.pub.
    The key fingerprint is:
    ...
    The key's randomart image is:
    ...
    Copy the generated key to the target server.
    ssh-copy-id -i /root/.ssh/id_rsa.pub root@<server_IP>
    For example:
    ssh-copy-id -i /root/.ssh/id_rsa.pub root@10.20.22.24
  3. Unpack the Packstack package.
    cd <package_root_directory>/openstack/
    tar zxvf packstack-<version>.main.tar.gz
    where:
    • package_root_directory is the directory to the unpacked Napatech package.
    • version is the Napatech Packstack package version identifier.
  4. Copy the RPM packages for Napatech OVS/DPDK to the correct directory.
    For example:
    cd <package_root_directory>/openstack/packstack-release-4.5/release-train/redhat8.5/
    cd singlenode/roles/prepare/files/ntoss/rpms/
    
    cp <package_root_directory>/ovs-hwaccel/ovs-hwaccel-<version>.src.rpm .
    cp <package_root_directory>/dpdk-hwaccel/dpdk-nt-<version>.src.rpm .
    where:
    • package_root_directory is the directory to the unpacked Napatech package.
    • version is the version identifier of the corresponding package.
  5. Edit the hosts file.
    cd <package_root_directory>/openstack/packstack-release-4.5/release-train/redhat8.5/
    cd singlenode
    vim hosts
    where:
    • package_root_directory is the directory to the unpacked Napatech package.
    • version is the version identifier of the corresponding package.
    Update the file with the IP address of the target server. For example:
    [singlenode]
    10.20.22.24
  6. Edit the variables.yaml file.
    vim variables.yaml
  7. Update parameters in the variables.yaml file as follows.
    • Check the directories to be created for the provided RPM packages on the target server. Change the directories if necessary. By default they are configured as follows.
      #Paths to the packstack dir on the target server
      PS_DIR: /root/packstack_deploy/
       
      #Path to the rpms on the target server
      RPMS_PATH: "{{ PS_DIR }}/ntoss/rpms"
    • Configure the number of virtual functions and the number of queues for each virtual function. For example:
      VF: 3
      
      #3b:00.4 - 1 queue, 3b:00.5 - 2 queue, 3b:00.6 - 1 queue
      PQ: “4:1,5:2,6:1”
      The number of queues are configured for 3 virtual functions in this example: 1 queue for the first virtual function, 2 queues for the second virtual function and 1 for the third virtual function. It is reconfigurable after deployment. For more information, see Configuring Receive-Side Scaling (RSS) in OpenStack.
    • The VLAN network type and the VLAN range are configured as follows. Correct the range to match your target network configuration.
      # list of network-type driver
      OS_NEUTRON_ML2_TYPE_DRIVERS: vlan,flat
      
      # VLAN range for tenant network
      OS_NEUTRON_ML2_VLAN_RANGES: public:40:50
    • It is configurable either to download source files of OpenStack components from OpenStack Git Hub or to use archived files on the director. By default, it is set to download the latest source files from OpenStack Git Hub.
      CLONE_COMPONENTS: True
      If archived OpenStack components on the director must be used, set the CLONE_COMPONENTSparameter to False as follows:
      CLONE_COMPONENTS: False
      Place the OpenStack components in the correct directory. For example:
      <package_root_directory>/release-train/redhat8.5/singlenode/roles/prepare/files/OpenStack_components/
      The OpenStack components must contain the following directory tree.
      openstack_components/
      ├── neutron
      ├── neutron-lib
      ├── nova
      └── os-vif
  8. Start deployment.
    cd <package_root_directory>/openstack/packstack-release-4.5/release-train/redhat8.5/
    cd singlenode/
    
    ansible-playbook --verbose -i ./hosts main.yaml \
    --extra-vars '{"lic_username":"<username>","lic_pass":"<password>"}'
    where: For example:
    ansible-playbook --verbose -i ./hosts main.yaml \
    --extra-vars '{"lic_username":"napatech","lic_pass":"test12345"}'
    It takes about an hour to complete the OpenStack deployment. An output example after the installation is complete:
    ...
    ...
    PLAY RECAP *********************************************************************
    10.20.22.24    : ok=92   changed=80   unreachable=0    failed=0    skipped=3    rescued=0    ignored=0
    Note: If deployment fails, it is possible to continue deployment from the failed task. This is an example output when deployment failed.
    ...
    ...
    TASK [prepare_all : Copy rpms folder to hosts] *********************************
    An exception occurred during task execution. To see the full traceback, use -vvv.
    ...
    After troubleshooting, run the following command to start deployment from the Copy rpms folder to hosts task. For example:
    ansible-playbook --verbose -i ./hosts main.yaml \
    --extra-vars '{"lic_username":"napatech","lic_pass":"test12345"}' \
    --start-at-task="Copy rpms folder to hosts"