Openstack is a free and open-source private cloud software through which we can manage compute, network and storage resources of our data center with an ease using a single dashboard and via openstack cli commands. In this article we will demonstrate on how to install Openstack on a CentOS 8 system with packstack. Packstack is a command line utility which deploy different components of openstack using puppet modules.
Openstack deployment with packstack is generally used for POC (proof of concept) purpose, so it is not recommended to use packstack for production deployment. Use TripleO method to deploy openstack in production environment.
Minimum System requirements for OpenStack
- Minimal CentOS 8
- Dual core Processor
- 8 GB RAM
- 40 GB free disk space
- Stable Internet Connection
- At least one nic card
My Lab setup details:
- Hostname – openstack.example.com
- IP – 192.168.1.8
- Flat Network – 192.168.1.0/24
Let’s deep dive into the openstack installation steps,
Step 1) Set the hostname and update /etc/hosts file
Open the terminal and set the hostname using the following hostnamectl command,
[root@localhost ~]# hostnamectl set-hostname "openstack.example.com" [root@localhost ~]# exec bash
Run below echo command to append hostname entry in /etc/hosts file.
[root@openstack ~]# echo -e "192.168.1.8\topenstack.example.com" >> /etc/hosts
Step 2) Disable Network Manager and Configure Network using network-scripts
Network-Manager is the default tool in CentOS 8 to manager networks but for Openstack we must disable it because openstack networking will not work properly with network-manager. In place of network manager, we must install native network-scripts.
To disable network-manager run the following commands,
[root@openstack ~]# systemctl disable NetworkManager [root@openstack ~]# systemctl stop NetworkManager
Run following dnf command to install native network-scripts
[root@openstack ~]# dnf install network-scripts -y
Once the network-scripts package is installed then we can manage networking (ifcfg-* files) using native network.service
Now let’s configure IP address in ifcfg-enp0s3 file and start network service
root@openstack ~]# vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
Save and exit the file and then start network service using following command,
[root@openstack ~]# systemctl start network [root@openstack ~]# systemctl enable network
Now verify whether IP is assigned to NIC (enp0s3) using ip command,
[root@openstack ~]# ip a s enp0s3
Step 3) Enable OpenStack repositories and install packstack utility
At time of writing this article, ussuri openstack was available, so run the following command to configure its repositories
[root@openstack ~]# dnf config-manager --set-enabled powertools or [root@openstack ~]# dnf config-manager --enable PowerTools [root@openstack ~]# dnf install -y centos-release-openstack-ussuri
Now installed all the available updates and reboot your system,
[root@openstack ~]# dnf update -y [root@openstack ~]# reboot
Once the system is available after the reboot, execute following dnf command to install packstack utility
[root@openstack ~]# dnf install -y openstack-packstack
Step 4) Generate answer file and install openstack using packstack
Use packstack command to generate the answer file,
[root@openstack ~]# packstack --gen-answer-file /root/openstack-answer.txt
Once the answer file is generated, edit the following parameters using vi editor,
[root@openstack ~]# vi /root/openstack-answer.txt .............. CONFIG_HEAT_INSTALL=y CONFIG_PROVISION_DEMO=n CONFIG_KEYSTONE_ADMIN_PW=P@ssw0rd CONFIG_NEUTRON_OVN_BRIDGE_IFACES=br-ex:enp0s3 ..............
Save and exit the file.
Replace the interface name (enp0s3) as per your setup.
Note: Default Tenant network type drive is set as “geneve” and default neutron type driver is set as “geneve and flat”. If wish to change these default parameters, then update following lines in answer file. In this demonstration i am not going to update these parameters.
CONFIG_NEUTRON_ML2_TYPE_DRIVERS=geneve,flat CONFIG_NEUTRON_ML2_TENANT_NETWORK_TYPES=geneve
Run the following command to initiate the openstack deployment using answer file.
[root@openstack ~]# packstack --answer-file /root/openstack-answer.txt
Deployment will take around 20 to 30 minutes depending on your system’s hardware and internet speed. Once it is installed successfully, we will get the following:
Now verify whether IP from enp03 interface is assigned to bridge br-ex and also confirm whether interface enp0s3 is added as a port in ovs-bridge.
Run the following commands:
[root@openstack ~]# ip a s enp0s3 [root@openstack ~]# ip a s br-ex [root@openstack ~]# ovs-vsctl show
Perfect, above output confirms that installation was successful, and networking is also configured as per the answer file.
Step 5) Access Horizon Dashboard
Now try to login to Horizon dashboard. URL is already specified in the above output, in my case url is http://192.168.1.8/dashboard , Use the user name as admin and password that we specify in answer file.
We also refer the file “keystonerc_admin” for credentials
Now, let’s test this openstack deployment by launching an instance.
Step 6) Test and verify OpenStack installation by launching an instance
Before launching an instance in openstack, first we must create networks and router and glance image. So, let’s first create external network in admin tenant using following neutron commands,
[root@openstack ~]# source keystonerc_admin [root@openstack ~(keystone_admin)]# neutron net-create external_network --provider:network_type flat --provider:physical_network extnet --router:external
Now add a subnet of your flat network to external network by running following neutron command.
[root@openstack ~(keystone_admin)]# neutron subnet-create --name public_subnet --enable_dhcp=True --allocation-pool=start=192.168.1.210,end=192.168.1.230 --gateway=192.168.1.1 external_network 192.168.1.0/24
Create a router by executing the following neutron command and set its gateway using external network
[root@openstack ~(keystone_admin)]# neutron router-create dev-router [root@openstack ~(keystone_admin)]# neutron router-gateway-set dev-router external_network
Create private network and attach a subnet to it. Run the following neutron command,
[root@openstack ~(keystone_admin)]# neutron net-create pvt_net [root@openstack ~(keystone_admin)]# neutron subnet-create --name pvt_subnet pvt_net 10.20.1.0/24
Add pvt_net interface to router “dev_router” using beneath neutron command,
[root@openstack ~(keystone_admin)]# neutron router-interface-add dev-router pvt_subnet
Now Download Cirros image and then upload it to glance
[root@openstack ~(keystone_admin)]# wget http://download.cirros-cloud.net/0.5.1/cirros-0.5.1-x86_64-disk.img [root@openstack ~(keystone_admin)]# openstack image create --disk-format qcow2 --container-format bare --public --file cirros-0.5.1-x86_64-disk.img cirros
Now head back to horizon dashboard and verify the network topology
Perfect, above confirms that private and external network have been setup correctly along with the router.
One final step before creating a vm, update the default security group, add icmp and ssh ingress rules, click on “Security Groups” under the network Tab, Click on Manage Rules and then click on “Add rule”
Similarly add rule for ssh
Click on Add
Now all the requirements for launching an openstack instance are fullfilled. Click on Compute Tab and then Choose Instances option and click on “Launch Instance”
Once VM is launched successfully then we will get something like below,
Now Associate floating IP to instance (demo_vm), Under the “Actions” Tab, Choose “Associate Floating IP”
Now Choose IP or Click on + sign to get floating IP from external network and then associate it
Once IP is associated to the VM then floating IP will be displayed for under ‘IP Address‘ option, example is shown below
Now try to access this demo_vm using the floating ip, use cirros as a user and ‘gocubsgo’ as password
Great, above output confirms that we can access our instance via floating ip. This concludes the article; I hope this tutorial helps to deploy openstack on CentOS 8 system. Please don’t hesitate to share your feedback and comments.
Also Read: How to Create an Instance in OpenStack via Command Line
when issuing command “dnf config-manager –enable PowerTools” it throws an error “No such command: config-manager. Please use /usr/bin/dnf –help
”
[root@localhost ~]# dnf config-manager –enable PowerTools
No such command: config-manager. Please use /usr/bin/dnf –help
It could be a DNF plugin command, try: “dnf install ‘dnf-command(config-manager)'”
[root@localhost ~]#
Hi Marian,
Run the following dnf command to fix the above said issue:
$ sudo dnf install ‘dnf-command(config-manager)’
try with powertools instead of “PowerTools”
Hello
[root@openstack network-scripts]# dnf config-manager –enable PowerTools
Error: No matching repo to modify: PowerTools.
[root@openstack network-scripts]# dnf config-manager –enable powertools
[root@openstack network-scripts]# dnf install -y centos-release-openstack-victoria
CentOS Linux 8 – PowerTools 5.8 MB/s | 2.0 MB 00:00
Dependencies resolved.
In case you have latest and updated CentOS stream then use below command
# dnf config-manager –set-enabled powertools
Hi Sir,
I get an issue below :
ERROR : Failed to run remote script, stdout: skipping creation of hiera.yaml symlink
stderr: Warning: Permanently added ‘10.10.69.100’ (ECDSA) to the list of known hosts.
+ trap t ERR
+ [[ -f /etc/hiera.yaml ]]
+ echo ‘skipping creation of hiera.yaml symlink’
++ puppet config print hiera_config
+ sed -i ‘s;:datadir:.*;:datadir: /var/tmp/packstack/d7eabbcf57df47b6b283fc89caeb47be/hieradata;g’ /etc/puppet/hiera.yaml
sed: can’t read /etc/puppet/hiera.yaml: No such file or directory
++ t
++ exit 2
How to solve it?
Hi Sir,
I was able to access this demo_vm using cirros as user with floating IP.
But from demo_vm, the following fails.
$ ping 8.8.8.8
How to solve it?
Add the DNS Sever IP while creating the external network subnet.
Thank you
I added a DNS server to the external network subnet, but it doesn’t work.
Other conditions are as follows.
Ping from demo_vm
to: FloatingIP -> Success
to: GestOS IP -> Success
(Use VirtualBox and bridge connection)
to: Host Default GW IP -> Failure
How to solve it?
I’m sorry.
In another VirtualBox environment, ping 8.8.8.8 was successful.
@Manusia:
I had the same error and now i found the issue
There is a problem with epel and the hiera package (hiera-3.6.0-2.el8)
The centos-openstack-ussuri repo provides hiera-3.6.0-1.el8
A look at the filelist in rpm shows that hiera-3.6.0-2.el8 didn’t include:
/etc/puppet
/etc/puppet/hiera.yaml
So remove hiera, disable epel and reinstall openstack-packstack:
dnf remove hiera -y
dnf config-manager –disable epel
dnf install -y openstack-packstack
Hi,
when i uninstall hiera, i cannot reinstall packtack. I’m on the openstack-victoria. Can you help me with this problem?
First of all, this is a great reference document for Openstack installation on CentOS. I followed every step in the document and was successful. However, ran into some issue during last few steps.
Can you please help me with some trigger or suggestion to solve this issue? Thanks a lot in advance.
Copying Puppet modules and manifests [ DONE ]
Applying 192.168.0.3_controller.pp
192.168.0.3_controller.pp: [ ERROR ]
Applying Puppet manifests [ ERROR ]
ERROR : Error appeared during Puppet run: 192.168.0.3_controller.pp
Error: Facter: error while resolving custom fact “rabbitmq_nodename”: undefined method `[]’ for nil:NilClass
You will find full trace in log /var/tmp/packstack/20200723-225316-7yvkznxa/manifests/192.168.0.3_controller.pp.log
Please check log file /var/tmp/packstack/20200723-225316-7yvkznxa/openstack-setup.log for more information
Additional information:
* Parameter CONFIG_NEUTRON_L2_AGENT: You have chosen OVN Neutron backend. Note that this backend does not support the VPNaaS or FWaaS services. Geneve will be used as the encapsulation method for tenant networks
* Time synchronization installation was skipped. Please note that unsynchronized time on server instances might be problem for some OpenStack components.
* File /root/keystonerc_admin has been created on OpenStack client host 192.168.0.3. To use the command line tools you need to source the file.
* To access the OpenStack Dashboard browse to http://192.168.0.3/dashboard .
Please, find your login credentials stored in the keystonerc_admin in your home directory.
[bharat@openstack ~]$
Hi,
Please check controller.pp.log and openstack-setup.log, You might get the clue there. I would suggest give a try one more time.
Hi All.
Thanks a lot for helping me for previous query. Earlier problem fixed, now I am able to create VM instance successfully, but I can’t connect from Virtual box machine (CentOS machine) and outside network.
Furthermore, there are no route 172.24.1.0/24 on my Virtual box machine (CentOS machine).
Is Virtual box IP address and External Network should be on same subnet? I tried that and that still not worked.
It seems Neutron not properly configured.
Please suggest me how to fix this (Using same commands provided in the document).
Virtual box IP address: 192.168.0.104 (Subnet = 192.168.0.0/24)
Private Network: 10.20.1.0/24
External Network: 172.24.1.0/24
================
CLI Commands:
================
source keystonerc_admin
neutron net-create external_network –provider:network_type flat –provider:physical_network extnet –router:external
neutron subnet-create –name public_subnet –enable_dhcp=True –allocation-pool=start=172.24.1.210,end=172.24.1.230 –gateway=172.24.1.1 external_network 172.24.1.0/24
neutron router-create dev-router
neutron router-gateway-set dev-router external_network
neutron net-create pvt_net
neutron subnet-create –name pvt_subnet pvt_net 10.20.1.0/24
neutron router-interface-add dev-router pvt_subnet
[root@openstack ~(keystone_admin)]# ifconfig -a
br-ex: flags=4163 mtu 1500
inet 192.168.0.104 netmask 255.255.255.0 broadcast 192.168.0.255
inet6 fe80::a00:27ff:fe8a:a9cd prefixlen 64 scopeid 0x20
ether 08:00:27:8a:a9:cd txqueuelen 1000 (Ethernet)
RX packets 33024 bytes 27440713 (26.1 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 29794 bytes 17763062 (16.9 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
br-int: flags=4098 mtu 1500
ether 86:09:c0:60:00:4e txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
docker0: flags=4099 mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:49:2d:fa:d2 txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
enp0s3: flags=4163 mtu 1500
inet6 fe80::a00:27ff:fe8a:a9cd prefixlen 64 scopeid 0x20
ether 08:00:27:8a:a9:cd txqueuelen 1000 (Ethernet)
RX packets 38913 bytes 28292425 (26.9 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 38573 bytes 21086877 (20.1 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73 mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 1000 (Local Loopback)
RX packets 2708229 bytes 2168061258 (2.0 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2708229 bytes 2168061258 (2.0 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ovs-system: flags=4098 mtu 1500
ether 22:df:63:8b:31:35 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@openstack ~(keystone_admin)]# ip route show
default via 192.168.0.1 dev br-ex
169.254.0.0/16 dev enp0s3 scope link metric 1002
169.254.0.0/16 dev br-ex scope link metric 1004
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown
192.168.0.0/24 dev br-ex proto kernel scope link src 192.168.0.104
[root@openstack ~(keystone_admin)]#
Thanks & Regards
Hi Bhartendu,
How did you resolve Error: Facter: error while resolving custom fact “rabbitmq_nodename”: undefined method `[]’ for nil:NilClass this error?
I have a running instance of Openstack after following your instructions. I do have a problem, though: I created an instance and associated it with a floating IP address, but when I try to ping that address I get “Host unreachable” failures.
What would cause this problem, and how do I fix it? Is it some openstack configuration problem?
Thanks am able to install sucessfully but whenever i click on anything through GUI or ISSUE ANY OPENSTACK CLI COMMANDS am getting error “Unable to retreieve” in GUI and HTTP 500 error as below
[root@Openstack-ION nova(keystone_admin)]# nova hypervisor-list
ERROR (ClientException): Unknown Error (HTTP 500
If i restart service restart httpd, it will go away , then comes back one i start issuing commands. Anyway to solve this ? Struck for 2 days on same issue, i reinstalled the OS two times already. same issue i am struck at.