Table of Contents
Prepration phase
Minimum machine requirements
For this experiment, we are using an ubuntu 20.04 server Virtual machine, you can also use these operating systems for your deployment.
Minimum machine requirements are following:
- 2 network interfaces
- 8GB main memory
- 40GB disk space
In my virtual machine, I have only one network interface, I have created an extra network interface. Follow create new interface guide to check out how to create a new interface.
Installing Python
Update ubuntu to get information on the newest versions of packages and their dependencies.
ubuntu@ubuntu-exp:~$ sudo apt update
Now, Installing python build and dependencies.
ubuntu@ubuntu-exp:~$ sudo apt install python3-dev libffi-dev gcc libssl-dev
Creating python virtual environment
To avoid conflicts with the system site-packages, we will use a virtual environment to install Kolla Ansible and its dependencies.
Use the following command to install the virtual environment package.
ubuntu@ubuntu-exp:~$ sudo apt install python3-venv
For creating the virtual environment I am using my my home folder and use the following command to create virtual environment
ubuntu@ubuntu-exp:~$ pwd /home/ubuntu ubuntu@ubuntu-exp:~$ ubuntu@ubuntu-exp:~$ python3 -m venv wallaby ubuntu@ubuntu-exp:~$ ls wallaby ubuntu@ubuntu-exp:~$
Now switch to the virtual environment. By using below-mentioned command
ubuntu@ubuntu-exp:~$ source wallaby/bin/ Activate.ps1 activate activate.csh activate.fish easy_install easy_install-3.8 pip pip3 pip3.8 python python3 ubuntu@ubuntu-exp:~$ source wallaby/bin/activate (wallaby) ubuntu@ubuntu-exp:~$
Now we will run all the commands in our virtual environment. In my case, you can see (wallaby) at the start of the command line, which means I am working in my virtual environment.
Installing important package for the deployment
Install the latest version of pip by using the following command.
(wallaby) ubuntu@ubuntu-exp:~$ pip install -U pip
Install Ansible. The important thing to note here Kolla Ansible version should be from Ansible 2.9
to 2.10
. Therefore, to make sure to use the following command.
(wallaby) ubuntu@ubuntu-exp:~$ pip install ansible==2.9.27 (wallaby) ubuntu@ubuntu-exp:~$ (wallaby) ubuntu@ubuntu-exp:~$ (wallaby) ubuntu@ubuntu-exp:~$ pip list |grep ansible ansible 2.9.27 ansible-base 2.10.12 (wallaby) ubuntu@ubuntu-exp:~$
Install kolla-ansible and its dependencies.
(wallaby) ubuntu@ubuntu-exp:~$ pip install kolla-ansible
/etc/kolla
Create the /etc/kolla
directory for the configuration of kolla and Openstack projects (we will see in later section and in other blogs). Also change ownership of the kolla directory. In my case my user name is ubuntu.
(wallaby) ubuntu@ubuntu-exp:~$ sudo mkdir -p /etc/kolla (wallaby) ubuntu@ubuntu-exp:~$ (wallaby) ubuntu@ubuntu-exp:~$ (wallaby) ubuntu@ubuntu-exp:~$ sudo chown $USER:$USER /etc/kolla (wallaby) ubuntu@ubuntu-exp:~$ (wallaby) ubuntu@ubuntu-exp:~$ ll /etc/|grep kolla drwxr-xr-x 2 ubuntu ubuntu 4096 Aug 3 14:34 kolla/ (wallaby) ubuntu@ubuntu-exp:~$
The most important files are globals.yml
and passwords.yml
for our deployment. Therefore, copying these two files to /etc/kolla
directory.
(wallaby) ubuntu@ubuntu-exp:~$ cp -r wallaby/share/kolla-ansible/etc_examples/kolla/* /etc/kolla (wallaby) ubuntu@ubuntu-exp:~$ (wallaby) ubuntu@ubuntu-exp:~$ ls /etc/kolla/ globals.yml passwords.yml (wallaby) ubuntu@ubuntu-exp:~$
Also, copy the inventory file to the /etc/kolla folder. Inventory files are basically which are used to tell the kolla-ansible which are our hosts and type of installation we need on these hosts.
(wallaby) ubuntu@ubuntu-exp:~$ cp wallaby/share/kolla-ansible/ansible/inventory/* /etc/kolla/ (wallaby) ubuntu@ubuntu-exp:~$ (wallaby) ubuntu@ubuntu-exp:~$ ls /etc/kolla/ all-in-one globals.yml multinode passwords.yml (wallaby) ubuntu@ubuntu-exp:~$
When we are deploying OpenStack more than one host then we use multinode file. In our case we will use all-in-one file.
Ansible configuration
Tune the ansible configuration for better results. Use the following commands to create an ansible directory and ansible.cfg file.
(wallaby) ubuntu@ubuntu-exp:~$ sudo mkdir /etc/ansible (wallaby) ubuntu@ubuntu-exp:~$ sudo vi /etc/ansible/ansible.cfg (wallaby) ubuntu@ubuntu-exp:~$
Your /etc/ansible/ansible.cfg should look like following
(wallaby) ubuntu@ubuntu-exp:~$ cat /etc/ansible/ansible.cfg [defaults] host_key_checking=False pipelining=True forks=100 (wallaby) ubuntu@ubuntu-exp:~$
Deployement Configuration
Inventory configuration
In the previous steps, we have copied configuration files in /etc/kolla/ directory. In this blog, we are deploying everything in one machine. Therefore we will use all-in-one inventory file. This is a very long file where you can add the right host for your OpenStack installation and specify host explicitly for the OpenStack project.
We are keeping it as it is because we are installing everything on one host and it is the same machine itself where I have installed everything till now.
(wallaby) ubuntu@ubuntu-exp:~$ cat /etc/kolla/all-in-one # These initial groups are the only groups required to be modified. The # additional groups are for more control of the environment. [control] localhost ansible_connection=local [network] localhost ansible_connection=local [compute] localhost ansible_connection=local [storage] localhost ansible_connection=local [monitoring] localhost ansible_connection=local [deployment] localhost ansible_connection=local
Configuring globals.yml
global.yml file is the most important file. In this file, we mention that which OpenStack projects we want to install. For kolla docker image what base OS do we want. globals.yml file describes our whole deployment. In coming blogs, we will look more closely at this configuration file.
For now, we want only those projects which are most important for OpenStack deployment. Under Neutron -Networking Option heading I changed the network interface according to my interface name.
ifconfig command output from my machine, showing all the network interfaces in my VM.
ubuntu@ubuntu-exp:~$ ifconfig ens3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1450 inet 10.0.1.62 netmask 255.0.0.0 broadcast 10.255.255.255 inet6 fe80::f816:3eff:fe6e:4661 prefixlen 64 scopeid 0x20<link> ether fa:16:3e:6e:46:61 txqueuelen 1000 (Ethernet) RX packets 37643 bytes 243102588 (243.1 MB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 30372 bytes 5130479 (5.1 MB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 536 bytes 55148 (55.1 KB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 536 bytes 55148 (55.1 KB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 vr-br: flags=195<UP,BROADCAST,RUNNING,NOARP> mtu 1500 inet6 fe80::384f:ecff:fea3:ad68 prefixlen 64 scopeid 0x20<link> ether 3a:4f:ec:a3:ad:68 txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 16 bytes 1120 (1.1 KB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 ubuntu@ubuntu-exp:~$
We are not using keepalive or haproxy. Therefore, we don’t need haproxy option and it is by default enabled. Also, we will change our kolla_internal_vip_address with your IP interface address. In my case, I have added ens3 IP address.
enable_haproxy: "no" kolla_internal_vip_address: "10.0.1.62"
network_interface: would be your interface where you have an IP address, which you are commonly using.
neutron_external_interface: Which we have created a virtual interface in the beginning.
network_interface: "ens3" neutron_external_interface: "vr-br"
To enable the OpenStack project installation you have to enable the project in globals.yml under the OpenStack option heading.
For example, if you want to enable cinder service. You have to just enable by uncommenting and changing “no” to “yes” in front of the service like mentioned below.
enable_cinder: "yes"
Now generate the password for the services. These generated passwords will be stored in /etc/kolla/passwords.yml file.
(wallaby) ubuntu@ubuntu-exp:~$ kolla-genpwd
Deployment
When the configuration is done. Firstly, we need to install docker or other important packages.
(wallaby) ubuntu@ubuntu-exp:~$ kolla-ansible -i /etc/kolla/all-in-one bootstrap-servers
After running this command you will see ansible playbooks running, if everything is fine you will see below-mentioned output on your terminals at the end.
PLAY RECAP ***************************************************************************************** localhost : ok=42 changed=21 unreachable=0 failed=0 skipped=36 rescued=0 ignored=0 (wallaby) ubuntu@ubuntu-exp:~$
Do deployment checks. Similarly, like bootstrapping if everything is fine then there would be no error.
(wallaby) ubuntu@ubuntu-exp:~$ kolla-ansible -i /etc/kolla/all-in-one prechecks
Now, it is the time for deployment.
(wallaby) ubuntu@ubuntu-exp:~$ kolla-ansible -i /etc/kolla/all-in-one deploy
I have followed your guide but getting a Connection Timeout Error during the deploy step on RUNNING HANDLER [heat : Restart heat-api-cfn container]. There is no error in kolla/heat logs. Internet is also fine and accessing the URLs which are generating error during terminal access in installation process. Any help will be appreciated.
From your message, it seems like there is something wrong with heat-api-cfn container. There could be many reasons for the issue. For more insight, you can look at the container logs use “docker logs heat_api_cfn” command. Also, you can run kolla-ansible command with verbose mode (mariadb_recoverykolla-ansible -i /etc/kolla/multinode deploy -vvv).
If still these logs are not useful for correcting the issue, send me the logs.
I have followed your guide, but the following command:
` kolla-ansible -i /etc/kolla/all-in-one bootstrap-servers`
raise the following error:
`ERROR: Ansible version should be between 2.11 and 2.12. Current version is 2.10.17 which is not supported.`
However, it seems that there are no version “2.11 or 2.12” for ansible available!!!
I tried the following command:
`pip install ‘ansible=2.11’`
but no result gained:
`ERROR: No matching distribution found for ansible=2.11`
Hi,
When you are installing the Ansible version should be from Ansible 2.9 to 2.10. At the time when I wrote the article, using “pip install ‘ansible<3.0'” command was installing “ansible 2.9.27”.
Now mentioned command in the article install ansible and ansible-base, you have to uninstall both packages for that use the following command “pip uninstall ansible ansible-base” and then install ansible by using “pip install ansible==2.9.27“.
Also, you rightly mentioned that there is no version “2.11 or 2.12” for ansible.
Thanks