Storage is found in many parts of the OpenStack stack, and the differing types can cause confusion to even experienced cloud engineers. Here's a simple chart to kick-start your understanding:
On-instance / ephemeral | Volumes block storage (Cinder) | Object Storage (Swift) |
Used for running Operating System and scratch space | Used for adding additional persistent storage to a virtual machine (VM) | Used for storing virtual machine images and data |
Persists until VM is terminated | Persists until deleted | Persists until deleted |
Access associated with a VM | Access associated with a VM | Available from anywhere |
Implemented as a filesystem underlying OpenStack Compute | Mounted via OpenStack Block-Storage controlled protocol (for example, iSCSI) | REST API |
Administrator configures size setting, based on flavors | Sizings based on need | Easily scalable for future growth |
Example: 10GB first disk, 30GB/core second disk | Example: 1TB "extra hard drive" | Example: 10s of TBs of dataset storage |
Other points of note include:
OpenStack Object Storage is not used like a traditional hard drive. Object storage is all about relaxing some of the constraints of a POSIX-style file system. The access to it is API-based (and the API uses http). This is a good idea as if you don't have to provide atomic operations (that is, you can rely on eventual consistency), you can much more easily scale a storage system and avoid a central point of failure.
The OpenStack Image Service is used to manage the virtual machine images in an OpenStack cluster, not store them. Instead, it provides an abstraction to different methods for storage - a bridge to the storage, not the storage itself.
OpenStack Object Storage can function on its own. The Object Storage (swift) product can be used independently of the Compute (nova) product.