Many applications don’t require persistence. I refer to these types of apps as "momentum-building apps" because they typically deliver quick wins in terms of containerization. There are many more applications, however—for example, many enterprise applications—that must have some level of persistence and state. If you or your developers are asking the following questions, storage for containers is an important topic to you:
All of these examples show the need to have a persistence layer for containers. In the most simple example, if a container or host fails or is deleted, a customer with a shared persistence layer can recover and retrieve state by restarting the container on another host.
But storage is complex. Every container might have different storage needs for its specific workload. Add hundreds and thousands of different container types to a single host, and now you have a challenge in both scale and complexity. And I haven't even mentioned the range of storage options. With all this in mind, let's look at some of the challenges ahead, and how Oracle Cloud Infrastructure is meeting those challenges.
Of the many challenges of adopting persistent storage, here are some of the top ones:
After attending DockerCon Europe, I participated in a storage panel that hit on a number of these topics, and I followed it up last month by attending KubeCon + CloudNativeCon. It has become clear to me that enterprise applications, containers, and persistent storage are intersecting. I want to make you aware of what Oracle Cloud Infrastructure is doing to address these challenges.
Oracle Cloud Infrastructure provides two flexible choices for Kubernetes deployments: fully managed or build your own.
Managed Kubernetes: Oracle Cloud Infrastructure Container Engine for Kubernetes is a fully managed, scalable, and highly available service that you can use to deploy your containerized applications to the cloud. Use Container Engine for Kubernetes when your development team wants to reliably build, deploy, and manage cloud native applications. You specify the compute resources that your applications require, and Container Engine for Kubernetes provisions them on Oracle Cloud Infrastructure in an existing tenancy.
Build your own: Oracle Cloud Infrastructure supports bare metal and VM deployments. Customers have full access to bare metal servers, and you have full control to build your Docker or Kubernetes environment to your exacting specifications.
Support for Kubernetes and Docker Enterprise also extends to Oracle Linux. Oracle announced the release of Oracle Container Runtime for Docker version 18.03. The Oracle Container Runtime allows you to create and distribute applications across Oracle Linux systems and other operating systems that support Docker. Oracle Container Runtime for Docker consists of the Docker Engine, which packages and runs the applications, and integrates with the Docker Hub, Docker Store, and Oracle Container Registry to share the applications in a software as a service (SaaS) cloud.
Here's where we are today. That said, you should view this area as still under formation, as we continue to invest.
In our managed service offering, we install and preconfigure the Volume Provisioner to provide turnkey storage options for container deployments.
Developers can use local storage or plug-ins from several other storage companies to create a file storage system through an API. Because Docker runs in swarm mode and comes with only a local driver, the plug-ins make it aware of your swarms and match volumes with service tasks. For example, there is such a plug-in for Docker volumes on Oracle Cloud Infrastructure.
The Docker volume plug-in uses the Oracle Cloud Infrastructure File Storage service, which is an enterprise-grade NFSv3 storage service that supports a new level of scale necessary for container environments. The ability to create up to 10,000 snapshots fully enables a DevOps deployment model in the cloud. This plug-in can be installed on Oracle Cloud; we are in the process of open sourcing this driver.
The Oracle Cloud Infrastructure Volume Provisioner enables the dynamic provisioning of storage resources when running Kubernetes on Oracle Cloud Infrastructure. It uses the FlexVolume driver to bind storage resources to Kubernetes nodes. The Volume Provisioner offers support for Block Volumes today, and we plan to support the File Storage service in the future. Today, customers that use the File Storage Service can use the standard NFS interface, with dynamic provisioning available in the future.
Customers building their own Kubernetes environment can use the FlexVolume driver, which is available on GitHub.
Kubernetes is moving toward a scalable and extensible model. They introduced the Container Storage Interface (CSI), which is decoupled from core Kubernetes code. CSI will be enabled by default on standard Kubernetes deployments, and it just recently went from beta into production. Oracle intends to support this interface; we will need to write or update volume plug-ins for multiple storage services.
Don't put off that conversation on storage for containers. It's an important one, and we want to help. If you want to learn more about Oracle Cloud Infrastructure, talk more about storage, or dive into Kubernetes, our cloud landing page is a great place to start. You can also email me directly or reach out on LinkedIn.