For Cloud Native, Architecture Matters
The term ‘cloud native’ is widely used in technical circles but doesn’t have a particularly clear definition. The confusion lies in the fact that being ‘cloud native’ has little to do with the environment your application is deployed to—the term is equally applicable to on-premise or the public cloud. Rather, the term refers to application and architecture characteristics.
Evidence can be found in the Cloud Native Computing Foundation’s most recent definition of the term:
Cloud native technologies empower organizations to build and run scalable applications in modern, dynamic environments such as public, private, and hybrid clouds. Containers, service meshes, microservices, immutable infrastructure, and declarative APIs exemplify this approach.
These techniques enable loosely coupled systems that are resilient, manageable, and observable. Combined with robust automation, they allow engineers to make high-impact changes frequently and predictably with minimal toil.
What is Cloud Native Storage?
So what does it mean for storage to be cloud native? In a nutshell, it has to behave in the same dynamic, API-driven way as everything else in the cloud native ecosystem. The two storage-specific questions that determine a storage system’s Cloud Native credibility. They are:
It is purpose-built for Kubernetes
It is compatible with Amazon’s S3 API
Let’s take a look at these criteria in more detail.
Cloud Native Storage is Object Storage
Modern application architecture is based on object storage, and S3 is, by default, the API language of the cloud. Because object storage is the only kind of storage that is designed to handle the amount of data the cloud native applications generate, at a price companies can afford and at the speed users expect – it dominates modern storage. Other attributes of object storage include a superior approach to distribution, better resiliency and higher availability than competing block or file storage.
These are the attributes expected by cloud native applications.
The Amazon S3 API is the defacto standard for object storage to the point where every object storage software vendor claims compatibility. That said, AWS S3 compatibility is effectively binary. It works in all cases or it doesn’t.
That means is that there are hundreds, perhaps thousands of corner cases where what you expect to happen does not. This is an area where Open Source software has a significant advantage. Given the size and diversity of the applications, operating systems and hardware architecture they have seen most of corner cases.
As an application creator this matters. You will need to test your applications against those vendors. Open Source makes it easy to assess vendor claims and determine what platform performs against your applications. If it passes, it is likely cloud native. If it doesn’t, it isn’t.
Cloud Native Storage: Kubernetes Native
The second criteria for being ‘cloud native’ is to use a distributed architecture that leverages an external container orchestration platform. This means being Kubernetes native is a defining attribute of cloud native storage. Kubernetes is already the clear industry winner when it comes to container orchestration, so being built to work with Kubernetes is essential for a storage solution to be considered cloud native.
What exactly does it mean for a storage to be Kubernetes native? We think there are six main criteria.
1. Let Kubernetes orchestrate storage nodes
Kubernetes is a powerful orchestrator, and can be leveraged to handle both compute and storage orchestration. A truly cloud native storage option like MinIO integrates with Kubernetes, allowing operators to manage storage with the Kubernetes interface and Kubernetes to handle everything from provisioning to volume placement.