Coder Social home page Coder Social logo

sfowl / gluster-block-external-provisioner Goto Github PK

View Code? Open in Web Editor NEW

This project forked from kubernetes-sigs/gluster-block-external-provisioner

0.0 2.0 0.0 4.57 MB

Gluster Block Dynamic Volume Provisioner

License: Apache License 2.0

Dockerfile 0.68% Makefile 7.14% Go 28.33% Shell 63.84%

gluster-block-external-provisioner's Introduction

Gluster Block Dynamic Volume Provisioner

Glusterblock Volume Provisioner for Kubernetes 1.5+

Docker Repository on Quay

quay.io/external_storage/glusterblock-provisioner:latest

What is Gluster Block Provisioner ?

Gluster Block Provisioner is an external provisioner which dynamically provision gluster block volumes ( ISCSI volumes ) on demand. The persistentVolumeClaim which has been requested with this external provisioner's identity ( for eg# gluster.org/glusterblock) will be served by this provisioner. This provisioner is capable of operating on couple of modes ( gluster-block and heketi).

gluster-block mode : This is an experimental or test mode on which the provisioner will directly talk to gluster-block utility or command line interface of gluster-block.

heketi mode : This is the recommended/supported mode on which the provisioner will talk to heketi's Block API to provision gluster block volumes.

This project is related to and relies on the following projects:

Build Gluster Block Provisioner and container image

If you want to build the container from source instead of pulling the docker image, simply run the following from the glusterfs/block/ directory:

Step 1: Build the provisioner binary

[root@localhost]# go build glusterblock-provisioner.go

Step 2: Get Gluster Block Provisioner Container image

[root@localhost]# docker pull quay.io/external_storage/glusterblock-provisioner:latest

Start Kubernetes Cluster

The following steps assume you have a Kubernetes cluster up and running

Start glusterblock provisioner

The following example uses gluster.org/glusterblock as the identity for the instance and assumes kubeconfig is at /root/.kube. The identity should remain the same if the provisioner restarts. If there are multiple provisioners, each should have a different identity.

[root@localhost] docker run -ti -v /root/.kube:/kube -v /var/run/kubernetes:/var/run/kubernetes --privileged --net=host  glusterblock-provisioner  -master=http://127.0.0.1:8080 -kubeconfig=/kube/config -id=gluster.org/glusterblock

Create a glusterblock Storage Class

[root@localhost] kubectl create -f glusterblock-class.yaml

The available storage class parameter are listed below:

parameters:
    resturl: "http://127.0.0.1:8081"
    restuser: "admin"
    restsecretnamespace: "default"
    restsecretname: "heketi-secret"
    hacount: "3"
    chapauthenabled: "true"
    opmode: "gluster-block"
    blockmodeargs: "glustervol=blockmaster1,hosts=10.67.116.108"

Global parameters applicable for both modes:

  • opmode: This value decide in which mode gluster block provisioner has to work and the default is heketi. This is an optional parameter.

  • chapauthenabled: This value has to be set to false if you want to provision block volume without CHAP authentication. This is an optional parameter defaults to true.

  • hacount: This is the count of number of paths to the block target server. This provide high availability via multipathing capability of iscsi. If there is a path failure, the I/Os will not be disturbed and will be served via another available paths.

  • volumenameprefix : By default dynamically provisioned volumes has the naming schema of vol_UUID format. With this option present in storageclass, an admin can now prefix the desired volume name from storageclass. If volumenameprefix storageclass parameter is set, the dynamically provisioned volumes are created in below format where _ is the field separator/delimiter:

volumenameprefix_Namespace_PVCname_randomUUID

Please note that, the value for this parameter cannot contain _ in storageclass. This is an optional parameter.

Heketi Mode Parameters:

If provisioner want to operate on heketi mode, below args can be filled in storageclass accordingly.

  • resturl : Gluster REST service/Heketi service url which provision gluster block volumes on demand. The general format should be IPaddress:Port and this is a mandatory parameter for GlusterFS dynamic provisioner. If Heketi service is exposed as a routable service in openshift/kubernetes setup, this can have a format similar to http://heketi-storage-project.cloudapps.mystorage.com where the fqdn is a resolvable heketi service url.

  • restuser : Gluster REST service/Heketi user who has access to create volumes in the Gluster Trusted Pool.

  • restsecretnamespace + restsecretname : Namespace and Name of the Secret instance that contains user password to use when talking to heketi. These parameters are optional, An empty password will be used when both restsecretnamespace and restsecretname are omitted. The provided secret must have type matching your provisioner ID (e.g. gluster.org/glusterblock).

Gluster-Block Mode parameters:

If provisioner want to operate on gluster-block, below args are required to be filled in storageclass.

  • blockmodeargs:

This mode requires glustervol name and hosts to be mentioned in , seperated values as shown below. This is a mandatory parameter to be filled in storage class parameter.

"glustervol=blockmaster1,hosts=10.67.116.108"

Testing: Create a PersistentVolumeClaim

[root@localhost]# kubectl create -f glusterblock-claim1.yaml
persistentvolumeclaim "claim1" created

[root@localhost]# kubectl get pvc
NAME      STATUS    VOLUME                                     CAPACITY   ACCESSMODES   STORAGECLASS   AGE
claim1    Bound     pvc-b7045edf-3a26-11e7-af53-c85b7636c232   1Gi        RWX           glusterblock   56s
[root@localhost]# kubectl get pv
NAME                                       CAPACITY   ACCESSMODES   RECLAIMPOLICY   STATUS    CLAIM            STORAGECLASS   REASON    AGE
pvc-b7045edf-3a26-11e7-af53-c85b7636c232   1Gi        RWX           Delete          Bound     default/claim1   glusterblock             46s

[root@localhost]# kubectl get pvc,pv
NAME         STATUS    VOLUME                                     CAPACITY   ACCESSMODES   STORAGECLASS   AGE
pvc/claim1   Bound     pvc-b7045edf-3a26-11e7-af53-c85b7636c232   1Gi        RWX           glusterblock   1m

NAME                                          CAPACITY   ACCESSMODES   RECLAIMPOLICY   STATUS    CLAIM            STORAGECLASS   REASON    AGE
pv/pvc-b7045edf-3a26-11e7-af53-c85b7636c232   1Gi        RWX           Delete          Bound     default/claim1   glusterblock             1m

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:

Code of conduct

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

gluster-block-external-provisioner's People

Contributors

humblec avatar k8s-ci-robot avatar pohly avatar wongma7 avatar msau42 avatar ggriffiths avatar childsb avatar spiffxp avatar obnoxxx avatar nikhita avatar mucahitkurt avatar ddebroy avatar windayski avatar saad-ali avatar hzxuzhonghu avatar cofyc avatar darkowlzz avatar kokhang avatar pengzhisun avatar pensu avatar nak3 avatar phlogistonjohn avatar wozniakjan avatar gnufied avatar cgruver avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.