Undercloud is a single node OpenStack installation deployed either in a Virtual machine or in bare metal server. The objective of undercloud is to install, test, manage and update its overcloud servers (Controller, Compute & Storage nodes). In Red Hat terminology undercloud is known as “Director“. Undercloud basically contains all the images that is required to deployed Overcloud Controller, Computes, Swift and Storage.
Overcloud is the actual functional cloud for any organization where all the Virtual Machines are created on compute nodes and handle all the workloads. In other words we can say overcloud provides the openstack services like Nova, Keystone , Horizon, Neutron, cinder, Glance, Heat & Ceilometer Services.
In this article we will demonstrate how to install TripleO undercloud or Director on CentOS 7 VM.
Following are the minimum system requirements for undercloud:
- 16 GB RAM
- 1 Quad Core CPU
- 80 GB disk Space
- 2 Nics
- CentOS 7.x / RHEL 7.x
Below are my lab setup details:
- CentOS 7 VM (Minimal Installation) is hosted inside the KVM hypervisor.
- Two Interfaces are attached to VM (Provisioning & NAT)
- Provisioning Network: 192.168.126.0/24
- NAT Network: 192.168.122.0/24
- IP Address on eth0 is 192.168.122.90 and IP Address on eth1 is 192.168.126.1
To successfully install undercloud inside a virtual machine, you have to enabled Nested Virtualization in KVM hypervisor, if you not sure how to enable it, refer the below:
Let’s jump into the CentOS 7 VM and follow the below Steps:
Step:1) Set the Hostname and update /etc/hosts file
Run the hostnamectl command to set the hostname,
[root@localhost ~]# hostnamectl set-hostname "undercloud.example.com" [root@localhost ~]# exec bash [root@undercloud ~]#
Add the following entries using the beneath command:
[root@undercloud ~]# echo "192.168.126.1 undercloud.example.com" >> /etc/hosts
Update your system using below yum command and reboot once.
[root@undercloud ~]# yum update -y && reboot
Step:2) Create non-root user (stack)
Run the beneath commands one after the another to create stack user and assign sudo rights to it. We will install undercloud using stack user only.
[root@undercloud ~]# useradd stack [root@undercloud ~]# echo "enter_password_here" | passwd --stdin stack [root@undercloud ~]# echo "stack ALL=(root) NOPASSWD:ALL" | sudo tee -a /etc/sudoers.d/stack stack ALL=(root) NOPASSWD:ALL [root@undercloud ~]# chmod 0440 /etc/sudoers.d/stack [root@undercloud ~]# su - stack [stack@undercloud ~]$
Step:3) Enable required repositories for undercloud
Execute the below commands to enable and configured required repositories for undercloud installation.
[stack@undercloud ~]$ wget https://trunk.rdoproject.org/centos7/current/python2-tripleo-repos-0.0.1-0.20190328140951.a7bc8dc.el7.noarch.rpm [stack@undercloud ~]$ rpm -ivh python2-tripleo-repos-0.0.1-0.20190328140951.a7bc8dc.el7.noarch.rpm [stack@undercloud ~]$ sudo -E tripleo-repos -b rocky current [stack@undercloud ~]$ sudo yum -y install yum-plugin-priorities [stack@undercloud ~]$ sudo yum install epel-release -y
Note : We can check the latest version of python2-tripleo-repos from RDO repository
Step:4) Install TripleO CLI package using yum command
[stack@undercloud ~]$ sudo yum install python-tripleoclient -y
Step:5) Copy & edit “undercloud.conf” sample file that suits to your env
[stack@undercloud ~]$ cp /usr/share/instack-undercloud/undercloud.conf.sample ~/undercloud.conf
Now edit ‘undercloud.conf‘ that suits to your environment, In my case I am adding the following content under “Default” Section
[stack@undercloud ~]$ vi undercloud.conf [DEFAULT] local_ip = 192.168.126.1/24 undercloud_public_vip = 192.168.126.2 undercloud_admin_vip = 192.168.126.3 local_interface = eth1 masquerade_network = 192.168.126.0/24 dhcp_start = 192.168.126.100 dhcp_end = 192.168.126.150 network_cidr = 192.168.126.0/24 network_gateway = 192.168.126.1 inspection_iprange = 192.168.126.160,192.168.126.199 generate_service_certificate = true certificate_generation_ca = local ………………………………
Save and exit the file.
Step:6) Start undercloud installation using openstack command
Now start undercloud installation using below openstack command,
[stack@undercloud ~]$ openstack undercloud install
Once the installation is completed successfully, we will get the output something like below
Verify the OpenStack Service list
[stack@undercloud ~]$ source stackrc (undercloud) [stack@undercloud ~]$ openstack service list +----------------------------------+------------------+-------------------------+ | ID | Name | Type | +----------------------------------+------------------+-------------------------+ | 19f1261745004b31bc77dcb17a5ed4f5 | heat-cfn | cloudformation | | 1bdd5dfbc36f444ebe62580d71f1a7ec | heat | orchestration | | 2b39423f188b412d85bed43f112b35d7 | zaqar-websocket | messaging-websocket | | 46f64d65be874718a1b2c123f588371b | keystone | identity | | 605261da43d64395b72acc5309a22096 | mistral | workflowv2 | | 6f50fb704b224c1abc3c2a1a163eb73a | neutron | network | | 7110b7d7711a4aa1af6a3c13566be28f | zaqar | messaging | | 7e41468745724ecfa8ed339137e8b700 | placement | placement | | 853efa8a8acf403b827617725c3b7322 | ironic-inspector | baremetal-introspection | | a5522e5df77343b99a0e47812323a17b | swift | object-store | | b9bbb1a771704b57a0833d738bfb86e5 | glance | image | | d50fdfa25fb64c3e865c172754452ab1 | ironic | baremetal | | e2ea283690c742d3a98bd1eae6f9b830 | nova | compute | +----------------------------------+------------------+-------------------------+ (undercloud) [stack@undercloud ~]$
This confirms that undercloud has been installed successfully. In the next article we will demonstrate how to import overcloud images in under cloud and how to create inventory file for overcloud servers and then we will see how we can deploy overcloud servers via undercloud.
Read More on: How to deploy TripleO Overcloud (Controller , Compute) on CentOS 7 VMs
In case this article helps you to understand how to install undercloud on CentOS 7 VM, please do share your feedback and comments.
For Step Number 3 :
Change name and baseURL for the repository with the following :
name=delorean-openstack-tempest-f60ad6c2010e9a65a993fbda9a35bf2a656c73d7
baseurl=’https://trunk.rdoproject.org/centos7/f6/0a/f60ad6c2010e9a65a993fbda9a35bf2a656c73d7_4dcd3c2b’
It worked for me ! thanks
Hi Pradeep,
I run into this issue
[stack@undercloud ~]$ sudo -E tripleo-repos -b rocky current
WARNING: –centos-mirror was deprecated in favour of –mirror
Loaded plugins: fastestmirror, langpacks, priorities
Loading mirror speeds from cached hostfile
* base: centos.mirrors.tds.net
* extras: mirrors.cat.pdx.edu
* updates: mirror.linux.duke.edu
Package yum-plugin-priorities-1.1.31-50.el7.noarch already installed and latest version
Nothing to do
Traceback (most recent call last):
File “/bin/tripleo-repos”, line 10, in
sys.exit(main())
File “/usr/lib/python2.7/site-packages/tripleo_repos/main.py”, line 349, in main
_install_repos(args, base_path)
File “/usr/lib/python2.7/site-packages/tripleo_repos/main.py”, line 287, in _install_repos
content = _get_repo(base_path + ‘current/delorean.repo’, args)
File “/usr/lib/python2.7/site-packages/tripleo_repos/main.py”, line 143, in _get_repo
r = requests.get(path)
File “/usr/lib/python2.7/site-packages/requests/api.py”, line 68, in get
return request(‘get’, url, **kwargs)
File “/usr/lib/python2.7/site-packages/requests/api.py”, line 50, in request
response = session.request(method=method, url=url, **kwargs)
File “/usr/lib/python2.7/site-packages/requests/sessions.py”, line 464, in request
resp = self.send(prep, **send_kwargs)
File “/usr/lib/python2.7/site-packages/requests/sessions.py”, line 576, in send
r = adapter.send(request, **kwargs)
File “/usr/lib/python2.7/site-packages/requests/adapters.py”, line 431, in send
raise SSLError(e, request=request)
requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:618)
Since this is just a Lab test to install openstack undercloud/overcloud process, Is there anyway I can make the SSL verify =False to bypass this error? Please advise. Thanks
Hi , I would suggest you to update your system first(Director/Undercloud), using yum update command and reboot it and then give a try of above command
Hi Pradeep,
I am facing issue in the last step. Can you please help
#openstack undercloud install
.
.
.
Exception: Error inspecting image: docker://docker.io/tripleorocky/centos-binary-cron:current-tripleo
time=”2019-05-29T16:59:22+05:30″ level=fatal msg=”pinging docker registry returned: Get https://registry-1.docker.io/v2/: x509: certificate is valid for *.example.in, example.in, not registry-1.docker.io”
Traceback (most recent call last):
File “/usr/lib/python2.7/site-packages/tripleoclient/v1/tripleo_deploy.py”, line 1159, in _standalone_deploy
parsed_args)
File “/usr/lib/python2.7/site-packages/tripleoclient/v1/tripleo_deploy.py”, line 759, in _deploy_tripleo_heat_templates
self._prepare_container_images(env, roles_data)
File “/usr/lib/python2.7/site-packages/tripleoclient/v1/tripleo_deploy.py”, line 706, in _prepare_container_images
env, roles_data, dry_run=True)
File “/usr/lib/python2.7/site-packages/tripleo_common/image/kolla_builder.py”, line 178, in container_images_prepare_multi
modify_only_with_labels=modify_only_with_labels,
File “/usr/lib/python2.7/site-packages/tripleo_common/image/kolla_builder.py”, line 273, in container_images_prepare
images, tag_from_label)
File “/usr/lib/python2.7/site-packages/tripleo_common/image/image_uploader.py”, line 452, in discover_image_tags
discover_args):
File “/usr/lib/python2.7/site-packages/concurrent/futures/_base.py”, line 605, in result_iterator
yield future.result()
File “/usr/lib/python2.7/site-packages/concurrent/futures/_base.py”, line 429, in result
return self.__get_result()
File “/usr/lib/python2.7/site-packages/concurrent/futures/thread.py”, line 62, in run
result = self.fn(*self.args, **self.kwargs)
File “/usr/lib/python2.7/site-packages/tripleo_common/image/image_uploader.py”, line 556, in discover_tag_from_inspect
i = DockerImageUploader._inspect(image_url.geturl(), insecure)
File “/usr/lib/python2.7/site-packages/tenacity/__init__.py”, line 241, in wrapped_f
return self.call(f, *args, **kw)
File “/usr/lib/python2.7/site-packages/tenacity/__init__.py”, line 330, in call
start_time=start_time)
File “/usr/lib/python2.7/site-packages/tenacity/__init__.py”, line 297, in iter
raise retry_exc.reraise()
File “/usr/lib/python2.7/site-packages/tenacity/__init__.py”, line 136, in reraise
raise self.last_attempt.result()
File “/usr/lib/python2.7/site-packages/concurrent/futures/_base.py”, line 422, in result
return self.__get_result()
File “/usr/lib/python2.7/site-packages/tenacity/__init__.py”, line 333, in call
result = fn(*args, **kwargs)
File “/usr/lib/python2.7/site-packages/tripleo_common/image/image_uploader.py”, line 383, in _inspect
(image, err))
ImageUploaderException: Error inspecting image: docker://docker.io/tripleorocky/centos-binary-cron:current-tripleo
time=”2019-05-29T16:59:22+05:30″ level=fatal msg=”pinging docker registry returned: Get https://registry-1.docker.io/v2/: x509: certificate is valid for *.example.in, example.in, not registry-1.docker.io”
Hi Pradeep,
Can I implement the above on CentOS 7 VM on Oracle Virtual Box?
Yes Diptendu, You can install it on VirtualBox VM
Hi Pradeep, thanks for sharing! Do you think this will work on ESXi VMs?
Hi , after successfully installation of undercloud.i m not able to see the openstack status list commant while in openstack service list is visble.can you expalin why ????
Hi Pradeep,
For (TripleOdeployment Laptop Configuration -corei5/32GBRam/1 TB drive is that ok ?), Installed on centos7(Hostname is kvm-hypervisor) & KVM.
But unable to configure network- Provisioning Network & Nat network)
Can you please help???
Hi Priya,
Create an xml file of external and provisioning network and use following commands enable and start the network
# virsh net-define /tmp/provisioning.xml
# virsh net-autostart provisioning
# virsh net-start provisioning
Hi Pradeep,
I am facing an error “Restart ryslogd service after logging conf change”.
TASK [Restart rsyslogd service after logging conf change] ******************************************************
fatal: [undercloud]: FAILED! => {“msg”: “The conditional check ‘logconfig|changed’ failed. The error was: template error while templating string: no filter named ‘changed’. String: {% if logconfig|changed %} True {% else %} False {% endif %}\n\nThe error appears to be in ‘/home/stack/undercloud-ansible-y3VB7b/Undercloud/host_prep_tasks.yaml’: line 657, column 5, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n register: logconfig\n – name: Restart rsyslogd service after logging conf change\n ^ here\n”}
NO MORE HOSTS LEFT *********************************************************************************************
PLAY RECAP *****************************************************************************************************
undercloud : ok=184 changed=53 unreachable=0 failed=1 skipped=164 rescued=0 ignored=1
Regards
Nikhil Kapoor
I also faced below error, and I found the this is due to syntax error in YAML. I have made the changes and it work fine for me.
Change “- logconfig|changed” to “- logconfig is changed” in below files
/usr/share/openstack-tripleo-heat-templates/docker/services/swift-proxy.yaml
/usr/share/openstack-tripleo-heat-templates/docker/services/swift-storage.yaml
Error:
“msg”: “The conditional check ‘logconfig|changed’ failed
/usr/share/openstack-tripleo-heat-templates/docker/services/swift-proxy.yaml
/usr/share/openstack-tripleo-heat-templates/docker/services/swift-storage.yaml
>> Change “is” with “|” test : cause: it’s due to the | test operator being deprecated in Ansible 2.5 and removed in 2.9 (I’m using 2.9 here). 2.5 seems to work ok.
Apart from that I also applied following fix:
‘https://opendev.org/openstack/tripleo-heat-templates/commit/ba461c1c615531dea8b1869c11f0da180d6dd911’
Hello Pardeep, thanks for you updating this post!
Would you mind to help on this error?
[stack@undercloud ~]$ openstack undercloud install
Exception: Deployment failed
Traceback (most recent call last):
File “/usr/lib/python2.7/site-packages/tripleoclient/v1/tripleo_deploy.py”, line 1323, in _standalone_deploy
raise exceptions.DeploymentError(‘Deployment failed’)
DeploymentError: Deployment failed
None
Install artifact is located at /home/stack/undercloud-install-20200412122510.tar.bzip2
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Deployment Failed!
ERROR: Heat log files: /var/log/heat-launcher/undercloud_deploy-ed5RrO
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
reset failed: reset: standard error: Inappropriate ioctl for device
Many thanks!
BR/
Robert
Hi i’m getting the same error, any update ?