Commit graph

116 commits

Author SHA1 Message Date
Pawan Prakash Sharma
8a9ac43ab5
feat(crd): scripts to help migrating to new CRDs (#73)
The CRDs have changed from being under openebs.io to zfs.openebs.io. 

The scripts in this commit and the following steps will help users migrate existing CRDs to new CRDs and clean up older CRDs. 

# upgrade to new CRD
1. apply the crd yaml
    `$ kubectl apply -f upgrade/crd.yaml`

2. run upgrade.sh
    `$ upgrade/upgrade.sh`

3. upgrade the driver to v0.6
    `$ kubectl apply -f https://github.com/openebs/zfs-localpv/blob/v0.6.x/deploy/zfs-operator.yaml`

4. if everything looks good run the cleanup.sh, it will clean old CRs and delete the CRD
    `$ upgrade/cleanup.sh`

Signed-off-by: Pawan <pawan@mayadata.io>
2020-04-01 13:53:13 +05:30
Pawan Prakash Sharma
c4c2278d2f
refactor(crd): move CR from openebs.io to zfs.openebs.io (#70)
Changed the group name from openebs.io to zfs.openebs.io.

Now ZFS Volume CR will look like this : 
```
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  name: zfszvolumes.zfs.openebs.io
spec:
  group: zfs.openebs.io
  version: v1alpha1
  scope: Namespaced
  names:
    plural: zfsvolumes
    singular: zfsvolume
    kind:ZFSVolume
    shortNames:
    - zfsvol
    - zv
```

Snapshot CR will look like this :
```
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  name: zfssnapshots.zfs.openebs.io
spec:
  group: zfs.openebs.io
  version: v1alpha1
  scope: Namespaced
  names:
    plural: fssnapshots
    singular: zfssnapshot
    kind: ZFSSnapshot
    shortNames:
    - zfssnapshot
    - zfssnap

```


Signed-off-by: Pawan <pawan@mayadata.io>
2020-03-30 22:12:34 +05:30
Steve Fan
3e874ffad7
Upgrade the base ubuntu package (#68)
Addresses GLIBC incompatability
Probably fixes #67

Signed-off-by: Steve Fan <29133953+stevefan1999-personal@users.noreply.github.com>
2020-03-30 17:52:18 +05:30
Pawan
80e4d06860 fix(test): fixing resize flaky test case
We are comparing the desired size to the wrong field
because of that resize test is not executing correctly
and sometimes causing test case failure in travis.

The update call is failing sometimes while executing the zfs
property update test cases as for resize also the object
is getting modified. The test case will fail when object updation
happens between volume GET and UPDATE call while performing
zfs property update test case to set various properties on
ZFSVolume resource.

Signed-off-by: Pawan <pawan@mayadata.io>
2020-03-26 22:57:23 +05:30
Pawan Prakash Sharma
27517c6254
fix(xfs): clearing the xfs log before generating UUID (#64)
xfs_admin command to generate the new UUID for the cloned
volume fails without returning error if there is log available
in the filesystem :

ERROR: The filesystem has valuable metadata changes in a log that needs to
be replayed.  Mount the filesystem to replay the log, and unmount it before
re-running xfs_admin.  If you are unable to mount the filesystem, then use
the xfs_repair -L option to destroy the log and attempt a repair.
Note that destroying the log may cause corruption -- please attempt a mount
of the filesystem before doing this.

No UUID will be generated in this case and application can not mount the volume.

Here mounting the filesystem to the temp location with "nouuid" mount option first
so that it can replay the logs first and system is in clean state and then unmount it
and after that generating the UUID with the xfs_admin command.

Signed-off-by: Pawan <pawan@mayadata.io>
2020-03-26 20:52:53 +05:30
Pawan
1ed9ce525c chore(readme): adding e2e project link in README
Signed-off-by: Pawan <pawan@mayadata.io>
2020-03-21 11:23:10 +05:30
Pawan
468bf66b0c fix(xfs): fixing xfs duplicate uuid for cloned volumes
for mounting the cloned volume for xfs, a new UUID has to be generated.
We are generating a new UUID for the cloned volumes which are formatted
as xfs using xfs_admin command.

Signed-off-by: Pawan <pawan@mayadata.io>
2020-03-19 12:37:29 +05:30
Pawan
1c9ee3102a feat(version): Makefile and version enhancement
Make to run go test for executing  unit test cases.

Removed version file, now if travis tag is set,
the VERSION will be set to that tag. And if travis
tag is not set, the driver version will be set to

 <branch-name>:<short commit hash>:<build date>

Signed-off-by: Pawan <pawan@mayadata.io>
2020-03-16 20:31:43 +05:30
Pawan
4c47dcf0f5 chore(changelog): adding v0.5 changelog
Signed-off-by: Pawan <pawan@mayadata.io>
2020-03-16 14:17:08 +05:30
Pawan
b334b66223 chore(changelog): adding v0.5-RC2 changelog
Signed-off-by: Pawan <pawan@mayadata.io>
2020-03-16 14:17:08 +05:30
Pawan
0e50336bcc chore(changelog): adding v0.5-RC1 changelog
Signed-off-by: Pawan <pawan@mayadata.io>
2020-03-16 14:17:08 +05:30
Pawan
0e75d89c64 fix(clone): setting properties on the clone volume
Signed-off-by: Pawan <pawan@mayadata.io>
2020-03-12 22:03:58 +05:30
Pawan
fd2ec40fb5 chore(doc): adding resize details in README
Signed-off-by: Pawan <pawan@mayadata.io>
2020-03-06 14:02:23 +05:30
Pawan
7178387c1e feat(resize): adding BDD test for Online volume expansion
Signed-off-by: Pawan <pawan@mayadata.io>
2020-03-06 10:25:18 +05:30
Pawan
86e623a369 feat(resize): adding Online volume expansion support for ZFSPV
We can resize the volume by updating the PVC yaml to
the desired size and apply it. The ZFS Driver will take care
of updating the quota in case of dataset. If we are using a
Zvol and have mounted it as ext4 or xfs filesystem, the driver will take
care of expanding the volume via reize2fs/xfs_growfs binaries.

For resize, storageclass that provisions the pvc must suppo
rt resize. We should have allowVolumeExpansion as true in storageclass

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

```

Signed-off-by: Pawan <pawan@mayadata.io>
2020-03-04 18:30:28 +05:30
Pawan
dc5edb901c feat(analytics): vendor code for google analytics
Signed-off-by: Pawan <pawan@mayadata.io>
2020-03-02 23:00:22 +05:30
Pawan
d608dbacd8 feat(analytics): adding google analytics for ZFSPV
Whenever a volume is provisioned and de-provisioned we will send a google event with mainly following details :
1.    pvName (will shown as app title in google analytics)
2.    size of the volume
3.    event type : volume-provision, volume-deprovision
4.    storage type zfs-localpv
5.    replicacount as 1
6.    ClientId as default namespace uuid

Apart from this, we send the event once in 24 hr, which will have some info like number of nodes, node type, kubernetes version etc.

This metric is cotrolled by OPENEBS_IO_ENABLE_ANALYTICS env. We can set it to false if we don't want to send the metrics.

Signed-off-by: Pawan <pawan@mayadata.io>
2020-03-02 23:00:22 +05:30
Pawan
0fc86d843b chore(doc): updating readme with snapshot and clone details
Signed-off-by: Pawan <pawan@mayadata.io>
2020-03-01 00:30:22 +05:30
Aman Gupta
5922ebe038
add(doc): Adding the list of e2e test cases (#50)
Added the list of automated and manual e2e test cases specific to zfs-localpv 

Signed-off-by: Aman Gupta <aman.gupta@mayadata.io>
2020-02-28 22:33:22 +05:30
prateekpandey14
c2f22025b0 fix(operator): update provisioner image to support snapshot datasource
changes fix the zfs operator yaml with 1.5.0 csi-provisioner
image to support volumesnapshot as datasource type to
create clone volumes.

Signed-off-by: prateekpandey14 <prateekpandey14@gmail.com>
2020-02-14 00:10:07 +05:30
Pawan
638d8ae4e4 chore(doc): adding v0.4 changelog in the repo
Signed-off-by: Pawan <pawan@mayadata.io>
2020-02-13 14:51:44 +05:30
Pawan
48b7a02ccd refactor(version): bumping the version to 0.5
Signed-off-by: Pawan <pawan@mayadata.io>
2020-02-13 14:51:24 +05:30
Pawan Prakash Sharma
287606b78a
feat(zfspv): adding snapshot and clone support for ZFSPV (#39)
This commits support snapshot and clone commands via CSI driver. User can create snap and clone using the following steps. 

Note:
- Snapshot is created via reconciliation CR
- Cloned volume will be on the same zpool where the snapshot is taken
- Cloned volume will have same properties as source volume. 

-----------------------------------
Create a Snapshotclass
```
kind: VolumeSnapshotClass
apiVersion: snapshot.storage.k8s.io/v1beta1
metadata:
  name: zfspv-snapclass
  annotations:
    snapshot.storage.kubernetes.io/is-default-class: "true"
driver: zfs.csi.openebs.io
deletionPolicy: Delete
```
Once snapshotclass is created, we can use this class to create a Snapshot 
```
apiVersion: snapshot.storage.k8s.io/v1beta1
kind: VolumeSnapshot
metadata:
  name: zfspv-snap
spec:
  volumeSnapshotClassName: zfspv-snapclass
  source:
    persistentVolumeClaimName: csi-zfspv
```
```
$ kubectl get volumesnapshot
NAME          AGE
zfspv-snap    7m52s
```
```
$ kubectl get volumesnapshot -o yaml
apiVersion: v1
items:
- apiVersion: snapshot.storage.k8s.io/v1beta1
  kind: VolumeSnapshot
  metadata:
    annotations:
      kubectl.kubernetes.io/last-applied-configuration: |
        {"apiVersion":"snapshot.storage.k8s.io/v1beta1","kind":"VolumeSnapshot","metadata":{"annotations":{},"name":"zfspv-snap","namespace":"default"},"spec":{"source":{"persistentVolumeClaimName":"csi-zfspv"},"volumeSnapshotClassName":"zfspv-snapclass"}}
    creationTimestamp: "2020-01-30T10:31:24Z"
    finalizers:
    - snapshot.storage.kubernetes.io/volumesnapshot-as-source-protection
    - snapshot.storage.kubernetes.io/volumesnapshot-bound-protection
    generation: 1
    name: zfspv-snap
    namespace: default
    resourceVersion: "30040"
    selfLink: /apis/snapshot.storage.k8s.io/v1beta1/namespaces/default/volumesnapshots/zfspv-snap
    uid: 1a5cf166-c599-4f58-9f3c-f1148be47fca
  spec:
    source:
      persistentVolumeClaimName: csi-zfspv
    volumeSnapshotClassName: zfspv-snapclass
  status:
    boundVolumeSnapshotContentName: snapcontent-1a5cf166-c599-4f58-9f3c-f1148be47fca
    creationTime: "2020-01-30T10:31:24Z"
    readyToUse: true
    restoreSize: "0"
kind: List
metadata:
  resourceVersion: ""
  selfLink: ""
```


Openebs resource for the created snapshot 
```
$ kubectl get snap -n openebs -o yaml
apiVersion: v1
items:
- apiVersion: openebs.io/v1alpha1
  kind: ZFSSnapshot
  metadata:
    creationTimestamp: "2020-01-30T10:31:24Z"
    finalizers:
    - zfs.openebs.io/finalizer
    generation: 2
    labels:
      kubernetes.io/nodename: pawan-2
      openebs.io/persistent-volume: pvc-18cab7c3-ec5e-4264-8507-e6f7df4c789a
    name: snapshot-1a5cf166-c599-4f58-9f3c-f1148be47fca
    namespace: openebs
    resourceVersion: "30035"
    selfLink: /apis/openebs.io/v1alpha1/namespaces/openebs/zfssnapshots/snapshot-1a5cf166-c599-4f58-9f3c-f1148be47fca
    uid: e29d571c-42b5-4fb7-9110-e1cfc9b96641
  spec:
    capacity: "4294967296"
    fsType: zfs
    ownerNodeID: pawan-2
    poolName: zfspv-pool
    status: Ready
    volumeType: DATASET
kind: List
metadata:
  resourceVersion: ""
  selfLink: ""
```

Create a clone volume
    
 We can provide a datasource as snapshot name to create a clone volume
    
```yaml
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: zfspv-clone
    spec:
      storageClassName: openebs-zfspv
      dataSource:
        name: zfspv-snap
        kind: VolumeSnapshot
        apiGroup: snapshot.storage.k8s.io
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 4Gi
```
It will create a ZFS clone volume from the mentioned snapshot and create the PV on the same node where original volume is there.
    
Here, As resize is not supported yet, the clone PVC size should match the size of the snapshot.
Also, all the properties from the storageclass will not be considered for the clone case, it will take the properties from the snapshot and create the clone volume. One thing to note here is that, the storageclass in clone PVC should have the same poolname as that of the original volume as across the pool, clone is not supported.


Signed-off-by: Pawan <pawan@mayadata.io>
2020-02-13 13:31:17 +05:30
Pawan
b0434bb537 fix(zfspv): do not destroy the dataset with -R option
With "zfs destroy -R" we will delete snapshot and clones also. We should
not use that for deleting the volumes.

Signed-off-by: Pawan <pawan@mayadata.io>
2020-01-31 13:12:57 +05:30
Aman Gupta
d826d1dcb8 fix(doc): Resolving the typo error in README doc
Signed-off-by: Aman Gupta <aman.gupta@mayadata.io>
2020-01-28 12:32:40 +05:30
Pawan
896a6032ca chore(metrics): adding list of zfs metrics exposed by prometheus
Signed-off-by: Pawan <pawan@mayadata.io>
2020-01-17 14:40:42 +05:30
Pawan
e3467120fb refactor(version): bumping the version to 0.4
also adding more descriptive version log.

Signed-off-by: Pawan <pawan@mayadata.io>
2020-01-17 14:39:46 +05:30
Pawan
784349cca1 chore(doc): adding v0.3 changelog in the repo
Signed-off-by: Pawan <pawan@mayadata.io>
2020-01-16 23:44:02 +05:30
Pawan Prakash Sharma
0b56f0ae53 feat(alert): adding sample prometheus rules for ZFSPV (#32)
Provide sample instructions on setting up prometheus via prometheus-operator and then configuring a sample rule to monitor the volume space utilization, and once available space is less than 10%, it will start firing the alert.

```
 100 * kubelet_volume_stats_available_bytes{job="kubelet"}
          /
        kubelet_volume_stats_capacity_bytes{job="kubelet"}
          < 10
```

Signed-off-by: Pawan <pawan@mayadata.io>
2020-01-09 23:10:13 +05:30
Pawan
7094c48a8f feat(HA): adding antiaffinity in the controller deployment
so that no two pods get scheduled on the same node. Also keeping
the default replica to 1, if HA feature is required, we can change
replica count to 2(or more).

Signed-off-by: Pawan <pawan@mayadata.io>
2020-01-06 19:13:53 +05:30
Pawan
4689c21cb4 feat(HA): adding support to have controller in HA
We can have more than one controller in the system, but only one will
be the master and others will be slave. Once master is down, one of the slave will
take over via lease mechanism and start provisioning/deprovisioning the volumes.

Signed-off-by: Pawan <pawan@mayadata.io>
2020-01-06 19:13:53 +05:30
Pawan
dfe4631835 chore(doc): adding faq.md for ZFSPV
Signed-off-by: Pawan <pawan@mayadata.io>
2019-12-30 18:43:04 +05:30
Pawan
5c992a5ba4 chore(doc): adding contributing doc
Signed-off-by: Pawan <pawan@mayadata.io>
2019-12-30 18:43:04 +05:30
Pawan
820d0800cd feat(volstats): return volstats for path if it is a mountpath
Signed-off-by: Pawan <pawan@mayadata.io>
2019-12-30 18:39:35 +05:30
Pawan
1e5c81d2ac feat(volstats): adding client side fs stats
Signed-off-by: Pawan <pawan@mayadata.io>
2019-12-30 18:39:35 +05:30
Pawan
754755439b test(zfspv): adding zfs property update test cases
Signed-off-by: Pawan <pawan@mayadata.io>
2019-12-30 18:37:28 +05:30
Pawan
620be59016 chore(doc): adding badges for the ZFSPV repository
Signed-off-by: Pawan <pawan@mayadata.io>
2019-12-24 09:15:08 +05:30
Pawan
72bc0b0057 chore(doc): making zfs-localpv repository CNCF compatible
adding MAINTAINER, CODE_OF_CONDUCT.md and GOVERNANCE.md files.

Signed-off-by: Pawan <pawan@mayadata.io>
2019-12-11 15:44:26 +05:30
Pawan Prakash Sharma
8078791cc5 chor(doc): adding roadmap in the README (#25)
* chor(doc): adding roadmap in the README

Signed-off-by: Pawan <pawan@mayadata.io>
2019-12-11 15:43:28 +05:30
Pawan Prakash Sharma
1c5d656635 chore(doc): adding changelog in the repo (#23)
* chore(doc): adding changelog in the repo
* chore(doc): adding v0.2 change log

Signed-off-by: Pawan <pawan@mayadata.io>
2019-12-10 11:49:40 +05:30
Pawan
1ce53690f8 test(zfspv): making test cases to run on forked repo
Signed-off-by: Pawan <pawan@mayadata.io>
2019-12-06 09:47:11 +05:30
Pawan
c3c5eb1794 test(zfspv): vendor for ginkgo test code
Signed-off-by: Pawan <pawan@mayadata.io>
2019-12-04 13:17:04 +05:30
Pawan
d933b47c75 test(zfspv): minikube setup for travis
to run integration test cases

Signed-off-by: Pawan <pawan@mayadata.io>
2019-12-04 13:17:04 +05:30
Pawan
7ab6156b98 fix(zfspv): changing image pull policy to IfNotPresent
to make it not pull the image all the time. Also, it needed
so that while doing integration test, it uses the local image
we just build, instead of fetching the image from the dockerhub or quay
so that we can run ci on the locally built image.

Signed-off-by: Pawan <pawan@mayadata.io>
2019-12-04 13:14:32 +05:30
Pawan
523e862159 refactor(zfspv): renamed watcher to mgmt package
as it does the management task also corrected few logs
and renamed zvol to zfs(as we support zvol and dataset both)

Signed-off-by: Pawan <pawan@mayadata.io>
2019-11-26 21:38:32 +05:30
Pawan
e953af99cf fix(yaml): fixing mongo yaml
As the selector is needed in the latest kubetnetes cluster
Also updated zfs volume custom resource and renamed few
fields of percona application.

Signed-off-by: Pawan <pawan@mayadata.io>
2019-11-25 18:46:02 +05:30
Pawan
0b7229a573 chore(doc): updating readme with latest details
Signed-off-by: Pawan <pawan@mayadata.io>
2019-11-22 17:17:36 +05:30
Pawan Prakash Sharma
68db6d2774 feat(ZFSPV): adding support for applications to create "zfs" flesystem (#15)
Application can now create a storageclass to create zfs filesystem

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: openebs-zfspv5
allowVolumeExpansion: true
parameters:
  blocksize: "4k"
  fstype: "zfs"
  poolname: "zfspv-pool"
provisioner: zfs.csi.openebs.io

ZFSPV was supporting ext2/3/4 and xfs filesystem only which
adds one extra filesystem layer on top of ZFS filesystem. So now
we can driectly write to the ZFS filesystem and get the optimal performance
by directly creating ZFS filesystem for storage.

Signed-off-by: Pawan <pawan@mayadata.io>
2019-11-21 19:00:15 +05:30
Akhil Mohan
4ffd857191 chore(README): fix scheduling algorithm doc
fix scheduling algorithm doc and explain how the scheduling is
done currently. Also included the steps to make use of
kubernetes scheduler instead of the scheduler in zfs-localpv

Signed-off-by: Akhil Mohan <akhil.mohan@mayadata.io>
2019-11-14 18:56:09 +05:30
Pawan
69d72bd64e fix(bug): fixed a typo for thinprovision json name.
Signed-off-by: Pawan <pawan@mayadata.io>
2019-11-08 18:26:36 +05:30