*`type`: [VolumeType](http://docs.openstack.org/admin-guide/dashboard-manage-volumes.html) created in Cinder. Default is empty.
*`availability`: Availability Zone. Default is empty.
#### Ceph RBD
```yaml
apiVersion:extensions/v1beta1
kind:StorageClass
metadata:
name:fast
provisioner:kubernetes.io/rbd
parameters:
monitors:10.16.153.105:6789
adminID:kube
adminSecretName:ceph-secret
adminSecretNamespace:kube-system
pool:kube
userId:kube
secretName:ceph-secret-user
```
*`monitors`: Ceph monitors, comma delimited
*`adminID`: Ceph client ID that is capable of creating images in the pool. Default is "admin"
*`adminSecret`: Secret Name for `adminID`
*`adminSecretNamespace`: The namespace for `adminSecret`. Default is "default"
*`pool`: Ceph RBD pool. Default is "rbd"
*`userId`: Ceph client ID that is used to map the RBD image. Default is the same as `adminID`
*`secretName`: The name of Ceph Secret. It must exist in the same namespace as PVCs.
### User provisioning requests
Users request dynamically provisioned storage by including a storage class in their `PersistentVolumeClaim`.
...
...
@@ -152,6 +178,7 @@ In the future, the storage class may remain in an annotation or become a field o
### Sample output
#### GCE
This example uses GCE but any provisioner would follow the same flow.
First we note there are no Persistent Volumes in the cluster. After creating a storage class and a claim including that storage class, we see a new PV is created
...
...
@@ -184,6 +211,73 @@ $ kubectl get pv
```
#### Ceph RBD
First create Ceph admin's Secret in the system namespace. Here the Secret is created in `kube-system`:
glog.V(4).Infof("rbd: create %s size %s using mon %s, pool %s id %s key %s",p.rbdMounter.Image,volSz,mon,p.rbdMounter.Pool,p.rbdMounter.Id,p.rbdMounter.Secret)