aboutsummaryrefslogtreecommitdiff
path: root/doc/source/admin
diff options
context:
space:
mode:
Diffstat (limited to 'doc/source/admin')
-rw-r--r--doc/source/admin/image-building.rst453
-rw-r--r--doc/source/admin/index.rst18
-rw-r--r--doc/source/admin/template-override/opendaylight-source.rst27
-rw-r--r--doc/source/admin/template-override/ovs-dpdk.rst31
4 files changed, 529 insertions, 0 deletions
diff --git a/doc/source/admin/image-building.rst b/doc/source/admin/image-building.rst
new file mode 100644
index 000000000..4eb9d8d7e
--- /dev/null
+++ b/doc/source/admin/image-building.rst
@@ -0,0 +1,453 @@
+.. _image-building:
+
+=========================
+Building Container Images
+=========================
+
+The ``kolla-build`` command is responsible for building Docker images.
+
+.. note::
+
+ When developing Kolla it can be useful to build images using files located in
+ a local copy of Kolla. Use the ``tools/build.py`` script instead of
+ ``kolla-build`` command in all below instructions.
+
+Generating kolla-build.conf
+===========================
+
+Install tox and generate the build configuration. The build configuration is
+designed to hold advanced customizations when building containers.
+
+Create kolla-build.conf using the following steps.
+
+::
+
+ pip install tox
+ tox -e genconfig
+
+The location of the generated configuration file is
+``etc/kolla/kolla-build.conf``, it can also be copied to ``/etc/kolla``. The
+default location is one of ``/etc/kolla/kolla-build.conf`` or
+``etc/kolla/kolla-build.conf``.
+
+Guide
+=====
+
+In general, images are built like this::
+
+ kolla-build
+
+By default, the above command would build all images based on CentOS image.
+
+The operator can change the base distro with the ``-b`` option::
+
+ kolla-build -b ubuntu
+
+There are following distros available for building images:
+
+- centos
+- oraclelinux
+- rhel
+- ubuntu
+
+.. warning::
+
+ Fedora images are deprecated since Newton and will be removed
+ in the future.
+
+It is possible to build only a subset of images by specifying them on the
+command line::
+
+ kolla-build keystone
+
+In this case, the build script builds all images whose name contains the
+``keystone`` string along with their dependencies.
+
+Multiple names may be specified on the command line::
+
+ kolla-build keystone nova
+
+The set of images built can be defined as a profile in the ``profiles`` section
+of ``kolla-build.conf``. Later, profile can be specified by ``--profile`` CLI
+argument or ``profile`` option in ``kolla-build.conf``. Kolla provides some
+pre-defined profiles:
+
+- ``infra`` infrastructure-related images
+- ``main`` core OpenStack images
+- ``aux`` auxiliary images such as trove, magnum, ironic
+- ``default`` minimal set of images for a working deploy
+
+For example, due to Magnum requires Heat, following profile can be add to
+``profiles`` section in ``kolla-build.conf`` ::
+
+ magnum = magnum,heat
+
+These images can be built using command line ::
+
+ kolla-build --profile magnum
+
+Or put following line to ``DEFAULT`` section in ``kolla-build.conf`` ::
+
+ profile = magnum
+
+
+``kolla-build`` uses ``kolla`` as default Docker namespace. This is
+controlled with the ``-n`` command line option. To push images to a Dockerhub
+repository named ``mykollarepo``::
+
+ kolla-build -n mykollarepo --push
+
+To push images to a `local registry
+<https://docs.openstack.org/kolla-ansible/latest/multinode.html#deploy-a-registry>`_,
+use ``--registry`` flag::
+
+ kolla-build --registry 172.22.2.81:5000 --push
+
+The build configuration can be customized using a config file, the default
+location being one of ``/etc/kolla/kolla-build.conf`` or
+``etc/kolla/kolla-build.conf``. This file can be generated using the following
+command::
+
+ tox -e genconfig
+
+Build OpenStack from source
+===========================
+
+When building images, there are two methods of the OpenStack install. One is
+``binary``. Another is ``source``. The ``binary`` means that OpenStack will be
+installed from apt/yum. And the ``source`` means that OpenStack will be
+installed from source code. The default method of the OpenStack install is
+``binary``. It can be changed to ``source`` using the ``-t`` option::
+
+ kolla-build -t source
+
+The locations of OpenStack source code are written in
+``etc/kolla/kolla-build.conf``.
+Now the source type supports ``url``, ``git``, and ``local``. The location of
+the ``local`` source type can point to either a directory containing the source
+code or to a tarball of the source. The ``local`` source type permits to make
+the best use of the Docker cache.
+
+``etc/kolla/kolla-build.conf`` looks like::
+
+ [glance-base]
+ type = url
+ location = http://tarballs.openstack.org/glance/glance-master.tar.gz
+
+ [keystone-base]
+ type = git
+ location = https://git.openstack.org/openstack/keystone
+ reference = stable/mitaka
+
+ [heat-base]
+ type = local
+ location = /home/kolla/src/heat
+
+ [ironic-base]
+ type = local
+ location = /tmp/ironic.tar.gz
+
+To build RHEL containers, it is necessary to include registration with RHN
+of the container runtime operating system. To obtain a RHN
+username/password/pool id, contact Red Hat. Use a template's header block
+overrides file, add the following::
+
+ RUN subscription-manager register --user=<user-name> \
+ --password=<password> && subscription-manager attach --pool <pool-id>
+
+Dockerfile Customisation
+========================
+
+As of the Newton release, the ``kolla-build`` tool provides a Jinja2 based
+mechanism which allows operators to customise the Dockerfiles used to generate
+Kolla images.
+
+This offers a lot of flexibility on how images are built, e.g. installing extra
+packages as part of the build, tweaking settings, installing plugins, and
+numerous other capabilities. Some of these examples are described in more
+detail below.
+
+Generic Customisation
+---------------------
+
+Anywhere the line ``{% block ... %}`` appears may be modified. The Kolla
+community have added blocks throughout the Dockerfiles where we think they will
+be useful, however, operators are free to submit more if the ones provided are
+inadequate.
+
+The following is an example of how an operator would modify the setup steps
+within the Horizon Dockerfile.
+
+First, create a file to contain the customisations, e.g.
+``template-overrides.j2``. In this place the following::
+
+ {% extends parent_template %}
+
+ # Horizon
+ {% block horizon_redhat_binary_setup %}
+ RUN useradd --user-group myuser
+ {% endblock %}
+
+Then rebuild the horizon image, passing the ``--template-override`` argument::
+
+ kolla-build --template-override template-overrides.j2 horizon
+
+.. note::
+
+ The above example will replace all contents from the original block. Hence
+ in many cases one may want to copy the original contents of the block before
+ making changes.
+
+ More specific functionality such as removing/appending entries is available
+ for packages, described in the next section.
+
+Package Customisation
+---------------------
+
+Packages installed as part of a container build can be overridden, appended to,
+and deleted. Taking the Horizon example, the following packages are installed
+as part of a binary install type build:
+
+* ``openstack-dashboard``
+* ``httpd``
+* ``mod_wsgi``
+* ``mod_ssl``
+* ``gettext``
+
+To add a package to this list, say, ``iproute``, first create a file, e.g.
+``template-overrides.j2``. In this place the following::
+
+ {% extends parent_template %}
+
+ # Horizon
+ {% set horizon_packages_append = ['iproute'] %}
+
+Then rebuild the horizon image, passing the ``--template-override`` argument::
+
+ kolla-build --template-override template-overrides.j2 horizon
+
+Alternatively ``template_override`` can be set in ``kolla-build.conf``.
+
+The ``append`` suffix in the above example carries special significance. It
+indicates the operation taken on the package list. The following is a complete
+list of operations available:
+
+override
+ Replace the default packages with a custom list.
+
+append
+ Add a package to the default list.
+
+remove
+ Remove a package from the default list.
+
+Using a different base image
+----------------------------
+
+Base-image can be specified by argument ``--base-image``. For example::
+
+ kolla-build --base-image registry.access.redhat.com/rhel7/rhel --base rhel
+
+
+Plugin Functionality
+--------------------
+
+The Dockerfile customisation mechanism is also useful for adding/installing
+plugins to services. An example of this is Neutron's third party L2 drivers_.
+
+The bottom of each Dockerfile contains two blocks, ``image_name_footer``, and
+``footer``. The ``image_name_footer`` is intended for image specific
+modifications, while the ``footer`` can be used to apply a common set of
+modifications to every Dockerfile.
+
+For example, to add the ``networking-cisco`` plugin to the ``neutron_server``
+image, one may want to add the following to the ``template-override`` file::
+
+ {% extends parent_template %}
+
+ {% block neutron_server_footer %}
+ RUN git clone https://git.openstack.org/openstack/networking-cisco \
+ && pip --no-cache-dir install networking-cisco
+ {% endblock %}
+
+Astute readers may notice there is one problem with this however. Assuming
+nothing else in the Dockerfile changes for a period of time, the above ``RUN``
+statement will be cached by Docker, meaning new commits added to the Git
+repository may be missed on subsequent builds. To solve this the Kolla build
+tool also supports cloning additional repositories at build time, which will be
+automatically made available to the build, within an archive named
+``plugins-archive``.
+
+.. note::
+
+ The following is available for source build types only.
+
+To use this, add a section to ``/etc/kolla/kolla-build.conf`` in the following
+format::
+
+ [<image>-plugin-<plugin-name>]
+
+Where ``<image>`` is the image that the plugin should be installed into, and
+``<plugin-name>`` is the chosen plugin identifier.
+
+Continuing with the above example, add the following to
+``/etc/kolla/kolla-build.conf``::
+
+ [neutron-server-plugin-networking-cisco]
+ type = git
+ location = https://git.openstack.org/openstack/networking-cisco
+ reference = master
+
+The build will clone the repository, resulting in the following archive
+structure::
+
+ plugins-archive.tar
+ |__ plugins
+ |__networking-cisco
+
+The template now becomes::
+
+ {% block neutron_server_footer %}
+ ADD plugins-archive /
+ pip --no-cache-dir install /plugins/*
+ {% endblock %}
+
+Many of the Dockerfiles already copy the ``plugins-archive`` to the image and
+install available plugins at build time.
+
+Additions Functionality
+-----------------------
+
+The Dockerfile customisation mechanism is also useful for adding/installing
+additions into images. An example of this is adding your jenkins job build
+metadata (say formatted into a jenkins.json file) into the image.
+
+Similarly to the plugins mechanism, the Kolla build tool also supports cloning
+additional repositories at build time, which will be automatically made
+available to the build, within an archive named ``additions-archive``. The main
+difference between ``plugins-archive`` and ``additions-archive`` is that
+``plugins-archive`` is copied to the relevant images and processed to install
+available plugins while ``additions-archive`` processing is left to the Kolla
+user.
+
+.. note::
+
+ The following is available for source build types only.
+
+To use this, add a section to ``/etc/kolla/kolla-build.conf`` in the following
+format::
+
+ [<image>-additions-<additions-name>]
+
+Where ``<image>`` is the image that the plugin should be installed into, and
+``<additions-name>`` is the chosen additions identifier.
+
+Continuing with the above example, add the following to
+``/etc/kolla/kolla-build.conf``::
+
+ [neutron-server-additions-jenkins]
+ type = local
+ location = /path/to/your/jenkins/data
+
+The build will copy the directory, resulting in the following archive
+structure::
+
+ additions-archive.tar
+ |__ additions
+ |__jenkins
+
+Alternatively, it is also possible to create an ``additions-archive.tar`` file
+yourself without passing by ``/etc/kolla/kolla-build.conf`` in order to use the
+feature for binary build type.
+
+The template now becomes::
+
+ {% block neutron_server_footer %}
+ ADD additions-archive /
+ RUN cp /additions/jenkins/jenkins.json /jenkins.json
+ {% endblock %}
+
+Custom Repos
+------------
+
+Red Hat
+-------
+The build method allows the operator to build containers from custom repos.
+The repos are accepted as a list of comma separated values and can be in the
+form of ``.repo``, ``.rpm``, or a url. See examples below.
+
+Update ``rpm_setup_config`` in ``/etc/kolla/kolla-build.conf``::
+
+ rpm_setup_config = https://trunk.rdoproject.org/centos7/currrent/delorean.repo,https://trunk.rdoproject.org/centos7/delorean-deps.repo
+
+If specifying a ``.repo`` file, each ``.repo`` file will need to exist in the
+same directory as the base Dockerfile (``kolla/docker/base``)::
+
+ rpm_setup_config = epel.repo,delorean.repo,delorean-deps.repo
+
+Ubuntu
+------
+For Debian based images, additional apt sources may be added to the build as
+follows::
+
+ apt_sources_list = custom.list
+
+Known issues
+============
+
+#. Can't build base image because Docker fails to install systemd or httpd.
+
+ There are some issues between Docker and AUFS. The simple workaround to
+ avoid the issue is that add ``-s devicemapper`` or ``-s btrfs`` to
+ ``DOCKER_OPTS``. Get more information about `the issue from the Docker bug
+ tracker <https://github.com/docker/docker/issues/6980>`_ and `how to
+ configure Docker with BTRFS back end <https://docs.docker.com/engine/userguide/storagedriver/btrfs-driver/#prerequisites>`_.
+
+#. Mirrors are unreliable.
+
+ Some of the mirrors Kolla uses can be unreliable. As a result occasionally
+ some containers fail to build. To rectify build problems, the build tool
+ will automatically attempt three retries of a build operation if the first
+ one fails. The retry count is modified with the ``--retries`` option.
+
+Kolla-ansible with Local Registry
+---------------------------------
+
+To make kolla-ansible pull images from a local registry, set
+``"docker_registry"`` to ``"172.22.2.81:5000"`` in
+``"/etc/kolla/globals.yml"``. Make sure Docker is allowed to pull images from
+insecure registry. See
+`Docker Insecure Registry
+<https://docs.openstack.org/kolla-ansible/latest/multinode.html#deploy-a-registry>`_.
+
+Building behind a proxy
+-----------------------
+
+We can insert http_proxy settings into the images to
+fetch packages during build, and then unset them at the end to avoid having
+them carry through to the environment of the final images. Note however, it's
+not possible to drop the info completely using this method; it will still be
+visible in the layers of the image.
+
+To set the proxy settings, we can add this to the template's header block::
+
+ ENV http_proxy=https://evil.corp.proxy:80
+ ENV https_proxy=https://evil.corp.proxy:80
+
+To unset the proxy settings, we can add this to the template's footer block::
+
+ ENV http_proxy=""
+ ENV https_proxy=""
+
+Besides this configuration options, the script will automatically read these
+environment variables. If the host system proxy parameters match the ones
+going to be used, no other input parameters will be needed. These are the
+variables that will be picked up from the user env::
+
+ HTTP_PROXY, http_proxy, HTTPS_PROXY, https_proxy, FTP_PROXY,
+ ftp_proxy, NO_PROXY, no_proxy
+
+Also these variables could be overwritten using ``--build-args``, which have
+precedence.
+
+.. _drivers: https://wiki.openstack.org/wiki/Neutron#Plugins
diff --git a/doc/source/admin/index.rst b/doc/source/admin/index.rst
new file mode 100644
index 000000000..4724b3bb2
--- /dev/null
+++ b/doc/source/admin/index.rst
@@ -0,0 +1,18 @@
+===================
+Administrator Guide
+===================
+
+Building Container Images
+-------------------------
+
+If you are a system administrator running Kolla, this section contains
+information that should help you understand how to build container image
+or build some images using ``--template-override``.
+
+
+.. toctree::
+ :maxdepth: 2
+ :glob:
+
+ image-building
+ template-override/*
diff --git a/doc/source/admin/template-override/opendaylight-source.rst b/doc/source/admin/template-override/opendaylight-source.rst
new file mode 100644
index 000000000..61a3415ba
--- /dev/null
+++ b/doc/source/admin/template-override/opendaylight-source.rst
@@ -0,0 +1,27 @@
+==================
+OpenDaylight Build
+==================
+
+The `opendaylight-template-overrides.j2` template override shows how to build
+an OpenDaylight container image with a different version than the one packaged
+with the distro.
+
+Building OpenDaylight Container Images
+======================================
+
+kolla-build.conf
+----------------
+
+Point to the desired version of OpenDaylight in `kolla-build.conf`:
+
+.. code-block:: console
+
+ [opendaylight]
+ type = url
+ location = https://nexus.opendaylight.org/content/repositories/opendaylight.release/org/opendaylight/integration/distribution-karaf/0.6.0-Carbon/distribution-karaf-0.6.0-Carbon.tar.gz
+
+Build the container by executing the following command:
+
+::
+
+ kolla-build --type source --template-override contrib/template-override/opendaylight-template-overrides.j2 opendaylight
diff --git a/doc/source/admin/template-override/ovs-dpdk.rst b/doc/source/admin/template-override/ovs-dpdk.rst
new file mode 100644
index 000000000..e47cfe0ff
--- /dev/null
+++ b/doc/source/admin/template-override/ovs-dpdk.rst
@@ -0,0 +1,31 @@
+OVS-DPDK Source build
+=====================
+
+CentOS and Oracle Linux currently do not provide packages
+for ovs with dpdk.
+The Ubuntu packages do not support UIO based drivers.
+To use the uio_pci_generic driver on Ubuntu a source build is required.
+
+Building ovs with dpdk containers from source
+---------------------------------------------
+
+- Append the following to /etc/kolla/kolla-build.conf to select the version
+ of ovs and dpdk to use for your source build.
+
+kolla-build.conf
+________________
+
+[openvswitch-base-plugin-ovs]
+type = git
+location = https://github.com/openvswitch/ovs.git
+reference = v2.7.0
+
+[openvswitch-base-plugin-dpdk]
+type = git
+location = http://dpdk.org/git/dpdk
+reference = v17.02
+
+- To build the container execute the follow command::
+
+ tools/build.py --template-override \
+ contrib/template-override/ovs-dpdk.j2 dpdk