# OpenEBS CStor

[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
![Release Charts](https://github.com/openebs/cstor-operators/workflows/Release%20Charts/badge.svg?branch=master)
![Chart Lint and Test](https://github.com/openebs/cstor-operators/workflows/Chart%20Lint%20and%20Test/badge.svg)

OpenEBS CStor helm chart for Kubernetes. This chart bootstraps OpenEBS cstor operators and csi driver deployment on a [Kubernetes](http://kubernetes.io) cluster using the  [Helm](https://helm.sh) package manager

**Homepage:** <http://www.openebs.io/>

## Maintainers

| Name | Email | Url |
| ---- | ------ | --- |
| kiranmova | kiran.mova@mayadata.io |  |
| prateekpandey14 | prateek.pandey@mayadata.io |  |
| sonasingh46 | sonasingh46@gmail.com |  |

## Get Repo Info

```console
helm repo add openebs-cstor https://openebs.github.io/cstor-operators
helm repo update
```

_See [helm repo](https://helm.sh/docs/helm/helm_repo/) for command documentation._

## Install Chart

Please visit the [link](https://openebs.github.io/cstor-operators) for install instructions via helm3.

```console
# Helm
$ helm install [RELEASE_NAME] openebs-cstor/cstor --namespace [NAMESPACE]
```
<details>
  <summary>Click here if you're using MicroK8s.</summary>

  ```console
  microk8s helm3 install [RELEASE_NAME] openebs-cstor/cstor --namespace [NAMESPACE] --set-string csiNode.kubeletDir="/var/snap/microk8s/common/var/lib/kubelet/"
  ```
</details>

_See [configuration](#configuration) below._

_See [helm install](https://helm.sh/docs/helm/helm_install/) for command documentation._


## Dependencies

By default this chart installs additional, dependent charts:

| Repository | Name | Version |
|------------|------|---------|
| https://openebs.github.io/node-disk-manager | openebs-ndm | 2.1.0   |

To disable the dependency during installation, set `openebsNDM.enabled` to `false`.

_See [helm dependency](https://helm.sh/docs/helm/helm_dependency/) for command documentation._

## Uninstall Chart

```console
# Helm
$ helm uninstall [RELEASE_NAME] --namespace [NAMESPACE]
```

This removes all the Kubernetes components associated with the chart and deletes the release.

_See [helm uninstall](https://helm.sh/docs/helm/helm_uninstall/) for command documentation._

## Upgrading Chart

```console
# Helm
$ helm upgrade [RELEASE_NAME] [CHART] --install --namespace [NAMESPACE]
```

## Configuration

The following table lists the configurable parameters of the OpenEBS CStor chart and their default values.

You can modify different parameters by specifying the desired value in the `helm install` command by using the `--set` and/or the `--set-string` flag(s). You can modify the parameters of the [Node Disk Manager chart](https://openebs.github.io/node-disk-manager) by adding `openebs-ndm` before the desired parameter in the `helm install` command.

In the following sample command we modify `csiNode.nodeSelector` from the cstor chart and `ndm.nodeSelector` from the openebs-ndm chart to only schedule pods on nodes labelled with `openebs.io/data-plane=true`. We also enable the 'Use OS-disk' feature gate using the `featureGates.UseOSDisk.enabled` parameter from the openebs-ndm chart.


```console
helm install openebs-cstor openebs-cstor/cstor --namespace openebs --create-namespace \
	--set-string csiNode.nodeSelector."openebs\.io/data-plane"=true \
	--set-string openebs-ndm.ndm.nodeSelector."openebs\.io/data-plane"=true \
	--set openebs-ndm.featureGates.UseOSDisk.enabled=true
```
<details>
  <summary>Click here if you're using MicroK8s.</summary>

  If you are using MicroK8s, it is necessary to add the following flag:

  ```console
  --set-string csiNode.kubeletDir="/var/snap/microk8s/common/var/lib/kubelet/"
  ```
</details>

| Key | Type | Default                                                     | Description |
|-----|------|-------------------------------------------------------------|-------------|
| admissionServer.annotations | object | `{}`                                                        | Admission webhook annotations |
| admissionServer.componentName | string | `"cstor-admission-webhook"`                                 | Admission webhook Component Name |
| admissionServer.failurePolicy | string | `"Fail"`                                                    | Admission Webhook failure policy |
| admissionServer.image.pullPolicy | string | `"IfNotPresent"`                                            | Admission webhook image pull policy |
| admissionServer.image.registry | string | `nil`                                                       | Admission webhook image registry |
| admissionServer.image.repository | string | `"openebs/cstor-webhook"`                                   | Admission webhook image repo |
| admissionServer.image.tag | string | `"3.5.0"`                                                   | Admission webhook image tag |
| admissionServer.nodeSelector | object | `{}`                                                        | Admission webhook pod node selector |
| admissionServer.podAnnotations | object | `{}`                                                        |  Admission webhook pod annotations |
| admissionServer.resources | object | `{}`                                                        | Admission webhook pod resources |
| admissionServer.securityContext | object | `{}`                                                        | Admission webhook security context |
| admissionServer.tolerations | list | `[]`                                                        | Admission webhook tolerations |
| cleanup.image.registry | string | `nil`                                                       |  cleanup pre hook image registry |
| cleanup.image.repository | string | `"bitnami/kubectl"`                                         |  cleanup pre hook image repository |
| csiController.annotations | object | `{}`                                                        | CSI controller annotations |
| csiController.attacher.image.pullPolicy | string | `"IfNotPresent"`                                            | CSI attacher image pull policy |
| csiController.attacher.image.registry | string | `"registry.k8s.io/"`                                        |  CSI attacher image registry |
| csiController.attacher.image.repository | string | `"sig-storage/csi-attacher"`                                |  CSI attacher image repo |
| csiController.attacher.image.tag | string | `"v4.3.0"`                                                  | CSI attacher image tag |
| csiController.attacher.logLevel | string | _unspecified_                                               | Override log level for CSI attacher container (1 = least verbose, 5 = most verbose) |
| csiController.attacher.name | string | `"csi-attacher"`                                            |  CSI attacher container name|
| csiController.componentName | string | `"openebs-cstor-csi-controller"`                            | CSI controller component name |
| csiController.logLevel | string | `"5"`                                                       |  Default log level for all CSI controller containers (1 = least verbose, 5 = most verbose) unless overridden for a specific container |
| csiController.nodeSelector | object | `{}`                                                        |  CSI controller pod node selector |
| csiController.podAnnotations | object | `{}`                                                        | CSI controller pod annotations |
| csiController.provisioner.image.pullPolicy | string | `"IfNotPresent"`                                            | CSI provisioner image pull policy |
| csiController.provisioner.image.registry | string | `"registry.k8s.io/"`                                        | CSI provisioner image pull registry |
| csiController.provisioner.image.repository | string | `"sig-storage/csi-provisioner"`                             | CSI provisioner image pull repository |
| csiController.provisioner.image.tag | string | `"v3.5.0"`                                                  | CSI provisioner image tag |
| csiController.provisioner.logLevel | string | _unspecified_                                               | Override log level for CSI provisioner container (1 = least verbose, 5 = most verbose) |
| csiController.provisioner.name | string | `"csi-provisioner"`                                         | CSI provisioner container name |
| csiController.resizer.image.pullPolicy | string | `"IfNotPresent"`                                            | CSI resizer image pull policy  |
| csiController.resizer.image.registry | string | `"registry.k8s.io/"`                                        | CSI resizer image registry |
| csiController.resizer.image.repository | string | `"sig-storage/csi-resizer"`                                 |  CSI resizer image repository|
| csiController.resizer.image.tag | string | `"v1.8.0"`                                                  | CSI resizer image tag |
| csiController.resizer.logLevel | string | _unspecified_                                               | Override log level for CSI resizer container (1 = least verbose, 5 = most verbose) |
| csiController.resizer.name | string | `"csi-resizer"`                                             | CSI resizer container name |
| csiController.resources | object | `{}`                                                        | CSI controller container resources |
| csiController.securityContext | object | `{}`                                                        | CSI controller security context |
| csiController.snapshotController.image.pullPolicy | string | `"IfNotPresent"`                                            | CSI snapshot controller image pull policy |
| csiController.snapshotController.image.registry | string | `"k8s.gcr.io/"`                                             | CSI snapshot controller image registry |
| csiController.snapshotController.image.repository | string | `"sig-storage/snapshot-controller"`                         | CSI snapshot controller image repository |
| csiController.snapshotController.image.tag | string | `"v6.2.2"`                                                  | CSI snapshot controller image tag |
| csiController.snapshotController.logLevel | string | _unspecified_                                               | Override log level for CSI snapshot controller container (1 = least verbose, 5 = most verbose) |
| csiController.snapshotController.name | string | `"snapshot-controller"`                                     | CSI snapshot controller container name |
| csiController.snapshotter.image.pullPolicy | string | `"IfNotPresent"`                                            | CSI snapshotter image pull policy |
| csiController.snapshotter.image.registry | string | `"registry..k8s.io/"`                                       | CSI snapshotter image pull registry |
| csiController.snapshotter.image.repository | string | `"sig-storage/csi-snapshotter"`                             | CSI snapshotter image repository |
| csiController.snapshotter.image.tag | string | `"v6.2.2"`                                                  | CSI snapshotter image tag |
| csiController.snapshotter.name | string | `"csi-snapshotter"`                                         | CSI snapshotter container name |
| csiController.tolerations | list | `[]`                                                        | CSI controller pod tolerations |
| csiNode.annotations | object | `{}`                                                        | CSI Node annotations |
| csiNode.componentName | string | `"openebs-cstor-csi-node"`                                  | CSI Node component name |
| csiNode.driverRegistrar.image.pullPolicy | string | `"IfNotPresent"`                                            | CSI Node driver registrar image pull policy|
| csiNode.driverRegistrar.image.registry | string | `"registry.k8s.io/"`                                        | CSI Node driver registrar image registry |
| csiNode.driverRegistrar.image.repository | string | `"sig-storage/csi-node-driver-registrar"`                   | CSI Node driver registrar image repository |
| csiNode.driverRegistrar.image.tag | string | `"v2.8.0"`                                                  |  CSI Node driver registrar image tag|
| csiNode.driverRegistrar.logLevel | string | _unspecified_                                               | Override log level for CSI node driver registrar container (1 = least verbose, 5 = most verbose) |
| csiNode.driverRegistrar.name | string | `"csi-node-driver-registrar"`                               | CSI Node driver registrar container name |
| csiNode.kubeletDir | string | `"/var/lib/kubelet/"`                                       | Kubelet root dir |
| csiNode.labels | object | `{}`                                                        | CSI Node pod labels |
| csiNode.logLevel | string | `"5"`                                                       | Default log level for CSI node containers (1 = least verbose, 5 = most verbose) unless overriden for a specific container |
| csiNode.nodeSelector | object | `{}`                                                        |   CSI Node pod nodeSelector |
| csiNode.podAnnotations | object | `{}`                                                        | CSI Node pod annotations |
| csiNode.resources | object | `{}`                                                        | CSI Node pod resources |
| csiNode.securityContext | object | `{}`                                                        | CSI Node pod security context |
| csiNode.tolerations | list | `[]`                                                        | CSI Node pod tolerations |
| csiNode.updateStrategy.type | string | `"RollingUpdate"`                                           | CSI Node daemonset update strategy |
| cspcOperator.annotations | object | `{}`                                                        | CSPC operator annotations |
| cspcOperator.componentName | string | `"cspc-operator"`                                           | CSPC operator component name |
| cspcOperator.cstorPool.image.registry | string | `nil`                                                       | CStor pool image registry |
| cspcOperator.cstorPool.image.repository | string | `"openebs/cstor-pool"`                                      | CStor pool image repository|
| cspcOperator.cstorPool.image.tag | string | `"3.5.0"`                                                   | CStor pool image tag |
| cspcOperator.cstorPoolExporter.image.registry | string | `nil`                                                       | CStor pool exporter image registry |
| cspcOperator.cstorPoolExporter.image.repository | string | `"openebs/m-exporter"`                                      | CStor pool exporter image repository |
| cspcOperator.cstorPoolExporter.image.tag | string | `"3.5.0"`                                                   | CStor pool exporter image tag |
| cspcOperator.image.pullPolicy | string | `"IfNotPresent"`                                            | CSPC operator image pull policy |
| cspcOperator.image.registry | string | `nil`                                                       | CSPC operator image registry |
| cspcOperator.image.repository | string | `"openebs/cspc-operator"`                                   | CSPC operator image repository |
| cspcOperator.image.tag | string | `"3.5.0"`                                                   |  CSPC operator image tag |
| cspcOperator.nodeSelector | object | `{}`                                                        |  CSPC operator pod nodeSelector|
| cspcOperator.podAnnotations | object | `{}`                                                        | CSPC operator pod annotations |
| cspcOperator.poolManager.image.registry | string | `nil`                                                       | CStor Pool Manager image registry  |
| cspcOperator.poolManager.image.repository | string | `"openebs/cstor-pool-manager"`                              | CStor Pool Manager image repository |
| cspcOperator.poolManager.image.tag | string | `"3.5.0"`                                                   | CStor Pool Manager image tag |
| cspcOperator.resources | object | `{}`                                                        | CSPC operator pod resources |
| cspcOperator.resyncInterval | string | `"30"`                                                      | CSPC operator resync interval |
| cspcOperator.securityContext | object | `{}`                                                        | CSPC operator security context |
| cspcOperator.tolerations | list | `[]`                                                        | CSPC operator pod tolerations |
| cspcOperator.baseDir | string | `"/var/openebs"`                                            | base directory for openebs cStor pools on host path to store pool related information |
| cspcOperator.sparseDir | string | `"/var/openebs/sparse"`                                     | sparse directory to access sparse based devices |
| cstorCSIPlugin.image.pullPolicy | string | `"IfNotPresent"`                                            | CStor CSI driver image pull policy |
| cstorCSIPlugin.image.registry | string | `nil`                                                       | CStor CSI driver image registry |
| cstorCSIPlugin.image.repository | string | `"openebs/cstor-csi-driver"`                                |  CStor CSI driver image repository |
| cstorCSIPlugin.image.tag | string | `"3.5.0"`                                                   | CStor CSI driver image tag |
| cstorCSIPlugin.name | string | `"cstor-csi-plugin"`                                        | CStor CSI driver container name |
| cstorCSIPlugin.remount | string | `"true"`                                                    | Enable/disable auto-remount when volume recovers from read-only state |
| cvcOperator.annotations | object | `{}`                                                        | CVC operator annotations |
| cvcOperator.componentName | string | `"cvc-operator"`                                            | CVC operator component name |
| cvcOperator.image.pullPolicy | string | `"IfNotPresent"`                                            | CVC operator image pull policy  |
| cvcOperator.image.registry | string | `nil`                                                       | CVC operator image registry |
| cvcOperator.image.repository | string | `"openebs/cvc-operator"`                                    | CVC operator image repository |
| cvcOperator.image.tag | string | `"3.5.0"`                                                   | CVC operator image tag |
| cvcOperator.logLevel | string | `"2"`                                                       |  Log level for CVC operator container (1 = least verbose, 5 = most verbose) |
| cvcOperator.nodeSelector | object | `{}`                                                        | CVC operator pod nodeSelector |
| cvcOperator.podAnnotations | object | `{}`                                                        | CVC operator pod annotations |
| cvcOperator.resources | object | `{}`                                                        |CVC operator pod resources  |
| cvcOperator.resyncInterval | string | `"30"`                                                      | CVC operator resync interval |
| cvcOperator.securityContext | object | `{}`                                                        | CVC operator security context |
| cvcOperator.target.image.registry | string | `nil`                                                       | Volume Target image registry  |
| cvcOperator.target.image.repository | string | `"openebs/cstor-istgt"`                                     | Volume Target image repository |
| cvcOperator.target.image.tag | string | `"3.5.0"`                                                   | Volume Target image tag |
| cvcOperator.tolerations | list | `[]`                                                        | CVC operator pod tolerations |
| cvcOperator.volumeExporter.image.registry | string | `nil`                                                       | Volume exporter image registry |
| cvcOperator.volumeExporter.image.repository | string | `"openebs/m-exporter"`                                      | Volume exporter image repository |
| cvcOperator.volumeExporter.image.tag | string | `"3.5.0"`                                                   | Volume exporter image tag |
| cvcOperator.volumeMgmt.image.registry | string | `nil`                                                       | Volume mgmt image registry |
| cvcOperator.volumeMgmt.image.repository | string | `"openebs/cstor-volume-manager"`                            | Volume mgmt image repository |
| cvcOperator.volumeMgmt.image.tag | string | `"3.5.0"`                                                   |  Volume mgmt image tag|
| cvcOperator.baseDir | string | `"/var/openebs"`                                            | CVC operator base directory for openebs on host path |
| imagePullSecrets | string | `nil`                                                       | Image registry pull secrets |
| openebsNDM.enabled | bool | `true`                                                      | Enable OpenEBS NDM dependency |
| openebs-ndm.featureGates.APIService.enabled | bool | `true`                                                      | Enable 'API Service' feature gate for NDM |
| openebs-ndm.featureGates.GPTBasedUUID.enabled | bool | `true`                                                      | Enable 'GPT-based UUID' feature gate for NDM |
| openebs-ndm.featureGates.UseOSDisk.enabled | bool | `false`                                                     | Enable 'Use OS-disk' feature gate for NDM |
| openebs-ndm.helperPod.image.registry | string | `nil`                                                       | Registry for helper image |
| openebs-ndm.helperPod.image.repository | string | `openebs/linux-utils`                                       | Image repository for helper pod |
| openebs-ndm.ndm.filters.enableOsDiskExcludeFilter | bool | `true`                                                      | Enable filters of OS disk exclude |
| openebs-ndm.ndm.filters.enableVendorFilter | bool | `true`                                                      | Enable filters of vendors |
| openebs-ndm.ndm.filters.excludeVendors | string | `"CLOUDBYT,OpenEBS"`                                        | Exclude devices with specified vendor |
| openebs-ndm.ndm.filters.enablePathFilter | bool | `true`                                                      | Enable filters of paths |
| openebs-ndm.ndm.filters.includePaths | string | `""`                                                        | Include devices with specified path patterns |
| openebs-ndm.ndm.filters.excludePaths | string | `"loop,fd0,sr0,/dev/ram,/dev/dm-,/dev/md,/dev/rbd,/dev/zd"` | Exclude devices with specified path patterns |
| openebs-ndm.ndm.image.registry | string | `nil`                                                       | Registry for Node Disk Manager image |
| openebs-ndm.ndm.image.repository | string | `openebs/node-disk-manager`                                 | Image repository for Node Disk Manager |
| openebs-ndm.ndm.nodeSelector | object | `{}`                                                        | Nodeselector for daemonset pods |
| openebs-ndm.ndmOperator.image.registry | string | `nil`                                                       | Registry for NDM operator image |
| openebs-ndm.ndmOperator.image.repository | string | `openebs/node-disk-operator`                                | Image repository for NDM operator |
| rbac.create | bool | `true`                                                      | Enable RBAC |
| rbac.pspEnabled | bool | `false`                                                     | Enable PodSecurityPolicy |
| release.version | string | `"3.5.0"`                                                   | Openebs CStor release version |
| serviceAccount.annotations | object | `{}`                                                        | Service Account annotations |
| serviceAccount.csiController.create | bool | `true`                                                      | Enable CSI Controller ServiceAccount |
| serviceAccount.csiController.name | string | `"openebs-cstor-csi-controller-sa"`                         | CSI Controller ServiceAccount name |
| serviceAccount.csiNode.create | bool | `true`                                                      | Enable CSI Node ServiceAccount |
| serviceAccount.csiNode.name | string | `"openebs-cstor-csi-node-sa"`                               | CSI Node ServiceAccount name |
