Merge pull request #31434 from johscheuer/quobyte-dynamic-prov
Automatic merge from submit-queue Support Quobyte as StorageClass This PR allows Users to use Quobyte as StorageClass for dynamic volume provisioning and implements the Provisioner/Deleter Interface. @quolix @kubernetes/sig-storage @rootfs
This commit is contained in:
@@ -191,6 +191,94 @@ parameters:
|
||||
* `userId`: Ceph client ID that is used to map the RBD image. Default is the same as `adminId`.
|
||||
* `userSecretName`: The name of Ceph Secret for `userId` to map RBD image. It must exist in the same namespace as PVCs. It is required.
|
||||
|
||||
#### Quobyte
|
||||
|
||||
<!-- BEGIN MUNGE: EXAMPLE quobyte/quobyte-storage-class.yaml -->
|
||||
|
||||
```yaml
|
||||
apiVersion: storage.k8s.io/v1beta1
|
||||
kind: StorageClass
|
||||
metadata:
|
||||
name: slow
|
||||
provisioner: kubernetes.io/quobyte
|
||||
parameters:
|
||||
quobyteAPIServer: "http://138.68.74.142:7860"
|
||||
registry: "138.68.74.142:7861"
|
||||
adminSecretName: "quobyte-admin-secret"
|
||||
adminSecretNamespace: "kube-system"
|
||||
user: "root"
|
||||
group: "root"
|
||||
quobyteConfig: "BASE"
|
||||
quobyteTenant: "DEFAULT"
|
||||
```
|
||||
|
||||
[Download example](quobyte/quobyte-storage-class.yaml?raw=true)
|
||||
<!-- END MUNGE: EXAMPLE quobyte/quobyte-storage-class.yaml -->
|
||||
|
||||
* **quobyteAPIServer** API Server of Quobyte in the format http(s)://api-server:7860
|
||||
* **registry** Quobyte registry to use to mount the volume. You can specifiy the registry as <host>:<port> pair or if you want to specify multiple registries you just have to put a comma between them e.q. <host1>:<port>,<host2>:<port>,<host3>:<port>. The host can be an IP address or if you have a working DNS you can also provide the DNS names.
|
||||
* **adminSecretName** secret that holds information about the Quobyte user and the password to authenticate agains the API server.
|
||||
* **adminSecretNamespace** The namespace for **adminSecretName**. Default is `default`.
|
||||
* **user** maps all access to this user. Default is `root`.
|
||||
* **group** maps all access to this group. Default is `nfsnobody`.
|
||||
* **quobyteConfig** use the specified configuration to create the volume. You can create a new configuration or modify an existing one with the Web console or the quobyte CLI. Default is `BASE`
|
||||
* **quobyteTenant** use the specified tenant ID to create/delete the volume. This Quobyte tenant has to be already present in Quobyte. Default is `DEFAULT`
|
||||
|
||||
First create Quobyte admin's Secret in the system namespace. Here the Secret is created in `kube-system`:
|
||||
|
||||
```
|
||||
$ kubectl create -f examples/experimental/persistent-volume-provisioning/quobyte/quobyte-admin-secret.yaml --namespace=kube-system
|
||||
```
|
||||
|
||||
Then create the Quobyte storage class:
|
||||
|
||||
```
|
||||
$ kubectl create -f examples/experimental/persistent-volume-provisioning/quobyte/quobyte-storage-class.yaml
|
||||
```
|
||||
|
||||
Now create a PVC
|
||||
|
||||
```
|
||||
$ kubectl create -f examples/experimental/persistent-volume-provisioning/claim1.json
|
||||
```
|
||||
|
||||
Check the created PVC:
|
||||
|
||||
```
|
||||
$ kubectl describe pvc
|
||||
Name: claim1
|
||||
Namespace: default
|
||||
Status: Bound
|
||||
Volume: pvc-bdb82652-694a-11e6-b811-080027242396
|
||||
Labels: <none>
|
||||
Capacity: 3Gi
|
||||
Access Modes: RWO
|
||||
No events.
|
||||
|
||||
$ kubectl describe pv
|
||||
Name: pvc-bdb82652-694a-11e6-b811-080027242396
|
||||
Labels: <none>
|
||||
Status: Bound
|
||||
Claim: default/claim1
|
||||
Reclaim Policy: Delete
|
||||
Access Modes: RWO
|
||||
Capacity: 3Gi
|
||||
Message:
|
||||
Source:
|
||||
Type: Quobyte (a Quobyte mount on the host that shares a pod's lifetime)
|
||||
Registry: 138.68.79.14:7861
|
||||
Volume: kubernetes-dynamic-pvc-bdb97c58-694a-11e6-91b6-080027242396
|
||||
ReadOnly: false
|
||||
No events.
|
||||
```
|
||||
|
||||
Create a Pod to use the PVC:
|
||||
|
||||
```
|
||||
$ kubectl create -f examples/experimental/persistent-volume-provisioning/quobyte/example-pod.yaml
|
||||
```
|
||||
|
||||
|
||||
### User provisioning requests
|
||||
|
||||
Users request dynamically provisioned storage by including a storage class in their `PersistentVolumeClaim`.
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
apiVersion: v1
|
||||
kind: ReplicationController
|
||||
metadata:
|
||||
name: server
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
role: server
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
role: server
|
||||
spec:
|
||||
containers:
|
||||
- name: server
|
||||
image: nginx
|
||||
volumeMounts:
|
||||
- mountPath: /var/lib/www/html
|
||||
name: quobytepvc
|
||||
volumes:
|
||||
- name: quobytepvc
|
||||
persistentVolumeClaim:
|
||||
claimName: claim1
|
||||
@@ -0,0 +1,7 @@
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: quobyte-admin-secret
|
||||
data:
|
||||
password: cXVvYnl0ZQ==
|
||||
user: YWRtaW4=
|
||||
@@ -0,0 +1,14 @@
|
||||
apiVersion: storage.k8s.io/v1beta1
|
||||
kind: StorageClass
|
||||
metadata:
|
||||
name: slow
|
||||
provisioner: kubernetes.io/quobyte
|
||||
parameters:
|
||||
quobyteAPIServer: "http://138.68.74.142:7860"
|
||||
registry: "138.68.74.142:7861"
|
||||
adminSecretName: "quobyte-admin-secret"
|
||||
adminSecretNamespace: "kube-system"
|
||||
user: "root"
|
||||
group: "root"
|
||||
quobyteConfig: "BASE"
|
||||
quobyteTenant: "DEFAULT"
|
||||
@@ -94,11 +94,11 @@ spec:
|
||||
<!-- END MUNGE: EXAMPLE ./quobyte-pod.yaml -->
|
||||
|
||||
Parameters:
|
||||
* **registry** Quobyte registry to use to mount the volume. You can specifiy the registry as <host>:<port> pair or if you want to specify multiple registries you just have to put a semicolon between them e.q. <host1>:<port>,<host2>:<port>,<host3>:<port>. The host can be an IP address or if you have a working DNS you can also provide the DNS names.
|
||||
* **registry** Quobyte registry to use to mount the volume. You can specifiy the registry as <host>:<port> pair or if you want to specify multiple registries you just have to put a comma between them e.q. <host1>:<port>,<host2>:<port>,<host3>:<port>. The host can be an IP address or if you have a working DNS you can also provide the DNS names.
|
||||
* **volume** volume represents a Quobyte volume which must be created before usage.
|
||||
* **readOnly** is the boolean that sets the mountpoint readOnly or readWrite.
|
||||
* **user** maps all access to this user. Default is root.
|
||||
* **group** maps all access to this group. Default is empty.
|
||||
* **user** maps all access to this user. Default is `root`.
|
||||
* **group** maps all access to this group. Default is `nfsnobody`.
|
||||
|
||||
Creating the pod:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user