A key challenge in managing storage is dealing with persistence — a problem that affects developers, system administrators, operations and DevOps throughout organizations. There is no such thing as stateless architecture, it is either outsourced or managed internally, but either way decisions need to be made concerning the tradeoffs of different types of storage. By examining the principles of cloud native storage, organizations can more effectively evaluate what is needed versus what is in use.
Storage finds itself at a tricky inflection point. Advances in technology require organizations to move toward solutions where servers are more temporary, data is free-flowing and lightweight and storage serves multidimensional applications that have more than one storage requirement.
With the move toward temporary servers, organizations don’t want “pet” servers they have to lovingly take care of, they want servers they can treat like “cattle,” and discarded when they no longer serve a purpose. This is reflected in the growing appetite for commodity hardware and cloud solutions that have no long-term attachments. As for the data they store, it has to be lightweight so it can be imported or migrated elsewhere as it grows. In addition, applications usually have more than one storage requirement which means organizations may require more than one storage solution.
The Role for Containers
So how can these issues be addressed with containers? The Kubernetes storage model could provide some of the answers. In the Kubernetes model, an administrator registers persistent volumes (PV) in the pool and makes them available for a developer to use. The developer has the option to claim the PV of his or her choice from the pool and reference the claim in the pod. This makes for a more flexible point of entrance for the developer and a more fluid and efficient environment to work within.
Cloud native architectures are horizontally scalable and spread across servers; have no single point of failure; are resilient and self-healing; have minimal operator overhead; and require no human oversight, because everything is API-driven and decoupled from the underlying platform and hardware.
Looking at cloud native storage through the lens of containers we begin to understand that while container technology may have solved many problems for code within the cloud, it still needs to provide complete solutions in the storage category. By applying a closer analysis to storage, we can better understand the choices that will best serve the storage needs of the future.
The Eight Principles of Cloud Native Storage
Cloud native storage can be assessed by the degree to which it meets the following eight principles:
It should be application-centric, presented to and consumed by applications rather than operating systems or hypervisors;
It should be platform agnostic and able to run anywhere, making upgrades and scaling non-disruptive;
Storage resources should be declared and composed like all other resources required by applications and servers;
Resources and services should be API-driven, making them easy to provision, consume, move and manage;
Storage services should be natively secure and integrate security features such as encryption and Role-based access control (RBAC);
The platform should be agile and able to move application data between locations, dynamically resize volumes for growth and take point-in-time copies of data for retention or to facilitate rapid recovery of data;
The storage platform should be performant and able to offer deterministic performance in complex distributed environments;
It should be consistently available and manage data distribution with a predictable, proven data model to ensure high availability, durability and consistency of data application.
With an understanding of the eight principles of cloud native storage, we can work toward the goal of running as many of the principles in combination as possible. They may not each be necessary to an organization’s needs but they offer ways to evaluate what an organization needs against what is in use.
Not There Yet
There are a number of approaches being deployed in today’s storage landscape — centralized file system, proprietary storage array, distributed storage, public cloud SAN and API framework — but none of them come close to meeting all eight principles of cloud native storage.
The nearest solution today would be a platform agnostic software-defined orchestrated storage system that is horizontally scalable and provides Docker or Kubernetes integration to allow organizations to run enterprise containerized applications in production. It is also highly available, performant and consistent.
Longer term, an industry standard “Container Storage Interface” is planned that will enable storage vendors to develop a plugin once and run it across a number of container orchestration systems. In the meantime, organizations need to think carefully about their storage needs and choose solutions to line with the eight principles.