Cinder - Block storage

Overview

Cinder can be deployed using Kolla and supports the following storage backends:

  • ceph

  • hnas_nfs

  • iscsi

  • lvm

  • nfs

LVM

When using the lvm backend, a volume group should be created on each storage node. This can either be a real physical volume or a loopback mounted file for development. Use pvcreate and vgcreate to create the volume group. For example with the devices /dev/sdb and /dev/sdc:

<WARNING ALL DATA ON /dev/sdb and /dev/sdc will be LOST!>

pvcreate /dev/sdb /dev/sdc
vgcreate cinder-volumes /dev/sdb /dev/sdc

During development, it may be desirable to use file backed block storage. It is possible to use a file and mount it as a block device via the loopback system.

free_device=$(losetup -f)
fallocate -l 20G /var/lib/cinder_data.img
losetup $free_device /var/lib/cinder_data.img
pvcreate $free_device
vgcreate cinder-volumes $free_device

Enable the lvm backend in /etc/kolla/globals.yml:

enable_cinder_backend_lvm: "yes"

Note

There are currently issues using the LVM backend in a multi-controller setup, see _bug 1571211 for more info.

NFS

To use the nfs backend, configure /etc/exports to contain the mount where the volumes are to be stored:

/kolla_nfs 192.168.5.0/24(rw,sync,no_root_squash)

In this example, /kolla_nfs is the directory on the storage node which will be nfs mounted, 192.168.5.0/24 is the storage network, and rw,sync,no_root_squash means make the share read-write, synchronous, and prevent remote root users from having access to all files.

Then start nfsd:

systemctl start nfs

On the deploy node, create /etc/kolla/config/nfs_shares with an entry for each storage node:

storage01:/kolla_nfs
storage02:/kolla_nfs

Finally, enable the nfs backend in /etc/kolla/globals.yml:

enable_cinder_backend_nfs: "yes"

Validation

Create a volume as follows:

openstack volume create --size 1 steak_volume
<bunch of stuff printed>

Verify it is available. If it says “error”, then something went wrong during LVM creation of the volume.

openstack volume list

+--------------------------------------+--------------+-----------+------+-------------+
| ID                                   | Display Name | Status    | Size | Attached to |
+--------------------------------------+--------------+-----------+------+-------------+
| 0069c17e-8a60-445a-b7f0-383a8b89f87e | steak_volume | available |    1 |             |
+--------------------------------------+--------------+-----------+------+-------------+

Attach the volume to a server using:

openstack server add volume steak_server 0069c17e-8a60-445a-b7f0-383a8b89f87e

Check the console log to verify the disk addition:

openstack console log show steak_server

A /dev/vdb should appear in the console log, at least when booting cirros. If the disk stays in the available state, something went wrong during the iSCSI mounting of the volume to the guest VM.

Cinder LVM2 backend with iSCSI

As of Newton-1 milestone, Kolla supports LVM2 as cinder backend. It is accomplished by introducing two new containers tgtd and iscsid. tgtd container serves as a bridge between cinder-volume process and a server hosting Logical Volume Groups (LVG). iscsid container serves as a bridge between nova-compute process and the server hosting LVG.

In order to use Cinder’s LVM backend, a LVG named cinder-volumes should exist on the server and following parameter must be specified in globals.yml:

enable_cinder_backend_lvm: "yes"

For Ubuntu and LVM2/iSCSI

iscsd process uses configfs which is normally mounted at /sys/kernel/config to store discovered targets information, on centos/rhel type of systems this special file system gets mounted automatically, which is not the case on debian/ubuntu. Since iscsid container runs on every nova compute node, the following steps must be completed on every Ubuntu server targeted for nova compute role.

  • Add configfs module to /etc/modules

  • Rebuild initramfs using: update-initramfs -u command

  • Stop open-iscsi system service due to its conflicts with iscsid container.

    Ubuntu 16.04 (systemd): systemctl stop open-iscsi; systemctl stop iscsid

  • Make sure configfs gets mounted during a server boot up process. There are multiple ways to accomplish it, one example:

    mount -t configfs /etc/rc.local /sys/kernel/config
    

    Note

    There is currently an issue with the folder /sys/kernel/config as it is either empty or does not exist in several operating systems, see _bug 1631072 for more info

Cinder backend with external iSCSI storage

In order to use external storage system (like the ones from EMC or NetApp) the following parameter must be specified in globals.yml:

enable_cinder_backend_iscsi: "yes"

Also enable_cinder_backend_lvm should be set to no in this case.

Skip Cinder prechecks for Custom backends

In order to use custom storage backends which currently not yet implemented in Kolla, the following parameter must be specified in globals.yml:

skip_cinder_backend_check: True

All configuration for custom NFS backend should be performed via cinder.conf in config overrides directory.

