GP - Fotolia
What is Kubernetes CSI and how is it being used?
A recently released CSI-compliant plugin from Kubernetes could help simplify the process of connecting containerized workloads with storage systems.
Kubernetes CSI is an implementation of the Container Storage Interface specification, which offers a standardized mechanism for establishing connectivity between container orchestration tools and storage systems.
Under this model, the CO tool incorporates a CSI-compliant plugin that serves as an interface between the containerized workloads and third-party storage system. These storage systems include file, block and cloud storage environments.
To facilitate the process, the storage vendor must provide a CSI-compliant volume driver that interacts with the CO plugin. Together, the driver and plugin enable the containerized workloads to support operations such as attaching or detaching volumes, mounting or unmounting volumes, and dynamically provisioning or deprovisioning volumes. Because the CSI specification standardizes the interface, a vendor needs to develop only one driver that works with any CSI-compliant CO plugin.
Previous Kubernetes plugins
Kubernetes now offers a CSI-compliant plugin that enables persistent storage for containerized workloads, without many of the headaches that once came from integrating storage into the Kubernetes environment. Prior to the Kubernetes CSI initiative, storage vendors often relied on Kubernetes in-tree volume plugins to facilitate storage connectivity. The in-tree aspect meant that they were built into the core Kubernetes repository, bringing with them a number of challenges.
If a vendor wanted to integrate its storage system into the Kubernetes environment, it needed to develop a volume plugin and add it to the Kubernetes code base. Plugin maintenance was tightly coupled with Kubernetes releases, and the plugin had extensive privileges over Kubernetes components. A bug in the plugin could bring down critical components. In addition, the storage vendor had to make the plugin's source code available to the public as part of the Kubernetes project.
Kubernetes then came out with the FlexVolume plugin, which exposed an API for carrying out operations such as mounting, unmounting, attaching and detaching volumes. Unfortunately, the FlexVolume plugin also had its limitations. Although it supported third-party, out-of-tree volume drivers, it still required access to the root file systems on the node and master machines and came with a number of system dependencies.
Kubernetes CSI eases the process
The new Kubernetes CSI volume plugin helps address these issues and simplify driver development. Like the traditional volume plugins, the CSI plugin is an in-tree component built into the code base. However, unlike the older models, the CSI volume plugin extends containerized operations outside the Kubernetes environment, without the limitations of the FlexVolume plugin.
The CSI volume plugin acts as a standardized adapter into the Kubernetes environment, providing an API for interacting with external CSI-compliant volume drivers. The plugin enables Kubernetes master and node components to discover and register out-of-tree volume drivers deployed to the Kubernetes environment. The plugin can also initiate secure communications with those drivers to provide persistent storage to the containerized workloads.
Storage vendors can now create CSI volume drivers to deploy to the Kubernetes environment without needing to worry about Kubernetes implementation details, as they did in the past. Kubernetes imposes relatively few requirements on how vendors implement their drivers, as long as they adhere to the CSI standard. In this way, vendors have much more flexibility for integrating their storage systems with the Kubernetes environment, as well as with other CO environments.