Commit graph

176 commits

Author SHA1 Message Date
Aman Gupta
f4ccefa7bd chore(readme): updating the readme for application-consistent snapshot
Signed-off-by: Aman Gupta <aman.gupta@mayadata.io>
2020-07-09 20:47:33 +05:30
Pawan
39d2ee2859 fix(zfspv): fixing mounting issue with xfs
We changed the ubuntu docker image to 20.04 in https://github.com/openebs/zfs-localpv/pull/170,
which has issues with formatting the zvol as xfs file system. The filesystem
formatted with xfs is not able to mount with error : "missing codepage or helper program, or other error".

Reverting back to ubuntu 19.10 to fix this issue.

Signed-off-by: Pawan <pawan@mayadata.io>
2020-07-09 19:10:36 +05:30
Pawan
a4bdaec3f2 chore(doc): adding btrfs filesystem in the doc
Signed-off-by: Pawan <pawan@mayadata.io>
2020-07-08 17:25:08 +05:30
Pawan
21045a5b1f feat(bdd): adding snapshot and clone releated test cases
added snapshot and clone related test cases. Also restructure
the BDD framework to loop through the supported fstypes and perfrom all
the test cases we have.

Signed-off-by: Pawan <pawan@mayadata.io>
2020-07-07 23:21:20 +05:30
vaniisgh
8bbf3d7d2f
feat(zfspv) Add golint check to travis (#175)
Signed-off-by: vaniisgh <vanisingh@live.co.uk>
2020-07-07 18:21:02 +05:30
Pawan
8b7ad5cb45 fix(btrfs): fixing duplicate UUID issue with btrfs
btrfs, like xfs, needs to generate a new UUID for the
cloned volumes. All the devices with the same UUID will be treated
same for btrfs, so here generating the new UUID for the cloned volumes
using btrfstune command.

Signed-off-by: Pawan <pawan@mayadata.io>
2020-07-03 21:04:51 +05:30
vaniisgh
a19877e4c0
feat(zfspv): check pod-status in BDD test (#171)
Signed-off-by: vaniisgh <vanisingh@live.co.uk>
2020-07-02 14:07:43 +05:30
Pawan
051f26fe16 feat(btrfs): adding support to have btrfs filesystem for ZFS-LocalPV
Now, applications can use the btrfs file system by mentioning "btrfs"
as fstype in the storageclass :-

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: openebs-zfspv
parameters:
  fstype: "btrfs"
  poolname: "zfspv-pool"
provisioner: zfs.csi.openebs.io

Signed-off-by: Pawan <pawan@mayadata.io>
2020-07-02 00:40:59 +05:30
Pawan
27065bf40a feat(shared): adding shared mount support ZFSPV volumes
Applications who want to share a volume can use below storageclass
to make their volumes shared by multiple pods

```yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: openebs-zfspv
parameters:
  shared: "yes"
  fstype: "zfs"
  poolname: "zfspv-pool"
provisioner: zfs.csi.openebs.io
```

Now the provisioned volume using this storageclass can be used by multiple pods.
Here pods have to make sure of the data consistency and have to have locking mechanism.
One thing to note here is pods will be scheduled to the node where volume is present
so that all the pods can use the same volume as they can access it locally only.
This was we can avoid the NFS overhead and can get the optimal performance also.

Also fixed the log formatting in the GRPC log.

Signed-off-by: Pawan <pawan@mayadata.io>
2020-07-02 00:40:15 +05:30
vaniisgh
ac9d6d5729
feat(zfspv) add go lint target (#167)
Signed-off-by: vaniisgh <vanisingh@live.co.uk>
2020-06-30 13:26:12 +05:30
vaniisgh
d0d1664d43
feat(zfspv): move to klog (#166)
Signed-off-by: vaniisgh <vanisingh@live.co.uk>
2020-06-29 12:18:33 +05:30
vaniisgh
54f2b0b9fd
chore(doc): update docs for GO module support (#160)
Signed-off-by: vaniisgh <vanisingh@live.co.uk>>
2020-06-26 17:11:31 +05:30
vaniisgh
13ec77c75e
feat(zfspv): filter grpc logs to reduce the pollution (#161)
Signed-off-by: vaniisgh <vanisingh@live.co.uk>
2020-06-24 21:41:15 +05:30
Aman Gupta
2b13a04db4 chore(readme): Update the project status to beta in readme
Signed-off-by: Aman Gupta <aman.gupta@mayadata.io>
2020-06-19 20:38:16 +05:30
Pawan
daa73fa0b8 Revert "feat(yaml): updating v0.8.0 operator yaml to use 0.8.0 image tag"
This reverts commit 2c11af5362.

Signed-off-by: Pawan <pawan@mayadata.io>
2020-06-17 20:34:28 +05:30
Pawan
ab32a5a426 chore(changelog): fixing link in the changelog
Signed-off-by: Pawan <pawan@mayadata.io>
2020-06-15 19:33:43 +05:30
Pawan
2c11af5362 feat(yaml): updating v0.8.0 operator yaml to use 0.8.0 image tag
Signed-off-by: Pawan <pawan@mayadata.io>
2020-06-15 15:05:22 +05:30
Pawan
8968605602 chore(changelog): adding v0.8.0 changelog
Signed-off-by: Pawan <pawan@mayadata.io>
2020-06-15 15:04:35 +05:30
Pawan
91e232a840 adding missing changelog from the contributer
Signed-off-by: Pawan <pawan@mayadata.io>
2020-06-11 18:41:25 +05:30
prateekpandey14
fa76b346a0 feat(modules): migrate to go modules and bump go version 1.14.4
- migrate to go module
- bump go version 1.14.4

Signed-off-by: prateekpandey14 <prateek.pandey@mayadata.io>
2020-06-09 22:27:01 +05:30
wiwen
f5ae3ff476
chore(go-lint): fix golint warning (#133)
Fixes several go lint cases reported by go report. 

Signed-off-by: wiwen <shenggxhz@gmail.com>
2020-06-09 14:47:23 +05:30
Pawan
639ead416e feat(mount): moving to legacy mount
We can not mount the datasets to more than one path via zfs mount command,
shifting to the legacy way of handling ZFS volumes where we can mount/umount
the datasets via legacy mount and umount commands.

This will also add a building block for SINGLE-NODE-MULTI-WRITER Capability.

Signed-off-by: Pawan <pawan@mayadata.io>
2020-06-09 14:41:53 +05:30
Pawan
b08a1e2a1f feat(usage): include pvc name in volume events
Signed-off-by: Pawan <pawan@mayadata.io>
2020-06-08 13:05:23 +05:30
Pawan
e558bb52cb feat(centos): adding operator yaml for centos7 and centos8
Signed-off-by: Pawan <pawan@mayadata.io>
2020-06-08 10:35:13 +05:30
Pawan
45015bf063 fix(pvc): fixing stale ZFSVolume CR issue when deleting pending PVC
PVC will not bound if there are wrong parameters/poolname in the storageclass,
the ZFSVolume CR will be still created and will remain in Pending State,
deletion of the PVC will delete PVC and since PVC is not bound, ZFS-LocalPV
driver will not get the delete call and will leave the ZFSVolume CR hanging there.
Reverting the behavior introduced in https://github.com/openebs/zfs-localpv/pull/121,
Now PVC will be bound but still ZFSVolume will be in Pending state until the volume is created.

Signed-off-by: Pawan <pawan@mayadata.io>
2020-06-08 10:31:39 +05:30
Pawan Prakash Sharma
0e2223985e
chore(changelog): add missing changelog for v0.8 release (#146)
Signed-off-by: Pawan <pawan@mayadata.io>
2020-06-05 18:01:43 +05:30
Christopher J. Ruwe
377b881653 make character case for keys in parameters map irrelevant, fixing #143
More specifically,
- introduce helper function to get maps with all keys set to lowercase,
- introduce lookup helper based on such maps and
- change lookups for CreateVolumeRequest()s and CreateVolume()s so that
  parameter keys are processed as lowercase irrespective of actual
  spelling.

Signed-off-by: Christopher J. Ruwe <cjr@cruwe.de>
2020-06-04 19:25:05 +05:30
Pawan
1e23607d8a feat(beta): autogen code for v1 CRDs
Signed-off-by: Pawan <pawan@mayadata.io>
2020-06-04 16:02:32 +05:30
Pawan
472fd603ac feat(beta): adding v1 CRD for ZFS-LocalPV
Moving the CRDs to stable v1 version.

Signed-off-by: Pawan <pawan@mayadata.io>
2020-06-04 16:02:32 +05:30
wiwen
307861282a
chore(doc): add contributing checkout list (#138)
Signed-off-by: wiwen <shenggxhz@gmail.com>
2020-06-01 09:58:33 +05:30
Pawan
42ed7d85ee fix(readonly): honouring readonly flag.
Readonly flag does not come as mount option, it has
separate field to mention readonly flag. ZFS-LocalPV
driver should check that field and add "ro" as mountoption.

Signed-off-by: Pawan <pawan@mayadata.io>
2020-05-27 21:20:53 +05:30
Pawan
d47ec3ba01 feat(print): removing unnecessary printer columns
Signed-off-by: Pawan <pawan@mayadata.io>
2020-05-21 19:47:38 +05:30
Pawan
57ef10cb71 fix(zfspv): changing image pull policy to IfNotPresent
Signed-off-by: Pawan <pawan@mayadata.io>
2020-05-21 09:17:45 +05:30
Pawan
25d1f1a413 feat(zfspv): pvc should be bound only if volume has been created.
The controller does not check whether the volume has been created or not
and return successful. Which in turn binds the pvc to the pv.

The PVC should not bound until corresponding zfs volume has been created.
Now controller will check the ZFSVolume CR state to be "Ready" before returning
successful. The CSI will retry the CreateVolume request when it will get
a error reply and when the ZFS node agent creates the ZFS volume and sets the
ZFSVolume CR state to be "Ready", the controller will return success for the
CreateVolume Request and then PVC will be bound.

Signed-off-by: Pawan <pawan@mayadata.io>
2020-05-21 08:49:57 +05:30
Aman Gupta
9118f56600
chore(doc): Enhanced the doc for custom-topology support (#122)
Signed-off-by: Aman Gupta <aman.gupta@mayadata.io>
2020-05-20 14:07:44 +05:30
Pawan
2f19a6674b fix(image): updating the screneshot with new dashboard
Signed-off-by: Pawan <pawan@mayadata.io>
2020-05-15 21:42:27 +05:30
Pawan
bd86d4cd48 chore(doc): adding 0.7.0 and 0.6.1 changelog
Also updated readme with the link to configure custom topology keys.

Signed-off-by: Pawan <pawan@mayadata.io>
2020-05-15 19:47:42 +05:30
Pawan Prakash Sharma
1045f1daa1
feat(grafana): adding basic grafana dashboard (#110)
adding grafana dashboard for ZFS Local PV that shows the following metrics:

- Volume Capacity (used space percentage)
- ARC Size, Hits, Misses
- L2ARC Size, Hits, Misses
- ZPOOL Read/Write IOs
- ZPOOL Read/Write time

This dashboard was inspired by https://grafana.com/grafana/dashboards/7845

Signed-off-by: Pawan <pawan@mayadata.io>
2020-05-15 14:39:16 +05:30
Pawan
4a92213505 fix(version): use the travis tag for the version
if there are no changes then `git describe --tags `git rev-list --tags --max-count=1`
may return older tag as there will be two tags referring to the same commit.

Using travis tag here to clearly differentiate the versions.

Signed-off-by: Pawan <pawan@mayadata.io>
2020-05-14 17:56:54 +05:30
Aman Gupta
9c81ba9587
Fix the link in READme to the raw-block-volume.md file (#109)
Signed-off-by: Aman Gupta <aman.gupta@mayadata.io>
2020-05-11 09:46:23 +05:30
Pawan
2131153751 chore(import-vol): adding steps to import existing volumes to ZFS-LocalPV
Signed-off-by: Pawan <pawan@mayadata.io>
2020-05-08 21:37:04 +05:30
Pawan
34cc65df00 chore(doc): adding raw block volume details in README
also added detailed upgrade steps.

Signed-off-by: Pawan <pawan@mayadata.io>
2020-05-07 22:25:10 +05:30
Pawan
654f363b5d refact(build):trim leading v from image tag
Signed-off-by: Pawan <pawan@mayadata.io>
2020-05-07 22:06:24 +05:30
Pawan
a8a490e9cb refact(build): make the docker images configurable
and Also trim leading v from image tag.

Signed-off-by: Pawan <pawan@mayadata.io>
2020-05-07 19:18:48 +05:30
Pawan Prakash Sharma
dd059a2f43
feat(block): adding block volume support for ZFSPV (#102)
This commit adds the support for creating a Raw Block Volume request using volumemode as block in PVC :-

```
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: block-claim
spec:
  volumeMode: Block
  storageClassName: zfspv-block
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
```

The driver will create a zvol for this volume and bind mount the block device at the given path.

Signed-off-by: Pawan <pawan@mayadata.io>
2020-05-05 12:28:46 +05:30
Pawan
49dc99726b fix(topokey): changing topology key to unique name
There are setups where nodename is different than the hostname.
The driver uses the nodename and tries to set the "kubernetes.io/hostname"
node label to the nodename. Which will fail if nodename is not same as
hostname. Here, changing the key to unique name so that the driver can set
that key as node label and also it can not modify/touch the existing node labels.

Now onwards, the driver will use "openebs.io/nodename" key to set the PV node affinity.
Old volumes will have "kubernetes.io/hostname" affinity, and they will also work as
after the PR https://github.com/openebs/zfs-localpv/pull/94, it supports all the node
labels as topology key and all the nodes have "kubernetes.io/hostname" label set. So
old volumes will work without any issue. Also for the same reason old stoarge classes
which are using "kubernetes.io/hostname" as topology key, will work as that key is supported.

This fixes the issue where the driver was trying to create the PV on the master node
as master node is having "kubernetes.io/hostname" label, so it is also becoming a valid
candidate for provisioning the PV. After changing the key to unique name, since the driver
will not run on master node, so it will not set "openebs.io/nodename" label to this node
hence this node will never become a valid candidate for the provisioning the volume.

Signed-off-by: Pawan <pawan@mayadata.io>
2020-04-30 14:48:51 +05:30
Pawan Prakash Sharma
de9b302083
feat(topology): adding support for custom topology keys (#94)
This commit adds the support for use to specify custom labels to the kubernetes nodes and use them in the allowedToplogoies section of the StorageClass. 

Few notes:
- This PR depends on the CSI driver's capability to support custom topology keys. 
- label on the nodes should be added first and then deploy the driver to make it aware of
all the labels that node has. If labels are added after ZFS-LocalPV driver
has been deployed, a restart all the node csi driver agents is required so that the driver
can pick the labels and add them as supported topology keys.
- if storageclass is using Immediate binding mode and topology key is not mentioned
then all the nodes should be labeled using same key, that means:
  - same key should be present on all nodes, nodes can have different values for those keys. 
  - If nodes are labeled with different keys i.e. some nodes are having different keys, then ZFSPV's default scheduler can not effictively do the volume count based scheduling. In this case the CSI provisioner will pick keys from any random node and then prepare the preferred topology list using the nodes which has those keys defined. And ZFSPV scheduler will schedule the PV among those nodes only.

Signed-off-by: Pawan <pawan@mayadata.io>
2020-04-30 14:13:29 +05:30
Pawan Prakash Sharma
f65575e447
docs(project): adding project contributing guides (#99)
Signed-off-by: Pawan <pawan@mayadata.io>
2020-04-30 00:22:52 +05:30
Aman Gupta
02bc587c08
fix(doc , format): Fixed the formatting of ReadME file for upgrade (#98)
Signed-off-by: Aman Gupta <aman.gupta@mayadata.io>
2020-04-28 17:37:52 +05:30
Pawan
6c410553d2 feat(attach): avoid creation of volumeattachment object
k8s is very slow in attaching the volumes when dealing with the
large number of volume attachment object.

(k8s issue https://github.com/kubernetes/kubernetes/issues/84169)

The volumeattachment is not required for ZFSPV, so avoid creation
of attachment object, also removed the csi-attacher container as
this is also not needed as it acts on volumeattachment object.

k8s is very slow in attaching the volumes when dealing with the
large number of volume attachment object :

k8s issue https://github.com/kubernetes/kubernetes/issues/84169).

Volumeattachment is a CR created just to tell the watcher of it
which is csi-attacher, that it has to call the Controller Publish/Unpublish grpc.
Which does all the tasks to attach the volumes to a node for example call to the
DigitalOcean Block Storage API service to attach a created volume to a specified node.
Since for ZFSPV, volume is already present locally, nothing needs to done in Controller
Publish/Unpublish, so it is good to remove them.

so avoiding creation of attachment object in this change, also removed the csi-attacher
container as this is also not needed as it acts on volumeattachment object.

Removed csi-cluster-driver-registrar container also as it is deprecated and not needed anymore.

We are using csidriver beta CRDs so minimum k8s version required is 1.14+.

Signed-off-by: Pawan <pawan@mayadata.io>
2020-04-27 20:18:42 +05:30