Cinder-Backup with S3 Backend

Configuring Cinder-Backup for S3 includes the following steps:

  1. Enable Cinder-Backup S3 backend in globals.yml:

cinder_backup_driver: "s3"
  1. Configure S3 connection details in /etc/kolla/globals.yml:

    • cinder_backup_s3_url (example: http://127.0.0.1:9000)

    • cinder_backup_s3_access_key (example: minio)

    • cinder_backup_s3_bucket (example: cinder)

    • cinder_backup_s3_secret_key (example: admin)

#. If you wish to use a single S3 backend for all supported services, use the following variables:

  • s3_url

  • s3_access_key

  • s3_glance_bucket

  • s3_secret_key

All Cinder-Backup S3 configurations use these options as default values.

Customizing backend names in cinder.conf

Note

This is an advanced configuration option. You cannot change these variables if you already have volumes that use the old name without additional steps. Sensible defaults exist out of the box.

The following variables are available to customise the default backend name that appears in cinder.conf:

Variables to customize backend name

Driver

Variable

Default value

Ceph

cinder_backend_ceph_name

rbd-1

Logical Volume Manager (LVM)

cinder_backend_lvm_name

lvm-1

Network File System (NFS)

cinder_backend_nfs_name

nfs-1

Hitachi NAS Platform NFS

cinder_backend_hnas_nfs_name

hnas-nfs

VMware Virtual Machine Disk File

cinder_backend_vmwarevc_vmdk_name

vmwarevc-vmdk

VMware VStorage (Object Storage)

cinder_backend_vmware_vstorage_object_name

vmware-vstorage-object

Quobyte Storage for OpenStack

cinder_backend_quobyte_name

QuobyteHD

Pure Storage FlashArray for OpenStack (iSCSI)

cinder_backend_pure_iscsi_name

Pure-FlashArray-iscsi

Pure Storage FlashArray for OpenStack

cinder_backend_pure_fc_name

Pure-FlashArray-fc

Pure Storage FlashArray for OpenStack

cinder_backend_pure_roce_name

Pure-FlashArray-roce

These are the names you use when configuring volume_backend_name on cinder volume types. It can sometimes be useful to provide a more descriptive name.
{"cc_re__cc_re__cc_by_3_0": ["</i></a>\n          \n            <a id=\"logABugLink3\" href=\"\" target=\"_blank\" title=\"Found an error? Report a bug against this page\"><i class=\"fa fa-bug\" data-toggle=\"tooltip\" data-placement=\"top\" title=\"Report a Bug\"></i></a>\n          \n          </div>\n          <div class=\"row docs-byline bottom\">\n            <div class=\"docs-updated\">this page last updated: 2022-07-13 17:33:53</div>\n          </div>\n          <div class=\"row\">\n            <div class=\"col-lg-8 col-md-8 col-sm-8 docs-license\">\n<a href=\"https://creativecommons.org/licenses/by/3.0/\">\n <img src=\"../../_static/images/docs/license.png\" alt=\"Creative Commons Attribution 3.0 License\"/>\n</a>\n<p>\n Except where otherwise noted, this document is licensed under\n <a href=\"https://creativecommons.org/licenses/by/3.0/\">Creative Commons\n Attribution 3.0 License</a>. See all <a href=\"https://www.openstack.org/legal\">\n OpenStack Legal Documents</a>.\n</p>\n            </div>\n            <div class=\"col-lg-4 col-md-4 col-sm-4 docs-actions-wrapper\">\n            <!-- ID buglinkbottom added so t", "        \n          </div>\n          <div class=\"row docs-byline bottom\">\n            <div class=\"docs-updated\">this page last updated: 2022-07-13 17:33:53</div>\n          </div>\n          <div class=\"row\">\n            <div class=\"col-lg-8 col-md-8 col-sm-8 docs-license\">\n<a href=\"https://creativecommons.org/licenses/by/3.0/\">\n <img src=\"../../_static/images/docs/license.png\" alt=\"Creative Commons Attribution 3.0 License\"/>\n</a>\n<p>\n Except where otherwise noted, this document is licensed under\n <a href=\"https://creativecommons.org/licenses/by/3.0/\">Creative Commons\n Attribution 3.0 License</a>. See all <a href=\"https://www.openstack.org/legal\">\n OpenStack Legal Documents</a>.\n</p>\n            </div>\n            <div class=\"col-lg-4 col-md-4 col-sm-4 docs-actions-wrapper\">\n            <!-- ID buglinkbottom added so that pre-filled doc bugs\n                 are sent to Launchpad projects related to the\n                 document -->\n              <a href=\"#\" id=\"logABugLink2\" class=\"docs-footer-actions\"><i class=\"fa fa-bug\"></i> found an erro"]}