]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
doc/rbd: Added the iSCSI targets, Ansible and CLI docs
authorAron Gunn <ritz_303@yahoo.com>
Thu, 6 Jul 2017 17:32:53 +0000 (12:32 -0500)
committerJason Dillaman <dillaman@redhat.com>
Wed, 30 Aug 2017 13:51:57 +0000 (09:51 -0400)
Fixes: http://tracker.ceph.com/issues/20437
Signed-off-by: Aron Gunn <agunn@redhat.com>
doc/rbd/iscsi-target-ansible.rst [new file with mode: 0644]
doc/rbd/iscsi-target-cli.rst [new file with mode: 0644]
doc/rbd/iscsi-targets.rst [new file with mode: 0644]

diff --git a/doc/rbd/iscsi-target-ansible.rst b/doc/rbd/iscsi-target-ansible.rst
new file mode 100644 (file)
index 0000000..9b8260a
--- /dev/null
@@ -0,0 +1,360 @@
+==========================================
+Configuring the iSCSI Target using Ansible
+==========================================
+
+The Ceph iSCSI gateway is the iSCSI target node and also a Ceph client
+node. The Ceph iSCSI gateway can be a standalone node or be colocated on
+a Ceph Object Store Disk (OSD) node. Completing the following steps will
+install, and configure the Ceph iSCSI gateway for basic operation.
+
+**Requirements:**
+
+-  A running Ceph Jewel (10.2.x) cluster or newer
+
+-  The ``device-mapper-multipath-0.4.9-99`` or newer package
+
+-  The ``targetcli-2.1.fb41-3`` or newer package
+
+**Installing:**
+
+1. On the Ansible installer node, which could be either the administration node
+   or a dedicated deployment node, perform the following steps:
+
+   a. As ``root``, install the ``ceph-iscsi-ansible`` package:
+
+      ::
+
+          # yum install ceph-iscsi-ansible
+
+   b. Add an entry in ``/etc/ansible/hosts`` file for the gateway group:
+
+      ::
+
+          [ceph-iscsi-gw]
+          ceph-igw-1
+          ceph-igw-2
+
+.. NOTE::
+  The ``ceph-iscsi-config`` package is installed on the Ceph iSCSI gateway nodes
+  listed under the ``[ceph-iscsi-gw]`` section in the ``/etc/ansible/hosts`` file.
+  If co-locating the iSCSI gateway with an OSD node, then add this repository to
+  the OSD node.
+
+**Configuring:**
+
+The ``ceph-iscsi-ansible`` package places a file in the ``/usr/share/ceph-ansible/group_vars/``
+directory called ``ceph-iscsi-gw.sample``. Create a copy of this file to ``ceph-iscsi-gw``.
+Review the following Ansible variables and descriptions, and update accordingly.
+
++--------------------------------------+--------------------------------------+
+| Variable                             | Meaning/Purpose                      |
++======================================+======================================+
+| ``seed_monitor``                     | Each gateway needs access to the     |
+|                                      | ceph cluster for rados and rbd       |
+|                                      | calls. This means the iSCSI gateway  |
+|                                      | must have an appropriate             |
+|                                      | ``/etc/ceph/`` directory defined.    |
+|                                      | The ``seed_monitor`` host is used to |
+|                                      | populate the iSCSI gateway’s         |
+|                                      | ``/etc/ceph/`` directory.            |
++--------------------------------------+--------------------------------------+
+| ``cluster_name                       | This section provides support for    |
+| gateway_keyring                      | non-standard cluster names, but must |
+| deploy_settings``                    | be defined and executed at least on  |
+|                                      | the initial playbook run to ensure   |
+|                                      | all necessary files are deployed     |
+|                                      | correctly.                           |
++--------------------------------------+--------------------------------------+
+| ``perform_system_checks``            | This is a boolean value that checks  |
+|                                      | for multipath and lvm configuration  |
+|                                      | settings on each gateway. It must be |
+|                                      | set to true for at least the first   |
+|                                      | run to ensure multipathd and lvm are |
+|                                      | configured properly.                 |
++--------------------------------------+--------------------------------------+
+| ``gateway_iqn``                      | This is the iSCSI IQN that all the   |
+|                                      | gateways will expose to clients.     |
+|                                      | This means each client will see the  |
+|                                      | gateway group as a single subsystem. |
++--------------------------------------+--------------------------------------+
+| ``gateway_ip_list``                  | The ip list defines the IP addresses |
+|                                      | that will be used on the front end   |
+|                                      | network for iSCSI traffic. This IP   |
+|                                      | will be bound to the active target   |
+|                                      | portal group on each node, and is    |
+|                                      | the access point for iSCSI traffic.  |
+|                                      | Each IP should correspond to an IP   |
+|                                      | available on the hosts defined in    |
+|                                      | the ``ceph-iscsi-gw`` host group in  |
+|                                      | ``/etc/ansible/hosts``.              |
++--------------------------------------+--------------------------------------+
+| ``rbd_devices``                      | This section defines the RBD images  |
+|                                      | that will be controlled and managed  |
+|                                      | within the iSCSI gateway             |
+|                                      | configuration. Parameters like       |
+|                                      | ``pool`` and ``image`` are self      |
+|                                      | explanatory. Here are the other      |
+|                                      | parameters: ``size`` = This defines  |
+|                                      | the size of the RBD. You may         |
+|                                      | increase the size later, by simply   |
+|                                      | changing this value, but shrinking   |
+|                                      | the size of an RBD is not supported  |
+|                                      | and is ignored. ``host`` = This is   |
+|                                      | the iSCSI gateway host name that     |
+|                                      | will be responsible for the rbd      |
+|                                      | allocation/resize. Every defined     |
+|                                      | ``rbd_device`` entry must have a     |
+|                                      | host assigned. ``state`` = This is   |
+|                                      | typical Ansible syntax for whether   |
+|                                      | the resource should be defined or    |
+|                                      | removed. A request with a state of   |
+|                                      | absent will first be checked to      |
+|                                      | ensure the rbd is not mapped to any  |
+|                                      | client. If the RBD is unallocated,   |
+|                                      | it will be removed from the iSCSI    |
+|                                      | gateway and deleted from the         |
+|                                      | configuration.                       |
++--------------------------------------+--------------------------------------+
+| ``client_connections``               | This section defines the iSCSI       |
+|                                      | client connection details together   |
+|                                      | with the LUN (RBD image) masking.    |
+|                                      | Currently only CHAP is supported as  |
+|                                      | an authentication mechanism. Each    |
+|                                      | connection defines an ``image_list`` |
+|                                      | which is a comma separated list of   |
+|                                      | the form                             |
+|                                      | ``pool.rbd_image[,pool.rbd_image,…​] |
+|                                      | ``.                                  |
+|                                      | RBD images can be added and removed  |
+|                                      | from this list, to change the client |
+|                                      | masking. Note that there are no      |
+|                                      | checks done to limit RBD sharing     |
+|                                      | across client connections.           |
++--------------------------------------+--------------------------------------+
+
+.. NOTE::
+  When using the ``gateway_iqn`` variable, and for Red Hat Enterprise Linux
+  clients, installing the ``iscsi-initiator-utils`` package is required for
+  retrieving the gateway’s IQN name. The iSCSI initiator name is located in the
+  ``/etc/iscsi/initiatorname.iscsi`` file.
+
+.. NOTE::
+  If using previously configured RBD images, then verify that the following
+  features are enabled:
+
+  -  ``layering``
+
+  -  ``exclusive-lock``
+
+  If these features are not enable, then RBD mapping failures will occur across
+  the iSCSI gateway nodes. Also, if enabled, disable these features:
+
+  -  ``object-map``
+
+  -  ``fast-diff``
+
+  -  ``deep-flatten``
+
+**Deploying:**
+
+On the Ansible installer node, perform the following steps.
+
+1. As ``root``, execute the Ansible playbook:
+
+   ::
+
+       # cd /usr/share/ceph-ansible
+       # ansible-playbook ceph-iscsi-gw.yml
+
+   .. NOTE::
+    The Ansible playbook will handle RPM dependencies, RBD creation
+    and Linux IO configuration.
+
+   .. WARNING::
+    On stand-alone iSCSI gateway nodes, verify that the correct Red
+    Hat Ceph Storage 2 software repositories are enabled. If they are
+    disabled or unavailable, the wrong packages will be installed.
+
+2. Verify the configuration:
+
+   ::
+
+       # targetcli ls
+
+   .. IMPORTANT::
+    Only use the ``targetcli`` tool to view the iSCSI gateway
+    configuration settings. Attempting to use the ``targetcli`` tool
+    to change the configuration will result in the following issues,
+    such as ALUA misconfiguration and path failover problems. There
+    is the potential to corrupt data, to have mismatched
+    configuration across iSCSI gateways, and to have mismatched WWN
+    information, which will lead to client multipath problems.
+
+**Service Management:**
+
+The ``ceph-iscsi-config`` package installs the configuration management
+logic and a Systemd service called ``rbd-target-gw``. When the Systemd
+service is enabled, the ``rbd-target-gw`` will start at boot time and
+will restore the Linux IO state. The Ansible playbook disables the
+target service during the deployment. Below are the outcomes of when
+interacting with the ``rbd-target-gw`` Systemd service.
+
+::
+
+    # systemctl <start|stop|restart|reload> rbd-target-gw
+
+-  ``reload``
+
+   A reload request will force ``rbd-target-gw`` to reread the
+   configuration and apply it to the current running environment. This
+   is normally not required, since changes are deployed in parallel from
+   Ansible to all iSCSI gateway nodes
+
+-  ``stop``
+
+   A stop request will close the gateway’s portal interfaces, dropping
+   connections to clients and wipe the current LIO configuration from
+   the kernel. This returns the iSCSI gateway to a clean state. When
+   clients are disconnected, active I/O is rescheduled to the other
+   iSCSI gateways by the client side multipathing layer.
+
+**Administration:**
+
+Within the ``/usr/share/ceph-ansible/group_vars/ceph-iscsi-gw`` file
+there are a number of operational workflows that the Ansible playbook
+supports.
+
+.. WARNING::
+  Before removing RBD images from the iSCSI gateway configuration,
+  follow the standard procedures for removing a storage device from
+  the operating system.
+
++--------------------------------------+--------------------------------------+
+| I want to…​                          | Update the ``ceph-iscsi-gw`` file    |
+|                                      | by…​                                 |
++======================================+======================================+
+| Add more RBD images                  | Adding another entry to the          |
+|                                      | ``rbd_devices`` section with the new |
+|                                      | image.                               |
++--------------------------------------+--------------------------------------+
+| Resize an existing RBD image         | Updating the size parameter within   |
+|                                      | the ``rbd_devices`` section. Client  |
+|                                      | side actions are required to pick up |
+|                                      | the new size of the disk.            |
++--------------------------------------+--------------------------------------+
+| Add a client                         | Adding an entry to the               |
+|                                      | ``client_connections`` section.      |
++--------------------------------------+--------------------------------------+
+| Add another RBD to a client          | Adding the relevant RBD              |
+|                                      | ``pool.image`` name to the           |
+|                                      | ``image_list`` variable for the      |
+|                                      | client.                              |
++--------------------------------------+--------------------------------------+
+| Remove an RBD from a client          | Removing the RBD ``pool.image`` name |
+|                                      | from the clients ``image_list``      |
+|                                      | variable.                            |
++--------------------------------------+--------------------------------------+
+| Remove an RBD from the system        | Changing the RBD entry state         |
+|                                      | variable to ``absent``. The RBD      |
+|                                      | image must be unallocated from the   |
+|                                      | operating system first for this to   |
+|                                      | succeed.                             |
++--------------------------------------+--------------------------------------+
+| Change the clients CHAP credentials  | Updating the relevant CHAP details   |
+|                                      | in ``client_connections``. This will |
+|                                      | need to be coordinated with the      |
+|                                      | clients. For example, the client     |
+|                                      | issues an iSCSI logout, the          |
+|                                      | credentials are changed by the       |
+|                                      | Ansible playbook, the credentials    |
+|                                      | are changed at the client, then the  |
+|                                      | client performs an iSCSI login.      |
++--------------------------------------+--------------------------------------+
+| Remove a client                      | Updating the relevant                |
+|                                      | ``client_connections`` item with a   |
+|                                      | state of ``absent``. Once the        |
+|                                      | Ansible playbook is ran, the client  |
+|                                      | will be purged from the system, but  |
+|                                      | the disks will remain defined to     |
+|                                      | Linux IO for potential reuse.        |
++--------------------------------------+--------------------------------------+
+
+Once a change has been made, rerun the Ansible playbook to apply the
+change across the iSCSI gateway nodes.
+
+::
+
+    # ansible-playbook ceph-iscsi-gw.yml
+
+**Removing the Configuration:**
+
+The ``ceph-iscsi-ansible`` package provides an Ansible playbook to
+remove the iSCSI gateway configuration and related RBD images. The
+Ansible playbook is ``/usr/share/ceph-ansible/purge_gateways.yml``. When
+this Ansible playbook is ran a prompted for the type of purge to
+perform:
+
+*lio* :
+
+In this mode the LIO configuration is purged on all iSCSI gateways that
+are defined. Disks that were created are left untouched within the Ceph
+storage cluster.
+
+*all* :
+
+When ``all`` is chosen, the LIO configuration is removed together with
+**all** RBD images that were defined within the iSCSI gateway
+environment, other unrelated RBD images will not be removed. Ensure the
+correct mode is chosen, this operation will delete data.
+
+.. WARNING::
+  A purge operation is destructive action against your iSCSI gateway
+  environment.
+
+.. WARNING::
+  A purge operation will fail, if RBD images have snapshots or clones
+  and are exported through the Ceph iSCSI gateway.
+
+::
+
+    [root@rh7-iscsi-client ceph-ansible]# ansible-playbook purge_gateways.yml
+    Which configuration elements should be purged? (all, lio or abort) [abort]: all
+
+
+    PLAY [Confirm removal of the iSCSI gateway configuration] *********************
+
+
+    GATHERING FACTS ***************************************************************
+    ok: [localhost]
+
+
+    TASK: [Exit playbook if user aborted the purge] *******************************
+    skipping: [localhost]
+
+
+    TASK: [set_fact ] *************************************************************
+    ok: [localhost]
+
+
+    PLAY [Removing the gateway configuration] *************************************
+
+
+    GATHERING FACTS ***************************************************************
+    ok: [ceph-igw-1]
+    ok: [ceph-igw-2]
+
+
+    TASK: [igw_purge | purging the gateway configuration] *************************
+    changed: [ceph-igw-1]
+    changed: [ceph-igw-2]
+
+
+    TASK: [igw_purge | deleting configured rbd devices] ***************************
+    changed: [ceph-igw-1]
+    changed: [ceph-igw-2]
+
+
+    PLAY RECAP ********************************************************************
+    ceph-igw-1                 : ok=3    changed=2    unreachable=0    failed=0
+    ceph-igw-2                 : ok=3    changed=2    unreachable=0    failed=0
+    localhost                  : ok=2    changed=0    unreachable=0    failed=0
diff --git a/doc/rbd/iscsi-target-cli.rst b/doc/rbd/iscsi-target-cli.rst
new file mode 100644 (file)
index 0000000..c316b98
--- /dev/null
@@ -0,0 +1,167 @@
+=============================================================
+Configuring the iSCSI Target using the Command Line Interface
+=============================================================
+
+The Ceph iSCSI gateway is the iSCSI target node and also a Ceph client
+node. The Ceph iSCSI gateway can be a standalone node or be colocated on
+a Ceph Object Store Disk (OSD) node. Completing the following steps will
+install, and configure the Ceph iSCSI gateway for basic operation.
+
+**Requirements:**
+
+-  A running Red Hat Ceph Storage 2.3 cluster
+
+-  The following packages must be installed from a Red Hat Ceph Storage
+   repository:
+
+   -  ``targetcli-2.1.fb46-2.el7cp`` or newer package
+
+   -  ``python-rtslib-2.1.fb63-3.el7cp`` or newer package
+
+   -  ``tcmu-runner-1.2.0-2.el7cp`` or newer package
+
+     .. IMPORTANT::
+        If previous versions of these packages exist, then they must
+        be removed first before installing the newer versions. These
+        newer versions must be installed from a Red Hat Ceph Storage
+        repository.
+
+Do the following steps on the Ceph iSCSI gateway node before proceeding
+to the *Installing* section:
+
+1. If the Ceph iSCSI gateway is not colocated on an OSD node, then copy
+   the Ceph configuration files, located in ``/etc/ceph/``, from a
+   running Ceph node in the storage cluster to the iSCSI Gateway node.
+   The Ceph configuration files must exist on the iSCSI gateway node
+   under ``/etc/ceph/``.
+
+2. Install and configure the `Ceph Command-line
+   Interface <http://docs.ceph.com/docs/master/start/quick-rbd/#install-ceph>`_
+
+3. If needed, open TCP ports 3260 and 5000 on the firewall.
+
+4. Create a new or use an existing RADOS Block Device (RBD).
+
+**Installing:**
+
+1. As ``root``, on all iSCSI gateway nodes, install the
+   ``ceph-iscsi-cli`` package:
+
+   ::
+
+       # yum install ceph-iscsi-cli
+
+2. As ``root``, on all iSCSI gateway nodes, install the ``tcmu-runner``
+   package:
+
+   ::
+
+       # yum install tcmu-runner
+
+3. As ``root``, on a iSCSI gateway node, create a file named
+   ``iscsi-gateway.cfg`` in the ``/etc/ceph/`` directory:
+
+   ::
+
+       # touch /etc/ceph/iscsi-gateway.cfg
+
+   a. Edit the ``iscsi-gateway.cfg`` file and add the following lines:
+
+      ::
+
+          [config]
+          cluster_name = <ceph_cluster_name>
+          gateway_keyring = <ceph_client_keyring>
+          api_secure = false
+
+      ::
+
+          [config]
+          # Name of the Ceph storage cluster. A suitable Ceph configuration file allowing
+          # access to the Ceph storage cluster from the gateway node is required, if not
+          # colocated on an OSD node.
+          cluster_name = ceph
+
+          # Place a copy of the ceph cluster's admin keyring in the gateway's /etc/ceph
+          # drectory and reference the filename here
+          gateway_keyring = ceph.client.admin.keyring
+
+
+          # API settings.
+          # The API supports a number of options that allow you to tailor it to your
+          # local environment. If you want to run the API under https, you will need to
+          # create cert/key files that are compatible for each iSCSI gateway node, that is
+          # not locked to a specific node. SSL cert and key files *must* be called
+          # 'iscsi-gateway.crt' and 'iscsi-gateway.key' and placed in the '/etc/ceph/' directory
+          # on *each* gateway node. With the SSL files in place, you can use 'api_secure = true'
+          # to switch to https mode.
+
+          # To support the API, the bear minimum settings are:
+          api_secure = false
+
+          # Additional API configuration options are as follows, defaults shown.
+          # api_user = admin
+          # api_password = admin
+          # api_port = 5001
+          # trusted_ip_list = 192.168.0.10,192.168.0.11
+
+      .. IMPORTANT::
+        The ``iscsi-gateway.cfg`` file must be identical on all iSCSI gateway nodes.
+
+   b. As ``root``, copy the ``iscsi-gateway.cfg`` file to all iSCSI
+      gateway nodes.
+
+4. As ``root``, on all iSCSI gateway nodes, enable and start the API
+   service:
+
+   ::
+
+       # systemctl enable rbd-target-api
+       # systemctl start rbd-target-api
+
+**Configuring:**
+
+1. As ``root``, on a iSCSI gateway node, start the iSCSI gateway
+   command-line interface:
+
+   ::
+
+       # gwcli
+
+2. Creating the iSCSI gateways:
+
+   ::
+
+       >/iscsi-target create iqn.2003-01.com.redhat.iscsi-gw:<target_name>
+       > goto gateways
+       > create <iscsi_gw_name> <IP_addr_of_gw>
+       > create <iscsi_gw_name> <IP_addr_of_gw>
+
+3. Adding a RADOS Block Device (RBD):
+
+   ::
+
+       > cd /iscsi-target/iqn.2003-01.com.redhat.iscsi-gw:<target_name>/disks/
+       >/disks/ create pool=<pool_name> image=<image_name> size=<image_size>m|g|t
+
+4. Creating a client:
+
+   ::
+
+       > goto hosts
+       > create iqn.1994-05.com.redhat:<client_name>
+       > auth chap=<user_name>/<password> | nochap
+
+
+  .. WARNING::
+      CHAP must always be configured. Without CHAP, the target will
+      reject any login requests.
+
+5. Adding disks to a client:
+
+   ::
+
+       >/iscsi-target..eph-igw/hosts> cd iqn.1994-05.com.redhat:<client_name>
+       > disk add <pool_name>.<image_name>
+
+The next step is to configure the iSCSI initiators.
diff --git a/doc/rbd/iscsi-targets.rst b/doc/rbd/iscsi-targets.rst
new file mode 100644 (file)
index 0000000..331ee7f
--- /dev/null
@@ -0,0 +1,29 @@
+=============
+iSCSI Targets
+=============
+
+Traditionally, block-level access to a Ceph storage cluster has been
+limited to QEMU and ``librbd``, which is a key enabler for adoption
+within OpenStack environments. Starting with the Ceph Jewel release,
+block-level access is expanding to offer standard iSCSI support allowing
+wider platform usage, and potentially opening new use cases and
+customers.
+
+-  CentOS 7.3 or newer
+
+-  A working Ceph Storage cluster, deployed with ``ceph-ansible`` or using the command-line interface
+
+-  iSCSI gateways nodes, which can either be colocated with OSD nodes or on dedicated nodes
+
+-  Separate network subnets for iSCSI front-end traffic and Ceph back-end traffic
+
+A choice of using Ansible or the command-line interface are the
+available deployment methods for installing and configuring the Ceph
+iSCSI gateway:
+
+-  `Using Ansible`_
+
+-  `Using the Command Line Interface`_
+
+.. _Using Ansible: ../iscsi-target-ansible
+.. _Using the Command Line Interface: ../iscsi-target-cli