Multinode Deployment of Kolla¶
Deploy a registry¶
A Docker registry is a locally-hosted registry that replaces the need to pull from a public registry to get images. Kolla can function with or without a local registry, however for a multinode deployment some type of local registry is recommended. Only one registry instance needs to be deployed, although HA features exist for registry services.
A very simple registry may be deployed on the current host as follows:
docker run -d \
--network host \
--name registry \
-e REGISTRY_HTTP_ADDR=0.0.0.0:4000 \
-v registry:/var/lib/registry \
Here we are using port 4000 to avoid a conflict with Keystone. If the registry
is not running on the same host as Keystone, the
-e argument may be
globals.yml and add the following, where
192.168.1.100:4000 is the
IP address and port on which the registry is listening:
Edit the Inventory File¶
The ansible inventory file contains all the information needed to determine
what services will land on which hosts. Edit the inventory file in the
Kolla Ansible directory
ansible/inventory/multinode. If Kolla Ansible
was installed with pip, it can be found in
Add the IP addresses or hostnames to a group and the services associated with
that group will land on that host. IP addresses or hostnames must be added to
the groups control, network, compute, monitoring and storage. Also, define
additional behavioral inventory parameters such as
controls how ansible interacts with remote hosts.
Ansible uses SSH to connect the deployment host and target hosts. For more information about SSH authentication please reference Ansible documentation.
# These initial groups are the only groups required to be modified. The
# additional groups are for more control of the environment.
# These hostname must be resolvable from your deployment host
control01 ansible_ssh_user=<ssh-username> ansible_become=True ansible_private_key_file=<path/to/private-key-file>
192.168.122.24 ansible_ssh_user=<ssh-username> ansible_become=True ansible_private_key_file=<path/to/private-key-file>
Additional inventory parameters might be required according to your environment setup. Reference Ansible Documentation for more information.
For more advanced roles, the operator can edit which services will be associated in with each group. Keep in mind that some services have to be grouped together and changing these around can break your deployment:
Host and group variables¶
Typically, Kolla Ansible configuration is stored in the
Variables in this file apply to all hosts. In an environment with multiple
hosts, it may become necessary to have different values for variables for
different hosts. A common example of this is for network interface
Ansible’s host and group variables can be assigned in a variety of ways. Simplest is in the inventory file itself:
# Host with a host variable.
# Group with a group variable.
This can quickly start to become difficult to maintain, so it may be preferable
group_vars directories containing YAML files with
host or group variables:
Ansible’s variable precedence rules
are quite complex, but it is worth becoming familiar with them if using host
and group variables. The playbook group variables in
ansible/group_vars/all.yml define global defaults, and these take
precedence over variables defined in an inventory file and inventory
group_vars/all, but not over inventory
group_vars/*. Variables in
‘extra’ files (
globals.yml) have the highest precedence, so any variables
which must differ between hosts must not be in
If there are multiple keepalived clusters running within the same layer 2
network, edit the file
/etc/kolla/globals.yml and specify a
be unique and belong to the range 0 to 255.
If glance is configured to use
file as backend, only one
container will be started.
file is enabled by default when no other
backend is specified in
First, check that the deployment targets are in a state where Kolla may deploy to them:
kolla-ansible prechecks -i <path/to/multinode/inventory/file>
RabbitMQ doesn’t work with IP addresses, hence the IP address of
api_interface should be resolvable by hostnames to make sure that all
RabbitMQ Cluster hosts can resolve each others hostnames beforehand.
Run the deployment:
kolla-ansible deploy -i <path/to/multinode/inventory/file>