[ops-guide] Adding new content to guide
This patch is to simply create the ToC in the draft folder and to add pre-existing content. Edits will come later. Please review based on structure only. Change-Id: I9fa7754f3f6cdf1c861a146a93acf675c74f8a8b Implements: blueprint create-ops-guide
This commit is contained in:
parent
46672e6854
commit
df1bd3b6e0
@ -2,11 +2,339 @@
|
||||
Advanced configuration
|
||||
======================
|
||||
|
||||
This is a draft advanced configuration page for the proposed
|
||||
OpenStack-Ansible operations guide.
|
||||
The OpenStack-Ansible project provides a basic OpenStack environment, but
|
||||
many deployers will wish to extend the environment based on their needs. This
|
||||
could include installing extra services, changing package versions, or
|
||||
overriding existing variables.
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
Using these extension points, deployers can provide a more 'opinionated'
|
||||
installation of OpenStack that may include their own software.
|
||||
|
||||
extending.rst
|
||||
ops-tips.rst
|
||||
Including OpenStack-Ansible in your project
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Including the openstack-ansible repository within another project can be
|
||||
done in several ways:
|
||||
|
||||
- A git submodule pointed to a released tag.
|
||||
- A script to automatically perform a git checkout of Openstack-Ansible.
|
||||
|
||||
When including OpenStack-Ansible in a project, consider using a parallel
|
||||
directory structure as shown in the ``ansible.cfg`` files section.
|
||||
|
||||
Also note that copying files into directories such as ``env.d`` or
|
||||
``conf.d`` should be handled via some sort of script within the extension
|
||||
project.
|
||||
|
||||
Ansible forks
|
||||
~~~~~~~~~~~~~
|
||||
|
||||
The default MaxSessions setting for the OpenSSH Daemon is 10. Each Ansible
|
||||
fork makes use of a Session. By default, Ansible sets the number of forks to
|
||||
5. However, you can increase the number of forks used in order to improve
|
||||
deployment performance in large environments.
|
||||
|
||||
Note that more than 10 forks will cause issues for any playbooks
|
||||
which use ``delegate_to`` or ``local_action`` in the tasks. It is
|
||||
recommended that the number of forks are not raised when executing against the
|
||||
Control Plane, as this is where delegation is most often used.
|
||||
|
||||
The number of forks used may be changed on a permanent basis by including
|
||||
the appropriate change to the ``ANSIBLE_FORKS`` in your ``.bashrc`` file.
|
||||
Alternatively it can be changed for a particular playbook execution by using
|
||||
the ``--forks`` CLI parameter. For example, the following executes the nova
|
||||
playbook against the control plane with 10 forks, then against the compute
|
||||
nodes with 50 forks.
|
||||
|
||||
.. code-block:: shell-session
|
||||
|
||||
# openstack-ansible --forks 10 os-nova-install.yml --limit compute_containers
|
||||
# openstack-ansible --forks 50 os-nova-install.yml --limit compute_hosts
|
||||
|
||||
For more information about forks, please see the following references:
|
||||
|
||||
* OpenStack-Ansible `Bug 1479812`_
|
||||
* Ansible `forks`_ entry for ansible.cfg
|
||||
* `Ansible Performance Tuning`_
|
||||
|
||||
.. _Bug 1479812: https://bugs.launchpad.net/openstack-ansible/+bug/1479812
|
||||
.. _forks: http://docs.ansible.com/ansible/intro_configuration.html#forks
|
||||
.. _Ansible Performance Tuning: https://www.ansible.com/blog/ansible-performance-tuning
|
||||
|
||||
ansible.cfg files
|
||||
~~~~~~~~~~~~~~~~~
|
||||
|
||||
You can create your own playbook, variable, and role structure while still
|
||||
including the OpenStack-Ansible roles and libraries by putting an
|
||||
``ansible.cfg`` file in your ``playbooks`` directory.
|
||||
|
||||
The relevant options for Ansible 1.9 (included in OpenStack-Ansible)
|
||||
are as follows:
|
||||
|
||||
``library``
|
||||
This variable should point to
|
||||
``openstack-ansible/playbooks/library``. Doing so allows roles and
|
||||
playbooks to access OpenStack-Ansible's included Ansible modules.
|
||||
``roles_path``
|
||||
This variable should point to
|
||||
``openstack-ansible/playbooks/roles``. This allows Ansible to
|
||||
properly look up any OpenStack-Ansible roles that extension roles
|
||||
may reference.
|
||||
``inventory``
|
||||
This variable should point to
|
||||
``openstack-ansible/playbooks/inventory``. With this setting,
|
||||
extensions have access to the same dynamic inventory that
|
||||
OpenStack-Ansible uses.
|
||||
|
||||
Note that the paths to the ``openstack-ansible`` top level directory can be
|
||||
relative in this file.
|
||||
|
||||
Consider this directory structure::
|
||||
|
||||
my_project
|
||||
|
|
||||
|- custom_stuff
|
||||
| |
|
||||
| |- playbooks
|
||||
|- openstack-ansible
|
||||
| |
|
||||
| |- playbooks
|
||||
|
||||
The variables in ``my_project/custom_stuff/playbooks/ansible.cfg`` would use
|
||||
``../openstack-ansible/playbooks/<directory>``.
|
||||
|
||||
|
||||
env.d
|
||||
~~~~~
|
||||
|
||||
The ``/etc/openstack_deploy/env.d`` directory sources all YAML files into the
|
||||
deployed environment, allowing a deployer to define additional group mappings.
|
||||
|
||||
This directory is used to extend the environment skeleton, or modify the
|
||||
defaults defined in the ``playbooks/inventory/env.d`` directory.
|
||||
|
||||
See also `Understanding Container Groups`_ in Appendix C.
|
||||
|
||||
.. _Understanding Container Groups: ../install-guide/app-custom-layouts.html#understanding-container-groups
|
||||
|
||||
conf.d
|
||||
~~~~~~
|
||||
|
||||
Common OpenStack services and their configuration are defined by
|
||||
OpenStack-Ansible in the
|
||||
``/etc/openstack_deploy/openstack_user_config.yml`` settings file.
|
||||
|
||||
Additional services should be defined with a YAML file in
|
||||
``/etc/openstack_deploy/conf.d``, in order to manage file size.
|
||||
|
||||
See also `Understanding Host Groups`_ in Appendix C.
|
||||
|
||||
.. _Understanding Host Groups: ../install-guide/app-custom-layouts.html#understanding-host-groups
|
||||
|
||||
user_*.yml files
|
||||
~~~~~~~~~~~~~~~~
|
||||
|
||||
Files in ``/etc/openstack_deploy`` beginning with ``user_`` will be
|
||||
automatically sourced in any ``openstack-ansible`` command. Alternatively,
|
||||
the files can be sourced with the ``-e`` parameter of the ``ansible-playbook``
|
||||
command.
|
||||
|
||||
``user_variables.yml`` and ``user_secrets.yml`` are used directly by
|
||||
OpenStack-Ansible. Adding custom variables used by your own roles and
|
||||
playbooks to these files is not recommended. Doing so will complicate your
|
||||
upgrade path by making comparison of your existing files with later versions
|
||||
of these files more arduous. Rather, recommended practice is to place your own
|
||||
variables in files named following the ``user_*.yml`` pattern so they will be
|
||||
sourced alongside those used exclusively by OpenStack-Ansible.
|
||||
|
||||
Ordering and precedence
|
||||
-----------------------
|
||||
|
||||
``user_*.yml`` variables are just YAML variable files. They will be sourced
|
||||
in alphanumeric order by ``openstack-ansible``.
|
||||
|
||||
.. _adding-galaxy-roles:
|
||||
|
||||
Adding Galaxy roles
|
||||
~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Any roles defined in ``openstack-ansible/ansible-role-requirements.yml``
|
||||
will be installed by the
|
||||
``openstack-ansible/scripts/bootstrap-ansible.sh`` script.
|
||||
|
||||
|
||||
Setting overrides in configuration files
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
All of the services that use YAML, JSON, or INI for configuration can receive
|
||||
overrides through the use of a Ansible action plugin named ``config_template``.
|
||||
The configuration template engine allows a deployer to use a simple dictionary
|
||||
to modify or add items into configuration files at run time that may not have a
|
||||
preset template option. All OpenStack-Ansible roles allow for this
|
||||
functionality where applicable. Files available to receive overrides can be
|
||||
seen in the ``defaults/main.yml`` file as standard empty dictionaries (hashes).
|
||||
|
||||
Practical guidance for using this feature is available in the `Install Guide`_.
|
||||
|
||||
This module has been `submitted for consideration`_ into Ansible Core.
|
||||
|
||||
.. _Install Guide: ../install-guide/app-advanced-config-override.html
|
||||
.. _submitted for consideration: https://github.com/ansible/ansible/pull/12555
|
||||
|
||||
|
||||
Build the environment with additional python packages
|
||||
-----------------------------------------------------
|
||||
|
||||
The system will allow you to install and build any package that is a python
|
||||
installable. The repository infrastructure will look for and create any
|
||||
git based or PyPi installable package. When the package is built the repo-build
|
||||
role will create the sources as Python wheels to extend the base system and
|
||||
requirements.
|
||||
|
||||
While the packages pre-built in the repository-infrastructure are
|
||||
comprehensive, it may be needed to change the source locations and versions of
|
||||
packages to suit different deployment needs. Adding additional repositories as
|
||||
overrides is as simple as listing entries within the variable file of your
|
||||
choice. Any ``user_.*.yml`` file within the "/etc/openstack_deployment"
|
||||
directory will work to facilitate the addition of a new packages.
|
||||
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
swift_git_repo: https://private-git.example.org/example-org/swift
|
||||
swift_git_install_branch: master
|
||||
|
||||
|
||||
Additional lists of python packages can also be overridden using a
|
||||
``user_.*.yml`` variable file.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
swift_requires_pip_packages:
|
||||
- virtualenv
|
||||
- virtualenv-tools
|
||||
- python-keystoneclient
|
||||
- NEW-SPECIAL-PACKAGE
|
||||
|
||||
|
||||
Once the variables are set call the play ``repo-build.yml`` to build all of the
|
||||
wheels within the repository infrastructure. When ready run the target plays to
|
||||
deploy your overridden source code.
|
||||
|
||||
|
||||
Module documentation
|
||||
--------------------
|
||||
|
||||
These are the options available as found within the virtual module
|
||||
documentation section.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
module: config_template
|
||||
version_added: 1.9.2
|
||||
short_description: >
|
||||
Renders template files providing a create/update override interface
|
||||
description:
|
||||
- The module contains the template functionality with the ability to
|
||||
override items in config, in transit, through the use of a simple
|
||||
dictionary without having to write out various temp files on target
|
||||
machines. The module renders all of the potential jinja a user could
|
||||
provide in both the template file and in the override dictionary which
|
||||
is ideal for deployers who may have lots of different configs using a
|
||||
similar code base.
|
||||
- The module is an extension of the **copy** module and all of attributes
|
||||
that can be set there are available to be set here.
|
||||
options:
|
||||
src:
|
||||
description:
|
||||
- Path of a Jinja2 formatted template on the local server. This can
|
||||
be a relative or absolute path.
|
||||
required: true
|
||||
default: null
|
||||
dest:
|
||||
description:
|
||||
- Location to render the template to on the remote machine.
|
||||
required: true
|
||||
default: null
|
||||
config_overrides:
|
||||
description:
|
||||
- A dictionary used to update or override items within a configuration
|
||||
template. The dictionary data structure may be nested. If the target
|
||||
config file is an ini file the nested keys in the ``config_overrides``
|
||||
will be used as section headers.
|
||||
config_type:
|
||||
description:
|
||||
- A string value describing the target config type.
|
||||
choices:
|
||||
- ini
|
||||
- json
|
||||
- yaml
|
||||
|
||||
|
||||
Example task using the config_template module
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
- name: Run config template ini
|
||||
config_template:
|
||||
src: test.ini.j2
|
||||
dest: /tmp/test.ini
|
||||
config_overrides: {{ test_overrides }}
|
||||
config_type: ini
|
||||
|
||||
|
||||
Example overrides dictionary(hash)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
test_overrides:
|
||||
DEFAULT:
|
||||
new_item: 12345
|
||||
|
||||
|
||||
Original template file test.ini.j2
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
.. code-block:: ini
|
||||
|
||||
[DEFAULT]
|
||||
value1 = abc
|
||||
value2 = 123
|
||||
|
||||
|
||||
Rendered on disk file /tmp/test.ini
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
.. code-block:: ini
|
||||
|
||||
[DEFAULT]
|
||||
value1 = abc
|
||||
value2 = 123
|
||||
new_item = 12345
|
||||
|
||||
|
||||
In this task the ``test.ini.j2`` file is a template which will be rendered and
|
||||
written to disk at ``/tmp/test.ini``. The **config_overrides** entry is a
|
||||
dictionary(hash) which allows a deployer to set arbitrary data as overrides to
|
||||
be written into the configuration file at run time. The **config_type** entry
|
||||
specifies the type of configuration file the module will be interacting with;
|
||||
available options are "yaml", "json", and "ini".
|
||||
|
||||
|
||||
Discovering available overrides
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
All of these options can be specified in any way that suits your deployment.
|
||||
In terms of ease of use and flexibility it's recommended that you define your
|
||||
overrides in a user variable file such as
|
||||
``/etc/openstack_deploy/user_variables.yml``.
|
||||
|
||||
The list of overrides available may be found by executing:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
find . -name "main.yml" -exec grep '_.*_overrides:' {} \; \
|
||||
| grep -v "^#" \
|
||||
| sort -u
|
||||
|
@ -1,306 +0,0 @@
|
||||
===========================
|
||||
Extending OpenStack-Ansible
|
||||
===========================
|
||||
|
||||
The OpenStack-Ansible project provides a basic OpenStack environment, but
|
||||
many deployers will wish to extend the environment based on their needs. This
|
||||
could include installing extra services, changing package versions, or
|
||||
overriding existing variables.
|
||||
|
||||
Using these extension points, deployers can provide a more 'opinionated'
|
||||
installation of OpenStack that may include their own software.
|
||||
|
||||
Including OpenStack-Ansible in your project
|
||||
-------------------------------------------
|
||||
|
||||
Including the openstack-ansible repository within another project can be
|
||||
done in several ways.
|
||||
|
||||
1. A git submodule pointed to a released tag.
|
||||
2. A script to automatically perform a git checkout of
|
||||
openstack-ansible
|
||||
|
||||
When including OpenStack-Ansible in a project, consider using a parallel
|
||||
directory structure as shown in the `ansible.cfg files`_ section.
|
||||
|
||||
Also note that copying files into directories such as `env.d`_ or
|
||||
`conf.d`_ should be handled via some sort of script within the extension
|
||||
project.
|
||||
|
||||
ansible.cfg files
|
||||
-----------------
|
||||
|
||||
You can create your own playbook, variable, and role structure while still
|
||||
including the OpenStack-Ansible roles and libraries by putting an
|
||||
``ansible.cfg`` file in your ``playbooks`` directory.
|
||||
|
||||
The relevant options for Ansible 1.9 (included in OpenStack-Ansible)
|
||||
are as follows:
|
||||
|
||||
``library``
|
||||
This variable should point to
|
||||
``openstack-ansible/playbooks/library``. Doing so allows roles and
|
||||
playbooks to access OpenStack-Ansible's included Ansible modules.
|
||||
``roles_path``
|
||||
This variable should point to
|
||||
``openstack-ansible/playbooks/roles``. This allows Ansible to
|
||||
properly look up any OpenStack-Ansible roles that extension roles
|
||||
may reference.
|
||||
``inventory``
|
||||
This variable should point to
|
||||
``openstack-ansible/playbooks/inventory``. With this setting,
|
||||
extensions have access to the same dynamic inventory that
|
||||
OpenStack-Ansible uses.
|
||||
|
||||
Note that the paths to the ``openstack-ansible`` top level directory can be
|
||||
relative in this file.
|
||||
|
||||
Consider this directory structure::
|
||||
|
||||
my_project
|
||||
|
|
||||
|- custom_stuff
|
||||
| |
|
||||
| |- playbooks
|
||||
|- openstack-ansible
|
||||
| |
|
||||
| |- playbooks
|
||||
|
||||
The variables in ``my_project/custom_stuff/playbooks/ansible.cfg`` would use
|
||||
``../openstack-ansible/playbooks/<directory>``.
|
||||
|
||||
|
||||
env.d
|
||||
-----
|
||||
|
||||
The ``/etc/openstack_deploy/env.d`` directory sources all YAML files into the
|
||||
deployed environment, allowing a deployer to define additional group mappings.
|
||||
|
||||
This directory is used to extend the environment skeleton, or modify the
|
||||
defaults defined in the ``playbooks/inventory/env.d`` directory.
|
||||
|
||||
See also `Understanding Container Groups`_ in Appendix C.
|
||||
|
||||
.. _Understanding Container Groups: ../install-guide/app-custom-layouts.html#understanding-container-groups
|
||||
|
||||
conf.d
|
||||
------
|
||||
|
||||
Common OpenStack services and their configuration are defined by
|
||||
OpenStack-Ansible in the
|
||||
``/etc/openstack_deploy/openstack_user_config.yml`` settings file.
|
||||
|
||||
Additional services should be defined with a YAML file in
|
||||
``/etc/openstack_deploy/conf.d``, in order to manage file size.
|
||||
|
||||
See also `Understanding Host Groups`_ in Appendix C.
|
||||
|
||||
.. _Understanding Host Groups: ../install-guide/app-custom-layouts.html#understanding-host-groups
|
||||
|
||||
user\_*.yml files
|
||||
-----------------
|
||||
|
||||
Files in ``/etc/openstack_deploy`` beginning with ``user_`` will be
|
||||
automatically sourced in any ``openstack-ansible`` command. Alternatively,
|
||||
the files can be sourced with the ``-e`` parameter of the ``ansible-playbook``
|
||||
command.
|
||||
|
||||
``user_variables.yml`` and ``user_secrets.yml`` are used directly by
|
||||
OpenStack-Ansible. Adding custom variables used by your own roles and
|
||||
playbooks to these files is not recommended. Doing so will complicate your
|
||||
upgrade path by making comparison of your existing files with later versions
|
||||
of these files more arduous. Rather, recommended practice is to place your own
|
||||
variables in files named following the ``user_*.yml`` pattern so they will be
|
||||
sourced alongside those used exclusively by OpenStack-Ansible.
|
||||
|
||||
Ordering and Precedence
|
||||
+++++++++++++++++++++++
|
||||
|
||||
``user_*.yml`` variables are just YAML variable files. They will be sourced
|
||||
in alphanumeric order by ``openstack-ansible``.
|
||||
|
||||
.. _adding-galaxy-roles:
|
||||
|
||||
Adding Galaxy roles
|
||||
-------------------
|
||||
|
||||
Any roles defined in ``openstack-ansible/ansible-role-requirements.yml``
|
||||
will be installed by the
|
||||
``openstack-ansible/scripts/bootstrap-ansible.sh`` script.
|
||||
|
||||
|
||||
Setting overrides in configuration files
|
||||
----------------------------------------
|
||||
|
||||
All of the services that use YAML, JSON, or INI for configuration can receive
|
||||
overrides through the use of a Ansible action plugin named ``config_template``.
|
||||
The configuration template engine allows a deployer to use a simple dictionary
|
||||
to modify or add items into configuration files at run time that may not have a
|
||||
preset template option. All OpenStack-Ansible roles allow for this
|
||||
functionality where applicable. Files available to receive overrides can be
|
||||
seen in the ``defaults/main.yml`` file as standard empty dictionaries (hashes).
|
||||
|
||||
Practical guidance for using this feature is available in the `Install Guide`_.
|
||||
|
||||
This module has been `submitted for consideration`_ into Ansible Core.
|
||||
|
||||
.. _Install Guide: ../install-guide/app-advanced-config-override.html
|
||||
.. _submitted for consideration: https://github.com/ansible/ansible/pull/12555
|
||||
|
||||
|
||||
Build the environment with additional python packages
|
||||
+++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
|
||||
The system will allow you to install and build any package that is a python
|
||||
installable. The repository infrastructure will look for and create any
|
||||
git based or PyPi installable package. When the package is built the repo-build
|
||||
role will create the sources as Python wheels to extend the base system and
|
||||
requirements.
|
||||
|
||||
While the packages pre-built in the repository-infrastructure are
|
||||
comprehensive, it may be needed to change the source locations and versions of
|
||||
packages to suit different deployment needs. Adding additional repositories as
|
||||
overrides is as simple as listing entries within the variable file of your
|
||||
choice. Any ``user_.*.yml`` file within the "/etc/openstack_deployment"
|
||||
directory will work to facilitate the addition of a new packages.
|
||||
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
swift_git_repo: https://private-git.example.org/example-org/swift
|
||||
swift_git_install_branch: master
|
||||
|
||||
|
||||
Additional lists of python packages can also be overridden using a
|
||||
``user_.*.yml`` variable file.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
swift_requires_pip_packages:
|
||||
- virtualenv
|
||||
- virtualenv-tools
|
||||
- python-keystoneclient
|
||||
- NEW-SPECIAL-PACKAGE
|
||||
|
||||
|
||||
Once the variables are set call the play ``repo-build.yml`` to build all of the
|
||||
wheels within the repository infrastructure. When ready run the target plays to
|
||||
deploy your overridden source code.
|
||||
|
||||
|
||||
Module documentation
|
||||
++++++++++++++++++++
|
||||
|
||||
These are the options available as found within the virtual module
|
||||
documentation section.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
module: config_template
|
||||
version_added: 1.9.2
|
||||
short_description: >
|
||||
Renders template files providing a create/update override interface
|
||||
description:
|
||||
- The module contains the template functionality with the ability to
|
||||
override items in config, in transit, through the use of a simple
|
||||
dictionary without having to write out various temp files on target
|
||||
machines. The module renders all of the potential jinja a user could
|
||||
provide in both the template file and in the override dictionary which
|
||||
is ideal for deployers who may have lots of different configs using a
|
||||
similar code base.
|
||||
- The module is an extension of the **copy** module and all of attributes
|
||||
that can be set there are available to be set here.
|
||||
options:
|
||||
src:
|
||||
description:
|
||||
- Path of a Jinja2 formatted template on the local server. This can
|
||||
be a relative or absolute path.
|
||||
required: true
|
||||
default: null
|
||||
dest:
|
||||
description:
|
||||
- Location to render the template to on the remote machine.
|
||||
required: true
|
||||
default: null
|
||||
config_overrides:
|
||||
description:
|
||||
- A dictionary used to update or override items within a configuration
|
||||
template. The dictionary data structure may be nested. If the target
|
||||
config file is an ini file the nested keys in the ``config_overrides``
|
||||
will be used as section headers.
|
||||
config_type:
|
||||
description:
|
||||
- A string value describing the target config type.
|
||||
choices:
|
||||
- ini
|
||||
- json
|
||||
- yaml
|
||||
|
||||
|
||||
Example task using the "config_template" module
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
- name: Run config template ini
|
||||
config_template:
|
||||
src: test.ini.j2
|
||||
dest: /tmp/test.ini
|
||||
config_overrides: {{ test_overrides }}
|
||||
config_type: ini
|
||||
|
||||
|
||||
Example overrides dictionary(hash)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
test_overrides:
|
||||
DEFAULT:
|
||||
new_item: 12345
|
||||
|
||||
|
||||
Original template file "test.ini.j2"
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
.. code-block:: ini
|
||||
|
||||
[DEFAULT]
|
||||
value1 = abc
|
||||
value2 = 123
|
||||
|
||||
|
||||
Rendered on disk file "/tmp/test.ini"
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
.. code-block:: ini
|
||||
|
||||
[DEFAULT]
|
||||
value1 = abc
|
||||
value2 = 123
|
||||
new_item = 12345
|
||||
|
||||
|
||||
In this task the ``test.ini.j2`` file is a template which will be rendered and
|
||||
written to disk at ``/tmp/test.ini``. The **config_overrides** entry is a
|
||||
dictionary(hash) which allows a deployer to set arbitrary data as overrides to
|
||||
be written into the configuration file at run time. The **config_type** entry
|
||||
specifies the type of configuration file the module will be interacting with;
|
||||
available options are "yaml", "json", and "ini".
|
||||
|
||||
|
||||
Discovering Available Overrides
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
All of these options can be specified in any way that suits your deployment.
|
||||
In terms of ease of use and flexibility it's recommended that you define your
|
||||
overrides in a user variable file such as
|
||||
``/etc/openstack_deploy/user_variables.yml``.
|
||||
|
||||
The list of overrides available may be found by executing:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
find . -name "main.yml" -exec grep '_.*_overrides:' {} \; \
|
||||
| grep -v "^#" \
|
||||
| sort -u
|
@ -6,7 +6,7 @@ This is a draft index page for the proposed OpenStack-Ansible
|
||||
operations guide.
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
:maxdepth: 3
|
||||
|
||||
openstack-operations.rst
|
||||
maintenance-tasks.rst
|
||||
|
@ -8,6 +8,12 @@ operations guide.
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
ops-add-computehost.rst
|
||||
ops-remove-computehost.rst
|
||||
ops-galera.rst
|
||||
maintenance-tasks/network-maintain.rst
|
||||
maintenance-tasks/galera.rst
|
||||
maintenance-tasks/rabbitmq-maintain.rst
|
||||
maintenance-tasks/backups.rst
|
||||
maintenance-tasks/scale-environment.rst
|
||||
maintenance-tasks/ansible-modules.rst
|
||||
maintenance-tasks/managing-swift.rst
|
||||
maintenance-tasks/containers.rst
|
||||
maintenance-tasks/firewalls.rst
|
||||
|
@ -0,0 +1,6 @@
|
||||
============================
|
||||
Running ad-hoc Ansible plays
|
||||
============================
|
||||
|
||||
This is a draft ad-hoc plays page for the proposed OpenStack-Ansible
|
||||
operations guide.
|
@ -0,0 +1,37 @@
|
||||
=======
|
||||
Backups
|
||||
=======
|
||||
|
||||
This is a draft backups page for the proposed OpenStack-Ansible
|
||||
operations guide.
|
||||
|
||||
Checking for recent back ups
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Before adding new nodes to your OpenStack-Ansible environment, it is possible
|
||||
to confirm that a recent back up resides inside the ``holland_backups``
|
||||
repository:
|
||||
|
||||
#. Log in to the Infra host where the Galera service creates backups.
|
||||
|
||||
#. Run the :command:``ls -ls`` command to view the contents of the
|
||||
back up files:
|
||||
|
||||
.. code::
|
||||
|
||||
<node-ID>-Infra01~#: ls -ls /openstack/backup/XXXX_galera_containe
|
||||
|
||||
Backup of /etc/openstack_deploy
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Details about our inventory backup we are already doing, but also more
|
||||
content can go there on how to backup and restore this.
|
||||
|
||||
Backup of Galera data
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Backup your environment
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Backup procedure
|
||||
----------------
|
@ -0,0 +1,194 @@
|
||||
====================
|
||||
Container management
|
||||
====================
|
||||
|
||||
With Ansible, the OpenStack installation process is entirely automated
|
||||
using playbooks written in YAML. After installation, the settings
|
||||
configured by the playbooks can be changed and modified. Services and
|
||||
containers can shift to accommodate certain environment requirements.
|
||||
Scaling services is achieved by adjusting services within containers, or
|
||||
adding new deployment groups. It is also possible to destroy containers
|
||||
if needed after changes and modifications are complete.
|
||||
|
||||
Scale individual services
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Individual OpenStack services, and other open source project services,
|
||||
run within containers. It is possible to scale out these services by
|
||||
modifying the ``etc/openstack_deploy/openstack_user_config.yml`` file.
|
||||
|
||||
#. Navigate into the ``etc/openstack_deploy/openstack_user_config.yml``
|
||||
file.
|
||||
|
||||
#. Access the deployment groups section of the configuration file.
|
||||
Underneath the deployment group name, add an affinity value line to
|
||||
container scales OpenStack services:
|
||||
|
||||
.. code::
|
||||
|
||||
infra_host
|
||||
infra1:
|
||||
ip: 10.10.236.100
|
||||
# Rabbitmq
|
||||
affinity:
|
||||
galera_container: 1
|
||||
rabbit_mq_container: 2
|
||||
|
||||
In this example, ``galera_container`` has a container value of one.
|
||||
In practice, any containers that do not need adjustment can remain at
|
||||
the default value of one, and should not be adjusted above or below
|
||||
the value of one.
|
||||
|
||||
The affinity value for each container is set at one by default.
|
||||
Adjust the affinity value to zero for situations where the OpenStack
|
||||
services housed within a specific container will not be needed when
|
||||
scaling out other required services.
|
||||
|
||||
#. Update the container number listed under the ``affinity``
|
||||
configuration to the desired number. The above example has
|
||||
``galera_container`` set at one and ``rabbit_mq_container`` at two,
|
||||
which scales RabbitMQ services, but leaves Galera services fixed.
|
||||
|
||||
#. Run the appropriate playbook commands after changing the
|
||||
configuration to create the new containers, and install the
|
||||
appropriate services.
|
||||
|
||||
For example, run the **openstack-ansible lxc-containers-create.yml
|
||||
rabbitmq-install.yml** commands from the
|
||||
``openstack-ansible/playbooks`` repository to complete the scaling
|
||||
process described in the example above:
|
||||
|
||||
.. code::
|
||||
|
||||
$ cd openstack-ansible/playbooks
|
||||
$ openstack-ansible lxc-containers-create.yml rabbitmq-install.yml
|
||||
|
||||
Scale services with new deployment groups
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
In any OpenStack environment installed with Ansible, Deployment Groups
|
||||
reside on specific nodes. Specific groups of containers are collected
|
||||
open source project services, run within containers.
|
||||
|
||||
For example, the ``compute_hosts ``\ deployment group holds the
|
||||
``nova_compute_container``, which contains the
|
||||
``neutron_linuxbridge_agent`` and ``nova_compute`` OpenStack services.
|
||||
This deployment group resides on the compute node.
|
||||
|
||||
Users can create new infrastructure nodes, and scale OpenStack services
|
||||
within containers, by generating new deployment groups. The process
|
||||
requires setting up a new deployment groups inside the host
|
||||
configuration files.
|
||||
|
||||
#. On the host machine, navigate to the directory where
|
||||
``openstack_config`` file resides. This configuration file
|
||||
defines which deployment groups are assigned to each node.
|
||||
|
||||
#. Add a new deployment group to the configuration file. Adjust the
|
||||
deployment group name followed by the affinity values within the
|
||||
deployment group section of the ``openstack_config`` config file to
|
||||
scale services.
|
||||
|
||||
.. code::
|
||||
|
||||
compute_hosts
|
||||
infra_hosts
|
||||
identity_hosts
|
||||
log_hosts
|
||||
network_hosts
|
||||
os-infra_hosts
|
||||
repo-infra_hosts
|
||||
shared-infra_hosts
|
||||
storage-infra_hosts
|
||||
storage_hosts
|
||||
swift_hosts
|
||||
swift-proxy_hosts
|
||||
|
||||
#. Modify the ``openstack_config`` file, adding containers for the new
|
||||
deployment group.
|
||||
|
||||
#. Specify the required affinity levels. Add a zero value for any
|
||||
OpenStack or open source services not needed that would ordinarily
|
||||
run on the deployment group.
|
||||
|
||||
For example, to add a new deployment group with nova\_api and
|
||||
cinder\_api services reconfigure the ``openstack_config`` file:
|
||||
|
||||
.. code::
|
||||
|
||||
os-infra_hosts:
|
||||
my_new_node:
|
||||
ip: 3.4.5.6
|
||||
affinity:
|
||||
glance_container: 0
|
||||
heat_apis_container: 0
|
||||
heat_engine_container: 0
|
||||
horizon_container: 0
|
||||
nova_api_metadata_container: 0
|
||||
nova_cert_container: 0
|
||||
nova_conductor_container: 0
|
||||
nova_scheduler_container: 0
|
||||
nova_console_container: 0
|
||||
|
||||
``my_new_node`` is the name for the new deployment group.
|
||||
``ip 3.4.5.6`` is the ip address assigned to the new deployment
|
||||
group.
|
||||
|
||||
#. As another example, a new deployment group that houses the
|
||||
``cinder_api`` would have the following values:
|
||||
|
||||
.. code::
|
||||
|
||||
storage-infra_hosts:
|
||||
my_new_node:
|
||||
ip: 3.4.5.6
|
||||
affinity:
|
||||
cinder_api_container: 0
|
||||
|
||||
The ``storage-infra_host`` contains only the ``cinder_api`` services.
|
||||
|
||||
Destroy and recreate containers
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Resolving some issues may require destroying a container, and rebuilding
|
||||
that container from the beginning. It is possible to destroy and
|
||||
re-create a container with the ``destroy-containers.yml`` and
|
||||
``build-containers.yml`` commands. These Ansible scripts reside in the
|
||||
``openstack-ansible/playbooks`` repository.
|
||||
|
||||
#. Navigate to the ``openstack-ansible`` directory.
|
||||
|
||||
#. Run the **openstack-ansible destroy-containers.yml** commands,
|
||||
specifying the target containers and the container to be destroyed.
|
||||
|
||||
.. code::
|
||||
|
||||
$ openstack-ansible destroy-containers.yml \
|
||||
build-containers.yml OTHER_PLAYS -e container_group="CONTAINER_NAME"
|
||||
|
||||
#. Replace *``OTHER_PLAYS``* with the target container, and replace
|
||||
|
||||
#. Change the load balancer configuration to match the newly recreated
|
||||
container identity if needed.
|
||||
|
||||
Archive a container
|
||||
~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
If a container experiences a problem and needs to be deactivated, it is
|
||||
possible to flag the container as inactive, and archive it in the
|
||||
``/tmp`` directory.
|
||||
|
||||
#. Change into the playbooks directory.
|
||||
|
||||
#. Run the **openstack-ansible** with the **-e** argument, and replace
|
||||
*``HOST_NAME``* and *`` CONTAINER_NAME``* options with the
|
||||
applicable host and container names.
|
||||
|
||||
.. code::
|
||||
|
||||
$ openstack-ansible -e \
|
||||
"host_group=HOST_NAME,container_name=CONTAINER_NAME" \
|
||||
setup/archive-container.yml
|
||||
|
||||
By default, Ansible archives the container contents to the ``/tmp``
|
||||
directory on the host machine.
|
@ -0,0 +1,14 @@
|
||||
=========
|
||||
Firewalls
|
||||
=========
|
||||
|
||||
This is a draft backups page for the proposed OpenStack-Ansible
|
||||
operations guide.
|
||||
|
||||
.. TODO Describe general approaches to adding firewalls to OSA infrastructure.
|
||||
|
||||
Finding ports used by an external IP address
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
.. TODO explain how to find the ports used by the external IP
|
||||
(whether you deploy haproxy or not), and what are the default ports
|
@ -1,6 +1,138 @@
|
||||
=======================
|
||||
==========================
|
||||
Galera cluster maintenance
|
||||
==========================
|
||||
|
||||
maintenance-tasks/ops-galera-recovery.rst
|
||||
|
||||
Routine maintenance includes gracefully adding or removing nodes from
|
||||
the cluster without impacting operation and also starting a cluster
|
||||
after gracefully shutting down all nodes.
|
||||
|
||||
MySQL instances are restarted when creating a cluster, when adding a
|
||||
node, when the service is not running, or when changes are made to the
|
||||
``/etc/mysql/my.cnf`` configuration file.
|
||||
|
||||
Remove nodes
|
||||
~~~~~~~~~~~~
|
||||
|
||||
In the following example, all but one node was shut down gracefully:
|
||||
|
||||
.. code-block:: shell-session
|
||||
|
||||
# ansible galera_container -m shell -a "mysql -h localhost \
|
||||
-e 'show status like \"%wsrep_cluster_%\";'"
|
||||
node3_galera_container-3ea2cbd3 | FAILED | rc=1 >>
|
||||
ERROR 2002 (HY000): Can't connect to local MySQL server
|
||||
through socket '/var/run/mysqld/mysqld.sock' (2)
|
||||
|
||||
node2_galera_container-49a47d25 | FAILED | rc=1 >>
|
||||
ERROR 2002 (HY000): Can't connect to local MySQL server
|
||||
through socket '/var/run/mysqld/mysqld.sock' (2)
|
||||
|
||||
node4_galera_container-76275635 | success | rc=0 >>
|
||||
Variable_name Value
|
||||
wsrep_cluster_conf_id 7
|
||||
wsrep_cluster_size 1
|
||||
wsrep_cluster_state_uuid 338b06b0-2948-11e4-9d06-bef42f6c52f1
|
||||
wsrep_cluster_status Primary
|
||||
|
||||
|
||||
Compare this example output with the output from the multi-node failure
|
||||
scenario where the remaining operational node is non-primary and stops
|
||||
processing SQL requests. Gracefully shutting down the MariaDB service on
|
||||
all but one node allows the remaining operational node to continue
|
||||
processing SQL requests. When gracefully shutting down multiple nodes,
|
||||
perform the actions sequentially to retain operation.
|
||||
|
||||
Start a cluster
|
||||
~~~~~~~~~~~~~~~
|
||||
|
||||
Gracefully shutting down all nodes destroys the cluster. Starting or
|
||||
restarting a cluster from zero nodes requires creating a new cluster on
|
||||
one of the nodes.
|
||||
|
||||
#. Start a new cluster on the most advanced node.
|
||||
Check the ``seqno`` value in the ``grastate.dat`` file on all of the nodes:
|
||||
|
||||
.. code-block:: shell-session
|
||||
|
||||
# ansible galera_container -m shell -a "cat /var/lib/mysql/grastate.dat"
|
||||
node2_galera_container-49a47d25 | success | rc=0 >>
|
||||
# GALERA saved state version: 2.1
|
||||
uuid: 338b06b0-2948-11e4-9d06-bef42f6c52f1
|
||||
seqno: 31
|
||||
cert_index:
|
||||
|
||||
node3_galera_container-3ea2cbd3 | success | rc=0 >>
|
||||
# GALERA saved state version: 2.1
|
||||
uuid: 338b06b0-2948-11e4-9d06-bef42f6c52f1
|
||||
seqno: 31
|
||||
cert_index:
|
||||
|
||||
node4_galera_container-76275635 | success | rc=0 >>
|
||||
# GALERA saved state version: 2.1
|
||||
uuid: 338b06b0-2948-11e4-9d06-bef42f6c52f1
|
||||
seqno: 31
|
||||
cert_index:
|
||||
|
||||
In this example, all nodes in the cluster contain the same positive
|
||||
``seqno`` values as they were synchronized just prior to
|
||||
graceful shutdown. If all ``seqno`` values are equal, any node can
|
||||
start the new cluster.
|
||||
|
||||
.. code-block:: shell-session
|
||||
|
||||
# /etc/init.d/mysql start --wsrep-new-cluster
|
||||
|
||||
This command results in a cluster containing a single node. The
|
||||
``wsrep_cluster_size`` value shows the number of nodes in the
|
||||
cluster.
|
||||
|
||||
.. code-block:: shell-session
|
||||
|
||||
node2_galera_container-49a47d25 | FAILED | rc=1 >>
|
||||
ERROR 2002 (HY000): Can't connect to local MySQL server
|
||||
through socket '/var/run/mysqld/mysqld.sock' (111)
|
||||
|
||||
node3_galera_container-3ea2cbd3 | FAILED | rc=1 >>
|
||||
ERROR 2002 (HY000): Can't connect to local MySQL server
|
||||
through socket '/var/run/mysqld/mysqld.sock' (2)
|
||||
|
||||
node4_galera_container-76275635 | success | rc=0 >>
|
||||
Variable_name Value
|
||||
wsrep_cluster_conf_id 1
|
||||
wsrep_cluster_size 1
|
||||
wsrep_cluster_state_uuid 338b06b0-2948-11e4-9d06-bef42f6c52f1
|
||||
wsrep_cluster_status Primary
|
||||
|
||||
#. Restart MariaDB on the other nodes and verify that they rejoin the
|
||||
cluster.
|
||||
|
||||
.. code-block:: shell-session
|
||||
|
||||
node2_galera_container-49a47d25 | success | rc=0 >>
|
||||
Variable_name Value
|
||||
wsrep_cluster_conf_id 3
|
||||
wsrep_cluster_size 3
|
||||
wsrep_cluster_state_uuid 338b06b0-2948-11e4-9d06-bef42f6c52f1
|
||||
wsrep_cluster_status Primary
|
||||
|
||||
node3_galera_container-3ea2cbd3 | success | rc=0 >>
|
||||
Variable_name Value
|
||||
wsrep_cluster_conf_id 3
|
||||
wsrep_cluster_size 3
|
||||
wsrep_cluster_state_uuid 338b06b0-2948-11e4-9d06-bef42f6c52f1
|
||||
wsrep_cluster_status Primary
|
||||
|
||||
node4_galera_container-76275635 | success | rc=0 >>
|
||||
Variable_name Value
|
||||
wsrep_cluster_conf_id 3
|
||||
wsrep_cluster_size 3
|
||||
wsrep_cluster_state_uuid 338b06b0-2948-11e4-9d06-bef42f6c52f1
|
||||
wsrep_cluster_status Primary
|
||||
|
||||
Galera cluster recovery
|
||||
=======================
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Run the ``galera-bootstrap`` playbook to automatically recover
|
||||
a node or an entire environment. Run the ``galera install`` playbook
|
||||
@ -15,8 +147,8 @@ entire environment.
|
||||
|
||||
The cluster comes back online after completion of this command.
|
||||
|
||||
Single-node failure
|
||||
~~~~~~~~~~~~~~~~~~~
|
||||
Recover a single-node failure
|
||||
-----------------------------
|
||||
|
||||
If a single node fails, the other nodes maintain quorum and
|
||||
continue to process SQL requests.
|
||||
@ -55,8 +187,8 @@ continue to process SQL requests.
|
||||
further analysis on the output. As a last resort, rebuild the container
|
||||
for the node.
|
||||
|
||||
Multi-node failure
|
||||
~~~~~~~~~~~~~~~~~~
|
||||
Recover a multi-node failure
|
||||
----------------------------
|
||||
|
||||
When all but one node fails, the remaining node cannot achieve quorum and
|
||||
stops processing SQL requests. In this situation, failed nodes that
|
||||
@ -143,8 +275,8 @@ recover cannot join the cluster because it no longer exists.
|
||||
``mysqld`` command and perform further analysis on the output. As a
|
||||
last resort, rebuild the container for the node.
|
||||
|
||||
Complete failure
|
||||
~~~~~~~~~~~~~~~~
|
||||
Recover a complete environment failure
|
||||
--------------------------------------
|
||||
|
||||
Restore from backup if all of the nodes in a Galera cluster fail (do not
|
||||
shutdown gracefully). Run the following command to determine if all nodes in
|
||||
@ -184,8 +316,8 @@ each node has an identical copy of the data, we do not recommend to
|
||||
restart the cluster using the ``--wsrep-new-cluster`` command on one
|
||||
node.
|
||||
|
||||
Rebuilding a container
|
||||
~~~~~~~~~~~~~~~~~~~~~~
|
||||
Rebuild a container
|
||||
-------------------
|
||||
|
||||
Recovering from certain failures require rebuilding one or more containers.
|
||||
|
@ -0,0 +1,78 @@
|
||||
============================================
|
||||
Managing Object Storage for multiple regions
|
||||
============================================
|
||||
|
||||
This is a draft Object Storage page for the proposed OpenStack-Ansible
|
||||
operations guide.
|
||||
|
||||
Failovers for multi-region Object Storage
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
In multi-region Object Storage, objects are retrievable from an
|
||||
alternate location if the default location becomes unavailable.
|
||||
|
||||
.. important::
|
||||
|
||||
It is recommended to perform the following steps before a failure
|
||||
occurs to avoid having to dump and restore the database.
|
||||
|
||||
If a failure does occur, follow these steps to restore the database
|
||||
from the Primary (failed) Region:
|
||||
|
||||
#. Record the Primary Region output of the ``default_project_id`` for
|
||||
the specified user from the user table in the keystone database:
|
||||
|
||||
.. note::
|
||||
|
||||
The user is ``admin`` in this example.
|
||||
|
||||
.. code::
|
||||
|
||||
# mysql -e "SELECT default_project_id from keystone.user WHERE \
|
||||
name='admin';"
|
||||
|
||||
+----------------------------------+
|
||||
| default_project_id |
|
||||
+----------------------------------+
|
||||
| 76ef6df109744a03b64ffaad2a7cf504 |
|
||||
+-----------------—————————————————+
|
||||
|
||||
|
||||
#. Record the Secondary Region output of the ``default_project_id``
|
||||
for the specified user from the user table in the keystone
|
||||
database:
|
||||
|
||||
.. code::
|
||||
|
||||
# mysql -e "SELECT default_project_id from keystone.user WHERE \
|
||||
name='admin';"
|
||||
|
||||
+----------------------------------+
|
||||
| default_project_id |
|
||||
+----------------------------------+
|
||||
| 69c46f8ad1cf4a058aa76640985c |
|
||||
+----------------------------------+
|
||||
|
||||
#. In the Secondary Region, update the references to the
|
||||
``project_id`` to match the ID from the Primary Region:
|
||||
|
||||
.. code::
|
||||
|
||||
# export PRIMARY_REGION_TENANT_ID="76ef6df109744a03b64ffaad2a7cf504"
|
||||
# export SECONDARY_REGION_TENANT_ID="69c46f8ad1cf4a058aa76640985c"
|
||||
|
||||
# mysql -e "UPDATE keystone.assignment set \
|
||||
target_id='${PRIMARY_REGION_TENANT_ID}' \
|
||||
WHERE target_id='${SECONDARY_REGION_TENANT_ID}';"
|
||||
|
||||
# mysql -e "UPDATE keystone.user set \
|
||||
default_project_id='${PRIMARY_REGION_TENANT_ID}' WHERE \
|
||||
default_project_id='${SECONDARY_REGION_TENANT_ID}';"
|
||||
|
||||
# mysql -e "UPDATE keystone.project set \
|
||||
id='${PRIMARY_REGION_TENANT_ID}' WHERE \
|
||||
id='${SECONDARY_REGION_TENANT_ID}';"
|
||||
|
||||
The user in the Secondary Region now has access to objects PUT in the
|
||||
Primary Region. The Secondary Region can PUT objects accessible by the
|
||||
user in the Primary Region.
|
@ -0,0 +1,27 @@
|
||||
======================
|
||||
Networking maintenance
|
||||
======================
|
||||
|
||||
This is a draft networking maintenance page for the proposed OpenStack-Ansible
|
||||
operations guide.
|
||||
|
||||
Add network interfaces to LXC containers
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Remove network interfaces from LXC containers
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Add provider bridges using new NICs
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Remove provider bridges
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Move from Open vSwitch to LinuxBridge and vice versa
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Restart a neutron agent container
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Reference to networking guide/ops guide content
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
@ -0,0 +1,24 @@
|
||||
============================
|
||||
RabbitMQ cluster maintenance
|
||||
============================
|
||||
|
||||
This is a draft RabbitMQ cluster maintenance page for the proposed
|
||||
OpenStack-Ansible operations guide.
|
||||
|
||||
Create a RabbitMQ cluster
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Check the RabbitMQ cluster status
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Stop and restart a RabbitMQ cluster
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
RabbitMQ and mnesia
|
||||
~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Repair a partitioned RabbitMQ cluster for a single-node
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Repair a partitioned RabbitMQ cluster for a multi-node cluster
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
@ -0,0 +1,234 @@
|
||||
========================
|
||||
Scaling your environment
|
||||
========================
|
||||
|
||||
This is a draft environment scaling page for the proposed OpenStack-Ansible
|
||||
operations guide.
|
||||
|
||||
Add a new infrastructure node
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
While three infrastructure hosts are recommended, if further hosts are
|
||||
needed in an environment, it is possible to create additional nodes.
|
||||
|
||||
.. warning::
|
||||
|
||||
Make sure you back up your current OpenStack environment
|
||||
before adding any new nodes. See :ref:`backing-up` for more
|
||||
information.
|
||||
|
||||
#. Add the node to the ``infra_hosts`` stanza of the
|
||||
``/etc/openstack_deploy/openstack_user_config.yml``
|
||||
|
||||
.. code:: console
|
||||
|
||||
infra_hosts:
|
||||
[...]
|
||||
NEW_infra<node-ID>:
|
||||
ip: 10.17.136.32
|
||||
NEW_infra<node-ID>:
|
||||
ip: 10.17.136.33
|
||||
|
||||
#. Run the ``add_host`` playbook on the deployment host.
|
||||
|
||||
.. code:: console
|
||||
|
||||
# cd /opt/openstack-ansible/playbooks
|
||||
|
||||
#. Update the inventory to add new hosts. Make sure new rsyslog
|
||||
container names are updated. Send the updated results to ``dev/null``.
|
||||
|
||||
.. code:: console
|
||||
|
||||
# /opt/rpc-openstack/openstack-ansible/playbooks/inventory/dynamic_inventory.py > /dev/null
|
||||
|
||||
#. Create the ``/root/add_host.limit`` file, which contains all new node
|
||||
host names.
|
||||
|
||||
.. code:: console
|
||||
|
||||
# /opt/rpc-openstack/openstack-ansible/scripts/inventory-manage.py \
|
||||
-f /opt/rpc-openstack/openstack-ansible/playbooks/inventory/dynamic_inventory.py \
|
||||
-l |awk -F\| '/<NEW COMPUTE NODE>/ {print $2}' |sort -u | tee /root/add_host.limit
|
||||
|
||||
#. Run the ``setup-everything.yml`` playbook with the
|
||||
``limit`` argument.
|
||||
|
||||
.. warning::
|
||||
|
||||
Do not run the ``setup-everything.yml`` playbook
|
||||
without the ``--limit`` argument. Without ``--limit``, the
|
||||
playbook will restart all containers inside your environment.
|
||||
|
||||
.. code:: console
|
||||
|
||||
# openstack-ansible setup-everything.yml --limit @/root/add_host.limit
|
||||
# openstack-ansible --tags=openstack-host-hostfile setup-hosts.yml
|
||||
|
||||
#. Run the rpc-support playbooks.
|
||||
|
||||
.. code:: console
|
||||
|
||||
# ( cd /opt/rpc-openstack/rpcd/playbooks ; openstack-ansible rpc-support.yml )
|
||||
|
||||
#. Generate a new impersonation token, and add that token after the
|
||||
`maas_auth_token` variable in the ``user_rpco_variables_overrides.yml``
|
||||
file.
|
||||
|
||||
.. code:: console
|
||||
|
||||
- Update maas_auth_token /etc/openstack_deploy/user_rpco_variables_overrides.yml
|
||||
|
||||
#. Run the MaaS playbook on the deployment host.
|
||||
|
||||
.. code:: console
|
||||
|
||||
# ( cd /opt/rpc-openstack/rpcd/playbooks ; openstack-ansible setup-maas.yml
|
||||
--limit @/root/add_host.limit )
|
||||
|
||||
Test new nodes
|
||||
~~~~~~~~~~~~~~
|
||||
|
||||
After creating a new node, test that the node runs correctly by
|
||||
launching a new instance. Ensure that the new node can respond to
|
||||
a networking connection test through the :command:`ping` command.
|
||||
Log in to your monitoring system, and verify that the monitors
|
||||
return a green signal for the new node.
|
||||
|
||||
Add a compute host
|
||||
~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Use the following procedure to add a compute host to an operational
|
||||
cluster.
|
||||
|
||||
#. Configure the host as a target host. See `Prepare target hosts
|
||||
<http://docs.openstack.org/developer/openstack-ansible/install-guide/targethosts.html>`_
|
||||
for more information.
|
||||
|
||||
#. Edit the ``/etc/openstack_deploy/openstack_user_config.yml`` file and
|
||||
add the host to the ``compute_hosts`` stanza.
|
||||
|
||||
If necessary, also modify the ``used_ips`` stanza.
|
||||
|
||||
#. If the cluster is utilizing Telemetry/Metering (Ceilometer),
|
||||
edit the ``/etc/openstack_deploy/conf.d/ceilometer.yml`` file and add the
|
||||
host to the ``metering-compute_hosts`` stanza.
|
||||
|
||||
#. Run the following commands to add the host. Replace
|
||||
``NEW_HOST_NAME`` with the name of the new host.
|
||||
|
||||
.. code-block:: shell-session
|
||||
|
||||
# cd /opt/openstack-ansible/playbooks
|
||||
# openstack-ansible setup-hosts.yml --limit NEW_HOST_NAME
|
||||
# openstack-ansible setup-openstack.yml --skip-tags nova-key-distribute --limit NEW_HOST_NAME
|
||||
# openstack-ansible setup-openstack.yml --tags nova-key --limit compute_hosts
|
||||
|
||||
Remove a compute host
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The `openstack-ansible-ops <https://git.openstack.org/cgit/openstack/openstack-ansible-ops>`_
|
||||
repository contains a playbook for removing a compute host from an
|
||||
OpenStack-Ansible environment.
|
||||
To remove a compute host, follow the below procedure.
|
||||
|
||||
.. note::
|
||||
|
||||
This guide describes how to remove a compute node from an OSA environment
|
||||
completely. Perform these steps with caution, as the compute node will no
|
||||
longer be in service after the steps have been completed. This guide assumes
|
||||
that all data and instances have been properly migrated.
|
||||
|
||||
#. Disable all OpenStack services running on the compute node.
|
||||
This can include, but is not limited to, the ``nova-compute`` service
|
||||
and the neutron agent service.
|
||||
|
||||
.. note::
|
||||
|
||||
Ensure this step is performed first
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
# Run these commands on the compute node to be removed
|
||||
# stop nova-compute
|
||||
# stop neutron-linuxbridge-agent
|
||||
|
||||
#. Clone the ``openstack-ansible-ops`` repository to your deployment host:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ git clone https://git.openstack.org/openstack/openstack-ansible-ops \
|
||||
/opt/openstack-ansible-ops
|
||||
|
||||
#. Run the ``remove_compute_node.yml`` Ansible playbook with the
|
||||
``node_to_be_removed`` user variable set:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ cd /opt/openstack-ansible-ops/ansible_tools/playbooks
|
||||
openstack-ansible remove_compute_node.yml \
|
||||
-e node_to_be_removed="<name-of-compute-host>"
|
||||
|
||||
#. After the playbook completes, remove the compute node from the
|
||||
OpenStack-Ansible configuration file in
|
||||
``/etc/openstack_deploy/openstack_user_config.yml``.
|
||||
|
||||
Recover a Compute node failure
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The following procedure addresses Compute node failure if shared storage
|
||||
is used.
|
||||
|
||||
.. note::
|
||||
|
||||
If shared storage is not used, data can be copied from the
|
||||
``/var/lib/nova/instances`` directory on the failed Compute node
|
||||
``${FAILED_NODE}`` to another node ``${RECEIVING_NODE}``\ before
|
||||
performing the following procedure. Please note this method is
|
||||
not supported.
|
||||
|
||||
#. Re-launch all instances on the failed node.
|
||||
|
||||
#. Invoke the MySQL command line tool
|
||||
|
||||
#. Generate a list of instance UUIDs hosted on the failed node:
|
||||
|
||||
.. code::
|
||||
|
||||
mysql> select uuid from instances where host = '${FAILED_NODE}' and deleted = 0;
|
||||
|
||||
#. Set instances on the failed node to be hosted on a different node:
|
||||
|
||||
.. code::
|
||||
|
||||
mysql> update instances set host ='${RECEIVING_NODE}' where host = '${FAILED_NODE}' \
|
||||
and deleted = 0;
|
||||
|
||||
#. Reboot each instance on the failed node listed in the previous query
|
||||
to regenerate the XML files:
|
||||
|
||||
.. code::
|
||||
|
||||
# nova reboot —hard $INSTANCE_UUID
|
||||
|
||||
#. Find the volumes to check the instance has successfully booted and is
|
||||
at the login :
|
||||
|
||||
.. code::
|
||||
|
||||
mysql> select nova.instances.uuid as instance_uuid, cinder.volumes.id \
|
||||
as voume_uuid, cinder.volumes.status, cinder.volumes.attach_status, \
|
||||
cinder.volumes.mountpoint, cinder.volumes,display_name from \
|
||||
cinder.volumes inner join nova.instances on cinder.volumes.instance_uuid=nova.instances.uuid \
|
||||
where nova.instances.host = '${FAILED_NODE}';
|
||||
|
||||
#. If rows are found, detach and re-attach the volumes using the values
|
||||
listed in the previous query:
|
||||
|
||||
.. code::
|
||||
|
||||
# nova volume-detach $INSTANCE_UUID $VOLUME_UUID && \
|
||||
nova volume-attach $INSTANCE_UUID $VOLUME_UUID $VOLUME_MOUNTPOINT
|
||||
|
||||
#. Rebuild or replace the failed node as described in `Adding a Compute
|
||||
node <compute-add-node.html>`_
|
@ -4,3 +4,8 @@ Monitoring your environment
|
||||
|
||||
This is a draft monitoring environment page for the proposed OpenStack-Ansible
|
||||
operations guide.
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
monitor-environment/monitoring-systems.rst
|
||||
|
@ -0,0 +1,11 @@
|
||||
=======================================================
|
||||
Integrate OpenStack-Ansible into your monitoring system
|
||||
=======================================================
|
||||
|
||||
This is a draft monitoring system page for the proposed OpenStack-Ansible
|
||||
operations guide.
|
||||
|
||||
|
||||
.. TODO monitoring, at a high level, describe how to monitor the services,
|
||||
and how does haproxy currently check system health (because it can influence
|
||||
the monitoring process, and ppl may not be aware of the internals.
|
@ -8,4 +8,8 @@ operations guide.
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
verify-deploy.rst
|
||||
openstack-operations/verify-deploy.rst
|
||||
openstack-operations/access-environment.rst
|
||||
openstack-operations/managing-images.rst
|
||||
openstack-operations/managing-instances.rst
|
||||
openstack-operations/network-service.rst
|
||||
|
@ -0,0 +1,273 @@
|
||||
==========================
|
||||
Accessing your environment
|
||||
==========================
|
||||
|
||||
Viewing and setting environment variables
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
To connect to the OpenStack installation using command line clients, you must
|
||||
set the appropriate environment variables. OpenStack clients use environment
|
||||
variables to provide the information necessary to authenticate to the cloud.
|
||||
Variables can be viewed and downloaded from the Dashboard and set in the
|
||||
``admin-openrc.sh`` file on the controller node.
|
||||
|
||||
#. Log in to the Dashboard as the ``admin`` user.
|
||||
|
||||
#. Select the **Compute** tab in the **Project** section of the
|
||||
navigation pane, then click **Access & Security**.
|
||||
|
||||
#. Select the **API Access** tab, then click the **Download OpenStack RC
|
||||
File** button. Save the ``admin-openrc.sh`` file to your local system.
|
||||
|
||||
#. Open the ``admin-openrc.sh`` file in a text editor. The file will
|
||||
display:
|
||||
|
||||
.. important::
|
||||
|
||||
By default, the ``openrc`` file contains administrative credentials.
|
||||
It is automatically maintained by the system, and should not by
|
||||
edited by hand.
|
||||
|
||||
.. code::
|
||||
|
||||
#!/bin/bash
|
||||
|
||||
# To use an Openstack cloud you need to authenticate against keystone, which
|
||||
# returns a **Token** and **Service Catalog**. The catalog contains the
|
||||
# endpoint for all services the user/tenant has access to - including nova,
|
||||
# glance, keystone, swift.
|
||||
#
|
||||
# *NOTE*: Using the 2.0 *auth api* does not mean that compute api is 2.0.We
|
||||
# will use the 1.1 *compute api*
|
||||
export OS_AUTH_URL=http://192.168.0.7:5000/v2.0
|
||||
|
||||
# With the addition of Keystone we have standardized on the term **tenant**
|
||||
# as the entity that owns the resources.
|
||||
export OS_TENANT_ID=25da08e142e24f55a9b27044bc0bdf4e
|
||||
export OS_TENANT_NAME="admin"
|
||||
|
||||
# In addition to the owning entity (tenant), OpenStack stores the entity
|
||||
# performing the action as the **user**.
|
||||
export OS_USERNAME="admin"
|
||||
|
||||
# With Keystone you pass the keystone password.
|
||||
echo "Please enter your OpenStack Password: "
|
||||
read -sr OS_PASSWORD_INPUT
|
||||
export OS_PASSWORD=$OS_PASSWORD_INPUT
|
||||
|
||||
# If your configuration has multiple regions, we set that information here.
|
||||
# OS_REGION_NAME is optional and only valid in certain environments.
|
||||
export OS_REGION_NAME="RegionOne"
|
||||
# Don't leave a blank variable, unset it if it was empty
|
||||
if [ -z "$OS_REGION_NAME" ]; then unset OS_REGION_NAME; fi
|
||||
|
||||
|
||||
#. Add the following environment variables entries to the
|
||||
``admin-openrc.sh`` file to ensure the OpenStack clients connect to
|
||||
the correct endpoint type from the service catalog:
|
||||
|
||||
.. code::
|
||||
|
||||
CINDER_ENDPOINT_TYPE=internalURL
|
||||
NOVA_ENDPOINT_TYPE=internalURL
|
||||
OS_ENDPOINT_TYPE=internalURL
|
||||
|
||||
#. Log in to the controller node.
|
||||
|
||||
#. Before running commands, source the ``admin-openrc`` file to set
|
||||
environment variables. At the command prompt, type:
|
||||
|
||||
.. code::
|
||||
|
||||
$ source admin-openrc
|
||||
|
||||
|
||||
Managing the cloud using the command-line
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
This section describes some of the more common commands to view and
|
||||
manage the cloud.
|
||||
|
||||
Log in to the controller node to run the following commands:
|
||||
|
||||
Server list
|
||||
The :command:`openstack image list` command shows details about currently
|
||||
available images:
|
||||
|
||||
.. code::
|
||||
|
||||
$ openstack image list
|
||||
+------------------+--------------+--------+
|
||||
| ID | Name | Status |
|
||||
+------------------+--------------+--------+
|
||||
| [ID truncated] | ExampleImage | active |
|
||||
+------------------+--------------+--------+
|
||||
|
||||
|
||||
List services
|
||||
The :command:`nova service-list` command details the currently running
|
||||
services:
|
||||
|
||||
.. code::
|
||||
|
||||
$ nova service-list
|
||||
+----+------------------+------------+----------+---------+-------+----------------------------+-----------------+
|
||||
| Id | Binary | Host | Zone | Status | State | Updated_at | Disabled Reason |
|
||||
+----+------------------+------------+----------+---------+-------+----------------------------+-----------------+
|
||||
| 4 | nova-consoleauth | controller | internal | enabled | up | 2016-12-14T04:06:03.000000 | - |
|
||||
| 5 | nova-scheduler | controller | internal | enabled | up | 2016-12-14T04:06:03.000000 | - |
|
||||
| 6 | nova-conductor | controller | internal | enabled | up | 2016-12-14T04:05:59.000000 | - |
|
||||
| 9 | nova-compute | compute | nova | enabled | down | 2016-10-21T02:35:03.000000 | - |
|
||||
+----+------------------+------------+----------+---------+-------+----------------------------+-----------------+
|
||||
|
||||
|
||||
View logs
|
||||
All logs are available in the ``/var/log/`` directory and its
|
||||
subdirectories. The **tail** command shows the most recent entries
|
||||
in a specified log file:
|
||||
|
||||
.. code::
|
||||
|
||||
$ tail /var/log/nova/nova.log
|
||||
|
||||
|
||||
See available flavors
|
||||
The **openstack flavor list** command lists the *flavors* that are
|
||||
available. These are different disk sizes that can be assigned to
|
||||
images:
|
||||
|
||||
.. code::
|
||||
|
||||
$ nova flavor-list
|
||||
+----+-----------+-----------+------+-----------+------+-------+-------------+
|
||||
| ID | Name | Memory_MB | Disk | Ephemeral | Swap | VCPUs | RXTX_Factor |
|
||||
+----+-----------+-----------+------+-----------+------+-------+-------------+
|
||||
| 1 | m1.tiny | 512 | 0 | 0 | | 1 | 1.0 |
|
||||
| 2 | m1.small | 2048 | 10 | 20 | | 1 | 1.0 |
|
||||
| 3 | m1.medium | 4096 | 10 | 40 | | 2 | 1.0 |
|
||||
| 4 | m1.large | 8192 | 10 | 80 | | 4 | 1.0 |
|
||||
| 5 | m1.xlarge | 16384 | 10 | 160 | | 8 | 1.0 |
|
||||
+----+-----------+-----------+------+-----------+------+-------+-------------+
|
||||
|
||||
|
||||
.. important::
|
||||
|
||||
Do not remove the default flavors.
|
||||
|
||||
List images
|
||||
The **openstack image list** command lists the currently available
|
||||
images:
|
||||
|
||||
.. code::
|
||||
|
||||
$ openstack image list
|
||||
+--------------------------+----------------------------+--------+
|
||||
| ID | Name | Status |
|
||||
+--------------------------+----------------------------+--------+
|
||||
| 033c0027-[ID truncated] | cirros-image | active |
|
||||
| 0ccfc8c4-[ID truncated] | My Image 2 | active |
|
||||
| 85a0a926-[ID truncated] | precise-image | active |
|
||||
+--------------------------+----------------------------+--------+
|
||||
|
||||
|
||||
List floating IP addresses
|
||||
The **openstack floating ip list** command lists the currently
|
||||
available floating IP addresses and the instances they are
|
||||
associated with:
|
||||
|
||||
.. code::
|
||||
|
||||
$ openstack floating ip list
|
||||
+------------------+------------------+---------------------+------------ +
|
||||
| id | fixed_ip_address | floating_ip_address | port_id |
|
||||
+------------------+------------------+---------------------+-------------+
|
||||
| 0a88589a-ffac... | | 208.113.177.100 | |
|
||||
+------------------+------------------+---------------------+-------------+
|
||||
|
||||
|
||||
OpenStack client utilities
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
OpenStack client utilities are a convenient way to interact with
|
||||
OpenStack from the command line on the workstation, without being logged
|
||||
in to the controller nodes.
|
||||
|
||||
.. NOTE FROM JP TO ADD LATER:
|
||||
If we talk about utilities, I suggest we move the CLI utilities section
|
||||
above, because it's used already in things above. It makes sense to first
|
||||
install them and then use them. I'd in that case I'd mention that they don't
|
||||
need to be installed /upgraded again on the utility containers, because
|
||||
they already handled by OSA deployment.
|
||||
|
||||
Python client utilities are available using the Python Package Index
|
||||
(PyPI), and can be installed on most Linux systems using these commands:
|
||||
|
||||
.. NOTE FROM JP: I'd maybe mention the python-openstackclient first. It should
|
||||
be our first citizen in the future.
|
||||
|
||||
.. code::
|
||||
|
||||
# pip install python-PROJECTclient
|
||||
|
||||
.. note::
|
||||
|
||||
The keystone client utility is deprecated. The OpenStackClient
|
||||
utility should be used which supports v2 and v3 Identity API.
|
||||
|
||||
|
||||
Upgrade or remove clients
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
To upgrade a client, add the **--upgrade** option to the command:
|
||||
|
||||
.. code::
|
||||
|
||||
# pip install --upgrade python-PROJECTclient
|
||||
|
||||
|
||||
To remove a client, run the **pip uninstall** command:
|
||||
|
||||
.. code::
|
||||
|
||||
# pip uninstall python-PROJECTclient
|
||||
|
||||
|
||||
For more information about OpenStack client utilities, see these links:
|
||||
|
||||
- `OpenStack API Quick
|
||||
Start <http://developer.openstack.org/api-guide/quick-start/index.html>`__
|
||||
|
||||
- `OpenStackClient
|
||||
commands <http://docs.openstack.org/developer/python-openstackclient/command-list.html>`__
|
||||
|
||||
- `Image Service (glance) CLI
|
||||
commands <http://docs.openstack.org/cli-reference/glance.html>`__
|
||||
|
||||
- `Image Service (glance) CLI command cheat
|
||||
sheet <http://docs.openstack.org/user-guide/cli-cheat-sheet.html#images-glance>`__
|
||||
|
||||
- `Compute (nova) CLI
|
||||
commands <http://docs.openstack.org/cli-reference/nova.html>`__
|
||||
|
||||
- `Compute (nova) CLI command cheat
|
||||
sheet <http://docs.openstack.org/user-guide/cli-cheat-sheet.html#compute-nova>`__
|
||||
|
||||
- `Networking (neutron) CLI
|
||||
commands <http://docs.openstack.org/cli-reference/neutron.html>`__
|
||||
|
||||
- `Networking (neutron) CLI command cheat
|
||||
sheet <http://docs.openstack.org/user-guide/cli-cheat-sheet.html#networking-neutron>`__
|
||||
|
||||
- `Block Storage (cinder) CLI commands
|
||||
<http://docs.openstack.org/cli-reference/cinder.html>`__
|
||||
|
||||
- `Block Storage (cinder) CLI command cheat
|
||||
sheet <http://docs.openstack.org/user-guide/cli-cheat-sheet.html#block-storage-cinder>`__
|
||||
|
||||
- `python-keystoneclient <https://pypi.python.org/pypi/python-keystoneclient/>`__
|
||||
|
||||
- `python-glanceclient <https://pypi.python.org/pypi/python-glanceclient/>`__
|
||||
|
||||
- `python-novaclient <https://pypi.python.org/pypi/python-novaclient/>`__
|
||||
|
||||
- `python-neutronclient <https://pypi.python.org/pypi/python-neutronclient/>`__
|
@ -0,0 +1,125 @@
|
||||
===============
|
||||
Managing images
|
||||
===============
|
||||
|
||||
.. FROM JP TO ADD:
|
||||
I think a far more interesting section for operations is how to handle the
|
||||
CHANGES of images. For example, deprecation of images, re-uploading new
|
||||
ones... The process is dependant on each company, but at least it would be
|
||||
original content, and far more valuable IMO. But it implies research.
|
||||
|
||||
An image represents the operating system, software, and any settings
|
||||
that instances may need depending on the project goals. Create images
|
||||
first before creating any instances.
|
||||
|
||||
Adding images can be done through the Dashboard, or the command line.
|
||||
Another option available is the the ``python-openstackclient`` tool, which
|
||||
can be installed on the controller node, or on a workstation.
|
||||
|
||||
Adding an image using the Dashboard
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
In order to add an image using the Dashboard, prepare an image binary
|
||||
file, which must be accessible over HTTP using a valid and direct URL.
|
||||
Images can be compressed using ``.zip`` or ``.tar.gz``.
|
||||
|
||||
.. note::
|
||||
|
||||
Uploading images using the Dashboard will be available to users
|
||||
with administrator privileges. Operators can set user access
|
||||
privileges.
|
||||
|
||||
#. Log in to the Dashboard.
|
||||
|
||||
#. Select the **Admin** tab in the navigation pane and click **images**.
|
||||
|
||||
#. Click the **Create Image** button. The **Create an Image** dialog box
|
||||
will appear.
|
||||
|
||||
#. Enter the details of the image, including the **Image Location**,
|
||||
which is where the URL location of the image is required.
|
||||
|
||||
#. Click the **Create Image** button. The newly created image may take
|
||||
some time before it is completely uploaded since the image arrives in
|
||||
an image queue.
|
||||
|
||||
|
||||
Adding an image using the command line
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Log into the controller node directly to add images using the command
|
||||
line with OpenStack command line clients. Glance commands allow users to
|
||||
add, manipulate, and manage images.
|
||||
|
||||
Alternatively, configure the environment with administrative access to
|
||||
the controller.
|
||||
|
||||
#. Log into the controller node.
|
||||
|
||||
#. Run the ``openstack image create`` command, and specify the image name.
|
||||
Use the
|
||||
``--file <The Image File>`` variable to specify the image file.
|
||||
|
||||
#. Run the ``openstack image set`` command, and specify the image name with the
|
||||
``--name <The Image Name>`` variable.
|
||||
|
||||
#. View a list of all the images currently available with ``openstack
|
||||
image list``.
|
||||
|
||||
#. Run the ``openstack image list`` command to view more details on each image.
|
||||
|
||||
.. list-table:: **glance image details**
|
||||
:widths: 33 33 33
|
||||
:header-rows: 1
|
||||
|
||||
* - Variable
|
||||
- Required
|
||||
- Details
|
||||
* - ``--name NAME``
|
||||
- Optional
|
||||
- A name for the image
|
||||
* - ``--public [True|False]``
|
||||
- Optional
|
||||
- If set to ``true``, makes the image available to all users. Permission
|
||||
to set this variable is admin only by default.
|
||||
* - ``--protected [True|False]``
|
||||
- Optional
|
||||
- If set to ``true``, this variable prevents an image from being deleted.
|
||||
* - ``--container-format CONTAINER_FORMAT``
|
||||
- Required
|
||||
- The type of container format, one of ``ami``, ``ari``, ``aki``,
|
||||
``bare``, or ``ovf``
|
||||
* - ``--disk-format DISK_FORMAT``
|
||||
- Required
|
||||
- The type of disk format, one of ``ami``, ``ari``, ``aki``, ``vhd``,
|
||||
``vdi``, and ``iso``
|
||||
* - ``--owner PROJECT_ID``
|
||||
- Optional
|
||||
- The tenant who should own the image.
|
||||
* - ``--size SIZE``
|
||||
- Optional
|
||||
- Size of the image data, which is measured in bytes.
|
||||
* - ``--min-disk DISK_GB``
|
||||
- Optional
|
||||
- The minimum size of the disk needed to boot the image being configured,
|
||||
which is measured in gigabytes.
|
||||
* - ``--min-ram DISK_GB``
|
||||
- Optional
|
||||
- The minimum amount of RAM needed to boot the image being configured,
|
||||
which is measured in megabytes.
|
||||
* - ``--location IMAGE_URL``
|
||||
- Optional
|
||||
- The location where the image data resides. This variables sets the
|
||||
location as a URL. If the image data is stored on a swift service,
|
||||
specify: swift://account:<key@example.com>/container/obj.
|
||||
* - ``--checksum CHECKSUM``
|
||||
- Optional
|
||||
- Image data hash used for verification.
|
||||
* - ``--copy-from IMAGE_URL``
|
||||
- Optional
|
||||
- Indicates that the image server should copy data immediately, and store
|
||||
it in its configured image store.
|
||||
* - ``--property KEY=VALUE``
|
||||
- Optional
|
||||
- This variable associates an arbitrary property to the image, and can be
|
||||
used multiple times.
|
@ -0,0 +1,221 @@
|
||||
==================
|
||||
Managing instances
|
||||
==================
|
||||
|
||||
This chapter describes how to create and access instances.
|
||||
|
||||
Creating an instance using the Dashboard
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Using an image, create a new instance via the Dashboard options.
|
||||
|
||||
#. Log into the Dashboard, and select the **Compute** project from the
|
||||
drop down list.
|
||||
|
||||
#. Click the **Images** option.
|
||||
|
||||
#. Locate the image that will act as the instance base from the
|
||||
**Images** table.
|
||||
|
||||
#. Click **Launch** from the **Actions** column.
|
||||
|
||||
#. Check the **Launch Instances** dialog, and find the **details** tab.
|
||||
Enter the appropriate values for the instance.
|
||||
|
||||
#. In the Launch Instance dialog, click the **Access & Security** tab.
|
||||
Select the keypair. Set the security group as "default".
|
||||
|
||||
#. Click the **Networking tab**. This tab will be unavailable if
|
||||
OpenStack networking (neutron) has not been enabled. If networking
|
||||
is enabled, select the networks on which the instance will
|
||||
reside.
|
||||
|
||||
#. Click the **Volume Options tab**. This tab will only be available
|
||||
if a Block Storage volume exists for the instance. Select
|
||||
**Don't boot from a volume** for now.
|
||||
|
||||
For more information on attaching Block Storage volumes to
|
||||
instances for persistent storage, see `the
|
||||
“Managing volumes for persistent
|
||||
storage” section <manage-volumes-persistent-storage.html>`__.
|
||||
|
||||
#. Add customisation scripts, if needed, by clicking the
|
||||
**Post-Creation** tab. These run after the instance has been
|
||||
created. Some instances support user data, such as root passwords,
|
||||
or admin users. Enter the information specific to to the instance
|
||||
here if required.
|
||||
|
||||
#. Click **Advanced Options**. Specify whether the instance uses a
|
||||
configuration drive to store metadata by selecting a disk
|
||||
partition type.
|
||||
|
||||
#. Click **Launch** to create the instance. The instance will start on a
|
||||
compute node. The **Instance** page will open and start creating a
|
||||
new instance. The **Instance** page that opens will list the instance
|
||||
name, size, status, and task. Power state and public and private IP
|
||||
addresses are also listed here.
|
||||
|
||||
The process will take less than a minute to complete. Instance
|
||||
creation is complete when the status is listed as active. Refresh the
|
||||
page to see the new active instance.
|
||||
|
||||
.. list-table:: **Launching an instance options**
|
||||
:widths: 33 33 33
|
||||
:header-rows: 1
|
||||
|
||||
* - Field Name
|
||||
- Required
|
||||
- Details
|
||||
* - **Availability Zone**
|
||||
- Optional
|
||||
- The availability zone in which the image service creates the instance.
|
||||
If no availability zones is defined, no instances will be found. The
|
||||
cloud provider sets the availability zone to a specific value.
|
||||
* - **Instance Name**
|
||||
- Required
|
||||
- The name of the new instance, which becomes the initial host name of the
|
||||
server. If the server name is changed in the API or directly changed,
|
||||
the Dashboard names remain unchanged
|
||||
* - **Image**
|
||||
- Required
|
||||
- The type of container format, one of ``ami``, ``ari``, ``aki``,
|
||||
``bare``, or ``ovf``
|
||||
* - **Flavor**
|
||||
- Required
|
||||
- The vCPU, Memory, and Disk configuration. Note that larger flavors can
|
||||
take a long time to create. If creating an instance for the first time
|
||||
and want something small with which to test, select ``m1.small``.
|
||||
* - **Instance Count**
|
||||
- Required
|
||||
- If creating multiple instances with this configuration, enter an integer
|
||||
up to the number permitted by the quota, which is ``10`` by default.
|
||||
* - **Instance Boot Source**
|
||||
- Required
|
||||
- Specify whether the instance will be based on an image or a snapshot. If
|
||||
it is the first time creating an instance, there will not yet be any
|
||||
snapshots available.
|
||||
* - **Image Name**
|
||||
- Required
|
||||
- The instance will boot from the selected image. This option will be
|
||||
pre-populated with the instance selected from the table. However, choose
|
||||
``Boot from Snapshot`` in **Instance Boot Source**, and it will default
|
||||
to ``Snapshot`` instead.
|
||||
* - **Security Groups**
|
||||
- Optional
|
||||
- This option assigns security groups to an instance.
|
||||
The default security group activates when no customised group is
|
||||
specified here. Security Groups, similar to a cloud firewall, define
|
||||
which incoming network traffic is forwarded to instances.
|
||||
* - **Keypair**
|
||||
- Optional
|
||||
- Specify a key pair with this option. If the image uses a static key set
|
||||
(not recommended), a key pair is not needed.
|
||||
* - **Selected Networks**
|
||||
- Optional
|
||||
- To add a network to an instance, click the **+** in the **Networks
|
||||
field**.
|
||||
* - **Customisation Script**
|
||||
- Optional
|
||||
- Specify a customisation script. This script runs after the instance
|
||||
launches and becomes active.
|
||||
|
||||
|
||||
Creating an instance using the command line
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
On the command line, image creation is managed with the **nova boot**
|
||||
command. Before launching an image, determine what images and flavors
|
||||
are available to create a new instance using the **nova image-list** and
|
||||
**nova flavor-list** commands.
|
||||
|
||||
#. Log in to the controller node.
|
||||
|
||||
#. Issue the **nova boot** command with a name for the instance, along
|
||||
with the name of the image and flavor to use:
|
||||
|
||||
.. code::
|
||||
|
||||
$ nova boot --image precise-image --flavor=2 --key-name example-key example-instance
|
||||
+-------------------------------------+--------------------------------------+
|
||||
| Property | Value |
|
||||
+-------------------------------------+--------------------------------------+
|
||||
| OS-DCF:diskConfig | MANUAL |
|
||||
| OS-EXT-SRV-ATTR:host | None |
|
||||
| OS-EXT-SRV-ATTR:hypervisor_hostname | None |
|
||||
| OS-EXT-SRV-ATTR:instance_name | instance-0000000d |
|
||||
| OS-EXT-STS:power_state | 0 |
|
||||
| OS-EXT-STS:task_state | scheduling |
|
||||
| OS-EXT-STS:vm_state | building |
|
||||
| accessIPv4 | |
|
||||
| accessIPv6 | |
|
||||
| adminPass | ATSEfRY9fZPx |
|
||||
| config_drive | |
|
||||
| created | 2012-08-02T15:43:46Z |
|
||||
| flavor | m1.small |
|
||||
| hostId | |
|
||||
| id | 5bf46a3b-084c-4ce1-b06f-e460e875075b |
|
||||
| image | precise-image |
|
||||
| key_name | example-key |
|
||||
| metadata | {} |
|
||||
| name | example-instance |
|
||||
| progress | 0 |
|
||||
| status | BUILD |
|
||||
| tenant_id | b4769145977045e2a9279c842b09be6a |
|
||||
| updated | 2012-08-02T15:43:46Z |
|
||||
| user_id | 5f2f2c28bdc844f9845251290b524e80 |
|
||||
+-------------------------------------+--------------------------------------+
|
||||
|
||||
|
||||
#. To check that the instance was created successfully, issue the **nova
|
||||
list** command:
|
||||
|
||||
.. code::
|
||||
|
||||
$ nova list
|
||||
+------------------+------------------+--------+-------------------+
|
||||
| ID | Name | Status | Networks |
|
||||
+------------------+------------------+--------+-------------------+
|
||||
| [ID truncated] | example-instance | ACTIVE | public=192.0.2.0 |
|
||||
+------------------+------------------+--------+-------------------+
|
||||
|
||||
|
||||
Managing an instance
|
||||
~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
#. Log in to the Dashboard. Select one of the projects, and click
|
||||
**Instances**.
|
||||
|
||||
#. Select an instance from the list of available instances.
|
||||
|
||||
#. Check the **Actions** column, and click on the **More** option.
|
||||
Select the instance state.
|
||||
|
||||
The **Actions** column includes the following options:
|
||||
|
||||
- Resize or rebuild any instance
|
||||
|
||||
- View the instance console log
|
||||
|
||||
- Edit the instance
|
||||
|
||||
- Modify security groups
|
||||
|
||||
- Pause, resume, or suspend the instance
|
||||
|
||||
- Soft or hard reset the instance
|
||||
|
||||
.. note::
|
||||
|
||||
Terminate the instance under the **Actions** column.
|
||||
|
||||
|
||||
Managing volumes for persistent storage
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Volumes attach to instances, enabling persistent storage. Volume
|
||||
storage provides a source of memory for instances. Administrators can
|
||||
attach volumes to a running instance, or move a volume from one
|
||||
instance to another.
|
||||
|
||||
Live migration
|
||||
~~~~~~~~~~~~~~
|
@ -0,0 +1,41 @@
|
||||
==================
|
||||
Networking service
|
||||
==================
|
||||
|
||||
Load-Balancer-as-a-Service (LBaaS)
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The LBaaS functionality is configured and deployed using
|
||||
OpenStack-Ansible. For more information about LBaaS operations,
|
||||
see `LBaaS`_ in the OpenStack Networking guide.
|
||||
|
||||
Understand the following characteristics of the OpenStack-Ansible LBaaS
|
||||
technical preview:
|
||||
|
||||
* The preview release is not intended to provide highly scalable or
|
||||
highly available load balancing services.
|
||||
* Testing and recommended usage is limited to 10 members in a pool
|
||||
and no more than 20 pools.
|
||||
* Virtual load balancers deployed as part of the LBaaS service are
|
||||
not monitored for availability or performance.
|
||||
* OpenStack-Ansible enables LBaaS v2 with the default HAProxy-based agent.
|
||||
* The Octavia agent is not supported.
|
||||
* Integration with physical load balancer devices is not supported.
|
||||
* Customers can use API or CLI LBaaS interfaces.
|
||||
* The Dashboard offers a panel for creating and managing LBaaS load balancers,
|
||||
listeners, pools, members, and health checks.
|
||||
* SDN integration is not supported.
|
||||
|
||||
|
||||
In Mitaka, you can `enable Dashboard (horizon) panels`_ for LBaaS.
|
||||
Additionally, a customer can specify a list of servers behind a
|
||||
listener and reuse that list for another listener. This feature,
|
||||
called *shared pools*, only applies to customers that have a large
|
||||
number of listeners (ports) behind a load balancer.
|
||||
|
||||
.. _LBaaS:
|
||||
http://docs.openstack.org/mitaka/networking-guide/config-lbaas.html
|
||||
|
||||
.. _enable Dashboard (horizon) panels:
|
||||
http://docs.openstack.org/developer/openstack-ansible/mitaka/install-guide/
|
||||
configure-network-services.html#deploying-lbaas-v2
|
@ -0,0 +1,68 @@
|
||||
===============================
|
||||
Verifying your cloud deployment
|
||||
===============================
|
||||
|
||||
This is a draft cloud verification page for the proposed
|
||||
OpenStack-Ansible operations guide.
|
||||
|
||||
Verifying your OpenStack-Ansible operation
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
This chapter goes through the verification steps for a basic operation of
|
||||
the OpenStack API and dashboard.
|
||||
|
||||
.. note::
|
||||
|
||||
The utility container provides a CLI environment for additional
|
||||
configuration and testing.
|
||||
|
||||
#. Determine the utility container name:
|
||||
|
||||
.. code::
|
||||
|
||||
$ lxc-ls | grep utility
|
||||
infra1_utility_container-161a4084
|
||||
|
||||
#. Access the utility container:
|
||||
|
||||
.. code::
|
||||
|
||||
$ lxc-attach -n infra1_utility_container-161a4084
|
||||
|
||||
#. Source the ``admin`` tenant credentials:
|
||||
|
||||
.. code::
|
||||
|
||||
# source openrc
|
||||
|
||||
#. Run an OpenStack command that uses one or more APIs. For example:
|
||||
|
||||
.. code::
|
||||
|
||||
# openstack user list --domain default
|
||||
+----------------------------------+--------------------+
|
||||
| ID | Name |
|
||||
+----------------------------------+--------------------+
|
||||
| 04007b990d9442b59009b98a828aa981 | glance |
|
||||
| 0ccf5f2020ca4820847e109edd46e324 | keystone |
|
||||
| 1dc5f638d4d840c690c23d5ea83c3429 | neutron |
|
||||
| 3073d0fa5ced46f098215d3edb235d00 | cinder |
|
||||
| 5f3839ee1f044eba921a7e8a23bb212d | admin |
|
||||
| 61bc8ee7cc9b4530bb18acb740ee752a | stack_domain_admin |
|
||||
| 77b604b67b79447eac95969aafc81339 | alt_demo |
|
||||
| 85c5bf07393744dbb034fab788d7973f | nova |
|
||||
| a86fc12ade404a838e3b08e1c9db376f | swift |
|
||||
| bbac48963eff4ac79314c42fc3d7f1df | ceilometer |
|
||||
| c3c9858cbaac4db9914e3695b1825e41 | dispersion |
|
||||
| cd85ca889c9e480d8ac458f188f16034 | demo |
|
||||
| efab6dc30c96480b971b3bd5768107ab | heat |
|
||||
+----------------------------------+--------------------+
|
||||
|
||||
#. With a web browser, access the Dashboard using the external load
|
||||
balancer IP address. This is defined by the ``external_lb_vip_address``
|
||||
option in the ``/etc/openstack_deploy/openstack_user_config.yml``
|
||||
file. The dashboard uses HTTPS on port 443.
|
||||
|
||||
#. Authenticate using the username ``admin`` and password defined by
|
||||
the ``keystone_auth_admin_password`` option in the
|
||||
``/etc/openstack_deploy/user_osa_secrets.yml`` file.
|
@ -1,29 +0,0 @@
|
||||
=====================
|
||||
Adding a compute host
|
||||
=====================
|
||||
|
||||
Use the following procedure to add a compute host to an operational
|
||||
cluster.
|
||||
|
||||
#. Configure the host as a target host. See `Prepare target hosts
|
||||
<http://docs.openstack.org/developer/openstack-ansible/install-guide/targethosts.html>`_
|
||||
for more information.
|
||||
|
||||
#. Edit the ``/etc/openstack_deploy/openstack_user_config.yml`` file and
|
||||
add the host to the ``compute_hosts`` stanza.
|
||||
|
||||
If necessary, also modify the ``used_ips`` stanza.
|
||||
|
||||
#. If the cluster is utilizing Telemetry/Metering (Ceilometer),
|
||||
edit the ``/etc/openstack_deploy/conf.d/ceilometer.yml`` file and add the
|
||||
host to the ``metering-compute_hosts`` stanza.
|
||||
|
||||
#. Run the following commands to add the host. Replace
|
||||
``NEW_HOST_NAME`` with the name of the new host.
|
||||
|
||||
.. code-block:: shell-session
|
||||
|
||||
# cd /opt/openstack-ansible/playbooks
|
||||
# openstack-ansible setup-hosts.yml --limit NEW_HOST_NAME
|
||||
# openstack-ansible setup-openstack.yml --skip-tags nova-key-distribute --limit NEW_HOST_NAME
|
||||
# openstack-ansible setup-openstack.yml --tags nova-key --limit compute_hosts
|
@ -1,32 +0,0 @@
|
||||
==============
|
||||
Removing nodes
|
||||
==============
|
||||
|
||||
In the following example, all but one node was shut down gracefully:
|
||||
|
||||
.. code-block:: shell-session
|
||||
|
||||
# ansible galera_container -m shell -a "mysql -h localhost \
|
||||
-e 'show status like \"%wsrep_cluster_%\";'"
|
||||
node3_galera_container-3ea2cbd3 | FAILED | rc=1 >>
|
||||
ERROR 2002 (HY000): Can't connect to local MySQL server
|
||||
through socket '/var/run/mysqld/mysqld.sock' (2)
|
||||
|
||||
node2_galera_container-49a47d25 | FAILED | rc=1 >>
|
||||
ERROR 2002 (HY000): Can't connect to local MySQL server
|
||||
through socket '/var/run/mysqld/mysqld.sock' (2)
|
||||
|
||||
node4_galera_container-76275635 | success | rc=0 >>
|
||||
Variable_name Value
|
||||
wsrep_cluster_conf_id 7
|
||||
wsrep_cluster_size 1
|
||||
wsrep_cluster_state_uuid 338b06b0-2948-11e4-9d06-bef42f6c52f1
|
||||
wsrep_cluster_status Primary
|
||||
|
||||
|
||||
Compare this example output with the output from the multi-node failure
|
||||
scenario where the remaining operational node is non-primary and stops
|
||||
processing SQL requests. Gracefully shutting down the MariaDB service on
|
||||
all but one node allows the remaining operational node to continue
|
||||
processing SQL requests. When gracefully shutting down multiple nodes,
|
||||
perform the actions sequentially to retain operation.
|
@ -1,88 +0,0 @@
|
||||
==================
|
||||
Starting a cluster
|
||||
==================
|
||||
|
||||
Gracefully shutting down all nodes destroys the cluster. Starting or
|
||||
restarting a cluster from zero nodes requires creating a new cluster on
|
||||
one of the nodes.
|
||||
|
||||
#. Start a new cluster on the most advanced node.
|
||||
Check the ``seqno`` value in the ``grastate.dat`` file on all of the nodes:
|
||||
|
||||
.. code-block:: shell-session
|
||||
|
||||
# ansible galera_container -m shell -a "cat /var/lib/mysql/grastate.dat"
|
||||
node2_galera_container-49a47d25 | success | rc=0 >>
|
||||
# GALERA saved state version: 2.1
|
||||
uuid: 338b06b0-2948-11e4-9d06-bef42f6c52f1
|
||||
seqno: 31
|
||||
cert_index:
|
||||
|
||||
node3_galera_container-3ea2cbd3 | success | rc=0 >>
|
||||
# GALERA saved state version: 2.1
|
||||
uuid: 338b06b0-2948-11e4-9d06-bef42f6c52f1
|
||||
seqno: 31
|
||||
cert_index:
|
||||
|
||||
node4_galera_container-76275635 | success | rc=0 >>
|
||||
# GALERA saved state version: 2.1
|
||||
uuid: 338b06b0-2948-11e4-9d06-bef42f6c52f1
|
||||
seqno: 31
|
||||
cert_index:
|
||||
|
||||
In this example, all nodes in the cluster contain the same positive
|
||||
``seqno`` values as they were synchronized just prior to
|
||||
graceful shutdown. If all ``seqno`` values are equal, any node can
|
||||
start the new cluster.
|
||||
|
||||
.. code-block:: shell-session
|
||||
|
||||
# /etc/init.d/mysql start --wsrep-new-cluster
|
||||
|
||||
This command results in a cluster containing a single node. The
|
||||
``wsrep_cluster_size`` value shows the number of nodes in the
|
||||
cluster.
|
||||
|
||||
.. code-block:: shell-session
|
||||
|
||||
node2_galera_container-49a47d25 | FAILED | rc=1 >>
|
||||
ERROR 2002 (HY000): Can't connect to local MySQL server
|
||||
through socket '/var/run/mysqld/mysqld.sock' (111)
|
||||
|
||||
node3_galera_container-3ea2cbd3 | FAILED | rc=1 >>
|
||||
ERROR 2002 (HY000): Can't connect to local MySQL server
|
||||
through socket '/var/run/mysqld/mysqld.sock' (2)
|
||||
|
||||
node4_galera_container-76275635 | success | rc=0 >>
|
||||
Variable_name Value
|
||||
wsrep_cluster_conf_id 1
|
||||
wsrep_cluster_size 1
|
||||
wsrep_cluster_state_uuid 338b06b0-2948-11e4-9d06-bef42f6c52f1
|
||||
wsrep_cluster_status Primary
|
||||
|
||||
#. Restart MariaDB on the other nodes and verify that they rejoin the
|
||||
cluster.
|
||||
|
||||
.. code-block:: shell-session
|
||||
|
||||
node2_galera_container-49a47d25 | success | rc=0 >>
|
||||
Variable_name Value
|
||||
wsrep_cluster_conf_id 3
|
||||
wsrep_cluster_size 3
|
||||
wsrep_cluster_state_uuid 338b06b0-2948-11e4-9d06-bef42f6c52f1
|
||||
wsrep_cluster_status Primary
|
||||
|
||||
node3_galera_container-3ea2cbd3 | success | rc=0 >>
|
||||
Variable_name Value
|
||||
wsrep_cluster_conf_id 3
|
||||
wsrep_cluster_size 3
|
||||
wsrep_cluster_state_uuid 338b06b0-2948-11e4-9d06-bef42f6c52f1
|
||||
wsrep_cluster_status Primary
|
||||
|
||||
node4_galera_container-76275635 | success | rc=0 >>
|
||||
Variable_name Value
|
||||
wsrep_cluster_conf_id 3
|
||||
wsrep_cluster_size 3
|
||||
wsrep_cluster_state_uuid 338b06b0-2948-11e4-9d06-bef42f6c52f1
|
||||
wsrep_cluster_status Primary
|
||||
|
@ -1,18 +0,0 @@
|
||||
==========================
|
||||
Galera cluster maintenance
|
||||
==========================
|
||||
|
||||
.. toctree::
|
||||
|
||||
ops-galera-remove.rst
|
||||
ops-galera-start.rst
|
||||
ops-galera-recovery.rst
|
||||
|
||||
Routine maintenance includes gracefully adding or removing nodes from
|
||||
the cluster without impacting operation and also starting a cluster
|
||||
after gracefully shutting down all nodes.
|
||||
|
||||
MySQL instances are restarted when creating a cluster, when adding a
|
||||
node, when the service is not running, or when changes are made to the
|
||||
``/etc/mysql/my.cnf`` configuration file.
|
||||
|
@ -1,49 +0,0 @@
|
||||
=======================
|
||||
Removing a compute host
|
||||
=======================
|
||||
|
||||
The `openstack-ansible-ops <https://git.openstack.org/cgit/openstack/openstack-ansible-ops>`_
|
||||
repository contains a playbook for removing a compute host from an
|
||||
OpenStack-Ansible (OSA) environment.
|
||||
To remove a compute host, follow the below procedure.
|
||||
|
||||
.. note::
|
||||
|
||||
This guide describes how to remove a compute node from an OSA environment
|
||||
completely. Perform these steps with caution, as the compute node will no
|
||||
longer be in service after the steps have been completed. This guide assumes
|
||||
that all data and instances have been properly migrated.
|
||||
|
||||
#. Disable all OpenStack services running on the compute node.
|
||||
This can include, but is not limited to, the ``nova-compute`` service
|
||||
and the neutron agent service.
|
||||
|
||||
.. note::
|
||||
|
||||
Ensure this step is performed first
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
# Run these commands on the compute node to be removed
|
||||
# stop nova-compute
|
||||
# stop neutron-linuxbridge-agent
|
||||
|
||||
#. Clone the ``openstack-ansible-ops`` repository to your deployment host:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ git clone https://git.openstack.org/openstack/openstack-ansible-ops \
|
||||
/opt/openstack-ansible-ops
|
||||
|
||||
#. Run the ``remove_compute_node.yml`` Ansible playbook with the
|
||||
``node_to_be_removed`` user variable set:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ cd /opt/openstack-ansible-ops/ansible_tools/playbooks
|
||||
openstack-ansible remove_compute_node.yml \
|
||||
-e node_to_be_removed="<name-of-compute-host>"
|
||||
|
||||
#. After the playbook completes, remove the compute node from the
|
||||
OpenStack-Ansible configuration file in
|
||||
``/etc/openstack_deploy/openstack_user_config.yml``.
|
@ -1,38 +0,0 @@
|
||||
===============
|
||||
Tips and tricks
|
||||
===============
|
||||
|
||||
Ansible forks
|
||||
~~~~~~~~~~~~~
|
||||
|
||||
The default MaxSessions setting for the OpenSSH Daemon is 10. Each Ansible
|
||||
fork makes use of a Session. By default, Ansible sets the number of forks to
|
||||
5. However, you can increase the number of forks used in order to improve
|
||||
deployment performance in large environments.
|
||||
|
||||
Note that more than 10 forks will cause issues for any playbooks
|
||||
which use ``delegate_to`` or ``local_action`` in the tasks. It is
|
||||
recommended that the number of forks are not raised when executing against the
|
||||
Control Plane, as this is where delegation is most often used.
|
||||
|
||||
The number of forks used may be changed on a permanent basis by including
|
||||
the appropriate change to the ``ANSIBLE_FORKS`` in your ``.bashrc`` file.
|
||||
Alternatively it can be changed for a particular playbook execution by using
|
||||
the ``--forks`` CLI parameter. For example, the following executes the nova
|
||||
playbook against the control plane with 10 forks, then against the compute
|
||||
nodes with 50 forks.
|
||||
|
||||
.. code-block:: shell-session
|
||||
|
||||
# openstack-ansible --forks 10 os-nova-install.yml --limit compute_containers
|
||||
# openstack-ansible --forks 50 os-nova-install.yml --limit compute_hosts
|
||||
|
||||
For more information about forks, please see the following references:
|
||||
|
||||
* OpenStack-Ansible `Bug 1479812`_
|
||||
* Ansible `forks`_ entry for ansible.cfg
|
||||
* `Ansible Performance Tuning`_
|
||||
|
||||
.. _Bug 1479812: https://bugs.launchpad.net/openstack-ansible/+bug/1479812
|
||||
.. _forks: http://docs.ansible.com/ansible/intro_configuration.html#forks
|
||||
.. _Ansible Performance Tuning: https://www.ansible.com/blog/ansible-performance-tuning
|
@ -1,125 +0,0 @@
|
||||
===============
|
||||
Troubleshooting
|
||||
===============
|
||||
|
||||
Host kernel upgrade from version 3.13
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Ubuntu kernel packages newer than version 3.13 contain a change in
|
||||
module naming from ``nf_conntrack`` to ``br_netfilter``. After
|
||||
upgrading the kernel, re-run the ``openstack-hosts-setup.yml``
|
||||
playbook against those hosts. See `OSA bug 157996`_ for more
|
||||
information.
|
||||
|
||||
.. _OSA bug 157996: https://bugs.launchpad.net/openstack-ansible/+bug/1579963
|
||||
|
||||
|
||||
|
||||
Container networking issues
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
All LXC containers on the host have two virtual Ethernet interfaces:
|
||||
|
||||
* `eth0` in the container connects to `lxcbr0` on the host
|
||||
* `eth1` in the container connects to `br-mgmt` on the host
|
||||
|
||||
.. note::
|
||||
|
||||
Some containers, such as ``cinder``, ``glance``, ``neutron_agents``, and
|
||||
``swift_proxy``, have more than two interfaces to support their
|
||||
functions.
|
||||
|
||||
Predictable interface naming
|
||||
----------------------------
|
||||
|
||||
On the host, all virtual Ethernet devices are named based on their
|
||||
container as well as the name of the interface inside the container:
|
||||
|
||||
.. code-block:: shell-session
|
||||
|
||||
${CONTAINER_UNIQUE_ID}_${NETWORK_DEVICE_NAME}
|
||||
|
||||
As an example, an all-in-one (AIO) build might provide a utility
|
||||
container called `aio1_utility_container-d13b7132`. That container
|
||||
will have two network interfaces: `d13b7132_eth0` and `d13b7132_eth1`.
|
||||
|
||||
Another option would be to use the LXC tools to retrieve information
|
||||
about the utility container:
|
||||
|
||||
.. code-block:: shell-session
|
||||
|
||||
# lxc-info -n aio1_utility_container-d13b7132
|
||||
|
||||
Name: aio1_utility_container-d13b7132
|
||||
State: RUNNING
|
||||
PID: 8245
|
||||
IP: 10.0.3.201
|
||||
IP: 172.29.237.204
|
||||
CPU use: 79.18 seconds
|
||||
BlkIO use: 678.26 MiB
|
||||
Memory use: 613.33 MiB
|
||||
KMem use: 0 bytes
|
||||
Link: d13b7132_eth0
|
||||
TX bytes: 743.48 KiB
|
||||
RX bytes: 88.78 MiB
|
||||
Total bytes: 89.51 MiB
|
||||
Link: d13b7132_eth1
|
||||
TX bytes: 412.42 KiB
|
||||
RX bytes: 17.32 MiB
|
||||
Total bytes: 17.73 MiB
|
||||
|
||||
The ``Link:`` lines will show the network interfaces that are attached
|
||||
to the utility container.
|
||||
|
||||
Reviewing container networking traffic
|
||||
--------------------------------------
|
||||
|
||||
To dump traffic on the ``br-mgmt`` bridge, use ``tcpdump`` to see all
|
||||
communications between the various containers. To narrow the focus,
|
||||
run ``tcpdump`` only on the desired network interface of the
|
||||
containers.
|
||||
|
||||
Cached Ansible facts issues
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
At the beginning of a playbook run, information about each host is gathered.
|
||||
Examples of the information gathered are:
|
||||
|
||||
* Linux distribution
|
||||
* Kernel version
|
||||
* Network interfaces
|
||||
|
||||
To improve performance, particularly in large deployments, you can
|
||||
cache host facts and information.
|
||||
|
||||
OpenStack-Ansible enables fact caching by default. The facts are
|
||||
cached in JSON files within ``/etc/openstack_deploy/ansible_facts``.
|
||||
|
||||
Fact caching can be disabled by commenting out the ``fact_caching``
|
||||
parameter in ``playbooks/ansible.cfg``. Refer to the Ansible
|
||||
documentation on `fact caching`_ for more details.
|
||||
|
||||
.. _fact caching: http://docs.ansible.com/ansible/playbooks_variables.html#fact-caching
|
||||
|
||||
Forcing regeneration of cached facts
|
||||
------------------------------------
|
||||
|
||||
Cached facts may be incorrect if the host receives a kernel upgrade or new
|
||||
network interfaces. Newly created bridges also disrupt cache facts.
|
||||
|
||||
This can lead to unexpected errors while running playbooks, and
|
||||
require that the cached facts be regenerated.
|
||||
|
||||
Run the following command to remove all currently cached facts for all hosts:
|
||||
|
||||
.. code-block:: shell-session
|
||||
|
||||
# rm /etc/openstack_deploy/ansible_facts/*
|
||||
|
||||
New facts will be gathered and cached during the next playbook run.
|
||||
|
||||
To clear facts for a single host, find its file within
|
||||
``/etc/openstack_deploy/ansible_facts/`` and remove it. Each host has
|
||||
a JSON file that is named after its hostname. The facts for that host
|
||||
will be regenerated on the next playbook run.
|
||||
|
@ -5,7 +5,60 @@ Reference information
|
||||
This is a draft reference information page for the proposed OpenStack-Ansible
|
||||
operations guide.
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
Linux Container commands
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
ops-lxc-commands.rst
|
||||
The following are some useful commands to manage LXC:
|
||||
|
||||
- List containers and summary information such as operational state and
|
||||
network configuration:
|
||||
|
||||
.. code-block:: shell-session
|
||||
|
||||
# lxc-ls --fancy
|
||||
|
||||
- Show container details including operational state, resource
|
||||
utilization, and ``veth`` pairs:
|
||||
|
||||
.. code-block:: shell-session
|
||||
|
||||
# lxc-info --name container_name
|
||||
|
||||
- Start a container:
|
||||
|
||||
.. code-block:: shell-session
|
||||
|
||||
# lxc-start --name container_name
|
||||
|
||||
- Attach to a container:
|
||||
|
||||
.. code-block:: shell-session
|
||||
|
||||
# lxc-attach --name container_name
|
||||
|
||||
- Stop a container:
|
||||
|
||||
.. code-block:: shell-session
|
||||
|
||||
# lxc-stop --name container_name
|
||||
|
||||
Finding Ansible scripts after installation
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
All scripts used to install OpenStack with Ansible can be viewed from
|
||||
the repository on GitHub, and on the local infrastructure server.
|
||||
|
||||
The repository containing the scripts and playbooks is located at
|
||||
https://github.com/openstack/openstack-ansible.
|
||||
|
||||
To access the scripts and playbooks on the local ``infra01`` server,
|
||||
follow these steps.
|
||||
|
||||
#. Log into the ``infra01`` server.
|
||||
|
||||
#. Change to the ``/opt/rpc-openstack/openstack-ansible`` directory.
|
||||
|
||||
#. The ``scripts`` directory contains scripts used in the installation.
|
||||
Generally, directories and subdirectories under ``rpcd``
|
||||
contain files related to RPCO. For example, the
|
||||
``rpcd/playbooks`` directory contains the RPCO playbooks.
|
||||
|
@ -0,0 +1,21 @@
|
||||
==========================================
|
||||
Finding Ansible scripts after installation
|
||||
==========================================
|
||||
|
||||
All scripts used to install OpenStack with Ansible can be viewed from
|
||||
the repository on GitHub, and on the local infrastructure server.
|
||||
|
||||
The repository containing the scripts and playbooks is located at
|
||||
https://github.com/openstack/openstack-ansible.
|
||||
|
||||
To access the scripts and playbooks on the local ``infra01`` server,
|
||||
follow these steps.
|
||||
|
||||
#. Log into the ``infra01`` server.
|
||||
|
||||
#. Change to the ``/opt/rpc-openstack/openstack-ansible`` directory.
|
||||
|
||||
#. The ``scripts`` directory contains scripts used in the installation.
|
||||
Generally, directories and subdirectories under ``rpcd``
|
||||
contain files related to RPCO. For example, the
|
||||
``rpcd/playbooks`` directory contains the RPCO playbooks.
|
@ -35,4 +35,3 @@ The following are some useful commands to manage LXC:
|
||||
.. code-block:: shell-session
|
||||
|
||||
# lxc-stop --name container_name
|
||||
|
@ -5,7 +5,219 @@ Troubleshooting
|
||||
This is a draft troubleshooting page for the proposed OpenStack-Ansible
|
||||
operations guide.
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
Networking
|
||||
~~~~~~~~~~
|
||||
|
||||
Checking services
|
||||
~~~~~~~~~~~~~~~~~
|
||||
|
||||
Restarting services
|
||||
~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Troubleshooting Instance connectivity issues
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Diagnose Image service issues
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Test the OpenStack Image service by downloading and running a virtual
|
||||
machine image.
|
||||
|
||||
#. Change into a temporary directory when logged into the target
|
||||
OpenStack environment and download a copy of the image:
|
||||
|
||||
.. code::
|
||||
|
||||
$ mkdir /tmp/images
|
||||
|
||||
.. code::
|
||||
|
||||
$ cd /tmp/images/
|
||||
|
||||
.. code::
|
||||
|
||||
$ wget http://cdn.download.cirros-cloud.net/0.3.2/cirros-0.3.2-x86_64-disk.img
|
||||
|
||||
#. Upload the image into the Image Service:
|
||||
|
||||
.. code::
|
||||
|
||||
$ glance image-create --name=IMAGELABEL --disk-format=FILEFORMAT \
|
||||
--container-format=CONTAINERFORMAT --is-public=ACCESSVALUE > IMAGEFILE
|
||||
|
||||
For the arguments attached to the ``openstack image create``, modify the
|
||||
names of each argument as needed:
|
||||
|
||||
IMAGELABEL
|
||||
A label or name for the image.
|
||||
|
||||
FILEFORMAT
|
||||
This argument specifies the file format of the image. Valid
|
||||
vmdk. Verify an images file format with the **File** command.
|
||||
|
||||
CONTAINERFORMAT
|
||||
This argument specifies container format. Use bare to indicate
|
||||
the image file is not a file format that contains metadata from
|
||||
the virtual machine.
|
||||
|
||||
ACCESSVALUE
|
||||
Specifies whether a user or an admin can access and view the
|
||||
image. True enables all users with access privelages, while false
|
||||
restricts access to admins.
|
||||
|
||||
IMAGEFILE
|
||||
This specifies the name of the downloaded image file.
|
||||
|
||||
.. note::
|
||||
|
||||
The image ID returned will differ between OpenStack environments
|
||||
since the ID is dynamic and variable, generated differently for
|
||||
each image uploaded.
|
||||
|
||||
#. Run the ``openstack image list`` command to confirm the image was
|
||||
uploaded successfully.
|
||||
|
||||
#. Remove the locally downloaded image, since the Image Service now
|
||||
stores a copy of the downloaded image.
|
||||
|
||||
.. code::
|
||||
|
||||
$ rm -r /tmp/images
|
||||
|
||||
For investigating problems or errors, the Image service directs all
|
||||
activity to the /var/log/glance-api.log and /var/log/glance-registry.log
|
||||
inside the glance api container.
|
||||
|
||||
RabbitMQ issues
|
||||
~~~~~~~~~~~~~~~
|
||||
|
||||
Analyze RabbitMQ queues
|
||||
-----------------------
|
||||
|
||||
Analyze OpenStack service logs and RabbitMQ logs
|
||||
------------------------------------------------
|
||||
|
||||
Failed security hardening after host kernel upgrade from version 3.13
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Ubuntu kernel packages newer than version 3.13 contain a change in
|
||||
module naming from ``nf_conntrack`` to ``br_netfilter``. After
|
||||
upgrading the kernel, re-run the ``openstack-hosts-setup.yml``
|
||||
playbook against those hosts. See `OSA bug 157996`_ for more
|
||||
information.
|
||||
|
||||
.. _OSA bug 157996: https://bugs.launchpad.net/openstack-ansible/+bug/1579963
|
||||
|
||||
Cached Ansible facts issues
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
At the beginning of a playbook run, information about each host is gathered.
|
||||
Examples of the information gathered are:
|
||||
|
||||
* Linux distribution
|
||||
* Kernel version
|
||||
* Network interfaces
|
||||
|
||||
To improve performance, particularly in large deployments, you can
|
||||
cache host facts and information.
|
||||
|
||||
OpenStack-Ansible enables fact caching by default. The facts are
|
||||
cached in JSON files within ``/etc/openstack_deploy/ansible_facts``.
|
||||
|
||||
Fact caching can be disabled by commenting out the ``fact_caching``
|
||||
parameter in ``playbooks/ansible.cfg``. Refer to the Ansible
|
||||
documentation on `fact caching`_ for more details.
|
||||
|
||||
.. _fact caching: http://docs.ansible.com/ansible/playbooks_variables.html#fact-caching
|
||||
|
||||
Forcing regeneration of cached facts
|
||||
------------------------------------
|
||||
|
||||
Cached facts may be incorrect if the host receives a kernel upgrade or new
|
||||
network interfaces. Newly created bridges also disrupt cache facts.
|
||||
|
||||
This can lead to unexpected errors while running playbooks, and
|
||||
require that the cached facts be regenerated.
|
||||
|
||||
Run the following command to remove all currently cached facts for all hosts:
|
||||
|
||||
.. code-block:: shell-session
|
||||
|
||||
# rm /etc/openstack_deploy/ansible_facts/*
|
||||
|
||||
New facts will be gathered and cached during the next playbook run.
|
||||
|
||||
To clear facts for a single host, find its file within
|
||||
``/etc/openstack_deploy/ansible_facts/`` and remove it. Each host has
|
||||
a JSON file that is named after its hostname. The facts for that host
|
||||
will be regenerated on the next playbook run.
|
||||
|
||||
|
||||
Failed ansible playbooks during an upgrade
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
||||
Container networking issues
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
All LXC containers on the host have two virtual Ethernet interfaces:
|
||||
|
||||
* `eth0` in the container connects to `lxcbr0` on the host
|
||||
* `eth1` in the container connects to `br-mgmt` on the host
|
||||
|
||||
.. note::
|
||||
|
||||
Some containers, such as ``cinder``, ``glance``, ``neutron_agents``, and
|
||||
``swift_proxy``, have more than two interfaces to support their
|
||||
functions.
|
||||
|
||||
Predictable interface naming
|
||||
----------------------------
|
||||
|
||||
On the host, all virtual Ethernet devices are named based on their
|
||||
container as well as the name of the interface inside the container:
|
||||
|
||||
.. code-block:: shell-session
|
||||
|
||||
${CONTAINER_UNIQUE_ID}_${NETWORK_DEVICE_NAME}
|
||||
|
||||
As an example, an all-in-one (AIO) build might provide a utility
|
||||
container called `aio1_utility_container-d13b7132`. That container
|
||||
will have two network interfaces: `d13b7132_eth0` and `d13b7132_eth1`.
|
||||
|
||||
Another option would be to use the LXC tools to retrieve information
|
||||
about the utility container:
|
||||
|
||||
.. code-block:: shell-session
|
||||
|
||||
# lxc-info -n aio1_utility_container-d13b7132
|
||||
|
||||
Name: aio1_utility_container-d13b7132
|
||||
State: RUNNING
|
||||
PID: 8245
|
||||
IP: 10.0.3.201
|
||||
IP: 172.29.237.204
|
||||
CPU use: 79.18 seconds
|
||||
BlkIO use: 678.26 MiB
|
||||
Memory use: 613.33 MiB
|
||||
KMem use: 0 bytes
|
||||
Link: d13b7132_eth0
|
||||
TX bytes: 743.48 KiB
|
||||
RX bytes: 88.78 MiB
|
||||
Total bytes: 89.51 MiB
|
||||
Link: d13b7132_eth1
|
||||
TX bytes: 412.42 KiB
|
||||
RX bytes: 17.32 MiB
|
||||
Total bytes: 17.73 MiB
|
||||
|
||||
The ``Link:`` lines will show the network interfaces that are attached
|
||||
to the utility container.
|
||||
|
||||
Review container networking traffic
|
||||
-----------------------------------
|
||||
|
||||
To dump traffic on the ``br-mgmt`` bridge, use ``tcpdump`` to see all
|
||||
communications between the various containers. To narrow the focus,
|
||||
run ``tcpdump`` only on the desired network interface of the
|
||||
containers.
|
||||
|
||||
ops-troubleshooting.rst
|
||||
|
@ -1,6 +0,0 @@
|
||||
===============================
|
||||
Verifying your cloud deployment
|
||||
===============================
|
||||
|
||||
This is a draft cloud verification page for the proposed OpenStack-Ansible
|
||||
operations guide.
|
Loading…
Reference in New Issue
Block a user