diff --git a/CHANGELOG.md b/CHANGELOG.md
index 57c66d7f6..42cb592a3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,17 @@
+v2.6.2 / 2024-09-25
+========================
+* fix(chart): handle trailing slash (/) in csi plugin kubelet directory ([#532](https://github.com/openebs/zfs-localpv/pull/532),[@w3aman](https://github.com/w3aman))
+* fix(chart): remove anti-affinity from csi controller ([#552](https://github.com/openebs/zfs-localpv/pull/552),[@Abhinandan-Purkait](https://github.com/Abhinandan-Purkait))
+
+v2.6.1 / 2024-09-17
+========================
+* ci: enhance pull_request workflow ([#557](https://github.com/openebs/zfs-localpv/pull/557),[@Abhinandan-Purkait](https://github.com/Abhinandan-Purkait))
+* ci: add branch preparation and release CI changes ([#567](https://github.com/openebs/zfs-localpv/pull/567),[@Abhinandan-Purkait](https://github.com/Abhinandan-Purkait))
+* chore: cleanup unused scripts, update make manifests ([#569](https://github.com/openebs/zfs-localpv/pull/569),[@Abhinandan-Purkait](https://github.com/Abhinandan-Purkait))
+* chore: replace CRD with auto-generated copy ([#564](https://github.com/openebs/zfs-localpv/pull/548),[@niladrih](https://github.com/niladrih))
+* chore(deps): update analytics dependency ([#578](https://github.com/openebs/zfs-localpv/pull/578),[@niladrih](https://github.com/niladrih))
+* fix: chart.yaml indentation ([#586](https://github.com/openebs/zfs-localpv/pull/586),[@Abhinandan-Purkait](https://github.com/Abhinandan-Purkait))
+
v2.6.0 / 2024-07-03
========================
* feat(analytics): add heartbeat pinger ([#548](https://github.com/openebs/zfs-localpv/pull/548),[@niladrih](https://github.com/niladrih))
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 4359aef34..9c5529091 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,13 +1,13 @@
# Contributing Guidelines
-
## Umbrella Project
-OpenEBS is an "umbrella project". Every project, repository and file in the OpenEBS organization adopts and follows the policies found in the Community repo umbrella project files.
-
-This project follows the [OpenEBS Contributor Guidelines](https://github.com/openebs/community/blob/HEAD/CONTRIBUTING.md)
+OpenEBS is an `Umbrella Project` whose governance and policies are defined in the [community](https://github.com/openebs/community/) repository.
+These policies are applicable to every sub-project, repository and file existing within the [OpenEBS GitHub organization](https://github.com/openebs/).
-# Contributing to zfs localpv
+This project follows the [OpenEBS Contributor Guidelines](https://github.com/openebs/community/blob/HEAD/CONTRIBUTING.md).
+
+# Contributing to Local PV ZFS
ZFS LocalPV uses the standard GitHub pull requests process to review and accept contributions. There are several areas that could use your help. For starters, you could help in improving the sections in this document by either creating a new issue describing the improvement or submitting a pull request to this repository. The issues are maintained at [zfs-localpv/issues](https://github.com/openebs/zfs-localpv/issues) repository.
@@ -59,13 +59,6 @@ If you set your `user.name` and `user.email` in git config, you can sign your co
You can also use git [aliases](https://git-scm.com/book/tr/v2/Git-Basics-Git-Aliases) like `git config --global alias.ci 'commit -s'`. Now you can commit with `git ci` and the commit will be signed.
---
-## Adding a changelog
-If PR is about adding a new feature or bug fix then the Author of the PR is expected to add a changelog file with their pull request. This changelog file should be a new file created under the `changelogs/unreleased` folder. Name of this file must be in `pr_number-username` format and contents of the file should be the one-liner text which explains the feature or bug fix.
-
-```sh
-zfs-localpv/changelogs/unreleased <- folder
- 12-github_user_name <- file
-```
## Setting up your Development Environment
This project is implemented using Go and uses the standard golang tools for development and build. In addition, this project heavily relies on Docker and Kubernetes. It is expected that the contributors:
diff --git a/README.md b/README.md
index 7688cf561..750a5d2e0 100644
--- a/README.md
+++ b/README.md
@@ -1,63 +1,89 @@
-## OpenEBS - LocalPV-ZFS CSI Driver
+## OpenEBS Local PV ZFS
+
+[![CNCF Status](https://img.shields.io/badge/cncf%20status-sandbox-blue.svg)](https://www.cncf.io/projects/openebs/)
+[![LICENSE](https://img.shields.io/github/license/openebs/openebs.svg)](./LICENSE)
[![Build Status](https://github.com/openebs/zfs-localpv/actions/workflows/build.yml/badge.svg)](https://github.com/openebs/zfs-localpv/actions/workflows/build.yml)
[![FOSSA Status](https://app.fossa.com/api/projects/custom%2B162%2Fgithub.com%2Fopenebs%2Fzfs-localpv.svg?type=shield&issueType=license)](https://app.fossa.com/projects/custom%2B162%2Fgithub.com%2Fopenebs%2Fzfs-localpv?ref=badge_shield&issueType=license)
[![OpenSSF Best Practices](https://www.bestpractices.dev/projects/3523/badge)](https://www.bestpractices.dev/projects/3523)
[![Slack](https://img.shields.io/badge/chat-slack-ff1493.svg?style=flat-square)](https://kubernetes.slack.com/messages/openebs/)
[![Community Meetings](https://img.shields.io/badge/Community-Meetings-blue)](https://us05web.zoom.us/j/87535654586?pwd=CigbXigJPn38USc6Vuzt7qSVFoO79X.1)
[![Go Report](https://goreportcard.com/badge/github.com/openebs/zfs-localpv)](https://goreportcard.com/report/github.com/openebs/zfs-localpv)
+[![CLOMonitor](https://img.shields.io/endpoint?url=https://clomonitor.io/api/projects/cncf/openebs/badge)](https://clomonitor.io/projects/cncf/openebs)
+[![Artifact HUB](https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/openebs)](https://artifacthub.io/packages/helm/openebs/openebs)
+## Overview
-| [![opezfs](https://github.com/openebs/website/blob/main/website/public/images/svg/openzfs_logo_2024.svg.png "OpenZFS")](https://github.com/openebs/website/blob/main/website/public/images/svg/openzfs_logo_2024.svg.png) | The OpenEBS LocalPV-ZFS Data-Engine is a heavily deployed production grade CSI driver for dynamically provisioning Node Local Volumes into a K8s cluster utilizing the OpenZFS storage ZPool Data Mgmt stack as the storage backend. It integrates OpenZFS into the OpenEBS platform and exposes many ZFS services and capabilities. |
-| :--- | :--- |
-
+### What is OpenEBS Local PV ZFS?
+OpenEBS Local PV ZFS is a [CSI](https://github.com/container-storage-interface/spec) plugin for implementation of [ZFS](https://en.wikipedia.org/wiki/ZFS) backed persistent volumes for Kubernetes. It is a local storage solution, which means the device, volume and the application are on the same host. It doesn't contain any dataplane, i.e only its simply a control-plane for the kernel zfs volumes. It mainly comprises of two components which are implemented in accordance to the CSI Specs:
+1. CSI Controller - Frontends the incoming requests and initiates the operation.
+2. CSI Node Plugin - Serves the requests by performing the operations and making the volume available for the initiator.
-## Overview
+### Why OpenEBS Local PV ZFS?
-The LocalPV-ZFS Data-Engine became GA on Dec 2020 and is now a core component of the OpenEBS storage platform.
-Due to the major adoption of LocalPV-ZFS (+120,000 users), this Data-Engine is now being unified and integrated into the core OpenEBS Storage platform; instead of being maintained as an external Data-Engine within our project.
+1. Lightweight, easy to set up storage provisoner for host-local volumes in k8s ecosystem.
+2. Makes ZFS stack available to K8s, allowing end users to use the ZFS functionalites like snapshot, restore, clone, thin provisioning, resize, encryption, compression, dedup, etc for their Persistent Volumes.
+3. Cloud native, i.e based on CSI spec, so developed to run on K8s.
-Our [2024 Roadmap is here](https://github.com/openebs/openebs/blob/main/ROADMAP.md). It defines a rich set of new featrues, which covers the integration of LocalPV-ZFS into the core OpenEBS platform.
-Please review this roadmp and feel free to pass back any feedback on it, as well as recommend and suggest new ideas regarding LocalPV-ZFS. We welcome all your feedback.
-
+### Architecture
-
+LocalPV refers to storage that is directly attached to a specific node in the Kubernetes cluster. It uses locally available disks (e.g., SSDs, HDDs) on the node.
-> **LocalPV-ZFS is very popular** : Live OpenEBS systems actively report back product metrics every day, to our Global Anaytics metrics engine (unless disabled by the user).
-> Here are our key project popularity metrics as of: 01 Mar 2024
->
-> :rocket: OpenEBS is the #1 deployed Storage Platform for Kubernetes
-> :zap: LocalPV-ZFS is the 2nd most deployed Data-Engine within the platform
-> :sunglasses: LocalPV-ZFS has +120,000 Daily Active Users
-> :sunglasses: LocalPV-ZFS has +250,000 Global instllations
-> :floppy_disk: +49 Million OpenEBS Volumes have been deployed globally
-> :tv: We have +8 Million Global OpenEBS installations
-> :star: We are the [#1 GitHub Star ranked](https://github.com/openebs/website/blob/main/website/public/images/png/github_star-history-2024_Feb_1.png) K8s Data Storage platform
+Use Case: Ideal for workloads that require low-latency access to storage or when data locality is critical (e.g., databases, caching systems).
-
+#### Characteristics:
-## Dev Activity dashboard
-![Alt](https://repobeats.axiom.co/api/embed/d990adda232a580d4c0fd9b98d6557079bb3bf4a.svg "Repobeats analytics image")
+- Node-bound: The volume is tied to the node where the disk is physically located.
+- No replication: Data is not replicated across nodes, so if the node fails, the data may become inaccessible.
+- High performance: Since the storage is local, it typically offers lower latency compared to network-attached storage.
-## Project info
+The diagram below depicts the mapping to the host disks, the ZFS stack on top of the disks and the kubernetes persistent volumes to be consumed by the workload. Local PV ZFS CSI Controller upon creation of the Persistent Volume Claim, creates a ZFSVolume CR, which emits an event for Local PV ZFS CSI Node Plugin to create the zvol/dataset. When workloads are scheduled the Local PV ZFS CSI Node Plugin makes this zvol/dataset available via a mount point on the host.
-The orignal v1.0 dev roadmap [is here ](https://github.com/orgs/openebs/projects/10). This tracks our base historical engineering development work and is now somewhat out of date. We will be publish an updated 2024 Unified Roadmp soon, as ZFS-LoalPV is now being integrated and unified into the core OpenEBS storage platform.
-- The E2E Wiki [is here ](https://github.com/openebs/zfs-localpv/wiki/LocalPV-ZFS-e2e-test-cases)
-- The E2S Tests [are here](https://github.com/openebs/e2e-tests/projects/7).
+```mermaid
+graph TD;
+ subgraph Node2["Node 2"]
+ subgraph K8S_NODE1[" "]
+ N1_PV1["PV"] --> N1_APP1["APP"]
+ N1_PV2["PV"] --> N1_APP2["APP"]
+ end
+ subgraph LVM_Stack2["ZFS Stack"]
+ V1_1 --> L1_1["ZVOL"]
+ V1_1 --> L3_1["ZVOL"]
+ L1_1 --> N1_PV1
+ L3_1 --> N1_PV2
+ end
+ subgraph Blockdevices1[" "]
+ D1["/dev/sdc"] --> V1_1["ZPOOL"]
+ D2["/dev/sdb"] --> V1_1["ZPOOL"]
+ end
+ end
-
+ subgraph Node1["Node 1"]
+ subgraph K8S_NODE2[" "]
+ N2_PV1["PV"] --> N2_APP1["APP"]
+ end
+ subgraph LVM_Stack1["ZFS Stack"]
+ V2_2 --> Z2_2["ZVOL"]
+ Z2_2 --> N2_PV1
+ end
+ subgraph Blockdevices2[" "]
+ D3["/dev/sdb"] --> V2_2["ZPOOL"]
+ end
+ end
-## Usage and Deployment
+ classDef pv fill:#FFCC00,stroke:#FF9900,color:#000;
+ classDef app fill:#99CC00,stroke:#66CC00,color:#000;
+ classDef disk fill:#FF6666,stroke:#FF3333,color:#000;
+ classDef zfs fill:#99CCFF,stroke:#6699FF,color:#000;
-### Prerequisites
+ class N1_PV1,N1_PV2,N2_PV1 pv;
+ class N1_APP1,N1_APP2,N2_APP1 app;
+ class D1,D2,D3 disk;
+ class V1_1,V2_2 zfs;
+ class L1_1,L3_1,Z2_2 zfs;
-> [!IMPORTANT]
-> Before installing the LocalPV-ZFS driver please make sure your Kubernetes Cluster meets the following prerequisites:
-> 1. All the nodes must have ZFS utils package installed
-> 2. A ZPOOL has been configurred for provisioning volumes
-> 3. You have access to install RBAC components into kube-system namespace. The OpenEBS ZFS driver components are installed in kube-system namespace to allow them to be flagged as system critical components.
-
+```
### Supported System
@@ -72,345 +98,16 @@ The orignal v1.0 dev roadmap [is here ](https://github.com/orgs/openebs/projects
Check the [features](./docs/features.md) supported for each k8s version.
-
-
-## Setup
-
-All nodes should have the same verion of zfsutils-linux installed.
-
-```bash
-$ apt-get install zfsutils-linux
-```
-
-Go to each node and create the ZFS Pool, which will be used for provisioning the volumes. You can create the Pool of your choice, it can be striped, mirrored or raidz pool.
-
-If you have the disk(say /dev/sdb) then you can use the below command to create a striped pool :
-```bash
-$ zpool create zfspv-pool /dev/sdb
-```
-You can also create mirror or raidz pool as per your need. Check https://github.com/openzfs/zfs for more information.
-
-
-If you don't have the disk, then you can create the zpool on the loopback device which is backed by a sparse file. Use this for testing purpose only.
-```bash
-$ truncate -s 100G /tmp/disk.img
-$ zpool create zfspv-pool `losetup -f /tmp/disk.img --show`
-```
-
-Once the ZFS Pool is created, verify the pool via `zpool status` command, you should see something like this :
-```bash
-$ zpool status
- pool: zfspv-pool
- state: ONLINE
- scan: none requested
-config:
-
- NAME STATE READ WRITE CKSUM
- zfspv-pool ONLINE 0 0 0
- sdb ONLINE 0 0 0
-
-errors: No known data errors
-```
-
-Configure the custom topology keys (if needed). This can be used for many purposes like if we want to create the PV on nodes in a particuler zone or building. We can label the nodes accordingly and use that key in the storageclass for taking the scheduling decesion:
-
-https://github.com/openebs/zfs-localpv/blob/HEAD/docs/faq.md#6-how-to-add-custom-topology-key
-
-
-
-## Installation
-In order to support moving data to a new node later on, you must label each node with a unique value for `openebs.io/nodeid`.
-For more information on migrating data, please [see here](docs/faq.md#8-how-to-migrate-pvs-to-the-new-node-in-case-old-node-is-not-accessible)
-
-**NOTE:** Installation using operator YAMLs is not the supported way any longer.
-We can install the latest release of OpenEBS ZFS driver by running the following command:
-```bash
-helm repo add openebs https://openebs.github.io/openebs
-helm repo update
-helm install openebs --namespace openebs openebs/openebs --create-namespace
-```
-
-**NOTE:** If you are running a custom Kubelet location, or a Kubernetes distribution that uses a custom Kubelet location, the `kubelet` directory must be changed on the helm values at install-time using the flag option `--set zfs-localpv.zfsNode.kubeletDir=` in the `helm install` command.
-
-- For `microk8s`, we need to change the kubelet directory to `/var/snap/microk8s/common/var/lib/kubelet/`, we need to replace `/var/lib/kubelet/` with `/var/snap/microk8s/common/var/lib/kubelet/`.
-- For `k0s`, the default directory (`/var/lib/kubelet`) should be changed to `/var/lib/k0s/kubelet`.
-- For `RancherOS`, the default directory (`/var/lib/kubelet`) should be changed to `/opt/rke/var/lib/kubelet`.
-
-Verify that the ZFS driver Components are installed and running using below command. Depending on number of nodes, you will see one zfs-controller pod and zfs-node daemonset running on the nodes :
-```bash
-$ kubectl get pods -n openebs -l role=openebs-zfs
-NAME READY STATUS RESTARTS AGE
-openebs-zfs-localpv-controller-f78f7467c-blr7q 5/5 Running 0 11m
-openebs-zfs-localpv-node-h46m5 2/2 Running 0 11m
-openebs-zfs-localpv-node-svfgq 2/2 Running 0 11m
-openebs-zfs-localpv-node-wm9ks 2/2 Running 0 11m
-```
-
-Once ZFS driver is installed and running we can provision a volume.
-
-### Deployment
-
-#### 1. Create a Storage class
-
-```yaml
-apiVersion: storage.k8s.io/v1
-kind: StorageClass
-metadata:
- name: openebs-zfspv
-parameters:
- recordsize: "128k"
- compression: "off"
- dedup: "off"
- fstype: "zfs"
- poolname: "zfspv-pool"
-provisioner: zfs.csi.openebs.io
-```
-
-The storage class contains the volume parameters like recordsize(should be power of 2), compression, dedup and fstype. You can select what are all parameters you want. In case, zfs properties paramenters are not provided, the volume will inherit the properties from the ZFS Pool.
-
-The *poolname* is the must argument. It should be noted that *poolname* can either be the root dataset or a child dataset e.g.
-```yaml
-poolname: "zfspv-pool"
-poolname: "zfspv-pool/child"
-```
-
-Also the dataset provided under `poolname` must exist on *all the nodes* with the name given in the storage class. Check the doc on [storageclasses](docs/storageclasses.md) to know all the supported parameters for LocalPV-ZFS
-
-##### ext2/3/4 or xfs or btrfs as FsType
-
-If we provide fstype as one of ext2/3/4 or xfs or btrfs, the driver will create a ZVOL, which is a blockdevice carved out of ZFS Pool.
-This blockdevice will be formatted with corresponding filesystem before it's used by the driver.
-
-> **Note**
-> This means there will be a filesystem layer on top of ZFS volume, and applications may not get optimal performance.
-
-A sample storage class for `ext4` fstype is provided below :
-
-```yaml
-apiVersion: storage.k8s.io/v1
-kind: StorageClass
-metadata:
- name: openebs-zfspv
-parameters:
- volblocksize: "4k"
- compression: "off"
- dedup: "off"
- fstype: "ext4"
- poolname: "zfspv-pool"
-provisioner: zfs.csi.openebs.io
-```
-
-Here please note that we are providing `volblocksize` instead of `recordsize` since we will create a ZVOL, for which we can choose the blocksize with which we want to create the block device. Here, please note that for ZFS, volblocksize should be power of 2.
-
-##### ZFS as FsType
-
-In case if we provide "zfs" as the fstype, the ZFS driver will create ZFS DATASET in the ZFS Pool, which is the ZFS filesystem. Here, there will not be any extra layer between application and storage, and applications can get the optimal performance.
-
-The sample storage class for ZFS fstype is provided below :
-
-```yaml
-apiVersion: storage.k8s.io/v1
-kind: StorageClass
-metadata:
- name: openebs-zfspv
-parameters:
- recordsize: "128k"
- compression: "off"
- dedup: "off"
- fstype: "zfs"
- poolname: "zfspv-pool"
-provisioner: zfs.csi.openebs.io
-```
-
-Here please note that we are providing `recordsize` which will be used to create the ZFS datasets, which specifies the maximum block size for files in the zfs file system. The recordsize has to be power of 2 for ZFS datasets.
+### Documents
-##### ZPOOL Availability
-
-If ZFS pool is available on certain nodes only, then make use of topology to tell the list of nodes where we have the ZFS pool available.
-As shown in the below storage class, we can use allowedTopologies to describe ZFS pool availability on nodes.
-
-```yaml
-apiVersion: storage.k8s.io/v1
-kind: StorageClass
-metadata:
- name: openebs-zfspv
-allowVolumeExpansion: true
-parameters:
- recordsize: "128k"
- compression: "off"
- dedup: "off"
- fstype: "zfs"
- poolname: "zfspv-pool"
-provisioner: zfs.csi.openebs.io
-allowedTopologies:
-- matchLabelExpressions:
- - key: kubernetes.io/hostname
- values:
- - zfspv-node1
- - zfspv-node2
-```
-
-The above storage class tells that ZFS pool "zfspv-pool" is available on nodes zfspv-node1 and zfspv-node2 only. The ZFS driver will create volumes on those nodes only.
-
-Please note that the provisioner name for ZFS driver is "zfs.csi.openebs.io", we have to use this while creating the storage class so that the volume provisioning/deprovisioning request can come to ZFS driver.
-
-##### Scheduler
-
-The ZFS driver has its own scheduler which will try to distribute the PV across the nodes so that one node should not be loaded with all the volumes. Currently the driver supports two scheduling algorithms: VolumeWeighted and CapacityWeighted, in which it will try to find a ZFS pool which has less number of volumes provisioned in it or less capacity of volume provisioned out of a pool respectively, from all the nodes where the ZFS pools are available. To know about how to select scheduler via storage-class See [this](https://github.com/openebs/zfs-localpv/blob/HEAD/docs/storageclasses.md#storageclass-with-k8s-scheduler).
-Once it is able to find the node, it will create a PV for that node and also create a ZFSVolume custom resource for the volume with the NODE information. The watcher for this ZFSVolume CR will get all the information for this object and creates a ZFS dataset(zvol) with the given ZFS property on the mentioned node.
-
-The scheduling algorithm currently only accounts for either the number of ZFS volumes or total capacity occupied from a zpool and does not account for other factors like available cpu or memory while making scheduling decisions.
-
-So if you want to use node selector/affinity rules on the application pod, or have cpu/memory constraints, kubernetes scheduler should be used.
-To make use of kubernetes scheduler, you can set the `volumeBindingMode` as `WaitForFirstConsumer` in the storage class.
-
-This will cause a delayed binding, i.e kubernetes scheduler will schedule the application pod first and then it will ask the ZFS driver to create the PV.
-
-The driver will then create the PV on the node where the pod is scheduled :
-
-```yaml
-apiVersion: storage.k8s.io/v1
-kind: StorageClass
-metadata:
- name: openebs-zfspv
-allowVolumeExpansion: true
-parameters:
- recordsize: "128k"
- compression: "off"
- dedup: "off"
- fstype: "zfs"
- poolname: "zfspv-pool"
-provisioner: zfs.csi.openebs.io
-volumeBindingMode: WaitForFirstConsumer
-```
-
-Please note that once a PV is created for a node, application using that PV will always get scheduled to that particular node only, as PV will be sticky to that node.
-
-The scheduling algorithm by ZFS driver or kubernetes will come into picture only during the deployment time. Once the PV is created,
-the application can not move anywhere as the data is there on the node where the PV is.
-
-#### 2. Create a PVC
-
-```yaml
-kind: PersistentVolumeClaim
-apiVersion: v1
-metadata:
- name: csi-zfspv
-spec:
- storageClassName: openebs-zfspv
- accessModes:
- - ReadWriteOnce
- resources:
- requests:
- storage: 4Gi
-```
-
-Create a PVC using the storage class created for the ZFS driver. Here, the allocated volume size will be rounded off to the nearest Mi or Gi notation, check the [faq](./docs/faq.md#7-why-the-zfs-volume-size-is-different-than-the-reqeusted-size-in-pvc) section for more details.
-
-If we are using the immediate binding in the storageclass then we can check the kubernetes resource for the corresponding ZFS volume, otherwise in late binding case, we can check the same after pod has been scheduled :
-
-```bash
-$ kubectl get zv -n openebs
-NAME ZPOOL NODE SIZE STATUS FILESYSTEM AGE
-pvc-34133838-0d0d-11ea-96e3-42010a800114 zfspv-pool zfspv-node1 4294967296 Ready zfs 4s
-```
-
-```bash
-$ kubectl describe zv pvc-34133838-0d0d-11ea-96e3-42010a800114 -n openebs
-Name: pvc-34133838-0d0d-11ea-96e3-42010a800114
-Namespace: openebs
-Labels: kubernetes.io/nodename=zfspv-node1
-Annotations:
-API Version: openebs.io/v1alpha1
-Kind: ZFSVolume
-Metadata:
- Creation Timestamp: 2019-11-22T09:49:29Z
- Finalizers:
- zfs.openebs.io/finalizer
- Generation: 1
- Resource Version: 2881
- Self Link: /apis/openebs.io/v1alpha1/namespaces/openebs/zfsvolumes/pvc-34133838-0d0d-11ea-96e3-42010a800114
- UID: 60bc4df2-0d0d-11ea-96e3-42010a800114
-Spec:
- Capacity: 4294967296
- Compression: off
- Dedup: off
- Fs Type: zfs
- Owner Node ID: zfspv-node1
- Pool Name: zfspv-pool
- Recordsize: 4k
- Volume Type: DATASET
-Status:
- State: Ready
-Events:
-```
-
-The ZFS driver will create a ZFS dataset (or zvol as per fstype in the storageclass) on the node zfspv-node1 for the mentioned ZFS pool and the dataset name will same as PV name.
-
-Go to the node zfspv-node1 and check the volume :
-
-```bash
-$ zfs list
-NAME USED AVAIL REFER MOUNTPOINT
-zfspv-pool 444K 362G 96K /zfspv-pool
-zfspv-pool/pvc-34133838-0d0d-11ea-96e3-42010a800114 96K 4.00G 96K legacy
-```
-
-#### 3. Deploy the application
-
-Create the deployment yaml using the pvc backed by LocalPV-ZFS storage.
-
-```yaml
-apiVersion: v1
-kind: Pod
-metadata:
- name: fio
-spec:
- restartPolicy: Never
- containers:
- - name: perfrunner
- image: openebs/tests-fio
- command: ["/bin/bash"]
- args: ["-c", "while true ;do sleep 50; done"]
- volumeMounts:
- - mountPath: /datadir
- name: fio-vol
- tty: true
- volumes:
- - name: fio-vol
- persistentVolumeClaim:
- claimName: csi-zfspv
-```
-
-After the deployment of the application, we can go to the node and see that the zfs volume is being used
-by the application for reading/writting the data and space is consumed from the ZFS pool.
-
-#### 4. ZFS Property Change
-
-ZFS Volume Property can be changed like compression on/off can be done by just simply editing the kubernetes resource for the corresponding zfs volume by using below command :
-
-```bash
-$ kubectl edit zv pvc-34133838-0d0d-11ea-96e3-42010a800114 -n openebs
-```
-
-You can edit the relevant property like make compression on or make dedup on and save it.
-This property will be applied to the corresponding volume and can be verified using
-below command on the node:
-
-```bash
-$ zfs get all zfspv-pool/pvc-34133838-0d0d-11ea-96e3-42010a800114
-```
-
-#### 5. Deprovisioning
-
-for deprovisioning the volume we can delete the application which is using the volume and then we can go ahead and delete the pv, as part of deletion of pv this volume will also be deleted from the ZFS pool and data will be freed.
-
-```bash
-$ kubectl delete -f fio.yaml
-pod "fio" deleted
-$ kubectl delete -f pvc.yaml
-persistentvolumeclaim "csi-zfspv" deleted
-```
+- [Prerequisites](./docs/quickstart.md#prerequisites)
+- [Quickstart](./docs/quickstart.md#setup)
+- [Developer Setup](./docs/developer-setup.md#development-workflow)
+- [Testing](./docs/developer-setup.md#testing)
+- [Contibuting Guidelines](./CONTRIBUTING.md)
+- [Governance](./GOVERNANCE.md)
+- [Changelog](./CHANGELOG.md)
+- [Release Process](./RELEASE.md)
## Features
@@ -423,12 +120,23 @@ persistentvolumeclaim "csi-zfspv" deleted
- [x] `Block` mode
- [x] Supports fsTypes: `ext4`, `btrfs`, `xfs`, `zfs`
- [x] Volume metrics
-- [x] [Snapshot](docs/snapshot.md)
-- [x] [Clone](docs/clone.md)
+- [x] [Snapshot]
+ - [x] [Create](docs/snapshot.md)
+ - [x] [Restore](docs/clone.md#create-clone-from-snapshot)
+- [x] [Clone](docs/clone.md#create-clone-from-volume)
- [x] [Volume Resize](docs/resize.md)
- [x] [Raw Block Volume](docs/raw-block-volume.md)
- [x] [Backup/Restore](docs/backup-restore.md)
- [ ] Ephemeral inline volume
+## Dev Activity dashboard
+
+![Alt](https://repobeats.axiom.co/api/embed/d990adda232a580d4c0fd9b98d6557079bb3bf4a.svg "Repobeats analytics image")
+
## License compliance
+
[![FOSSA Status](https://app.fossa.com/api/projects/custom%2B162%2Fgithub.com%2Fopenebs%2Fzfs-localpv.svg?type=large&issueType=license)](https://app.fossa.com/projects/custom%2B162%2Fgithub.com%2Fopenebs%2Fzfs-localpv?ref=badge_large&issueType=license)
+
+## OpenEBS is a [CNCF Sandbox Project](https://www.cncf.io/projects/openebs)
+
+![OpenEBS is a CNCF Sandbox Project](https://github.com/cncf/artwork/blob/main/other/cncf/horizontal/color/cncf-color.png)
diff --git a/RELEASE.md b/RELEASE.md
index 5f28ad7f4..1cc75bc37 100644
--- a/RELEASE.md
+++ b/RELEASE.md
@@ -1,39 +1,84 @@
# Release Process
-zfs-localpv follows a monthly release cadence. The scope of the release is determined by contributor availability. The scope is published in the [Release Tracker Projects](https://github.com/orgs/openebs/projects/10).
-## Release Candidate Verification Checklist
+Local PV ZFS follows [semantic versioning](https://semver.org) principles and aims for a **quarterly minor version release cadence**. The scope of each release depends on contributor availability and is tracked in the [Release Tracker Projects](https://github.com/orgs/openebs/projects/78).
-Every release has release candidate builds that are created starting from the third week into the release. These release candidate builds help to freeze the scope and maintain the quality of the release. The release candidate builds will go through:
-- Platform Verification
-- Regression and Feature Verification Automated tests.
-- Exploratory testing by QA engineers
-- Strict security scanners on the container images
-- Upgrade from previous releases
-- Beta testing by users on issues that they are interested in.
-- Dogfooding on OpenEBS workload and e2e infrastructure clusters.
+## Pre-release Candidate Verification Checklist
+
+Each release has a **pre-release version**, created upon branch creation (explained further below). This pre-release version is used for the following validation steps:
-If any issues are found during the above stages, they are fixed and a new release candidate builds are generated.
+- Platform Verification
+- Automated Regression & Feature Testing
+- Exploratory Testing by QA engineers
+- Strict Security Scanning on container images
+- Upgrade Testing from previous releases
+- Beta Testing by users on relevant issues
-Once all the above tests are completed, a main release tagged image is published.
+If any issues arise during these stages, they are fixed, and the pre-release version is updated for further validation. This cycle continues until all tests are successfully completed, after which a main release is created.
## Release Tagging
-zfs-localpv is released as container image with versioned tag.
+Local PV ZFS is released as container images and a corresponding Helm chart, which is the recommended installation method. Although the [zfs-operator](./deploy/zfs-operator.yaml) is also published, it is generated by templating the Helm chart.
+
+### Versioning Format
+
+The release tags follow **semantic versioning**:
+- **Final release tag:** `X.Y.Z`
+- **Pre-release version:** `X.Y.Z-prerelease`
+- **Development version:** `X.Y+1.0-develop`
+
+> **Note:** The `prerelease` and `develop` versions are intermediate versions that get overridden with each change merged into their respective branches. These versions are only for testing and are not associated with any Git tags.
+
+### Major/Minor Release Process
+
+1. **Branch Creation:**
+ - The repo owner creates a release branch from `develop`, named in the format `release/X.Y` (e.g., `release/2.7` for version `2.7.x`).
+
+2. **Automated Version Updates:**
+ - Two automated PRs update chart versions:
+ - `release/2.7` branch → `2.7.0-prerelease`
+ - `develop` branch → `2.8.0-develop`
+ - Once merged, the updated images and Helm charts are published for testing.
+
+3. **Final Release Creation:**
+ - When the release branch is ready, the repo owner **creates a release with tag `X.Y.Z`** (e.g., `2.7.0`).
+ - The release process includes:
+ - Linting, unit tests, and BDD tests
+ - Code coverage updates
+ - Image builds with the specific tag (e.g., `2.7.0`)
+ - Helm chart updates and publishing
+
+4. **Post-GA Version Increments:**
+ - After the release is GA (General Availability):
+ - The next **pre-release version** (`2.7.1-prerelease`) is published.
+ - The **develop branch** continues with `2.8.0-develop` for the next major/minor release cycle.
+
+### Patch Release Process
+
+1. **Branching & Changes:**
+ - Patch releases are made against the existing release branch (e.g., `release/2.7`).
+ - All merged changes are available for testing via the **prerelease version** (`2.7.1-prerelease`).
+
+2. **Final Patch Release Creation:**
+ - When ready, the repo owner **creates a release with tag `X.Y.Z+1`** (e.g., `2.7.1`).
+ - The release process includes:
+ - Linting, unit tests, and BDD tests
+ - Code coverage updates
+ - Image builds with the specific tag (e.g., `2.7.1`)
+ - Helm chart updates and publishing
-Before creating a release, the repo owner needs to create a separate branch from the active branch, which is `develop`. Name of the branch should follow the naming convention of `v.0.7.x` if release is for 0.7.0.
+3. **Post-GA Version Increments:**
+ - Once the patch is GA:
+ - The next **pre-release version** (`2.7.2-prerelease`) is published.
+ - The **develop branch** continues with `2.8.0-develop` for the next major/minor release cycle.
-Once the release branch is created, changelog from `changelogs/unreleased` needs to be moved to release specific folder, if release branch is `v0.7.x` then folder will be `changelogs/v0.7.x`.
+## Release Artifacts
-The format of the release tag is either "Release-Name-RC1" or "Release-Name" depending on whether the tag is a release candidate or a release. (Example: 0.7.0-RC1 is a GitHub release tag for zfs-localpv release candidate build. 0.7.0 is the release tag that is created after the release criteria are satisfied by the zfs-localpv builds.)
+- **Container Images:** Published at [Docker Hub](https://hub.docker.com/r/openebs/zfs-driver/tags)
+- **Helm Charts:** Hosted on [GitHub Deployments](https://github.com/openebs/zfs-localpv/tree/gh-pages)
-Once the release is triggered, Travis build process has to be monitored. Once Travis build passes, images are pushed to docker hub and quay.io. Images can be verified by going through docker hub and quay.io. Also, the images shouldn't have any high level vulnerabilities.
+Before finalizing a release or patch release, it is ensured that **all significant changes** are documented in `CHANGELOG.md`.
-Images are published at following location :
+---
-https://quay.io/repository/openebs/zfs-driver?tab=tags
-https://hub.docker.com/r/openebs/zfs-driver/tags
+This document streamlines the release process it ensuring all necessary details remain intact.
-Once a release is created, update the release description with the changelog mentioned in `changelog/v0.7.x`. Once the changelogs are updated in the release, the repo owner needs to create a PR to `develop` with the following details:
-1. update the changelog from `changelog/v0.7.x` to `zfs-localpv/CHANGELOG.md`
-2. If a release is not an RC tag then PR should include the changes to remove `changelog/v0.7.x` folder.
-3. If a release is an RC tag then PR should include the changes to remove the changelog from `changelog/v0.7.x` which are already mentioned in `zfs-localpv/CHANGELOG.md` as part of step number 1.
diff --git a/changelogs/released/0.8.0-RC1/121-pawanpraka1 b/changelogs/released/0.8.0-RC1/121-pawanpraka1
deleted file mode 100644
index 343a0b17d..000000000
--- a/changelogs/released/0.8.0-RC1/121-pawanpraka1
+++ /dev/null
@@ -1 +0,0 @@
-Fixes an issue where PVC was bound to unusable PV created using incorrect values provided in PVC/Storageclass
diff --git a/changelogs/released/0.8.0-RC1/122-w3aman b/changelogs/released/0.8.0-RC1/122-w3aman
deleted file mode 100644
index ead4e48ef..000000000
--- a/changelogs/released/0.8.0-RC1/122-w3aman
+++ /dev/null
@@ -1 +0,0 @@
-Updated the doc for custom-topology support
diff --git a/changelogs/released/0.8.0-RC1/124-pawanpraka1 b/changelogs/released/0.8.0-RC1/124-pawanpraka1
deleted file mode 100644
index 2dd59be32..000000000
--- a/changelogs/released/0.8.0-RC1/124-pawanpraka1
+++ /dev/null
@@ -1 +0,0 @@
-changing image pull policy to IfNotPresent to make it not pull the image again and again
diff --git a/changelogs/released/0.8.0-RC1/128-pawanpraka1 b/changelogs/released/0.8.0-RC1/128-pawanpraka1
deleted file mode 100644
index a23e6bf01..000000000
--- a/changelogs/released/0.8.0-RC1/128-pawanpraka1
+++ /dev/null
@@ -1 +0,0 @@
-removing unnecessary printer columns from ZFSVolume
diff --git a/changelogs/released/0.8.0-RC1/133-Icedroid b/changelogs/released/0.8.0-RC1/133-Icedroid
deleted file mode 100644
index e127377dc..000000000
--- a/changelogs/released/0.8.0-RC1/133-Icedroid
+++ /dev/null
@@ -1 +0,0 @@
-fixing golint warnings
diff --git a/changelogs/released/0.8.0-RC1/137-pawanpraka1 b/changelogs/released/0.8.0-RC1/137-pawanpraka1
deleted file mode 100644
index edbecb9c4..000000000
--- a/changelogs/released/0.8.0-RC1/137-pawanpraka1
+++ /dev/null
@@ -1 +0,0 @@
-honouring readonly flag for ZFS-LocalPV
diff --git a/changelogs/released/0.8.0-RC1/138-Icedroid b/changelogs/released/0.8.0-RC1/138-Icedroid
deleted file mode 100644
index 42228e29c..000000000
--- a/changelogs/released/0.8.0-RC1/138-Icedroid
+++ /dev/null
@@ -1 +0,0 @@
-add contributing checkout list
diff --git a/changelogs/released/0.8.0-RC1/140-pawanpraka1 b/changelogs/released/0.8.0-RC1/140-pawanpraka1
deleted file mode 100644
index 35ac51bd8..000000000
--- a/changelogs/released/0.8.0-RC1/140-pawanpraka1
+++ /dev/null
@@ -1 +0,0 @@
-adding v1 CRD for ZFS-LocalPV
diff --git a/changelogs/released/0.8.0-RC1/144-cruwe b/changelogs/released/0.8.0-RC1/144-cruwe
deleted file mode 100644
index 5fad5d3d4..000000000
--- a/changelogs/released/0.8.0-RC1/144-cruwe
+++ /dev/null
@@ -1 +0,0 @@
-Fixes an issue where volumes meant to be filesystem datasets got created as zvols and generally makes storageclass parameter spelling insensitive to case
diff --git a/changelogs/released/0.8.0-RC1/145-pawanpraka1 b/changelogs/released/0.8.0-RC1/145-pawanpraka1
deleted file mode 100644
index c2c75dac3..000000000
--- a/changelogs/released/0.8.0-RC1/145-pawanpraka1
+++ /dev/null
@@ -1 +0,0 @@
-fixing stale ZFSVolume resource issue when deleting the pvc in pending state
diff --git a/changelogs/released/0.8.0-RC1/149-pawanpraka1 b/changelogs/released/0.8.0-RC1/149-pawanpraka1
deleted file mode 100644
index d8eca634f..000000000
--- a/changelogs/released/0.8.0-RC1/149-pawanpraka1
+++ /dev/null
@@ -1 +0,0 @@
-adding operator yaml for centos7 and centos8
diff --git a/changelogs/released/0.8.0-RC1/150-pawanpraka1 b/changelogs/released/0.8.0-RC1/150-pawanpraka1
deleted file mode 100644
index 0f543477d..000000000
--- a/changelogs/released/0.8.0-RC1/150-pawanpraka1
+++ /dev/null
@@ -1 +0,0 @@
-include pvc name in volume events
diff --git a/changelogs/released/0.8.0-RC1/151-pawanpraka1 b/changelogs/released/0.8.0-RC1/151-pawanpraka1
deleted file mode 100644
index c90dc081c..000000000
--- a/changelogs/released/0.8.0-RC1/151-pawanpraka1
+++ /dev/null
@@ -1 +0,0 @@
-moving to legacy mount
diff --git a/changelogs/released/v0.7.0-RC1/101-pawanpraka1 b/changelogs/released/v0.7.0-RC1/101-pawanpraka1
deleted file mode 100644
index c8e6da121..000000000
--- a/changelogs/released/v0.7.0-RC1/101-pawanpraka1
+++ /dev/null
@@ -1 +0,0 @@
- changing topology key to unique name to avoid collision with the existing node label
diff --git a/changelogs/released/v0.7.0-RC1/102-pawanpraka1 b/changelogs/released/v0.7.0-RC1/102-pawanpraka1
deleted file mode 100644
index 52366da4d..000000000
--- a/changelogs/released/v0.7.0-RC1/102-pawanpraka1
+++ /dev/null
@@ -1 +0,0 @@
-adding RAW Block Volume support for ZFSPV
diff --git a/changelogs/released/v0.7.0-RC1/104-pawanpraka1 b/changelogs/released/v0.7.0-RC1/104-pawanpraka1
deleted file mode 100644
index 6947176ad..000000000
--- a/changelogs/released/v0.7.0-RC1/104-pawanpraka1
+++ /dev/null
@@ -1 +0,0 @@
-make the docker images configurable
diff --git a/changelogs/released/v0.7.0-RC1/105-pawanpraka1 b/changelogs/released/v0.7.0-RC1/105-pawanpraka1
deleted file mode 100644
index cc6f77460..000000000
--- a/changelogs/released/v0.7.0-RC1/105-pawanpraka1
+++ /dev/null
@@ -1 +0,0 @@
-trim leading v from image tag
diff --git a/changelogs/released/v0.7.0-RC1/106-pawanpraka1 b/changelogs/released/v0.7.0-RC1/106-pawanpraka1
deleted file mode 100644
index 7f5247a1d..000000000
--- a/changelogs/released/v0.7.0-RC1/106-pawanpraka1
+++ /dev/null
@@ -1 +0,0 @@
-adding raw block volume details in README
diff --git a/changelogs/released/v0.7.0-RC1/108-pawanpraka1 b/changelogs/released/v0.7.0-RC1/108-pawanpraka1
deleted file mode 100644
index 8af473cda..000000000
--- a/changelogs/released/v0.7.0-RC1/108-pawanpraka1
+++ /dev/null
@@ -1 +0,0 @@
-adding steps to import existing volume to ZFS-LocalPV
diff --git a/changelogs/released/v0.7.0-RC1/109-w3aman b/changelogs/released/v0.7.0-RC1/109-w3aman
deleted file mode 100644
index f63be4ecb..000000000
--- a/changelogs/released/v0.7.0-RC1/109-w3aman
+++ /dev/null
@@ -1 +0,0 @@
-Fix the link in README file to the raw-block-volume.md file
diff --git a/changelogs/released/v0.7.0-RC1/92-filippobosi b/changelogs/released/v0.7.0-RC1/92-filippobosi
deleted file mode 100644
index 57659bf47..000000000
--- a/changelogs/released/v0.7.0-RC1/92-filippobosi
+++ /dev/null
@@ -1 +0,0 @@
-added developer environment examples
diff --git a/changelogs/released/v0.7.0-RC1/94-pawanpraka1 b/changelogs/released/v0.7.0-RC1/94-pawanpraka1
deleted file mode 100644
index 975d9cb3c..000000000
--- a/changelogs/released/v0.7.0-RC1/94-pawanpraka1
+++ /dev/null
@@ -1 +0,0 @@
-adding support to configure custom topology key
diff --git a/changelogs/released/v0.7.0-RC1/98-w3aman b/changelogs/released/v0.7.0-RC1/98-w3aman
deleted file mode 100644
index 440f4151e..000000000
--- a/changelogs/released/v0.7.0-RC1/98-w3aman
+++ /dev/null
@@ -1 +0,0 @@
-Fixed the formatting of ReadME file for upgrade
diff --git a/changelogs/released/v0.7.0-RC1/99-pawanpraka1 b/changelogs/released/v0.7.0-RC1/99-pawanpraka1
deleted file mode 100644
index 369814e7a..000000000
--- a/changelogs/released/v0.7.0-RC1/99-pawanpraka1
+++ /dev/null
@@ -1 +0,0 @@
-adding project specific files
diff --git a/changelogs/released/v0.7.0/110-pawanpraka1 b/changelogs/released/v0.7.0/110-pawanpraka1
deleted file mode 100644
index 7f9d289f4..000000000
--- a/changelogs/released/v0.7.0/110-pawanpraka1
+++ /dev/null
@@ -1 +0,0 @@
-adding basic grafana dashboard
diff --git a/changelogs/released/v0.7.0/114-pawanpraka1 b/changelogs/released/v0.7.0/114-pawanpraka1
deleted file mode 100644
index 79db84175..000000000
--- a/changelogs/released/v0.7.0/114-pawanpraka1
+++ /dev/null
@@ -1 +0,0 @@
-use the travis tag for the version
diff --git a/changelogs/released/v0.9.0-RC1/160-vaniisgh b/changelogs/released/v0.9.0-RC1/160-vaniisgh
deleted file mode 100644
index 970bc02ea..000000000
--- a/changelogs/released/v0.9.0-RC1/160-vaniisgh
+++ /dev/null
@@ -1 +0,0 @@
-update docs to reflect gomod migration
\ No newline at end of file
diff --git a/changelogs/released/v0.9.0-RC1/161-vaniisgh b/changelogs/released/v0.9.0-RC1/161-vaniisgh
deleted file mode 100644
index ea8ba522b..000000000
--- a/changelogs/released/v0.9.0-RC1/161-vaniisgh
+++ /dev/null
@@ -1 +0,0 @@
-adds a filter for grpc logs to reduce the pollution
\ No newline at end of file
diff --git a/changelogs/released/v0.9.0-RC1/164-pawanpraka1 b/changelogs/released/v0.9.0-RC1/164-pawanpraka1
deleted file mode 100644
index 71118693d..000000000
--- a/changelogs/released/v0.9.0-RC1/164-pawanpraka1
+++ /dev/null
@@ -1 +0,0 @@
-adding shared mount support ZFSPV volumes
diff --git a/changelogs/released/v0.9.0-RC1/166-vaniisgh b/changelogs/released/v0.9.0-RC1/166-vaniisgh
deleted file mode 100644
index a5c96ec40..000000000
--- a/changelogs/released/v0.9.0-RC1/166-vaniisgh
+++ /dev/null
@@ -1 +0,0 @@
-change logger from Sirupsen/logrus to klog
diff --git a/changelogs/released/v0.9.0-RC1/167-vaniisgh b/changelogs/released/v0.9.0-RC1/167-vaniisgh
deleted file mode 100644
index 3fe1f8a0d..000000000
--- a/changelogs/released/v0.9.0-RC1/167-vaniisgh
+++ /dev/null
@@ -1 +0,0 @@
-add golint target to makefile
diff --git a/changelogs/released/v0.9.0-RC1/170-pawanpraka1 b/changelogs/released/v0.9.0-RC1/170-pawanpraka1
deleted file mode 100644
index b3a4eae24..000000000
--- a/changelogs/released/v0.9.0-RC1/170-pawanpraka1
+++ /dev/null
@@ -1 +0,0 @@
-adding support to have btrfs filesystem for ZFS-LocalPV
diff --git a/changelogs/released/v0.9.0-RC1/171-vaniisgh b/changelogs/released/v0.9.0-RC1/171-vaniisgh
deleted file mode 100644
index 671804be6..000000000
--- a/changelogs/released/v0.9.0-RC1/171-vaniisgh
+++ /dev/null
@@ -1 +0,0 @@
-Add checks to ensure zfs-driver status is running in BDD test
diff --git a/changelogs/released/v0.9.0-RC1/172-pawanpraka1 b/changelogs/released/v0.9.0-RC1/172-pawanpraka1
deleted file mode 100644
index 81e2f63fa..000000000
--- a/changelogs/released/v0.9.0-RC1/172-pawanpraka1
+++ /dev/null
@@ -1 +0,0 @@
-fixing duplicate UUID issue with btrfs
diff --git a/changelogs/released/v0.9.0-RC1/174-pawanpraka1 b/changelogs/released/v0.9.0-RC1/174-pawanpraka1
deleted file mode 100644
index cdc46758d..000000000
--- a/changelogs/released/v0.9.0-RC1/174-pawanpraka1
+++ /dev/null
@@ -1 +0,0 @@
-adding snapshot and clone releated test cases in BDD
diff --git a/changelogs/released/v0.9.0-RC1/175-vaniisgh b/changelogs/released/v0.9.0-RC1/175-vaniisgh
deleted file mode 100644
index ac664530f..000000000
--- a/changelogs/released/v0.9.0-RC1/175-vaniisgh
+++ /dev/null
@@ -1 +0,0 @@
-add golint to travis & fix linting
diff --git a/changelogs/released/v0.9.0-RC2/179-pawanpraka1 b/changelogs/released/v0.9.0-RC2/179-pawanpraka1
deleted file mode 100644
index 258869a68..000000000
--- a/changelogs/released/v0.9.0-RC2/179-pawanpraka1
+++ /dev/null
@@ -1 +0,0 @@
-fixing xfs mounting issue on centos with ubuntu 20.04 image
diff --git a/changelogs/released/v0.9.1-RC1/183-pawanpraka1 b/changelogs/released/v0.9.1-RC1/183-pawanpraka1
deleted file mode 100644
index 298eeab02..000000000
--- a/changelogs/released/v0.9.1-RC1/183-pawanpraka1
+++ /dev/null
@@ -1 +0,0 @@
-fixed uuid generation issue when mount fails
diff --git a/changelogs/released/v0.9.1-RC1/184-pawanpraka1 b/changelogs/released/v0.9.1-RC1/184-pawanpraka1
deleted file mode 100644
index fd1538a1c..000000000
--- a/changelogs/released/v0.9.1-RC1/184-pawanpraka1
+++ /dev/null
@@ -1 +0,0 @@
-mounting the volume if it is ready
diff --git a/changelogs/released/v0.9.1-RC1/186-pawanpraka1 b/changelogs/released/v0.9.1-RC1/186-pawanpraka1
deleted file mode 100644
index 5a17fa175..000000000
--- a/changelogs/released/v0.9.1-RC1/186-pawanpraka1
+++ /dev/null
@@ -1 +0,0 @@
-removing volumeLifecycleModes from the operator yaml
diff --git a/changelogs/released/v0.9.1-RC1/191-pawanpraka1 b/changelogs/released/v0.9.1-RC1/191-pawanpraka1
deleted file mode 100644
index 94e9f5bab..000000000
--- a/changelogs/released/v0.9.1-RC1/191-pawanpraka1
+++ /dev/null
@@ -1 +0,0 @@
-rounding off the volume size to Gi and Mi
diff --git a/changelogs/released/v0.9.2/196-pawanpraka1 b/changelogs/released/v0.9.2/196-pawanpraka1
deleted file mode 100644
index 06ce36171..000000000
--- a/changelogs/released/v0.9.2/196-pawanpraka1
+++ /dev/null
@@ -1 +0,0 @@
-Reverting back to old way of checking the volume status
diff --git a/changelogs/released/v1.0.0-RC1/162-pawanpraka1 b/changelogs/released/v1.0.0-RC1/162-pawanpraka1
deleted file mode 100644
index cbdab932e..000000000
--- a/changelogs/released/v1.0.0-RC1/162-pawanpraka1
+++ /dev/null
@@ -1 +0,0 @@
-adding velero backup and restore support
diff --git a/changelogs/released/v1.0.0-RC1/201-pawanpraka1 b/changelogs/released/v1.0.0-RC1/201-pawanpraka1
deleted file mode 100644
index 8b01bc50c..000000000
--- a/changelogs/released/v1.0.0-RC1/201-pawanpraka1
+++ /dev/null
@@ -1 +0,0 @@
-update go version to 1.14.7
diff --git a/changelogs/released/v1.0.0-RC1/204-pawanpraka1 b/changelogs/released/v1.0.0-RC1/204-pawanpraka1
deleted file mode 100644
index 1458e34ac..000000000
--- a/changelogs/released/v1.0.0-RC1/204-pawanpraka1
+++ /dev/null
@@ -1 +0,0 @@
-mounting the root filesystem to remove the dependency on the Operating system
diff --git a/changelogs/released/v1.0.0-RC1/205-ajeetrai707 b/changelogs/released/v1.0.0-RC1/205-ajeetrai707
deleted file mode 100644
index edd102d26..000000000
--- a/changelogs/released/v1.0.0-RC1/205-ajeetrai707
+++ /dev/null
@@ -1 +0,0 @@
-Add license-check for .go , .sh , Dockerfile and Makefile
diff --git a/changelogs/released/v1.0.1-RC1/211-pawanpraka1 b/changelogs/released/v1.0.1-RC1/211-pawanpraka1
deleted file mode 100644
index 111b1e765..000000000
--- a/changelogs/released/v1.0.1-RC1/211-pawanpraka1
+++ /dev/null
@@ -1 +0,0 @@
-removing centos yamls from the repo
diff --git a/changelogs/released/v1.0.1-RC1/221-pawanpraka1 b/changelogs/released/v1.0.1-RC1/221-pawanpraka1
deleted file mode 100644
index 3495df29e..000000000
--- a/changelogs/released/v1.0.1-RC1/221-pawanpraka1
+++ /dev/null
@@ -1 +0,0 @@
-adding validation for backup and restore
diff --git a/changelogs/released/v1.1.0-RC1/225-codegagan b/changelogs/released/v1.1.0-RC1/225-codegagan
deleted file mode 100644
index 8ef54dea1..000000000
--- a/changelogs/released/v1.1.0-RC1/225-codegagan
+++ /dev/null
@@ -1 +0,0 @@
-Remove MountInfo struct from the api files
\ No newline at end of file
diff --git a/changelogs/released/v1.1.0-RC1/230-pawanpraka1 b/changelogs/released/v1.1.0-RC1/230-pawanpraka1
deleted file mode 100644
index 0f25af8f1..000000000
--- a/changelogs/released/v1.1.0-RC1/230-pawanpraka1
+++ /dev/null
@@ -1 +0,0 @@
-support parallel/faster upgrades for node daemonset
diff --git a/changelogs/released/v1.1.0-RC1/231-pawanpraka1 b/changelogs/released/v1.1.0-RC1/231-pawanpraka1
deleted file mode 100644
index 66340a67b..000000000
--- a/changelogs/released/v1.1.0-RC1/231-pawanpraka1
+++ /dev/null
@@ -1 +0,0 @@
-adding deployment yaml via kustomize
diff --git a/changelogs/released/v1.1.0-RC1/233-prateekpandey14 b/changelogs/released/v1.1.0-RC1/233-prateekpandey14
deleted file mode 100644
index 490c88cb8..000000000
--- a/changelogs/released/v1.1.0-RC1/233-prateekpandey14
+++ /dev/null
@@ -1 +0,0 @@
-add support for multi arch container image
diff --git a/changelogs/released/v1.1.0-RC1/234-pawanpraka1 b/changelogs/released/v1.1.0-RC1/234-pawanpraka1
deleted file mode 100644
index a8bc44a28..000000000
--- a/changelogs/released/v1.1.0-RC1/234-pawanpraka1
+++ /dev/null
@@ -1 +0,0 @@
-add support for creating the Clone from volume as datasource
diff --git a/changelogs/released/v1.1.0/237-w3aman b/changelogs/released/v1.1.0/237-w3aman
deleted file mode 100644
index ca2d6a0cc..000000000
--- a/changelogs/released/v1.1.0/237-w3aman
+++ /dev/null
@@ -1 +0,0 @@
-changing the zfs-driver images to multi-arch docker hub
diff --git a/changelogs/released/v1.2.0-RC1/232-pawanpraka1 b/changelogs/released/v1.2.0-RC1/232-pawanpraka1
deleted file mode 100644
index 5519913fa..000000000
--- a/changelogs/released/v1.2.0-RC1/232-pawanpraka1
+++ /dev/null
@@ -1 +0,0 @@
-adding CSI Sanity test for ZFS-LocalPV
diff --git a/changelogs/released/v1.2.0-RC1/243-pawanpraka1 b/changelogs/released/v1.2.0-RC1/243-pawanpraka1
deleted file mode 100644
index 1b728ae31..000000000
--- a/changelogs/released/v1.2.0-RC1/243-pawanpraka1
+++ /dev/null
@@ -1 +0,0 @@
-fixed the kustomize yaml name to kustomization.yaml
diff --git a/changelogs/released/v1.2.0-RC1/244-pawanpraka1 b/changelogs/released/v1.2.0-RC1/244-pawanpraka1
deleted file mode 100644
index c19f9e660..000000000
--- a/changelogs/released/v1.2.0-RC1/244-pawanpraka1
+++ /dev/null
@@ -1 +0,0 @@
-move btrfs code out of zfs package
diff --git a/changelogs/released/v1.2.0-RC1/245-pawanpraka1 b/changelogs/released/v1.2.0-RC1/245-pawanpraka1
deleted file mode 100644
index 6308c4225..000000000
--- a/changelogs/released/v1.2.0-RC1/245-pawanpraka1
+++ /dev/null
@@ -1 +0,0 @@
-move xfs and mount code out of zfs package
diff --git a/changelogs/released/v1.2.0-RC1/248-pawanpraka1 b/changelogs/released/v1.2.0-RC1/248-pawanpraka1
deleted file mode 100644
index e84b60309..000000000
--- a/changelogs/released/v1.2.0-RC1/248-pawanpraka1
+++ /dev/null
@@ -1 +0,0 @@
-removing quay from kustomization.yaml as we are using multiarch docker images
diff --git a/changelogs/released/v1.2.0-RC1/249-pawanpraka1 b/changelogs/released/v1.2.0-RC1/249-pawanpraka1
deleted file mode 100644
index 56747d45a..000000000
--- a/changelogs/released/v1.2.0-RC1/249-pawanpraka1
+++ /dev/null
@@ -1 +0,0 @@
-refactor scheduler for ZFS-LocalPV
diff --git a/changelogs/released/v1.2.0-RC1/250-shubham14bajpai b/changelogs/released/v1.2.0-RC1/250-shubham14bajpai
deleted file mode 100644
index 56dd02171..000000000
--- a/changelogs/released/v1.2.0-RC1/250-shubham14bajpai
+++ /dev/null
@@ -1 +0,0 @@
-add github action for chart test and release
diff --git a/changelogs/released/v1.2.0-RC1/255-pawanpraka1 b/changelogs/released/v1.2.0-RC1/255-pawanpraka1
deleted file mode 100644
index 9d87cc8dd..000000000
--- a/changelogs/released/v1.2.0-RC1/255-pawanpraka1
+++ /dev/null
@@ -1 +0,0 @@
-moving to ubuntu bionic(18.04 LTS) docker image
diff --git a/changelogs/released/v1.2.0-RC1/256-pawanpraka1 b/changelogs/released/v1.2.0-RC1/256-pawanpraka1
deleted file mode 100644
index cac3c4f60..000000000
--- a/changelogs/released/v1.2.0-RC1/256-pawanpraka1
+++ /dev/null
@@ -1 +0,0 @@
-fixing flaky sanity test case
diff --git a/changelogs/released/v1.2.1/260-pawanpraka1 b/changelogs/released/v1.2.1/260-pawanpraka1
deleted file mode 100644
index e089e9e32..000000000
--- a/changelogs/released/v1.2.1/260-pawanpraka1
+++ /dev/null
@@ -1 +0,0 @@
-fixing idempotency check for the mount path
diff --git a/changelogs/released/v1.3.0/262-pawanpraka1 b/changelogs/released/v1.3.0/262-pawanpraka1
deleted file mode 100644
index 72d5082d7..000000000
--- a/changelogs/released/v1.3.0/262-pawanpraka1
+++ /dev/null
@@ -1 +0,0 @@
-creating directory with 0755 permission
diff --git a/changelogs/released/v1.3.0/263-shubham14bajpai b/changelogs/released/v1.3.0/263-shubham14bajpai
deleted file mode 100644
index ad5017f42..000000000
--- a/changelogs/released/v1.3.0/263-shubham14bajpai
+++ /dev/null
@@ -1 +0,0 @@
-use common lib-csi imports
diff --git a/changelogs/released/v1.3.0/264-praveengt b/changelogs/released/v1.3.0/264-praveengt
deleted file mode 100644
index bb3693246..000000000
--- a/changelogs/released/v1.3.0/264-praveengt
+++ /dev/null
@@ -1 +0,0 @@
-Cross Build enviroment bug fixes
diff --git a/changelogs/released/v1.3.0/266-pawanpraka1 b/changelogs/released/v1.3.0/266-pawanpraka1
deleted file mode 100644
index 247afa063..000000000
--- a/changelogs/released/v1.3.0/266-pawanpraka1
+++ /dev/null
@@ -1 +0,0 @@
-adding capacity weighted scheduler
diff --git a/changelogs/released/v1.3.0/271-shubham14bajpai b/changelogs/released/v1.3.0/271-shubham14bajpai
deleted file mode 100644
index dd0cc8732..000000000
--- a/changelogs/released/v1.3.0/271-shubham14bajpai
+++ /dev/null
@@ -1 +0,0 @@
-bump k8s csi to latest stable container images
diff --git a/changelogs/released/v1.4.0-RC1/281-pawanpraka1 b/changelogs/released/v1.4.0-RC1/281-pawanpraka1
deleted file mode 100644
index 18b0c3cc3..000000000
--- a/changelogs/released/v1.4.0-RC1/281-pawanpraka1
+++ /dev/null
@@ -1 +0,0 @@
-adding resize support for raw block volumes
diff --git a/changelogs/released/v1.4.0-RC1/284-shubham14bajpai b/changelogs/released/v1.4.0-RC1/284-shubham14bajpai
deleted file mode 100644
index 40b0d1e5e..000000000
--- a/changelogs/released/v1.4.0-RC1/284-shubham14bajpai
+++ /dev/null
@@ -1 +0,0 @@
-update k8s sidecar images to gcr
diff --git a/changelogs/released/v1.5.0/292-pawanpraka1 b/changelogs/released/v1.5.0/292-pawanpraka1
deleted file mode 100644
index 46a256259..000000000
--- a/changelogs/released/v1.5.0/292-pawanpraka1
+++ /dev/null
@@ -1 +0,0 @@
-adding support to restore in an encrypted pool
diff --git a/changelogs/released/v1.5.0/293-shubham14bajpai b/changelogs/released/v1.5.0/293-shubham14bajpai
deleted file mode 100644
index 172e9624c..000000000
--- a/changelogs/released/v1.5.0/293-shubham14bajpai
+++ /dev/null
@@ -1 +0,0 @@
-move the bdd test cases to github action
diff --git a/changelogs/released/v1.6.0-RC1/270-pawanpraka1 b/changelogs/released/v1.6.0-RC1/270-pawanpraka1
deleted file mode 100644
index 6bbcd40e9..000000000
--- a/changelogs/released/v1.6.0-RC1/270-pawanpraka1
+++ /dev/null
@@ -1 +0,0 @@
-try volume creation on all the nodes that satisfy topology contraints
diff --git a/changelogs/released/v1.6.0-RC1/294-prateekpandey14 b/changelogs/released/v1.6.0-RC1/294-prateekpandey14
deleted file mode 100644
index b6e73bd9a..000000000
--- a/changelogs/released/v1.6.0-RC1/294-prateekpandey14
+++ /dev/null
@@ -1 +0,0 @@
-refact(deps): bump k8s and client-go deps to version v0.20.2
diff --git a/changelogs/released/v1.6.0-RC1/299-shubham14bajpai b/changelogs/released/v1.6.0-RC1/299-shubham14bajpai
deleted file mode 100644
index 045218273..000000000
--- a/changelogs/released/v1.6.0-RC1/299-shubham14bajpai
+++ /dev/null
@@ -1 +0,0 @@
-With k8s v1.22 the v1beta1 for various resources will no longer be supported. Updating the storage and apiexention version to v1 for better support.
diff --git a/changelogs/released/v1.6.0-RC1/303-pawanpraka1 b/changelogs/released/v1.6.0-RC1/303-pawanpraka1
deleted file mode 100644
index a593fc30f..000000000
--- a/changelogs/released/v1.6.0-RC1/303-pawanpraka1
+++ /dev/null
@@ -1 +0,0 @@
-remove finalizer that is owned by ZFS-LocalPV
diff --git a/changelogs/released/v1.7.0/304-pawanpraka1 b/changelogs/released/v1.7.0/304-pawanpraka1
deleted file mode 100644
index 299cd49e3..000000000
--- a/changelogs/released/v1.7.0/304-pawanpraka1
+++ /dev/null
@@ -1 +0,0 @@
-adding support to migrate the PV to other nodes
diff --git a/changelogs/released/v1.7.0/320-pawanpraka1 b/changelogs/released/v1.7.0/320-pawanpraka1
deleted file mode 100644
index a679176a2..000000000
--- a/changelogs/released/v1.7.0/320-pawanpraka1
+++ /dev/null
@@ -1 +0,0 @@
-support old topology key `openebs.io/nodename` for backward compatibility
diff --git a/changelogs/released/v2.0.0/393-zero-cap-nonroot-ds b/changelogs/released/v2.0.0/393-zero-cap-nonroot-ds
deleted file mode 100644
index 86c067475..000000000
--- a/changelogs/released/v2.0.0/393-zero-cap-nonroot-ds
+++ /dev/null
@@ -1,3 +0,0 @@
-Fixes GetCapacity in pkg/driver/controller.go to report the ZFS pool
-capacity even when using a child dataset at the storage class' poolname
-attribute.
diff --git a/changelogs/released/v2.2.0/440-lowjoel b/changelogs/released/v2.2.0/440-lowjoel
deleted file mode 100644
index dacd704ec..000000000
--- a/changelogs/released/v2.2.0/440-lowjoel
+++ /dev/null
@@ -1 +0,0 @@
-optimise pool listing for pools with many datasets
diff --git a/changelogs/released/v2.2.0/444-bump-go-and-dependency-versions b/changelogs/released/v2.2.0/444-bump-go-and-dependency-versions
deleted file mode 100644
index 4e2e240f4..000000000
--- a/changelogs/released/v2.2.0/444-bump-go-and-dependency-versions
+++ /dev/null
@@ -1 +0,0 @@
-bump golang, k8s and lib-csi versions
\ No newline at end of file
diff --git a/changelogs/released/v2.3.0/455-jnels124 b/changelogs/released/v2.3.0/455-jnels124
deleted file mode 100644
index 3714dce03..000000000
--- a/changelogs/released/v2.3.0/455-jnels124
+++ /dev/null
@@ -1 +0,0 @@
-add support for specify additional volumes and init containers to the CSI controller and node drivers
\ No newline at end of file
diff --git a/changelogs/released/v2.3.0/457-vharsh b/changelogs/released/v2.3.0/457-vharsh
deleted file mode 100644
index d332fce0c..000000000
--- a/changelogs/released/v2.3.0/457-vharsh
+++ /dev/null
@@ -1 +0,0 @@
-bump lib-csi, CSI sidecar versions
\ No newline at end of file
diff --git a/changelogs/released/v2.3.0/487-trunet b/changelogs/released/v2.3.0/487-trunet
deleted file mode 100644
index 249ec2760..000000000
--- a/changelogs/released/v2.3.0/487-trunet
+++ /dev/null
@@ -1 +0,0 @@
-add helm values option to override directory path for encryption keys
\ No newline at end of file
diff --git a/changelogs/released/v2.4.0/480-hrudaya21 b/changelogs/released/v2.4.0/480-hrudaya21
deleted file mode 100644
index 8c28e1e2c..000000000
--- a/changelogs/released/v2.4.0/480-hrudaya21
+++ /dev/null
@@ -1 +0,0 @@
-add restore size to return as part of CSI snapshot create response
\ No newline at end of file
diff --git a/changelogs/released/v2.4.0/485-hrudaya21 b/changelogs/released/v2.4.0/485-hrudaya21
deleted file mode 100644
index dcff9a94b..000000000
--- a/changelogs/released/v2.4.0/485-hrudaya21
+++ /dev/null
@@ -1 +0,0 @@
-add the used capacity to ZFS Node resource spec
\ No newline at end of file
diff --git a/changelogs/released/v2.4.0/490-Abhinandan-Purkait b/changelogs/released/v2.4.0/490-Abhinandan-Purkait
deleted file mode 100644
index bfca01901..000000000
--- a/changelogs/released/v2.4.0/490-Abhinandan-Purkait
+++ /dev/null
@@ -1 +0,0 @@
-update google analytics client from UA to GA4
\ No newline at end of file
diff --git a/changelogs/released/v2.5.0/451-nodeid-fix.md b/changelogs/released/v2.5.0/451-nodeid-fix.md
deleted file mode 100644
index 7ad4f2147..000000000
--- a/changelogs/released/v2.5.0/451-nodeid-fix.md
+++ /dev/null
@@ -1 +0,0 @@
-Fixes existing logic that attempts to retrieve a node using the name and instead retrieves the node using the nodeid label
\ No newline at end of file
diff --git a/changelogs/released/v2.5.0/492-trunet.md b/changelogs/released/v2.5.0/492-trunet.md
deleted file mode 100644
index e33d61543..000000000
--- a/changelogs/released/v2.5.0/492-trunet.md
+++ /dev/null
@@ -1 +0,0 @@
-fix(helm): Add extra args to zfsController containers and leader election inteligence
\ No newline at end of file
diff --git a/changelogs/released/v2.6.0/535-aep b/changelogs/released/v2.6.0/535-aep
deleted file mode 100644
index fb97817d8..000000000
--- a/changelogs/released/v2.6.0/535-aep
+++ /dev/null
@@ -1 +0,0 @@
-When zfs-localpv is broken due to an k8s api issue, it just says 'GetNodeID failed for node'. This change adds the actual api error.
\ No newline at end of file
diff --git a/changelogs/released/v2.6.0/547-niladrih b/changelogs/released/v2.6.0/547-niladrih
deleted file mode 100644
index 65c52d1b1..000000000
--- a/changelogs/released/v2.6.0/547-niladrih
+++ /dev/null
@@ -1 +0,0 @@
-Analytics changes for the heartbeat pinger.
\ No newline at end of file
diff --git a/changelogs/unreleased/541-snapshot-nodeid-fix.md b/changelogs/unreleased/541-snapshot-nodeid-fix.md
deleted file mode 100644
index b99b3ce3d..000000000
--- a/changelogs/unreleased/541-snapshot-nodeid-fix.md
+++ /dev/null
@@ -1 +0,0 @@
-fix issue when creating volume from snapshot or snapshot clone when node id differs from node name
\ No newline at end of file
diff --git a/docs/troubleshooting/crd-upgrade.md b/deprecated/crd-upgrade.md
similarity index 100%
rename from docs/troubleshooting/crd-upgrade.md
rename to deprecated/crd-upgrade.md
diff --git a/e2e-tests/Dockerfile b/deprecated/e2e-tests/Dockerfile
similarity index 100%
rename from e2e-tests/Dockerfile
rename to deprecated/e2e-tests/Dockerfile
diff --git a/e2e-tests/apps/busybox/deployers/busybox_deployment.yml b/deprecated/e2e-tests/apps/busybox/deployers/busybox_deployment.yml
similarity index 100%
rename from e2e-tests/apps/busybox/deployers/busybox_deployment.yml
rename to deprecated/e2e-tests/apps/busybox/deployers/busybox_deployment.yml
diff --git a/e2e-tests/apps/busybox/deployers/busybox_statefulset.yml b/deprecated/e2e-tests/apps/busybox/deployers/busybox_statefulset.yml
similarity index 100%
rename from e2e-tests/apps/busybox/deployers/busybox_statefulset.yml
rename to deprecated/e2e-tests/apps/busybox/deployers/busybox_statefulset.yml
diff --git a/e2e-tests/apps/busybox/deployers/run_e2e_test.yml b/deprecated/e2e-tests/apps/busybox/deployers/run_e2e_test.yml
similarity index 100%
rename from e2e-tests/apps/busybox/deployers/run_e2e_test.yml
rename to deprecated/e2e-tests/apps/busybox/deployers/run_e2e_test.yml
diff --git a/e2e-tests/apps/busybox/deployers/test.yml b/deprecated/e2e-tests/apps/busybox/deployers/test.yml
similarity index 100%
rename from e2e-tests/apps/busybox/deployers/test.yml
rename to deprecated/e2e-tests/apps/busybox/deployers/test.yml
diff --git a/e2e-tests/apps/busybox/deployers/test_vars.yml b/deprecated/e2e-tests/apps/busybox/deployers/test_vars.yml
similarity index 100%
rename from e2e-tests/apps/busybox/deployers/test_vars.yml
rename to deprecated/e2e-tests/apps/busybox/deployers/test_vars.yml
diff --git a/e2e-tests/apps/busybox/liveness/busybox_liveness.yml b/deprecated/e2e-tests/apps/busybox/liveness/busybox_liveness.yml
similarity index 100%
rename from e2e-tests/apps/busybox/liveness/busybox_liveness.yml
rename to deprecated/e2e-tests/apps/busybox/liveness/busybox_liveness.yml
diff --git a/e2e-tests/apps/busybox/liveness/run_e2e_test.yml b/deprecated/e2e-tests/apps/busybox/liveness/run_e2e_test.yml
similarity index 100%
rename from e2e-tests/apps/busybox/liveness/run_e2e_test.yml
rename to deprecated/e2e-tests/apps/busybox/liveness/run_e2e_test.yml
diff --git a/e2e-tests/apps/busybox/liveness/test.yml b/deprecated/e2e-tests/apps/busybox/liveness/test.yml
similarity index 100%
rename from e2e-tests/apps/busybox/liveness/test.yml
rename to deprecated/e2e-tests/apps/busybox/liveness/test.yml
diff --git a/e2e-tests/apps/busybox/liveness/test_vars.yml b/deprecated/e2e-tests/apps/busybox/liveness/test_vars.yml
similarity index 100%
rename from e2e-tests/apps/busybox/liveness/test_vars.yml
rename to deprecated/e2e-tests/apps/busybox/liveness/test_vars.yml
diff --git a/e2e-tests/apps/percona/deployers/percona.yml b/deprecated/e2e-tests/apps/percona/deployers/percona.yml
similarity index 100%
rename from e2e-tests/apps/percona/deployers/percona.yml
rename to deprecated/e2e-tests/apps/percona/deployers/percona.yml
diff --git a/e2e-tests/apps/percona/deployers/run_e2e_test.yml b/deprecated/e2e-tests/apps/percona/deployers/run_e2e_test.yml
similarity index 100%
rename from e2e-tests/apps/percona/deployers/run_e2e_test.yml
rename to deprecated/e2e-tests/apps/percona/deployers/run_e2e_test.yml
diff --git a/e2e-tests/apps/percona/deployers/test.yml b/deprecated/e2e-tests/apps/percona/deployers/test.yml
similarity index 100%
rename from e2e-tests/apps/percona/deployers/test.yml
rename to deprecated/e2e-tests/apps/percona/deployers/test.yml
diff --git a/e2e-tests/apps/percona/deployers/test_vars.yml b/deprecated/e2e-tests/apps/percona/deployers/test_vars.yml
similarity index 100%
rename from e2e-tests/apps/percona/deployers/test_vars.yml
rename to deprecated/e2e-tests/apps/percona/deployers/test_vars.yml
diff --git a/e2e-tests/apps/percona/workload/replace.yml b/deprecated/e2e-tests/apps/percona/workload/replace.yml
similarity index 100%
rename from e2e-tests/apps/percona/workload/replace.yml
rename to deprecated/e2e-tests/apps/percona/workload/replace.yml
diff --git a/e2e-tests/apps/percona/workload/run_e2e_test.yml b/deprecated/e2e-tests/apps/percona/workload/run_e2e_test.yml
similarity index 100%
rename from e2e-tests/apps/percona/workload/run_e2e_test.yml
rename to deprecated/e2e-tests/apps/percona/workload/run_e2e_test.yml
diff --git a/e2e-tests/apps/percona/workload/test.yml b/deprecated/e2e-tests/apps/percona/workload/test.yml
similarity index 100%
rename from e2e-tests/apps/percona/workload/test.yml
rename to deprecated/e2e-tests/apps/percona/workload/test.yml
diff --git a/e2e-tests/apps/percona/workload/test_vars.yml b/deprecated/e2e-tests/apps/percona/workload/test_vars.yml
similarity index 100%
rename from e2e-tests/apps/percona/workload/test_vars.yml
rename to deprecated/e2e-tests/apps/percona/workload/test_vars.yml
diff --git a/e2e-tests/apps/percona/workload/tpcc.conf b/deprecated/e2e-tests/apps/percona/workload/tpcc.conf
similarity index 100%
rename from e2e-tests/apps/percona/workload/tpcc.conf
rename to deprecated/e2e-tests/apps/percona/workload/tpcc.conf
diff --git a/e2e-tests/apps/percona/workload/tpcc_bench.yml b/deprecated/e2e-tests/apps/percona/workload/tpcc_bench.yml
similarity index 100%
rename from e2e-tests/apps/percona/workload/tpcc_bench.yml
rename to deprecated/e2e-tests/apps/percona/workload/tpcc_bench.yml
diff --git a/e2e-tests/chaoslib/pumba/pod_failure_by_sigkill.yaml b/deprecated/e2e-tests/chaoslib/pumba/pod_failure_by_sigkill.yaml
similarity index 100%
rename from e2e-tests/chaoslib/pumba/pod_failure_by_sigkill.yaml
rename to deprecated/e2e-tests/chaoslib/pumba/pod_failure_by_sigkill.yaml
diff --git a/e2e-tests/chaoslib/pumba/pumba.yml b/deprecated/e2e-tests/chaoslib/pumba/pumba.yml
similarity index 100%
rename from e2e-tests/chaoslib/pumba/pumba.yml
rename to deprecated/e2e-tests/chaoslib/pumba/pumba.yml
diff --git a/e2e-tests/chaoslib/service_failure/service_chaos.yml b/deprecated/e2e-tests/chaoslib/service_failure/service_chaos.yml
similarity index 100%
rename from e2e-tests/chaoslib/service_failure/service_chaos.yml
rename to deprecated/e2e-tests/chaoslib/service_failure/service_chaos.yml
diff --git a/e2e-tests/chaoslib/vmware_chaos/vm_power_operations.yml b/deprecated/e2e-tests/chaoslib/vmware_chaos/vm_power_operations.yml
similarity index 100%
rename from e2e-tests/chaoslib/vmware_chaos/vm_power_operations.yml
rename to deprecated/e2e-tests/chaoslib/vmware_chaos/vm_power_operations.yml
diff --git a/e2e-tests/experiments/chaos/app_pod_failure/README.md b/deprecated/e2e-tests/experiments/chaos/app_pod_failure/README.md
similarity index 100%
rename from e2e-tests/experiments/chaos/app_pod_failure/README.md
rename to deprecated/e2e-tests/experiments/chaos/app_pod_failure/README.md
diff --git a/e2e-tests/experiments/chaos/app_pod_failure/data_persistence.j2 b/deprecated/e2e-tests/experiments/chaos/app_pod_failure/data_persistence.j2
similarity index 100%
rename from e2e-tests/experiments/chaos/app_pod_failure/data_persistence.j2
rename to deprecated/e2e-tests/experiments/chaos/app_pod_failure/data_persistence.j2
diff --git a/e2e-tests/experiments/chaos/app_pod_failure/run_e2e_test.yml b/deprecated/e2e-tests/experiments/chaos/app_pod_failure/run_e2e_test.yml
similarity index 100%
rename from e2e-tests/experiments/chaos/app_pod_failure/run_e2e_test.yml
rename to deprecated/e2e-tests/experiments/chaos/app_pod_failure/run_e2e_test.yml
diff --git a/e2e-tests/experiments/chaos/app_pod_failure/test.yml b/deprecated/e2e-tests/experiments/chaos/app_pod_failure/test.yml
similarity index 100%
rename from e2e-tests/experiments/chaos/app_pod_failure/test.yml
rename to deprecated/e2e-tests/experiments/chaos/app_pod_failure/test.yml
diff --git a/e2e-tests/experiments/chaos/app_pod_failure/test_vars.yml b/deprecated/e2e-tests/experiments/chaos/app_pod_failure/test_vars.yml
similarity index 100%
rename from e2e-tests/experiments/chaos/app_pod_failure/test_vars.yml
rename to deprecated/e2e-tests/experiments/chaos/app_pod_failure/test_vars.yml
diff --git a/e2e-tests/experiments/functional/backup_and_restore/RestoreItemAction_configmap.j2 b/deprecated/e2e-tests/experiments/functional/backup_and_restore/RestoreItemAction_configmap.j2
similarity index 100%
rename from e2e-tests/experiments/functional/backup_and_restore/RestoreItemAction_configmap.j2
rename to deprecated/e2e-tests/experiments/functional/backup_and_restore/RestoreItemAction_configmap.j2
diff --git a/e2e-tests/experiments/functional/backup_and_restore/backup.yml b/deprecated/e2e-tests/experiments/functional/backup_and_restore/backup.yml
similarity index 100%
rename from e2e-tests/experiments/functional/backup_and_restore/backup.yml
rename to deprecated/e2e-tests/experiments/functional/backup_and_restore/backup.yml
diff --git a/e2e-tests/experiments/functional/backup_and_restore/credentials_minio b/deprecated/e2e-tests/experiments/functional/backup_and_restore/credentials_minio
similarity index 100%
rename from e2e-tests/experiments/functional/backup_and_restore/credentials_minio
rename to deprecated/e2e-tests/experiments/functional/backup_and_restore/credentials_minio
diff --git a/e2e-tests/experiments/functional/backup_and_restore/data_persistence.j2 b/deprecated/e2e-tests/experiments/functional/backup_and_restore/data_persistence.j2
similarity index 100%
rename from e2e-tests/experiments/functional/backup_and_restore/data_persistence.j2
rename to deprecated/e2e-tests/experiments/functional/backup_and_restore/data_persistence.j2
diff --git a/e2e-tests/experiments/functional/backup_and_restore/incremental_backup.yml b/deprecated/e2e-tests/experiments/functional/backup_and_restore/incremental_backup.yml
similarity index 100%
rename from e2e-tests/experiments/functional/backup_and_restore/incremental_backup.yml
rename to deprecated/e2e-tests/experiments/functional/backup_and_restore/incremental_backup.yml
diff --git a/e2e-tests/experiments/functional/backup_and_restore/incremental_backup_vsl.j2 b/deprecated/e2e-tests/experiments/functional/backup_and_restore/incremental_backup_vsl.j2
similarity index 100%
rename from e2e-tests/experiments/functional/backup_and_restore/incremental_backup_vsl.j2
rename to deprecated/e2e-tests/experiments/functional/backup_and_restore/incremental_backup_vsl.j2
diff --git a/e2e-tests/experiments/functional/backup_and_restore/incremental_restore.yml b/deprecated/e2e-tests/experiments/functional/backup_and_restore/incremental_restore.yml
similarity index 100%
rename from e2e-tests/experiments/functional/backup_and_restore/incremental_restore.yml
rename to deprecated/e2e-tests/experiments/functional/backup_and_restore/incremental_restore.yml
diff --git a/e2e-tests/experiments/functional/backup_and_restore/restore.yml b/deprecated/e2e-tests/experiments/functional/backup_and_restore/restore.yml
similarity index 100%
rename from e2e-tests/experiments/functional/backup_and_restore/restore.yml
rename to deprecated/e2e-tests/experiments/functional/backup_and_restore/restore.yml
diff --git a/e2e-tests/experiments/functional/backup_and_restore/run_e2e_test.yml b/deprecated/e2e-tests/experiments/functional/backup_and_restore/run_e2e_test.yml
similarity index 100%
rename from e2e-tests/experiments/functional/backup_and_restore/run_e2e_test.yml
rename to deprecated/e2e-tests/experiments/functional/backup_and_restore/run_e2e_test.yml
diff --git a/e2e-tests/experiments/functional/backup_and_restore/setup_dependency.yml b/deprecated/e2e-tests/experiments/functional/backup_and_restore/setup_dependency.yml
similarity index 100%
rename from e2e-tests/experiments/functional/backup_and_restore/setup_dependency.yml
rename to deprecated/e2e-tests/experiments/functional/backup_and_restore/setup_dependency.yml
diff --git a/e2e-tests/experiments/functional/backup_and_restore/test.yml b/deprecated/e2e-tests/experiments/functional/backup_and_restore/test.yml
similarity index 100%
rename from e2e-tests/experiments/functional/backup_and_restore/test.yml
rename to deprecated/e2e-tests/experiments/functional/backup_and_restore/test.yml
diff --git a/e2e-tests/experiments/functional/backup_and_restore/test_vars.yml b/deprecated/e2e-tests/experiments/functional/backup_and_restore/test_vars.yml
similarity index 100%
rename from e2e-tests/experiments/functional/backup_and_restore/test_vars.yml
rename to deprecated/e2e-tests/experiments/functional/backup_and_restore/test_vars.yml
diff --git a/e2e-tests/experiments/functional/backup_and_restore/volume_snapshot_location.j2 b/deprecated/e2e-tests/experiments/functional/backup_and_restore/volume_snapshot_location.j2
similarity index 100%
rename from e2e-tests/experiments/functional/backup_and_restore/volume_snapshot_location.j2
rename to deprecated/e2e-tests/experiments/functional/backup_and_restore/volume_snapshot_location.j2
diff --git a/e2e-tests/experiments/functional/csi-volume-resize/README.md b/deprecated/e2e-tests/experiments/functional/csi-volume-resize/README.md
similarity index 100%
rename from e2e-tests/experiments/functional/csi-volume-resize/README.md
rename to deprecated/e2e-tests/experiments/functional/csi-volume-resize/README.md
diff --git a/e2e-tests/experiments/functional/csi-volume-resize/run_e2e_test.yml b/deprecated/e2e-tests/experiments/functional/csi-volume-resize/run_e2e_test.yml
similarity index 100%
rename from e2e-tests/experiments/functional/csi-volume-resize/run_e2e_test.yml
rename to deprecated/e2e-tests/experiments/functional/csi-volume-resize/run_e2e_test.yml
diff --git a/e2e-tests/experiments/functional/csi-volume-resize/test.yml b/deprecated/e2e-tests/experiments/functional/csi-volume-resize/test.yml
similarity index 100%
rename from e2e-tests/experiments/functional/csi-volume-resize/test.yml
rename to deprecated/e2e-tests/experiments/functional/csi-volume-resize/test.yml
diff --git a/e2e-tests/experiments/functional/csi-volume-resize/test_vars.yml b/deprecated/e2e-tests/experiments/functional/csi-volume-resize/test_vars.yml
similarity index 100%
rename from e2e-tests/experiments/functional/csi-volume-resize/test_vars.yml
rename to deprecated/e2e-tests/experiments/functional/csi-volume-resize/test_vars.yml
diff --git a/e2e-tests/experiments/functional/zfs-controller-high-availability/README.md b/deprecated/e2e-tests/experiments/functional/zfs-controller-high-availability/README.md
similarity index 100%
rename from e2e-tests/experiments/functional/zfs-controller-high-availability/README.md
rename to deprecated/e2e-tests/experiments/functional/zfs-controller-high-availability/README.md
diff --git a/e2e-tests/experiments/functional/zfs-controller-high-availability/busybox_app.yml b/deprecated/e2e-tests/experiments/functional/zfs-controller-high-availability/busybox_app.yml
similarity index 100%
rename from e2e-tests/experiments/functional/zfs-controller-high-availability/busybox_app.yml
rename to deprecated/e2e-tests/experiments/functional/zfs-controller-high-availability/busybox_app.yml
diff --git a/e2e-tests/experiments/functional/zfs-controller-high-availability/run_e2e_test.yml b/deprecated/e2e-tests/experiments/functional/zfs-controller-high-availability/run_e2e_test.yml
similarity index 100%
rename from e2e-tests/experiments/functional/zfs-controller-high-availability/run_e2e_test.yml
rename to deprecated/e2e-tests/experiments/functional/zfs-controller-high-availability/run_e2e_test.yml
diff --git a/e2e-tests/experiments/functional/zfs-controller-high-availability/test.yml b/deprecated/e2e-tests/experiments/functional/zfs-controller-high-availability/test.yml
similarity index 100%
rename from e2e-tests/experiments/functional/zfs-controller-high-availability/test.yml
rename to deprecated/e2e-tests/experiments/functional/zfs-controller-high-availability/test.yml
diff --git a/e2e-tests/experiments/functional/zfs-controller-high-availability/test_vars.yml b/deprecated/e2e-tests/experiments/functional/zfs-controller-high-availability/test_vars.yml
similarity index 100%
rename from e2e-tests/experiments/functional/zfs-controller-high-availability/test_vars.yml
rename to deprecated/e2e-tests/experiments/functional/zfs-controller-high-availability/test_vars.yml
diff --git a/e2e-tests/experiments/functional/zfspv-clone-directly-from-pvc/README.md b/deprecated/e2e-tests/experiments/functional/zfspv-clone-directly-from-pvc/README.md
similarity index 100%
rename from e2e-tests/experiments/functional/zfspv-clone-directly-from-pvc/README.md
rename to deprecated/e2e-tests/experiments/functional/zfspv-clone-directly-from-pvc/README.md
diff --git a/e2e-tests/experiments/functional/zfspv-clone-directly-from-pvc/busybox.j2 b/deprecated/e2e-tests/experiments/functional/zfspv-clone-directly-from-pvc/busybox.j2
similarity index 100%
rename from e2e-tests/experiments/functional/zfspv-clone-directly-from-pvc/busybox.j2
rename to deprecated/e2e-tests/experiments/functional/zfspv-clone-directly-from-pvc/busybox.j2
diff --git a/e2e-tests/experiments/functional/zfspv-clone-directly-from-pvc/clone_pvc.j2 b/deprecated/e2e-tests/experiments/functional/zfspv-clone-directly-from-pvc/clone_pvc.j2
similarity index 100%
rename from e2e-tests/experiments/functional/zfspv-clone-directly-from-pvc/clone_pvc.j2
rename to deprecated/e2e-tests/experiments/functional/zfspv-clone-directly-from-pvc/clone_pvc.j2
diff --git a/e2e-tests/experiments/functional/zfspv-clone-directly-from-pvc/percona.j2 b/deprecated/e2e-tests/experiments/functional/zfspv-clone-directly-from-pvc/percona.j2
similarity index 100%
rename from e2e-tests/experiments/functional/zfspv-clone-directly-from-pvc/percona.j2
rename to deprecated/e2e-tests/experiments/functional/zfspv-clone-directly-from-pvc/percona.j2
diff --git a/e2e-tests/experiments/functional/zfspv-clone-directly-from-pvc/run_e2e_test.yml b/deprecated/e2e-tests/experiments/functional/zfspv-clone-directly-from-pvc/run_e2e_test.yml
similarity index 100%
rename from e2e-tests/experiments/functional/zfspv-clone-directly-from-pvc/run_e2e_test.yml
rename to deprecated/e2e-tests/experiments/functional/zfspv-clone-directly-from-pvc/run_e2e_test.yml
diff --git a/e2e-tests/experiments/functional/zfspv-clone-directly-from-pvc/test.yml b/deprecated/e2e-tests/experiments/functional/zfspv-clone-directly-from-pvc/test.yml
similarity index 100%
rename from e2e-tests/experiments/functional/zfspv-clone-directly-from-pvc/test.yml
rename to deprecated/e2e-tests/experiments/functional/zfspv-clone-directly-from-pvc/test.yml
diff --git a/e2e-tests/experiments/functional/zfspv-clone-directly-from-pvc/test_vars.yml b/deprecated/e2e-tests/experiments/functional/zfspv-clone-directly-from-pvc/test_vars.yml
similarity index 100%
rename from e2e-tests/experiments/functional/zfspv-clone-directly-from-pvc/test_vars.yml
rename to deprecated/e2e-tests/experiments/functional/zfspv-clone-directly-from-pvc/test_vars.yml
diff --git a/e2e-tests/experiments/functional/zfspv-clone/README.md b/deprecated/e2e-tests/experiments/functional/zfspv-clone/README.md
similarity index 100%
rename from e2e-tests/experiments/functional/zfspv-clone/README.md
rename to deprecated/e2e-tests/experiments/functional/zfspv-clone/README.md
diff --git a/e2e-tests/experiments/functional/zfspv-clone/busybox.j2 b/deprecated/e2e-tests/experiments/functional/zfspv-clone/busybox.j2
similarity index 100%
rename from e2e-tests/experiments/functional/zfspv-clone/busybox.j2
rename to deprecated/e2e-tests/experiments/functional/zfspv-clone/busybox.j2
diff --git a/e2e-tests/experiments/functional/zfspv-clone/clone_pvc.j2 b/deprecated/e2e-tests/experiments/functional/zfspv-clone/clone_pvc.j2
similarity index 100%
rename from e2e-tests/experiments/functional/zfspv-clone/clone_pvc.j2
rename to deprecated/e2e-tests/experiments/functional/zfspv-clone/clone_pvc.j2
diff --git a/e2e-tests/experiments/functional/zfspv-clone/percona.j2 b/deprecated/e2e-tests/experiments/functional/zfspv-clone/percona.j2
similarity index 100%
rename from e2e-tests/experiments/functional/zfspv-clone/percona.j2
rename to deprecated/e2e-tests/experiments/functional/zfspv-clone/percona.j2
diff --git a/e2e-tests/experiments/functional/zfspv-clone/run_e2e_test.yml b/deprecated/e2e-tests/experiments/functional/zfspv-clone/run_e2e_test.yml
similarity index 100%
rename from e2e-tests/experiments/functional/zfspv-clone/run_e2e_test.yml
rename to deprecated/e2e-tests/experiments/functional/zfspv-clone/run_e2e_test.yml
diff --git a/e2e-tests/experiments/functional/zfspv-clone/test.yml b/deprecated/e2e-tests/experiments/functional/zfspv-clone/test.yml
similarity index 100%
rename from e2e-tests/experiments/functional/zfspv-clone/test.yml
rename to deprecated/e2e-tests/experiments/functional/zfspv-clone/test.yml
diff --git a/e2e-tests/experiments/functional/zfspv-clone/test_vars.yml b/deprecated/e2e-tests/experiments/functional/zfspv-clone/test_vars.yml
similarity index 100%
rename from e2e-tests/experiments/functional/zfspv-clone/test_vars.yml
rename to deprecated/e2e-tests/experiments/functional/zfspv-clone/test_vars.yml
diff --git a/e2e-tests/experiments/functional/zfspv-custom-topology/README.md b/deprecated/e2e-tests/experiments/functional/zfspv-custom-topology/README.md
similarity index 100%
rename from e2e-tests/experiments/functional/zfspv-custom-topology/README.md
rename to deprecated/e2e-tests/experiments/functional/zfspv-custom-topology/README.md
diff --git a/e2e-tests/experiments/functional/zfspv-custom-topology/app_gen_immediate.sh b/deprecated/e2e-tests/experiments/functional/zfspv-custom-topology/app_gen_immediate.sh
similarity index 100%
rename from e2e-tests/experiments/functional/zfspv-custom-topology/app_gen_immediate.sh
rename to deprecated/e2e-tests/experiments/functional/zfspv-custom-topology/app_gen_immediate.sh
diff --git a/e2e-tests/experiments/functional/zfspv-custom-topology/app_gen_wfc.sh b/deprecated/e2e-tests/experiments/functional/zfspv-custom-topology/app_gen_wfc.sh
similarity index 100%
rename from e2e-tests/experiments/functional/zfspv-custom-topology/app_gen_wfc.sh
rename to deprecated/e2e-tests/experiments/functional/zfspv-custom-topology/app_gen_wfc.sh
diff --git a/e2e-tests/experiments/functional/zfspv-custom-topology/busybox.yml b/deprecated/e2e-tests/experiments/functional/zfspv-custom-topology/busybox.yml
similarity index 100%
rename from e2e-tests/experiments/functional/zfspv-custom-topology/busybox.yml
rename to deprecated/e2e-tests/experiments/functional/zfspv-custom-topology/busybox.yml
diff --git a/e2e-tests/experiments/functional/zfspv-custom-topology/run_e2e_test.yml b/deprecated/e2e-tests/experiments/functional/zfspv-custom-topology/run_e2e_test.yml
similarity index 100%
rename from e2e-tests/experiments/functional/zfspv-custom-topology/run_e2e_test.yml
rename to deprecated/e2e-tests/experiments/functional/zfspv-custom-topology/run_e2e_test.yml
diff --git a/e2e-tests/experiments/functional/zfspv-custom-topology/storage_class.j2 b/deprecated/e2e-tests/experiments/functional/zfspv-custom-topology/storage_class.j2
similarity index 100%
rename from e2e-tests/experiments/functional/zfspv-custom-topology/storage_class.j2
rename to deprecated/e2e-tests/experiments/functional/zfspv-custom-topology/storage_class.j2
diff --git a/e2e-tests/experiments/functional/zfspv-custom-topology/test.yml b/deprecated/e2e-tests/experiments/functional/zfspv-custom-topology/test.yml
similarity index 100%
rename from e2e-tests/experiments/functional/zfspv-custom-topology/test.yml
rename to deprecated/e2e-tests/experiments/functional/zfspv-custom-topology/test.yml
diff --git a/e2e-tests/experiments/functional/zfspv-custom-topology/test_vars.yml b/deprecated/e2e-tests/experiments/functional/zfspv-custom-topology/test_vars.yml
similarity index 100%
rename from e2e-tests/experiments/functional/zfspv-custom-topology/test_vars.yml
rename to deprecated/e2e-tests/experiments/functional/zfspv-custom-topology/test_vars.yml
diff --git a/e2e-tests/experiments/functional/zfspv-raw-block-volume/README.md b/deprecated/e2e-tests/experiments/functional/zfspv-raw-block-volume/README.md
similarity index 100%
rename from e2e-tests/experiments/functional/zfspv-raw-block-volume/README.md
rename to deprecated/e2e-tests/experiments/functional/zfspv-raw-block-volume/README.md
diff --git a/e2e-tests/experiments/functional/zfspv-raw-block-volume/busybox.j2 b/deprecated/e2e-tests/experiments/functional/zfspv-raw-block-volume/busybox.j2
similarity index 100%
rename from e2e-tests/experiments/functional/zfspv-raw-block-volume/busybox.j2
rename to deprecated/e2e-tests/experiments/functional/zfspv-raw-block-volume/busybox.j2
diff --git a/e2e-tests/experiments/functional/zfspv-raw-block-volume/run_e2e_test.yml b/deprecated/e2e-tests/experiments/functional/zfspv-raw-block-volume/run_e2e_test.yml
similarity index 100%
rename from e2e-tests/experiments/functional/zfspv-raw-block-volume/run_e2e_test.yml
rename to deprecated/e2e-tests/experiments/functional/zfspv-raw-block-volume/run_e2e_test.yml
diff --git a/e2e-tests/experiments/functional/zfspv-raw-block-volume/test.yml b/deprecated/e2e-tests/experiments/functional/zfspv-raw-block-volume/test.yml
similarity index 100%
rename from e2e-tests/experiments/functional/zfspv-raw-block-volume/test.yml
rename to deprecated/e2e-tests/experiments/functional/zfspv-raw-block-volume/test.yml
diff --git a/e2e-tests/experiments/functional/zfspv-raw-block-volume/test_vars.yml b/deprecated/e2e-tests/experiments/functional/zfspv-raw-block-volume/test_vars.yml
similarity index 100%
rename from e2e-tests/experiments/functional/zfspv-raw-block-volume/test_vars.yml
rename to deprecated/e2e-tests/experiments/functional/zfspv-raw-block-volume/test_vars.yml
diff --git a/e2e-tests/experiments/functional/zfspv-shared-mount/README.md b/deprecated/e2e-tests/experiments/functional/zfspv-shared-mount/README.md
similarity index 100%
rename from e2e-tests/experiments/functional/zfspv-shared-mount/README.md
rename to deprecated/e2e-tests/experiments/functional/zfspv-shared-mount/README.md
diff --git a/e2e-tests/experiments/functional/zfspv-shared-mount/busybox_share.j2 b/deprecated/e2e-tests/experiments/functional/zfspv-shared-mount/busybox_share.j2
similarity index 100%
rename from e2e-tests/experiments/functional/zfspv-shared-mount/busybox_share.j2
rename to deprecated/e2e-tests/experiments/functional/zfspv-shared-mount/busybox_share.j2
diff --git a/e2e-tests/experiments/functional/zfspv-shared-mount/run_e2e_test.yml b/deprecated/e2e-tests/experiments/functional/zfspv-shared-mount/run_e2e_test.yml
similarity index 100%
rename from e2e-tests/experiments/functional/zfspv-shared-mount/run_e2e_test.yml
rename to deprecated/e2e-tests/experiments/functional/zfspv-shared-mount/run_e2e_test.yml
diff --git a/e2e-tests/experiments/functional/zfspv-shared-mount/test.yml b/deprecated/e2e-tests/experiments/functional/zfspv-shared-mount/test.yml
similarity index 100%
rename from e2e-tests/experiments/functional/zfspv-shared-mount/test.yml
rename to deprecated/e2e-tests/experiments/functional/zfspv-shared-mount/test.yml
diff --git a/e2e-tests/experiments/functional/zfspv-shared-mount/test_vars.yml b/deprecated/e2e-tests/experiments/functional/zfspv-shared-mount/test_vars.yml
similarity index 100%
rename from e2e-tests/experiments/functional/zfspv-shared-mount/test_vars.yml
rename to deprecated/e2e-tests/experiments/functional/zfspv-shared-mount/test_vars.yml
diff --git a/e2e-tests/experiments/functional/zfspv-snapshot/README.md b/deprecated/e2e-tests/experiments/functional/zfspv-snapshot/README.md
similarity index 100%
rename from e2e-tests/experiments/functional/zfspv-snapshot/README.md
rename to deprecated/e2e-tests/experiments/functional/zfspv-snapshot/README.md
diff --git a/e2e-tests/experiments/functional/zfspv-snapshot/run_e2e_test.yml b/deprecated/e2e-tests/experiments/functional/zfspv-snapshot/run_e2e_test.yml
similarity index 100%
rename from e2e-tests/experiments/functional/zfspv-snapshot/run_e2e_test.yml
rename to deprecated/e2e-tests/experiments/functional/zfspv-snapshot/run_e2e_test.yml
diff --git a/e2e-tests/experiments/functional/zfspv-snapshot/test.yml b/deprecated/e2e-tests/experiments/functional/zfspv-snapshot/test.yml
similarity index 100%
rename from e2e-tests/experiments/functional/zfspv-snapshot/test.yml
rename to deprecated/e2e-tests/experiments/functional/zfspv-snapshot/test.yml
diff --git a/e2e-tests/experiments/functional/zfspv-snapshot/test_vars.yml b/deprecated/e2e-tests/experiments/functional/zfspv-snapshot/test_vars.yml
similarity index 100%
rename from e2e-tests/experiments/functional/zfspv-snapshot/test_vars.yml
rename to deprecated/e2e-tests/experiments/functional/zfspv-snapshot/test_vars.yml
diff --git a/e2e-tests/experiments/functional/zfspv-snapshot/volume_snapshot.j2 b/deprecated/e2e-tests/experiments/functional/zfspv-snapshot/volume_snapshot.j2
similarity index 100%
rename from e2e-tests/experiments/functional/zfspv-snapshot/volume_snapshot.j2
rename to deprecated/e2e-tests/experiments/functional/zfspv-snapshot/volume_snapshot.j2
diff --git a/e2e-tests/experiments/functional/zv-properties-verify/README.md b/deprecated/e2e-tests/experiments/functional/zv-properties-verify/README.md
similarity index 100%
rename from e2e-tests/experiments/functional/zv-properties-verify/README.md
rename to deprecated/e2e-tests/experiments/functional/zv-properties-verify/README.md
diff --git a/e2e-tests/experiments/functional/zv-properties-verify/run_e2e_test.yml b/deprecated/e2e-tests/experiments/functional/zv-properties-verify/run_e2e_test.yml
similarity index 100%
rename from e2e-tests/experiments/functional/zv-properties-verify/run_e2e_test.yml
rename to deprecated/e2e-tests/experiments/functional/zv-properties-verify/run_e2e_test.yml
diff --git a/e2e-tests/experiments/functional/zv-properties-verify/test.yml b/deprecated/e2e-tests/experiments/functional/zv-properties-verify/test.yml
similarity index 100%
rename from e2e-tests/experiments/functional/zv-properties-verify/test.yml
rename to deprecated/e2e-tests/experiments/functional/zv-properties-verify/test.yml
diff --git a/e2e-tests/experiments/functional/zv-properties-verify/test_vars.yml b/deprecated/e2e-tests/experiments/functional/zv-properties-verify/test_vars.yml
similarity index 100%
rename from e2e-tests/experiments/functional/zv-properties-verify/test_vars.yml
rename to deprecated/e2e-tests/experiments/functional/zv-properties-verify/test_vars.yml
diff --git a/e2e-tests/experiments/functional/zv-property-runtime-modify/README.md b/deprecated/e2e-tests/experiments/functional/zv-property-runtime-modify/README.md
similarity index 100%
rename from e2e-tests/experiments/functional/zv-property-runtime-modify/README.md
rename to deprecated/e2e-tests/experiments/functional/zv-property-runtime-modify/README.md
diff --git a/e2e-tests/experiments/functional/zv-property-runtime-modify/run_e2e_test.yml b/deprecated/e2e-tests/experiments/functional/zv-property-runtime-modify/run_e2e_test.yml
similarity index 100%
rename from e2e-tests/experiments/functional/zv-property-runtime-modify/run_e2e_test.yml
rename to deprecated/e2e-tests/experiments/functional/zv-property-runtime-modify/run_e2e_test.yml
diff --git a/e2e-tests/experiments/functional/zv-property-runtime-modify/test.yml b/deprecated/e2e-tests/experiments/functional/zv-property-runtime-modify/test.yml
similarity index 100%
rename from e2e-tests/experiments/functional/zv-property-runtime-modify/test.yml
rename to deprecated/e2e-tests/experiments/functional/zv-property-runtime-modify/test.yml
diff --git a/e2e-tests/experiments/functional/zv-property-runtime-modify/test_vars.yml b/deprecated/e2e-tests/experiments/functional/zv-property-runtime-modify/test_vars.yml
similarity index 100%
rename from e2e-tests/experiments/functional/zv-property-runtime-modify/test_vars.yml
rename to deprecated/e2e-tests/experiments/functional/zv-property-runtime-modify/test_vars.yml
diff --git a/e2e-tests/experiments/functional/zv-property-runtime-modify/zv_property_ds.j2 b/deprecated/e2e-tests/experiments/functional/zv-property-runtime-modify/zv_property_ds.j2
similarity index 100%
rename from e2e-tests/experiments/functional/zv-property-runtime-modify/zv_property_ds.j2
rename to deprecated/e2e-tests/experiments/functional/zv-property-runtime-modify/zv_property_ds.j2
diff --git a/e2e-tests/experiments/infra-chaos/node_failure/README.md b/deprecated/e2e-tests/experiments/infra-chaos/node_failure/README.md
similarity index 100%
rename from e2e-tests/experiments/infra-chaos/node_failure/README.md
rename to deprecated/e2e-tests/experiments/infra-chaos/node_failure/README.md
diff --git a/e2e-tests/experiments/infra-chaos/node_failure/data_persistence.j2 b/deprecated/e2e-tests/experiments/infra-chaos/node_failure/data_persistence.j2
similarity index 100%
rename from e2e-tests/experiments/infra-chaos/node_failure/data_persistence.j2
rename to deprecated/e2e-tests/experiments/infra-chaos/node_failure/data_persistence.j2
diff --git a/e2e-tests/experiments/infra-chaos/node_failure/run_e2e_test.yml b/deprecated/e2e-tests/experiments/infra-chaos/node_failure/run_e2e_test.yml
similarity index 100%
rename from e2e-tests/experiments/infra-chaos/node_failure/run_e2e_test.yml
rename to deprecated/e2e-tests/experiments/infra-chaos/node_failure/run_e2e_test.yml
diff --git a/e2e-tests/experiments/infra-chaos/node_failure/test.yml b/deprecated/e2e-tests/experiments/infra-chaos/node_failure/test.yml
similarity index 100%
rename from e2e-tests/experiments/infra-chaos/node_failure/test.yml
rename to deprecated/e2e-tests/experiments/infra-chaos/node_failure/test.yml
diff --git a/e2e-tests/experiments/infra-chaos/node_failure/test_vars.yml b/deprecated/e2e-tests/experiments/infra-chaos/node_failure/test_vars.yml
similarity index 100%
rename from e2e-tests/experiments/infra-chaos/node_failure/test_vars.yml
rename to deprecated/e2e-tests/experiments/infra-chaos/node_failure/test_vars.yml
diff --git a/e2e-tests/experiments/infra-chaos/service_failure/README.md b/deprecated/e2e-tests/experiments/infra-chaos/service_failure/README.md
similarity index 100%
rename from e2e-tests/experiments/infra-chaos/service_failure/README.md
rename to deprecated/e2e-tests/experiments/infra-chaos/service_failure/README.md
diff --git a/e2e-tests/experiments/infra-chaos/service_failure/data_persistence.j2 b/deprecated/e2e-tests/experiments/infra-chaos/service_failure/data_persistence.j2
similarity index 100%
rename from e2e-tests/experiments/infra-chaos/service_failure/data_persistence.j2
rename to deprecated/e2e-tests/experiments/infra-chaos/service_failure/data_persistence.j2
diff --git a/e2e-tests/experiments/infra-chaos/service_failure/run_e2e_test.yml b/deprecated/e2e-tests/experiments/infra-chaos/service_failure/run_e2e_test.yml
similarity index 100%
rename from e2e-tests/experiments/infra-chaos/service_failure/run_e2e_test.yml
rename to deprecated/e2e-tests/experiments/infra-chaos/service_failure/run_e2e_test.yml
diff --git a/e2e-tests/experiments/infra-chaos/service_failure/test.yml b/deprecated/e2e-tests/experiments/infra-chaos/service_failure/test.yml
similarity index 100%
rename from e2e-tests/experiments/infra-chaos/service_failure/test.yml
rename to deprecated/e2e-tests/experiments/infra-chaos/service_failure/test.yml
diff --git a/e2e-tests/experiments/infra-chaos/service_failure/test_vars.yml b/deprecated/e2e-tests/experiments/infra-chaos/service_failure/test_vars.yml
similarity index 100%
rename from e2e-tests/experiments/infra-chaos/service_failure/test_vars.yml
rename to deprecated/e2e-tests/experiments/infra-chaos/service_failure/test_vars.yml
diff --git a/e2e-tests/experiments/upgrade-zfs-localpv/README.md b/deprecated/e2e-tests/experiments/upgrade-zfs-localpv/README.md
similarity index 100%
rename from e2e-tests/experiments/upgrade-zfs-localpv/README.md
rename to deprecated/e2e-tests/experiments/upgrade-zfs-localpv/README.md
diff --git a/e2e-tests/experiments/upgrade-zfs-localpv/run_e2e_test.yml b/deprecated/e2e-tests/experiments/upgrade-zfs-localpv/run_e2e_test.yml
similarity index 100%
rename from e2e-tests/experiments/upgrade-zfs-localpv/run_e2e_test.yml
rename to deprecated/e2e-tests/experiments/upgrade-zfs-localpv/run_e2e_test.yml
diff --git a/e2e-tests/experiments/upgrade-zfs-localpv/test.yml b/deprecated/e2e-tests/experiments/upgrade-zfs-localpv/test.yml
similarity index 100%
rename from e2e-tests/experiments/upgrade-zfs-localpv/test.yml
rename to deprecated/e2e-tests/experiments/upgrade-zfs-localpv/test.yml
diff --git a/e2e-tests/experiments/upgrade-zfs-localpv/test_vars.yml b/deprecated/e2e-tests/experiments/upgrade-zfs-localpv/test_vars.yml
similarity index 100%
rename from e2e-tests/experiments/upgrade-zfs-localpv/test_vars.yml
rename to deprecated/e2e-tests/experiments/upgrade-zfs-localpv/test_vars.yml
diff --git a/e2e-tests/experiments/zfs-localpv-provisioner/Dockerfile b/deprecated/e2e-tests/experiments/zfs-localpv-provisioner/Dockerfile
similarity index 100%
rename from e2e-tests/experiments/zfs-localpv-provisioner/Dockerfile
rename to deprecated/e2e-tests/experiments/zfs-localpv-provisioner/Dockerfile
diff --git a/e2e-tests/experiments/zfs-localpv-provisioner/README.md b/deprecated/e2e-tests/experiments/zfs-localpv-provisioner/README.md
similarity index 100%
rename from e2e-tests/experiments/zfs-localpv-provisioner/README.md
rename to deprecated/e2e-tests/experiments/zfs-localpv-provisioner/README.md
diff --git a/e2e-tests/experiments/zfs-localpv-provisioner/openebs-zfspv-sc.j2 b/deprecated/e2e-tests/experiments/zfs-localpv-provisioner/openebs-zfspv-sc.j2
similarity index 100%
rename from e2e-tests/experiments/zfs-localpv-provisioner/openebs-zfspv-sc.j2
rename to deprecated/e2e-tests/experiments/zfs-localpv-provisioner/openebs-zfspv-sc.j2
diff --git a/e2e-tests/experiments/zfs-localpv-provisioner/run_e2e_test.yml b/deprecated/e2e-tests/experiments/zfs-localpv-provisioner/run_e2e_test.yml
similarity index 100%
rename from e2e-tests/experiments/zfs-localpv-provisioner/run_e2e_test.yml
rename to deprecated/e2e-tests/experiments/zfs-localpv-provisioner/run_e2e_test.yml
diff --git a/e2e-tests/experiments/zfs-localpv-provisioner/snapshot-class.j2 b/deprecated/e2e-tests/experiments/zfs-localpv-provisioner/snapshot-class.j2
similarity index 100%
rename from e2e-tests/experiments/zfs-localpv-provisioner/snapshot-class.j2
rename to deprecated/e2e-tests/experiments/zfs-localpv-provisioner/snapshot-class.j2
diff --git a/e2e-tests/experiments/zfs-localpv-provisioner/test.yml b/deprecated/e2e-tests/experiments/zfs-localpv-provisioner/test.yml
similarity index 100%
rename from e2e-tests/experiments/zfs-localpv-provisioner/test.yml
rename to deprecated/e2e-tests/experiments/zfs-localpv-provisioner/test.yml
diff --git a/e2e-tests/experiments/zfs-localpv-provisioner/test_vars.yml b/deprecated/e2e-tests/experiments/zfs-localpv-provisioner/test_vars.yml
similarity index 100%
rename from e2e-tests/experiments/zfs-localpv-provisioner/test_vars.yml
rename to deprecated/e2e-tests/experiments/zfs-localpv-provisioner/test_vars.yml
diff --git a/e2e-tests/experiments/zfs-localpv-provisioner/zfs_utils_ds.yml b/deprecated/e2e-tests/experiments/zfs-localpv-provisioner/zfs_utils_ds.yml
similarity index 100%
rename from e2e-tests/experiments/zfs-localpv-provisioner/zfs_utils_ds.yml
rename to deprecated/e2e-tests/experiments/zfs-localpv-provisioner/zfs_utils_ds.yml
diff --git a/e2e-tests/experiments/zfs-localpv-provisioner/zpool_creation.yml b/deprecated/e2e-tests/experiments/zfs-localpv-provisioner/zpool_creation.yml
similarity index 100%
rename from e2e-tests/experiments/zfs-localpv-provisioner/zpool_creation.yml
rename to deprecated/e2e-tests/experiments/zfs-localpv-provisioner/zpool_creation.yml
diff --git a/e2e-tests/hack/crds.yaml b/deprecated/e2e-tests/hack/crds.yaml
similarity index 100%
rename from e2e-tests/hack/crds.yaml
rename to deprecated/e2e-tests/hack/crds.yaml
diff --git a/e2e-tests/hack/create_testname.yml b/deprecated/e2e-tests/hack/create_testname.yml
similarity index 100%
rename from e2e-tests/hack/create_testname.yml
rename to deprecated/e2e-tests/hack/create_testname.yml
diff --git a/e2e-tests/hack/e2e-result.j2 b/deprecated/e2e-tests/hack/e2e-result.j2
similarity index 100%
rename from e2e-tests/hack/e2e-result.j2
rename to deprecated/e2e-tests/hack/e2e-result.j2
diff --git a/e2e-tests/hack/rbac.yaml b/deprecated/e2e-tests/hack/rbac.yaml
similarity index 100%
rename from e2e-tests/hack/rbac.yaml
rename to deprecated/e2e-tests/hack/rbac.yaml
diff --git a/e2e-tests/hack/update_e2e_result_resource.yml b/deprecated/e2e-tests/hack/update_e2e_result_resource.yml
similarity index 100%
rename from e2e-tests/hack/update_e2e_result_resource.yml
rename to deprecated/e2e-tests/hack/update_e2e_result_resource.yml
diff --git a/e2e-tests/utils/applications/busybox/busybox_data_persistence.yml b/deprecated/e2e-tests/utils/applications/busybox/busybox_data_persistence.yml
similarity index 100%
rename from e2e-tests/utils/applications/busybox/busybox_data_persistence.yml
rename to deprecated/e2e-tests/utils/applications/busybox/busybox_data_persistence.yml
diff --git a/e2e-tests/utils/applications/mysql/check_db_connection.yml b/deprecated/e2e-tests/utils/applications/mysql/check_db_connection.yml
similarity index 100%
rename from e2e-tests/utils/applications/mysql/check_db_connection.yml
rename to deprecated/e2e-tests/utils/applications/mysql/check_db_connection.yml
diff --git a/e2e-tests/utils/applications/mysql/mysql_data_persistence.yml b/deprecated/e2e-tests/utils/applications/mysql/mysql_data_persistence.yml
similarity index 100%
rename from e2e-tests/utils/applications/mysql/mysql_data_persistence.yml
rename to deprecated/e2e-tests/utils/applications/mysql/mysql_data_persistence.yml
diff --git a/e2e-tests/utils/k8s/create_ns.yml b/deprecated/e2e-tests/utils/k8s/create_ns.yml
similarity index 100%
rename from e2e-tests/utils/k8s/create_ns.yml
rename to deprecated/e2e-tests/utils/k8s/create_ns.yml
diff --git a/e2e-tests/utils/k8s/deploy_single_app.yml b/deprecated/e2e-tests/utils/k8s/deploy_single_app.yml
similarity index 100%
rename from e2e-tests/utils/k8s/deploy_single_app.yml
rename to deprecated/e2e-tests/utils/k8s/deploy_single_app.yml
diff --git a/e2e-tests/utils/k8s/deprovision_deployment.yml b/deprecated/e2e-tests/utils/k8s/deprovision_deployment.yml
similarity index 100%
rename from e2e-tests/utils/k8s/deprovision_deployment.yml
rename to deprecated/e2e-tests/utils/k8s/deprovision_deployment.yml
diff --git a/e2e-tests/utils/k8s/deprovision_statefulset.yml b/deprecated/e2e-tests/utils/k8s/deprovision_statefulset.yml
similarity index 100%
rename from e2e-tests/utils/k8s/deprovision_statefulset.yml
rename to deprecated/e2e-tests/utils/k8s/deprovision_statefulset.yml
diff --git a/e2e-tests/utils/k8s/fetch_app_pod.yml b/deprecated/e2e-tests/utils/k8s/fetch_app_pod.yml
similarity index 100%
rename from e2e-tests/utils/k8s/fetch_app_pod.yml
rename to deprecated/e2e-tests/utils/k8s/fetch_app_pod.yml
diff --git a/e2e-tests/utils/k8s/pre_create_app_deploy.yml b/deprecated/e2e-tests/utils/k8s/pre_create_app_deploy.yml
similarity index 100%
rename from e2e-tests/utils/k8s/pre_create_app_deploy.yml
rename to deprecated/e2e-tests/utils/k8s/pre_create_app_deploy.yml
diff --git a/e2e-tests/utils/k8s/status_app_pod.yml b/deprecated/e2e-tests/utils/k8s/status_app_pod.yml
similarity index 100%
rename from e2e-tests/utils/k8s/status_app_pod.yml
rename to deprecated/e2e-tests/utils/k8s/status_app_pod.yml
diff --git a/e2e-tests/utils/k8s/status_testns.yml b/deprecated/e2e-tests/utils/k8s/status_testns.yml
similarity index 100%
rename from e2e-tests/utils/k8s/status_testns.yml
rename to deprecated/e2e-tests/utils/k8s/status_testns.yml
diff --git a/legacy-upgrade/README.md b/deprecated/legacy-upgrade/README.md
similarity index 100%
rename from legacy-upgrade/README.md
rename to deprecated/legacy-upgrade/README.md
diff --git a/legacy-upgrade/cleanup.sh b/deprecated/legacy-upgrade/cleanup.sh
similarity index 100%
rename from legacy-upgrade/cleanup.sh
rename to deprecated/legacy-upgrade/cleanup.sh
diff --git a/legacy-upgrade/crd.yaml b/deprecated/legacy-upgrade/crd.yaml
similarity index 100%
rename from legacy-upgrade/crd.yaml
rename to deprecated/legacy-upgrade/crd.yaml
diff --git a/legacy-upgrade/upgrade.sh b/deprecated/legacy-upgrade/upgrade.sh
similarity index 100%
rename from legacy-upgrade/upgrade.sh
rename to deprecated/legacy-upgrade/upgrade.sh
diff --git a/docs/multiple-zpool.md b/design/multiple-zpool.md
similarity index 100%
rename from docs/multiple-zpool.md
rename to design/multiple-zpool.md
diff --git a/docs/developer-setup-examples.md b/docs/developer-setup-examples.md
deleted file mode 100644
index f0db3f557..000000000
--- a/docs/developer-setup-examples.md
+++ /dev/null
@@ -1,107 +0,0 @@
-# kubernetes and os setup examples
-
-This documents contains several examples to show working setups for a development environment
-
-## tested on ubuntu 18.04.4 with minikube 1.9.2 and zfs 0.7 and 0.8
-
-### Prerequisites
-* You have a zfs pool created on localhost, with pool name `zfspv-pool`; that is you have installed
-zfs-dkms (or zfs-fuse), zfs-zed and zfsutils-linux .deb packages. And then created the pool with `zpool create` command
-* You have followed the prerequisites stated in [Development Workflow](developer-setup.md)
-
-```
-wget https://github.com/kubernetes/minikube/releases/download/v1.9.2/minikube_1.9.2-0_amd64.deb
-sudo dpkg -i minikube_1.9.2-0_amd64.deb
-sudo minikube start --driver=none
-sudo chown -R $USER $HOME/.kube $HOME/.minikube
-
-kubectl apply -f https://raw.githubusercontent.com/openebs/zfs-localpv/develop/deploy/zfs-operator.yaml
-kubectl get pods -n openebs -l role=openebs-zfs
-
-export OPENEBS_NAMESPACE=openebs
-export KUBECONFIG=$HOME/.kube/config
-
-cd ~/path/to/directory/openebs/zfs-localpv/tests
-
-ginkgo -v
-```
-
-All the tests should pass now.
-
-## Example output of a successful integration test on development environment
-
-```sh
-Running Suite: Test ZFSPV volume provisioning
-=============================================
-Random Seed: 1586718777
-Will run 1 of 1 specs
-
-[zfspv] TEST VOLUME PROVISIONING App is deployed with zfs driver
- Running zfs volume Creation Test
- /home/filippo/go/src/github.com/openebs/zfs-localpv/tests/provision_test.go:25
-STEP: Running dataset creation test
-STEP: Creating zfs storage class
-STEP: building a zfs storage class
-STEP: creating and verifying PVC bound status
-STEP: building a pvc
-STEP: creating above pvc
-STEP: verifying pvc status as bound
-STEP: Creating and deploying app pod
-STEP: creating and deploying app pod
-STEP: building a busybox app pod deployment using above zfs volume
-STEP: verifying app pod is running
-STEP: verifying ZFSVolume object
-STEP: fetching zfs volume
-STEP: verifying zfs volume
-STEP: Resizing the PVC
-STEP: updating the pvc with new size
-STEP: verifying pvc size to be updated
-STEP: verifying ZFSVolume property change
-STEP: verifying compression property update
-STEP: fetching zfs volume for setting compression=on
-STEP: fetching zfs volume for setting compression=off
-STEP: verifying dedup property update
-STEP: fetching zfs volume for setting dedup=on
-STEP: fetching zfs volume for setting dedup=off
-STEP: verifying recordsize property update
-STEP: fetching zfs volume for setting the recordsize
-STEP: Deleting application deployment
-STEP: Deleting pvc
-STEP: verifying deleted pvc
-STEP: Deleting storage class
-STEP: Running zvol creation test
-STEP: Creating ext4 storage class
-STEP: building a ext4 storage class
-STEP: creating and verifying PVC bound status
-STEP: building a pvc
-STEP: creating above pvc
-STEP: verifying pvc status as bound
-STEP: verifying ZFSVolume object
-STEP: fetching zfs volume
-STEP: verifying zfs volume
-STEP: verifying ZFSVolume property change
-STEP: verifying compression property update
-STEP: fetching zfs volume for setting compression=on
-STEP: fetching zfs volume for setting compression=off
-STEP: verifying dedup property update
-STEP: fetching zfs volume for setting dedup=on
-STEP: fetching zfs volume for setting dedup=off
-STEP: verifying blocksize property update
-STEP: fetching zfs volume for setting the blocksize
-STEP: Deleting pvc
-STEP: verifying deleted pvc
-STEP: Deleting storage class
-
-• [SLOW TEST:210.965 seconds]
-[zfspv] TEST VOLUME PROVISIONING
-/home/filippo/go/src/github.com/openebs/zfs-localpv/tests/provision_test.go:23
- App is deployed with zfs driver
- /home/filippo/go/src/github.com/openebs/zfs-localpv/tests/provision_test.go:24
- Running zfs volume Creation Test
- /home/filippo/go/src/github.com/openebs/zfs-localpv/tests/provision_test.go:25
-------------------------------
-
-Ran 1 of 1 Specs in 210.966 seconds
-SUCCESS! -- 1 Passed | 0 Failed | 0 Pending | 0 Skipped
-PASS
-```
diff --git a/docs/faq.md b/docs/faq.md
index 44eb18293..bda4e9f97 100644
--- a/docs/faq.md
+++ b/docs/faq.md
@@ -4,11 +4,19 @@ LocalPV-ZFS is a CSI driver for dynamically provisioning a volume in ZFS storage
### 2. How to install LocalPV-ZFS
-Make sure that all the nodes have zfsutils-linux installed. We should go to the each node of the cluster and install zfs utils
+Make sure that all the nodes have zfsutils-linux installed. We should go to the each node of the cluster and install zfs utils. For example for installing on Ubuntu disto use:
```
$ apt-get install zfsutils-linux
```
+
+If a non-standard path to the zfs binary is used, it can be specified via
+the helm chart using:
+
+```bash
+--set zfs-localpv.zfs.bin=
+```
+
Go to each node and create the ZFS Pool, which will be used for provisioning the volumes. You can create the Pool of your choice, it can be striped, mirrored or raidz pool.
Once ZFS POOL is created we can install OpenEBS ZFS driver by running the following command.
@@ -19,7 +27,7 @@ helm repo update
helm install openebs --namespace openebs openebs/openebs --create-namespace
```
-Verify that the ZFS driver Components are installed and running using below command :
+Verify that the LocalPV ZFS CSI driver components are installed and running using below command:
```
$ kubectl get pods -n openebs -l role=openebs-zfs
@@ -39,7 +47,7 @@ openebs-zfs-localpv-node-wm9ks 2/2 Running 0 1
### 3. How to upgrade the driver to newer version
-Follow the instructions here https://github.com/openebs/zfs-localpv/tree/develop/upgrade.
+Please refer to the documentation at https://openebs.io/docs/user-guides/upgrade.
### 4. ZFS Pools are there on certain nodes only, how can I create the storage class.
diff --git a/docs/quickstart.md b/docs/quickstart.md
new file mode 100644
index 000000000..1ba0d1556
--- /dev/null
+++ b/docs/quickstart.md
@@ -0,0 +1,357 @@
+# Usage and Deployment
+
+## Prerequisites
+
+> **Important:** Before installing the ZFS LocalPV driver, ensure the following prerequisites are met:
+- All nodes must have the ZFS utilities package installed.
+- A ZFS Pool (ZPool) must be configured for provisioning volumes.
+
+## Setup
+
+All nodes must have the same version of `zfsutils-linux` installed: Please check here for [version](../README.md#supported-system) details. For example for installing on Ubuntu disto use:
+
+```bash
+apt-get install zfsutils-linux
+```
+
+### Creating a ZFS Pool
+
+On each node, create the ZFS pool that will be used for provisioning volumes. You can create different types of pools (striped, mirrored, RAID-Z) as needed.
+
+For a striped pool on a disk (e.g., `/dev/sdb`):
+
+```bash
+zpool create zfspv-pool /dev/sdb
+```
+
+For more details on creating mirrored or RAID-Z pools, refer to the [OpenZFS documentation](https://github.com/openzfs/zfs).
+
+#### Creating a Loopback ZFS Pool (For Testing Only)
+
+If no physical disk is available, create a ZFS pool on a loopback device backed by a sparse file:
+
+```bash
+truncate -s 100G /tmp/disk.img
+zpool create zfspv-pool $(losetup -f /tmp/disk.img --show)
+```
+
+### Verifying the ZFS Pool
+
+Run the following command to verify the ZFS pool:
+
+```bash
+zpool status
+```
+
+Expected output:
+
+```
+ pool: zfspv-pool
+ state: ONLINE
+ scan: none requested
+config:
+
+ NAME STATE READ WRITE CKSUM
+ zfspv-pool ONLINE 0 0 0
+ sdb ONLINE 0 0 0
+
+errors: No known data errors
+```
+
+### Configuring Custom Topology Keys
+
+For advanced scheduling, configure custom topology keys to define volume placement based on zones, racks, or other node-specific attributes. More details are available in the [OpenEBS ZFS FAQ](./faq.md#6-how-to-add-custom-topology-key).
+
+---
+
+## Installation
+
+### Node Labeling
+
+To support future data migration, label each node with a unique `openebs.io/nodeid` value:
+
+```bash
+kubectl label node openebs.io/nodeid=
+```
+
+Refer to the [migration guide](docs/faq.md#8-how-to-migrate-pvs-to-the-new-node-in-case-old-node-is-not-accessible) for more details.
+
+### Installing the OpenEBS ZFS Driver
+
+Installation using operator YAMLs is no longer supported. Instead, use Helm:
+
+```bash
+helm repo add openebs https://openebs.github.io/openebs
+helm repo update
+helm install openebs --namespace openebs openebs/openebs --create-namespace
+```
+
+**Note:** If using a custom kubelet directory, specify it during installation:
+
+```bash
+--set zfs-localpv.zfsNode.kubeletDir=
+```
+
+Examples:
+- **MicroK8s:** `/var/snap/microk8s/common/var/lib/kubelet/`
+- **K0s:** `/var/lib/k0s/kubelet`
+- **RancherOS:** `/opt/rke/var/lib/kubelet`
+
+### Verifying Installation
+
+After installation, ensure that the ZFS LocalPV CSI driver components are running:
+
+```bash
+kubectl get pods -n openebs -l role=openebs-zfs
+```
+
+Expected output (depending on node count):
+
+```
+NAME READY STATUS RESTARTS AGE
+openebs-zfs-localpv-controller-f78f7467c-blr7q 5/5 Running 0 11m
+openebs-zfs-localpv-node-h46m5 2/2 Running 0 11m
+openebs-zfs-localpv-node-svfgq 2/2 Running 0 11m
+openebs-zfs-localpv-node-wm9ks 2/2 Running 0 11m
+```
+
+Once the ZFS driver is installed and running, you can provision volumes.
+
+---
+
+## Deployment
+
+### 1. Creating a StorageClass
+
+```yaml
+apiVersion: storage.k8s.io/v1
+kind: StorageClass
+metadata:
+ name: openebs-zfspv
+parameters:
+ recordsize: "128k"
+ compression: "off"
+ dedup: "off"
+ fstype: "zfs"
+ poolname: "zfspv-pool"
+provisioner: zfs.csi.openebs.io
+```
+### Storage Class Configuration
+
+The storage class contains volume parameters such as `recordsize` (which must be a power of 2), `compression`, `dedup`, and `fstype`. You can select the parameters you wish to configure. If ZFS property parameters are not provided, the volume will inherit the properties from the ZFS pool or the defaults.
+
+### Pool Name Requirement
+
+The `poolname` parameter is mandatory. It is important to note that `poolname` can either be the root dataset or a child dataset. For example:
+
+```yaml
+poolname: "zfspv-pool"
+poolname: "zfspv-pool/child"
+```
+
+Additionally, the dataset specified under `poolname` must exist on *all nodes* with the given name in the storage class. Refer to the [Storage Classes documentation](./storageclasses.md) for a complete list of supported parameters for LocalPV-ZFS.
+
+### Supported Filesystem Types
+
+#### ext2/3/4, XFS, or Btrfs as `fstype`
+
+If `fstype` is set to `ext2`, `ext3`, `ext4`, `xfs`, or `btrfs`, the driver will create a ZVOL, which is a block device carved out of the ZFS pool. This block device will be formatted with the specified filesystem before being used by the driver.
+
+> **Note:**
+> Since there is a filesystem layer on top of the ZFS volume, applications may not achieve optimal performance.
+
+##### Example: Storage Class for `ext4`
+
+```yaml
+apiVersion: storage.k8s.io/v1
+kind: StorageClass
+metadata:
+ name: openebs-zfspv
+parameters:
+ volblocksize: "4k"
+ compression: "off"
+ dedup: "off"
+ fstype: "ext4"
+ poolname: "zfspv-pool"
+provisioner: zfs.csi.openebs.io
+```
+
+Here, `volblocksize` is specified instead of `recordsize` since a ZVOL is created, and we can define the block size for the block device. Note that for ZFS, `volblocksize` must be a power of 2.
+
+#### ZFS as `fstype`
+
+If `fstype` is set to `zfs`, the ZFS driver will create a ZFS dataset within the ZFS pool, acting as a native ZFS filesystem. In this case, no extra layer exists between the application and storage, allowing for optimal performance.
+
+##### Example: Storage Class for `zfs`
+
+```yaml
+apiVersion: storage.k8s.io/v1
+kind: StorageClass
+metadata:
+ name: openebs-zfspv
+parameters:
+ recordsize: "128k"
+ compression: "off"
+ dedup: "off"
+ fstype: "zfs"
+ poolname: "zfspv-pool"
+provisioner: zfs.csi.openebs.io
+```
+
+In this case, `recordsize` is specified for ZFS datasets. This defines the maximum block size for files in the ZFS filesystem. The `recordsize` must be a power of 2.
+
+### ZFS Pool Availability
+
+If the ZFS pool is available only on specific nodes, `allowedTopologies` can be used to specify where the pool exists. The following example demonstrates this configuration:
+
+```yaml
+apiVersion: storage.k8s.io/v1
+kind: StorageClass
+metadata:
+ name: openebs-zfspv
+allowVolumeExpansion: true
+parameters:
+ recordsize: "128k"
+ compression: "off"
+ dedup: "off"
+ fstype: "zfs"
+ poolname: "zfspv-pool"
+provisioner: zfs.csi.openebs.io
+allowedTopologies:
+- matchLabelExpressions:
+ - key: kubernetes.io/hostname
+ values:
+ - k8s-node-1
+ - k8s-node2
+```
+
+This storage class specifies that the ZFS pool `zfspv-pool` is only available on `k8s-node-1` and `k8s-node-1`, ensuring that volumes are created only on these nodes.
+
+> **Note:** The provisioner name for the ZFS driver is `zfs.csi.openebs.io`. This must be used when creating the storage class to direct volume provisioning and deprovisioning requests to the ZFS driver.
+
+> **Note:** The ZFS driver includes its own scheduler, designed to distribute PVs across nodes to prevent overloading a single node. The driver supports two scheduling algorithms. Check [this](./scheduler.md) to read in detail.
+
+#### 2. Creating a PersistentVolumeClaim (PVC)
+
+To create a PVC using the storage class configured for the ZFS driver, use the following YAML definition:
+
+```yaml
+kind: PersistentVolumeClaim
+apiVersion: v1
+metadata:
+ name: csi-zfspv
+spec:
+ storageClassName: openebs-zfspv
+ accessModes:
+ - ReadWriteOnce
+ resources:
+ requests:
+ storage: 4Gi
+```
+
+The allocated volume size will be rounded off to the nearest MiB or GiB notation. Refer to the [FAQ](./faq.md#7-why-the-zfs-volume-size-is-different-than-the-reqeusted-size-in-pvc) section for more details.
+
+If the storage class uses immediate binding, you can check the corresponding Kubernetes resource for the ZFS volume immediately. However, in the case of late binding, this information will be available only after the pod has been scheduled.
+
+To check the created ZFS volume:
+
+```bash
+$ kubectl get zv -n openebs
+NAME ZPOOL NODE SIZE STATUS FILESYSTEM AGE
+pvc-34133838-0d0d-11ea-96e3-42010a800114 zfspv-pool zfspv-node1 4294967296 Ready zfs 4s
+```
+
+To get detailed information about the ZFS volume:
+
+```bash
+$ kubectl describe zv pvc-34133838-0d0d-11ea-96e3-42010a800114 -n openebs
+Name: pvc-34133838-0d0d-11ea-96e3-42010a800114
+Namespace: openebs
+Labels: kubernetes.io/nodename=zfspv-node1
+Annotations:
+API Version: openebs.io/v1alpha1
+Kind: ZFSVolume
+Metadata:
+ Creation Timestamp: 2019-11-22T09:49:29Z
+ Finalizers:
+ zfs.openebs.io/finalizer
+ Generation: 1
+ Resource Version: 2881
+ Self Link: /apis/openebs.io/v1alpha1/namespaces/openebs/zfsvolumes/pvc-34133838-0d0d-11ea-96e3-42010a800114
+ UID: 60bc4df2-0d0d-11ea-96e3-42010a800114
+Spec:
+ Capacity: 4294967296
+ Compression: off
+ Dedup: off
+ Fs Type: zfs
+ Owner Node ID: zfspv-node1
+ Pool Name: zfspv-pool
+ Recordsize: 4k
+ Volume Type: DATASET
+Status:
+ State: Ready
+Events:
+```
+
+The ZFS driver will create a ZFS dataset (or a zvol, depending on the `fstype` defined in the storage class) on node `zfspv-node1` within the specified ZFS pool. The dataset name will be the same as the PV name.
+
+To verify the volume on the node `zfspv-node1`, run the following command:
+
+```bash
+$ zfs list
+NAME USED AVAIL REFER MOUNTPOINT
+zfspv-pool 444K 362G 96K /zfspv-pool
+zfspv-pool/pvc-34133838-0d0d-11ea-96e3-42010a800114 96K 4.00G 96K legacy
+```
+
+### 3. Deploying an Application
+
+```yaml
+apiVersion: v1
+kind: Pod
+metadata:
+ name: fio
+spec:
+ restartPolicy: Never
+ containers:
+ - name: perfrunner
+ image: openebs/tests-fio
+ command: ["/bin/bash"]
+ args: ["-c", "while true; do sleep 50; done"]
+ volumeMounts:
+ - mountPath: /datadir
+ name: fio-vol
+ tty: true
+ volumes:
+ - name: fio-vol
+ persistentVolumeClaim:
+ claimName: csi-zfspv
+```
+
+Once the application is deployed, you can verify that the ZFS volume is being utilized by the application for read/write operations. The allocated space will be consumed from the ZFS pool accordingly.
+
+### 4. Modifying ZFS Properties
+
+ZFS volume properties, such as enabling or disabling compression, can be modified by editing the corresponding Kubernetes resource using the following command:
+
+```bash
+kubectl edit zv pvc-34133838-0d0d-11ea-96e3-42010a800114 -n openebs
+```
+
+Modify the desired properties (e.g., enable compression or deduplication) and save the changes. To verify that the updated properties have been applied to the volume, run the following command on the node:
+
+```bash
+zfs get all zfspv-pool/pvc-34133838-0d0d-11ea-96e3-42010a800114
+```
+
+### 5. Deprovisioning a Volume
+
+To deprovision a volume, first delete the application using the volume. Then, delete the PersistentVolumeClaim (PVC). Once the PVC is deleted, the corresponding volume will be removed from the ZFS pool, freeing up the associated storage.
+
+```bash
+kubectl delete -f fio.yaml
+# Output: pod "fio" deleted
+
+kubectl delete -f pvc.yaml
+# Output: persistentvolumeclaim "csi-zfspv" deleted
+```
diff --git a/docs/scheduler.md b/docs/scheduler.md
new file mode 100644
index 000000000..fdf3854b0
--- /dev/null
+++ b/docs/scheduler.md
@@ -0,0 +1,40 @@
+# ZFS LocalPV Scheduler
+
+The ZFS driver includes its own scheduler, designed to distribute PVs across nodes to prevent overloading a single node. The driver supports two scheduling algorithms:
+
+1. **VolumeWeighted**: Prioritizes nodes with fewer provisioned volumes.
+2. **CapacityWeighted**: Prioritizes nodes with less capacity used from the ZFS pool.
+
+For more details on selecting a scheduler via storage class, refer to [this guide](https://github.com/openebs/zfs-localpv/blob/HEAD/docs/storageclasses.md#storageclass-with-k8s-scheduler).
+
+Once the driver selects a node, it creates a Persistent Volume (PV) and a `ZFSVolume` custom resource containing node information. A watcher process monitors this `ZFSVolume` resource and provisions a ZFS dataset (ZVOL) with the specified properties on the chosen node.
+
+Currently, the scheduler does not consider factors such as CPU or memory availability, focusing solely on ZFS volumes and pool capacity. If you require CPU/memory constraints or node affinity rules, Kubernetes' native scheduler should be used.
+
+#### Using Kubernetes Scheduler
+
+To leverage Kubernetes' scheduler, set `volumeBindingMode` to `WaitForFirstConsumer`. This delays volume binding until the application pod is scheduled, ensuring that PV creation aligns with pod placement.
+
+##### Example: Storage Class with Kubernetes Scheduler
+
+```yaml
+apiVersion: storage.k8s.io/v1
+kind: StorageClass
+metadata:
+ name: openebs-zfspv
+allowVolumeExpansion: true
+parameters:
+ recordsize: "128k"
+ compression: "off"
+ dedup: "off"
+ fstype: "zfs"
+ poolname: "zfspv-pool"
+provisioner: zfs.csi.openebs.io
+volumeBindingMode: WaitForFirstConsumer
+```
+
+> **Note:** Once a PV is created for a specific node, any application using that PV will always be scheduled on the same node. PVs remain bound to their respective nodes.
+
+### Conclusion
+
+The scheduling mechanism (ZFS driver or Kubernetes) is only relevant during deployment. Once a PV is created, the application cannot move to another node since the data resides on the node where the PV was initially provisioned.
\ No newline at end of file
diff --git a/docs/storageclasses.md b/docs/storageclasses.md
index 4837c406d..a9f43aa34 100644
--- a/docs/storageclasses.md
+++ b/docs/storageclasses.md
@@ -54,6 +54,12 @@ Shared specifies whether the volume can be shared among multiple pods. If it is
allowed values: "yes", "no"
+### quotatype
+
+This parameter allows for choosing between refquota or quota and uses this value as zfs command options.
+
+allowed values: "quota", "refquota"
+
## Usage
Let us look at few storageclasses.
diff --git a/upgrade/README.md b/docs/upgrade.md
similarity index 100%
rename from upgrade/README.md
rename to docs/upgrade.md