================================ IBM Storage Driver for OpenStack ================================ Introduction ~~~~~~~~~~~~ The IBM Storage Driver for OpenStack is a software component of the OpenStack cloud environment that enables utilization of storage resources provided by supported IBM storage systems. The driver was validated on storage systems, as detailed in the Supported storage systems section below. After the driver is configured on the OpenStack Cinder nodes, storage volumes can be allocated by the Cinder nodes to the Nova nodes. Virtual machines on the Nova nodes can then utilize these storage resources. Concept diagram --------------- This figure illustrates how an IBM storage system is connected to the OpenStack cloud environment and provides storage resources when the IBM Storage Driver for OpenStack is configured on the OpenStack Cinder nodes. The OpenStack cloud is connected to the IBM storage system over Fibre Channel. Remote cloud users can issue requests for storage resources from the OpenStack cloud. These requests are transparently handled by the IBM Storage Driver, which communicates with the IBM storage system and controls the storage volumes on it. The IBM storage resources are then provided to the Nova nodes in the OpenStack cloud. .. figure:: ../../figures/ibm-storage-nova-concept.png Compatibility and requirements ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This section specifies the compatibility and requirements of the IBM Storage Driver for OpenStack. Supported storage systems ------------------------- The IBM Storage Driver for OpenStack supports the IBM storage systems, as detailed in the following table. +-----------------+--------------------+--------------------+ | Storage system | Microcode version | Connectivity | +=================+====================+====================+ | IBM DS8870 | 7.5 SP4 or later, | Fibre Channel (FC) | | | 7.5 with RESTful | | | | API patch | | +-----------------+--------------------+--------------------+ | IBM DS8880 | 8.1 or later | Fibre Channel (FC) | +-----------------+--------------------+--------------------+ Copy Services license --------------------- Copy Services features help you implement storage solutions to keep your business running 24 hours a day, 7 days a week by providing image caching, replication and cloning functions. The Copy Services license is based on usable capacity of the volumes involved in Copy Services functionality. The Copy Services license is available for the following license scopes: FB and ALL (both FB and CKD). The Copy Services license includes the following features: * Global Mirror * Metro Mirror * Metro/Global Mirror * Point-in-Time Copy/FlashCopy® * z/OS® Global Mirror * z/OS Metro/Global Mirror Incremental Resync (RMZ) The Copy Services license feature codes are ordered in increments up to a specific capacity. For example, if you require 160 TB of capacity, order 10 of feature code 8251 (10 TB each up to 100 TB capacity), and 4 of feature code 8252 (15 TB each, for an extra 60 TB). The Copy Services license includes the following feature codes. +--------------+-----------------------------------------------------+ | Feature Code | Feature code for licensed function indicator | +==============+=====================================================+ | 8250 | CS - inactive | +--------------+-----------------------------------------------------+ | 8251 | CS - 10 TB (up to 100 TB capacity) | +--------------+-----------------------------------------------------+ | 8252 | CS - 15 TB (from 100.1 TB to 250 TB capacity) | +--------------+-----------------------------------------------------+ | 8253 | CS - 25 TB (from 250.1 TB to 500 TB capacity) | +--------------+-----------------------------------------------------+ | 8254 | CS - 75 TB (from 500.1 to 1250 TB capacity) | +--------------+-----------------------------------------------------+ | 8255 | CS - 175 TB (from 1250.1 TB to 3000 TB capacity) | +--------------+-----------------------------------------------------+ | 8256 | CS - 300 TB (from 3000.1 TB to 6000 TB capacity) | +--------------+-----------------------------------------------------+ | 8260 | CS - 500 TB (from 6000.1 TB to 10,000 TB capacity) | +--------------+-----------------------------------------------------+ The following ordering rules apply when you order the Copy Services license: * The Copy Services license should be ordered based on the total usable capacity of all volumes involved in one or more Copy Services relationships. * The licensed authorization must be equal to or less that the total usable capacity allocated to the volumes that participate in Copy Services operations. * You must purchase features for both the source (primary) and target (secondary) storage system. Required software on the OpenStack Cinder and Nova nodes -------------------------------------------------------- The IBM Storage Driver makes use of the following software on the OpenStack Cinder and Nova-compute nodes. +------------------------+----------------------------------+ | Software | Installed on | +========================+==================================+ | Ubuntu Server (16.04), | All OpenStack Cinder nodes | | x64 | | | | | | Red Hat Enterprise | | | Linux (RHEL) 7.x, x64 | | | | | | CentOS Linux 7.x, x64 | | | | | | KVM for IBM z Systems | | +------------------------+----------------------------------+ | IBM Storage Host | All OpenStack Cinder and Nova | | Attachment Kit for | compute nodes that connect to | | Linux | storage systems and use RHEL 7.x | | | or CentOS Linux 7.x | +------------------------+----------------------------------+ | Linux patch package | All OpenStack Cinder nodes | +------------------------+----------------------------------+ | sysfsutils utility | All OpenStack Cinder nodes on FC | | | network | +------------------------+----------------------------------+ Configuration ~~~~~~~~~~~~~ Configure the driver manually by changing the ``cinder.conf`` file as follows: .. code-block:: ini volume_driver = cinder.volume.drivers.ibm.ibm_storage.IBMStorageDriver Configuration Description for DS8000 ------------------------------------ .. include:: ../../tables/cinder-ibm_storage.inc Replication parameters ---------------------- +-----------------+------------------------------+---------------+ | Parameter | Description | Applicable to | +=================+==============================+===============+ | replication | Volume replication | DS8000 | | _device | parameters | | +-----------------+------------------------------+---------------+ | backend_id | IP address or host name of | DS8000 | | | the target storage system | | +-----------------+------------------------------+---------------+ | san_login | User name to be used during | DS8000 | | | replication procedure | | +-----------------+------------------------------+---------------+ | san_password | Password to be used during | DS8000 | | | replication procedure | | | | (base64-encoded) | | +-----------------+------------------------------+---------------+ | san_clustername | Pool name on the target | DS8000 | | | storage system | | +-----------------+------------------------------+---------------+ | port_pairs | ID pairs of IO ports, | DS8000 | | | participating in | | | | replication | | +-----------------+------------------------------+---------------+ | lss_range_for | LSS range to reserve for | DS8000 | | _cg | consistency groups | | +-----------------+------------------------------+---------------+ Security ~~~~~~~~ The following information provides an overview of security for the IBM Storage Driver for OpenStack. Configuring Cinder nodes for trusted communication ------------------------------------------------------------------ The IBM Storage Driver for OpenStack communicates with DS8000 over HTTPS, using self-signed certificate or certificate signed by a certificate authority (CA). Configure a trusted communication link to ensure a successful attachment of a Cinder node to a DS8000 storage system, as detailed in the following sections. Configuring trusted communication link -------------------------------------- Before configuring a DS8000 backend, complete the following steps to establish the chain of trust. #. In your operating system shell, run this command to obtain the certificate: ``openssl x509 -in <(openssl s_client -connect :8452 -prexit 2>/dev/null) -text -out .pem`` If the certificate is self-signed, the following information is displayed: .. code-block:: ini --- Certificate chain 0 s:/CN=ds8000.ibm.com i:/CN=ds8000.ibm.com --- #. Create an exception by moving the certificate ``.pem to the /opt/ibm/ds8k_certs/.pem`` file. #. Verify that the is the same as configured in san_ip. #. If the certificate subject and issuer are different, the certificate is signed by a CA, as illustrated below: .. code-block:: ini --- Certificate chain 0 s:/C=US/ST=New York/L=Armonk/O=IBM/OU=EI/CN=www.ibm.com i:/C=US/O=GeoTrust Inc./CN=GeoTrust SSL CA - G3 1 s:/C=US/O=GeoTrust Inc./CN=GeoTrust SSL CA - G3 i:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA --- #. Add a public certificate to trusted CA certificate store to complete the chain of trust, as explained below. #. Verify trusted communication link, as explained below. Adding a public certificate to trusted CA certificate store ----------------------------------------------------------- Add the CA public certificate to the trusted CA certificates store on the Cinder node, according to procedures for the operating system in use. #. For RHEL 7.x or CentOS 7.x, place the certificate to be trusted (in PEM format) into the /etc/pki/ca-trust/source/anchors/ directory. Then, run the ``sudo update-ca-trust`` command. #. For Ubuntu 18.04, place the certificate to be trusted (in PEM format) into the /usr/local/share/ca-certificates/ directory. Rename the file, using the ``*.crt`` extension. Then, run the ``sudo update-ca-certificates`` command. #. For Python requests library with certifi, run the ``cat ca_public_certificate.pem`` command to append the certificate to the location of the certifi trust store file. For example: .. code-block:: ini cat ca_public_certificate.pem >> /usr/local/lib/python3.6/ dist-packages/certifi/cacert.pem. Verifying trusted communication link ------------------------------------ Verify the chain of trust has been established successfully. #. Obtain the location of the Python library requests trust store, according to the installation type. #. RHEL 7.x or CentOS 7.x: .. code-block:: console # python3 Python 3.6.8 (default, Aug 7 2019, 17:28:10) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import requests >>> print(requests.certs.where()) /etc/pki/ca-trust/extracted/openssl/ ca-bundle.trust.crt #. Ubuntu 18.04: .. code-block:: console # python3 Python 3.6.9 (default, Nov 7 2019, 10:44:02) [GCC 8.3.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import requests >>> print(requests.certs.where()) /etc/ssl/certs/ca-certificates.crt #. Python requests library with certifi: .. code-block:: console # python3 Python 3.6.9 (default, Nov 7 2019, 10:44:02) [GCC 8.3.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import requests >>> print(requests.certs.where()) /usr/local/lib/python3.6/dist-packages/ certifi/cacert.pem #. Run the ``openssl s_client -CAfile -connect :8452