cinder #0

Supports: trusty


Cinder is a storage service for the Openstack project


This charm provides the Cinder volume service for OpenStack. It is intended to be used alongside the other OpenStack components, starting with the Folsom release.

Cinder is made up of 3 separate services: an API service, a scheduler and a volume service. This charm allows them to be deployed in different combination, depending on user preference and requirements.

This charm was developed to support deploying Folsom on both Ubuntu Quantal and Ubuntu Precise. Since Cinder is only available for Ubuntu 12.04 via the Ubuntu Cloud Archive, deploying this charm to a Precise machine will by default install Cinder and its dependencies from the Cloud Archive.


Cinder may be deployed in a number of ways. This charm focuses on 3 main configurations. All require the existence of the other core OpenStack services deployed via Juju charms, specifically: mysql, rabbitmq-server, keystone and nova-cloud-controller. The following assumes these services have already been deployed.

Basic, all-in-one using local storage and iSCSI

The api server, scheduler and volume service are all deployed into the same unit. Local storage will be initialized as a LVM phsyical device, and a volume group initialized. Instance volumes will be created locally as logical volumes and exported to instances via iSCSI. This is ideal for small-scale deployments or testing:

cat >cinder.cfg <<END
    block-device: sdc
    overwrite: true
juju deploy --config=cinder.cfg cinder
juju add-relation cinder keystone
juju add-relation cinder mysql
juju add-relation cinder rabbitmq-server
juju add-relation cinder nova-cloud-controller

Separate volume units for scale out, using local storage and iSCSI

Separating the volume service from the API service allows the storage pool to easily scale without the added complexity that accompanies load-balancing the API server. When we've exhausted local storage on volume server, we can simply add-unit to expand our capacity. Future requests to allocate volumes will be distributed across the pool of volume servers according to the availability of storage space.

cat >cinder.cfg <<END
    enabled-services: api, scheduler
    enabled-services: volume
    block-device: sdc
    overwrite: true
juju deploy --config=cinder.cfg cinder cinder-api
juju deploy --config=cinder.cfg cinder cinder-volume
juju add-relation cinder-api mysql
juju add-relation cinder-api rabbitmq-server
juju add-relation cinder-api keystone
juju add-relation cinder-api nova-cloud-controller
juju add-relation cinder-volume mysql
juju add-relation cinder-volume rabbitmq-server

# When more storage is needed, simply add more volume servers.
juju add-unit cinder-volume

All-in-one using Ceph-backed RBD volumes

All 3 services can be deployed to the same unit, but instead of relying on local storage to back volumes an external Ceph cluster is used. This allows scalability and redundancy needs to be satisified and Cinder's RBD driver used to create, export and connect volumes to instances. This assumes a functioning Ceph cluster has already been deployed using the official Ceph charm and a relation exists between the Ceph service and the nova-compute service.

cat >cinder.cfg <<END
    block-device: None
juju deploy --config=cinder.cfg cinder
juju add-relation cinder ceph
juju add-relation cinder keystone
juju add-relation cinder mysql
juju add-relation cinder rabbitmq-server
juju add-relation cinder nova-cloud-controller


The default value for most config options should work for most deployments.

Users should be aware of three options, in particular:

openstack-origin: Allows Cinder to be installed from a specific apt repository. See config.yaml for a list of supported sources.

block-device: When using local storage, a block device should be specified to back a LVM volume group. It's important this device exists on all nodes that the service may be deployed to.

overwrite: Whether or not to wipe local storage that of data that may prevent it from being initialized as a LVM phsyical device. This includes filesystems and partition tables. CAUTION

enabled-services: Can be used to separate cinder services between service service units (see previous section)


