External storage plugins, provisioners, and helper libraries
Go Python Shell Makefile
Switch branches/tags
Clone or download
wongma7 Merge pull request #858 from klausenbusk/csi-digitalocean
digitalocean: Recommend the official CSI driver and announce EOL
Latest commit 6a4cb24 Jul 16, 2018
Failed to load latest commit information.
aws/efs Update build containers to go 1.10 Jul 11, 2018
ceph Update CEPH_VERSION to mimic Jul 4, 2018
digitalocean digitalocean: Recommend the official CSI driver and announce EOL Jul 14, 2018
docs update kubernetes api versions to be current to 1.8.8 Feb 12, 2018
flex Update flex base image Jun 18, 2018
gluster Update build containers to go 1.10 Jul 11, 2018
hack Upgrade to kubernetes 1.9.2, Part 2: Non-Vendor changes. Jan 30, 2018
iscsi/targetd Set iscsi-targetd threadiness to 1 to avoid LUN number race Jul 13, 2018
lib Merge pull request #846 from wongma7/clean-vendor Jul 11, 2018
local-volume Merge pull request #846 from wongma7/clean-vendor Jul 11, 2018
nfs-client Propagate StorageClass MountOptions to PVs created by nfs-client-prov… Jun 27, 2018
nfs Merge pull request #633 from schoolofdevops/master Jun 14, 2018
openebs Fix error imports using glide up Jun 27, 2018
repo-infra Up deadline, remove redundant linters Jul 11, 2018
snapshot Update snapshot to k8s v1.11.0 Jul 11, 2018
vendor Pin versions of stuff so we can build Jul 11, 2018
.gitignore Remove cinder from test Jun 19, 2018
.golintignore Exclude nfs/test/e2e, try a 3rd(\!) way to exclude vendor Jul 11, 2018
.travis.yml Bump travis go Jul 11, 2018
LICENSE Squashed 'repo-infra/' content from commit 1d5f4e8 Jul 12, 2017
Makefile Shifted installation of helm. Jul 8, 2018
OWNERS Rename OWNERS assignees: to approvers: Nov 1, 2017
README.md Updated link to in-tree provisioners Apr 26, 2018
RELEASE.md Fix nfs-provisioner build by updating vendor Feb 21, 2017
code-of-conduct.md Update code-of-conduct.md Dec 20, 2017
deploy.sh Remove cinder from test Jun 19, 2018
glide.lock Pin versions of stuff so we can build Jul 11, 2018
glide.yaml Pin versions of stuff so we can build Jul 11, 2018
test.sh Shifted installation of helm. Jul 8, 2018
unittests.sh Blacklist Unittests that Require K8s or Do Not Pass Mar 28, 2018


External Storage

Build Status GoDoc Go Report Card

External Provisioners

This repository houses community-maintained external provisioners plus a helper library for building them. Each provisioner is contained in its own directory so for information on how to use one, enter its directory and read its documentation. The library is contained in the lib directory.

What is an 'external provisioner'?

An external provisioner is a dynamic PV provisioner whose code lives out-of-tree/external to Kubernetes. Unlike in-tree dynamic provisioners that run as part of the Kubernetes controller manager, external ones can be deployed & updated independently.

External provisioners work just like in-tree dynamic PV provisioners. A StorageClass object can specify an external provisioner instance to be its provisioner like it can in-tree provisioners. The instance will then watch for PersistentVolumeClaims that ask for the StorageClass and automatically create PersistentVolumes for them. For more information on how dynamic provisioning works, see the docs or this blog post.

How to use the library

import (

You need to implement the Provisioner interface then pass your implementation to a ProvisionController and run the controller. The controller takes care of deciding when to call your implementation's Provision or Delete. The interface and controller are defined in the above package.

You will want to import a specific version of the library to ensure compatibility with certain versions of Kubernetes and to avoid breaking changes. This repo will be tagged according to the library's version (individual provisioners will need to version themselves independently, e.g. by in their documentation pointing to Docker Hub and using Docker tags), so to keep track of releases, go to this repo's releases page.

Note that because your provisioner needs to depend also on client-go and the library itself depends on a specific version of client-go, to avoid a dependency conflict you must ensure you use the exact same version of client-go as the library. You can check what version of client-go the library depends on by looking at its glide.yaml.

For all documentation, including a full guide on how to write an external provisioner using the library that demonstrates the above, see here.

client-go integration strategy

This library is integrated with client-go master branch. As soon as the client-go master branch contains a new version of client-go vendor dependencies, dependencies of this library shall be updated to the tip of the client-go master branch.



  • Finalize repo structure, release process, etc.

Community, discussion, contribution, and support

Learn how to engage with the Kubernetes community on the community page.

You can reach the maintainers of this project at:

  • Slack: #sig-storage

Kubernetes Incubator

This is a Kubernetes Incubator project. The project was established 2016-11-15 (as nfs-provisioner). The incubator team for the project is:

  • Sponsor: Clayton (@smarterclayton)
  • Champion: Jan (@jsafrane) & Brad (@childsb)
  • SIG: sig-storage

Code of conduct

Participation in the Kubernetes community is governed by the Kubernetes Code of Conduct.