(int) OpenStack Volume API listening port.
(string) The block devices on which to create LVM volume group. May be set to None for deployments that will not need local storage (eg, Ceph/RBD-backed volumes). This can also be a space delimited list of block devices to attempt to use in the cinder LVM volume group - each block device detected will be added to the available physical volumes in the volume group. May be set to the path and size of a local file (/path/to/file.img|$sizeG), which will be created and used as a loopback device (for testing only). $sizeG defaults to 5G
(int) This value dictates the number of replicas ceph must make of any object it stores withing the cinder rbd pool. Of course, this only applies if using Ceph as a backend store. Note that once the cinder rbd pool has been created, changing this value will not have any effect (although it can be changed in ceph by manually configuring your ceph cluster).
(string) Comma separated list of key=value config flags to be set in cinder.conf.
(string) Database to request access.
(string) Username to request database access.
(boolean) Enable debug logging
(string) If splitting cinder services between units, define which services to install and configure.
(int) Newer storage drivers may require the v2 Glance API to perform certain actions e.g. the RBD driver requires requires this to support COW cloning of images. This option will default to v1 for backwards compatibility older glance services.
(string) Default network interface on which HA cluster will bind to communication with the other members of the HA Cluster.
(int) Default multicast port number that will be used to communicate between HA Cluster nodes.
(string) Used by the nrpe-external-master subordinate charm. A string that will be prepended to instance name to set the host name in nagios. So for instance the hostname would be something like: juju-myservice-0 If you're running multiple environments with the same services in them this allows you to differentiate between them.
(string) A comma-separated list of nagios servicegroups. If left empty, the nagios_context will be used as the servicegroup
(string) Repository from which to install. May be one of the following: distro (default), ppa:somecustom/ppa, a deb url sources entry, or a supported Cloud Archive release pocket. Supported Cloud Archive sources include: cloud:precise-folsom, cloud:precise-folsom/updates, cloud:precise-folsom/staging, cloud:precise-folsom/proposed. When deploying to Precise, the default distro option will use the cloud:precise-folsom/updates repository instead, since Cinder was not available in the Ubuntu archive for Precise and is only available via the Ubuntu Cloud Archive.
(string) The IP address and netmask of the OpenStack Admin network (e.g., . This network will be used for admin endpoints.
(string) The IP address and netmask of the OpenStack Internal network (e.g., . This network will be used for internal endpoints.
(string) The IP address and netmask of the OpenStack Public network (e.g., . This network will be used for public endpoints.
(string) If true, charm will attempt to overwrite block devices containing previous filesystems or LVM, assuming it is not in use.
(boolean) If True enables IPv6 support. The charm will expect network interfaces to be configured with an IPv6 address. If set to False (default) IPv4 is expected. . NOTE: these charms do not currently support IPv6 privacy extension. In order for this charm to function correctly, the privacy extension must be disabled and a non-temporary address must be configured/available on your network interface.
(string) Username to request access on rabbitmq-server.
(string) RabbitMQ virtual host to request access on rabbitmq-server.
(string) OpenStack Region
(boolean) If True, charm will attempt to remove missing physical volumes from volume group, if logical volumes are not allocated on them.
(string) SSL CA to use with the certificate and key provided - this is only required if you are providing a privately signed ssl_cert and ssl_key.
(string) SSL certificate to install and use for API ports. Setting this value and ssl_key will enable reverse proxying, point Glance's entry in the Keystone catalog to use https, and override any certficiate and key issued by Keystone (if it is configured to do so).
(string) SSL key to use with certificate specified as ssl_cert.
(boolean) By default, all services will log into their corresponding log files. Setting this to True will force all services to log to the syslog.
(boolean) Enable verbose logging
(string) Virtual IP(s) to use to front API services in HA configuration. . If multiple networks are being used, a VIP should be provided for each network, separated by spaces.
(int) Default CIDR netmask to use for HA vip when it cannot be automatically determined.
(string) Default network interface to use for HA vip when it cannot be automatically determined.
(string) Name of volume group to create and store Cinder volumes.
(int) The CPU core multiplier to use when configuring worker processes for Cinder. By default, the number of workers for each daemon is set to twice the number of CPU cores a service unit has.