diff --git a/.github/workflows/chart-lint-test.yml b/.github/workflows/chart-lint-test.yml
index f938d864..dd971fa1 100644
--- a/.github/workflows/chart-lint-test.yml
+++ b/.github/workflows/chart-lint-test.yml
@@ -48,5 +48,10 @@ jobs:
uses: helm/kind-action@v1.0.0
if: steps.list-changed.outputs.changed == 'true'
+ - name: Add dependency chart repos
+ run: |
+ helm repo add openebs-ndm https://openebs.github.io/node-disk-manager
+ helm repo update
+
- name: Run chart-testing (install)
run: ct install --config ct.yaml
diff --git a/deploy/helm/charts/.helmignore b/deploy/helm/charts/.helmignore
new file mode 100644
index 00000000..0e8a0eb3
--- /dev/null
+++ b/deploy/helm/charts/.helmignore
@@ -0,0 +1,23 @@
+# Patterns to ignore when building packages.
+# This supports shell glob matching, relative path matching, and
+# negation (prefixed with !). Only one pattern per line.
+.DS_Store
+# Common VCS dirs
+.git/
+.gitignore
+.bzr/
+.bzrignore
+.hg/
+.hgignore
+.svn/
+# Common backup files
+*.swp
+*.bak
+*.tmp
+*.orig
+*~
+# Various IDEs
+.project
+.idea/
+*.tmproj
+.vscode/
diff --git a/deploy/helm/charts/Chart.yaml b/deploy/helm/charts/Chart.yaml
new file mode 100644
index 00000000..13c6cbcb
--- /dev/null
+++ b/deploy/helm/charts/Chart.yaml
@@ -0,0 +1,35 @@
+apiVersion: v2
+name: cstor
+description: CStor-Operator helm chart for Kubernetes
+type: application
+# This is the chart version. This version number should be incremented each time you make changes
+# to the chart and its templates, including the app version.
+version: 2.4.0
+# This is the version number of the application being deployed. This version number should be
+# incremented each time you make changes to the application.
+appVersion: 2.4.0
+icon: https://raw.githubusercontent.com/cncf/artwork/master/projects/openebs/icon/color/openebs-icon-color.png
+home: http://www.openebs.io/
+keywords:
+ - cloud-native-storage
+ - block-storage
+ - iSCSI
+ - storage
+ - cstor
+ - cstor-operators
+sources:
+ - https://github.com/openebs/cstor-operators
+
+dependencies:
+ - name: openebs-ndm
+ version: "1.0.2"
+ repository: "https://openebs.github.io/node-disk-manager"
+ condition: openebsNDM.enabled
+
+maintainers:
+ - name: kiranmova
+ email: kiran.mova@mayadata.io
+ - name: prateekpandey14
+ email: prateek.pandey@mayadata.io
+ - name: sonasingh46
+ email: sonasingh46@gmail.com
diff --git a/deploy/helm/charts/README.md b/deploy/helm/charts/README.md
new file mode 100644
index 00000000..53838722
--- /dev/null
+++ b/deploy/helm/charts/README.md
@@ -0,0 +1,199 @@
+# 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:**
+
+## 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
+```
+
+_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 | 1.0.2 |
+
+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]
+```
+
+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
+```
+
+## Configuration
+
+The following table lists the configurable parameters of the OpenEBS CStor chart and their default values.
+
+| 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 | `"2.4.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 |
+| csiController.annotations | object | `{}` | CSI controller annotations |
+| csiController.attacher.image.pullPolicy | string | `"IfNotPresent"` | CSI attacher image pull policy |
+| csiController.attacher.image.registry | string | `"quay.io/"` | CSI attacher image registry |
+| csiController.attacher.image.repository | string | `"k8scsi/csi-attacher"` | CSI attacher image repo |
+| csiController.attacher.image.tag | string | `"v2.0.0"` | CSI attacher image tag |
+| csiController.attacher.name | string | `"csi-attacher"` | CSI attacher container name|
+| csiController.componentName | string | `""` | CSI controller component name |
+| csiController.driverRegistrar.image.pullPolicy | string | `"IfNotPresent"` | CSI driver registrar image pull policy |
+| csiController.driverRegistrar.image.registry | string | `"quay.io/"` | CSI driver registrar image registry |
+| csiController.driverRegistrar.image.repository | string | `"k8scsi/csi-cluster-driver-registrar"` | CSI driver registrar image repo |
+| csiController.driverRegistrar.image.tag | string | `"v1.0.1"` | CSI driver registrar image tag|
+| csiController.driverRegistrar.name | string | `"csi-cluster-driver-registrar"` | CSI driver registrar container name |
+| 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 | `"quay.io/"` | CSI provisioner image pull registry |
+| csiController.provisioner.image.repository | string | `"k8scsi/csi-provisioner"` | CSI provisioner image pull repository |
+| csiController.provisioner.image.tag | string | `"v1.6.0"` | CSI provisioner image tag |
+| 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 | `"quay.io/"` | CSI resizer image registry |
+| csiController.resizer.image.repository | string | `"k8scsi/csi-resizer"` | CSI resizer image repository|
+| csiController.resizer.image.tag | string | `"v0.4.0"` | CSI resizer image tag |
+| 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 | `"quay.io/"` | CSI snapshot controller image registry |
+| csiController.snapshotController.image.repository | string | `"k8scsi/snapshot-controller"` | CSI snapshot controller image repository |
+| csiController.snapshotController.image.tag | string | `"v2.0.1"` | CSI snapshot controller image tag |
+| 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 | `"quay.io/"` | CSI snapshotter image pull registry |
+| csiController.snapshotter.image.repository | string | `"k8scsi/csi-snapshotter"` | CSI snapshotter image repositroy |
+| csiController.snapshotter.image.tag | string | `"v2.0.1"` | 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 | `"quay.io/"` | CSI Node driver registrar image registry |
+| csiNode.driverRegistrar.image.repository | string | `"k8scsi/csi-node-driver-registrar"` | CSI Node driver registrar image repository |
+| csiNode.driverRegistrar.image.tag | string | `"v1.0.1"` | CSI Node driver registrar image tag|
+| 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.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 | `"2.4.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 repositry |
+| cspcOperator.cstorPoolExporter.image.tag | string | `"2.4.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 | `"2.4.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 | `"2.4.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 |
+| 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 | `"2.4.0"` | CStor CSI driver image tag |
+| cstorCSIPlugin.name | string | `"cstor-csi-plugin"` | CStor CSI driver container name |
+| 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 | `"2.4.0"` | CVC operator image tag |
+| 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 | `"2.4.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 | `"2.4.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 | `"2.4.0"` | Volume mgmt image tag|
+| imagePullSecrets | string | `nil` | Image registry pull secrets |
+| openebsNDM.enabled | bool | `true` | Enable OpenEBS NDM dependency |
+| rbac.create | bool | `true` | Enable RBAC |
+| rbac.pspEnabled | bool | `false` | Enable PodSecurityPolicy |
+| release.version | string | `"2.4.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 |
+
diff --git a/deploy/helm/charts/crds/cstorbackup.yaml b/deploy/helm/charts/crds/cstorbackup.yaml
new file mode 100644
index 00000000..64e73842
--- /dev/null
+++ b/deploy/helm/charts/crds/cstorbackup.yaml
@@ -0,0 +1,93 @@
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ annotations:
+ controller-gen.kubebuilder.io/version: v0.4.0
+ creationTimestamp: null
+ name: cstorbackups.cstor.openebs.io
+spec:
+ group: cstor.openebs.io
+ names:
+ kind: CStorBackup
+ listKind: CStorBackupList
+ plural: cstorbackups
+ shortNames:
+ - cbackup
+ singular: cstorbackup
+ scope: Namespaced
+ versions:
+ - additionalPrinterColumns:
+ - description: Name of the volume for which this backup is destined
+ jsonPath: .spec.volumeName
+ name: Volume
+ type: string
+ - description: Name of the backup or scheduled backup
+ jsonPath: .spec.backupName
+ name: Backup/Schedule
+ type: string
+ - description: Identifies the phase of the backup
+ jsonPath: .status
+ name: Status
+ type: string
+ name: v1
+ schema:
+ openAPIV3Schema:
+ description: CStorBackup describes a cstor backup resource created as a custom
+ resource
+ properties:
+ apiVersion:
+ description: 'APIVersion defines the versioned schema of this representation
+ of an object. Servers should convert recognized schemas to the latest
+ internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
+ type: string
+ kind:
+ description: 'Kind is a string value representing the REST resource this
+ object represents. Servers may infer this from the endpoint the client
+ submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
+ type: string
+ metadata:
+ type: object
+ spec:
+ description: CStorBackupSpec is the spec for a CStorBackup resource
+ properties:
+ backupDest:
+ description: BackupDest is the remote address for backup transfer
+ type: string
+ backupName:
+ description: BackupName is the name of the backup or scheduled backup
+ type: string
+ localSnap:
+ description: LocalSnap is the flag to enable local snapshot only
+ type: boolean
+ prevSnapName:
+ description: PrevSnapName is the last completed-backup's snapshot
+ name
+ type: string
+ snapName:
+ description: SnapName is the name of the current backup snapshot
+ type: string
+ volumeName:
+ description: VolumeName is the name of the volume for which this backup
+ is destined
+ type: string
+ required:
+ - backupName
+ - snapName
+ - volumeName
+ type: object
+ status:
+ description: CStorBackupStatus is a string type that represents the status
+ of the backup
+ type: string
+ required:
+ - spec
+ type: object
+ served: true
+ storage: true
+ subresources: {}
+status:
+ acceptedNames:
+ kind: ""
+ plural: ""
+ conditions: []
+ storedVersions: []
diff --git a/deploy/helm/charts/crds/cstorcompletedbackup.yaml b/deploy/helm/charts/crds/cstorcompletedbackup.yaml
new file mode 100644
index 00000000..dd48bfb2
--- /dev/null
+++ b/deploy/helm/charts/crds/cstorcompletedbackup.yaml
@@ -0,0 +1,80 @@
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ annotations:
+ controller-gen.kubebuilder.io/version: v0.4.0
+ creationTimestamp: null
+ name: cstorcompletedbackups.cstor.openebs.io
+spec:
+ group: cstor.openebs.io
+ names:
+ kind: CStorCompletedBackup
+ listKind: CStorCompletedBackupList
+ plural: cstorcompletedbackups
+ shortNames:
+ - ccompletedbackup
+ singular: cstorcompletedbackup
+ scope: Namespaced
+ versions:
+ - additionalPrinterColumns:
+ - description: Volume name on which backup is performed
+ jsonPath: .spec.volumeName
+ name: Volume
+ type: string
+ - description: Name of the backup or scheduled backup
+ jsonPath: .spec.backupName
+ name: Backup/Schedule
+ type: string
+ - description: Last successfully backup snapshot
+ jsonPath: .spec.lastSnapName
+ name: LastSnap
+ type: string
+ name: v1
+ schema:
+ openAPIV3Schema:
+ description: CStorCompletedBackup describes a cstor completed-backup resource
+ created as custom resource
+ properties:
+ apiVersion:
+ description: 'APIVersion defines the versioned schema of this representation
+ of an object. Servers should convert recognized schemas to the latest
+ internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
+ type: string
+ kind:
+ description: 'Kind is a string value representing the REST resource this
+ object represents. Servers may infer this from the endpoint the client
+ submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
+ type: string
+ metadata:
+ type: object
+ spec:
+ description: CStorCompletedBackupSpec is the spec for a CStorBackup resource
+ properties:
+ backupName:
+ description: BackupName is the name of backup or scheduled backup
+ type: string
+ lastSnapName:
+ description: LastSnapName is the name of last completed-backup's snapshot
+ name
+ type: string
+ secondLastSnapName:
+ description: SecondLastSnapName is the name of second last 'successfully'
+ completed-backup's snapshot
+ type: string
+ volumeName:
+ description: VolumeName is the name of volume for which this backup
+ is destined
+ type: string
+ type: object
+ required:
+ - spec
+ type: object
+ served: true
+ storage: true
+ subresources: {}
+status:
+ acceptedNames:
+ kind: ""
+ plural: ""
+ conditions: []
+ storedVersions: []
diff --git a/deploy/helm/charts/crds/cstorpoolcluster.yaml b/deploy/helm/charts/crds/cstorpoolcluster.yaml
new file mode 100644
index 00000000..abce8a96
--- /dev/null
+++ b/deploy/helm/charts/crds/cstorpoolcluster.yaml
@@ -0,0 +1,491 @@
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ annotations:
+ controller-gen.kubebuilder.io/version: v0.4.0
+ creationTimestamp: null
+ name: cstorpoolclusters.cstor.openebs.io
+spec:
+ group: cstor.openebs.io
+ names:
+ kind: CStorPoolCluster
+ listKind: CStorPoolClusterList
+ plural: cstorpoolclusters
+ shortNames:
+ - cspc
+ singular: cstorpoolcluster
+ scope: Namespaced
+ versions:
+ - additionalPrinterColumns:
+ - description: The number of healthy cStorPoolInstances
+ jsonPath: .status.healthyInstances
+ name: HealthyInstances
+ type: integer
+ - description: The number of provisioned cStorPoolInstances
+ jsonPath: .status.provisionedInstances
+ name: ProvisionedInstances
+ type: integer
+ - description: The number of desired cStorPoolInstances
+ jsonPath: .status.desiredInstances
+ name: DesiredInstances
+ type: integer
+ - description: Age of CStorPoolCluster
+ jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ name: v1
+ schema:
+ openAPIV3Schema:
+ description: CStorPoolCluster describes a CStorPoolCluster custom resource.
+ properties:
+ apiVersion:
+ description: 'APIVersion defines the versioned schema of this representation
+ of an object. Servers should convert recognized schemas to the latest
+ internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
+ type: string
+ kind:
+ description: 'Kind is a string value representing the REST resource this
+ object represents. Servers may infer this from the endpoint the client
+ submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
+ type: string
+ metadata:
+ type: object
+ spec:
+ description: CStorPoolClusterSpec is the spec for a CStorPoolClusterSpec
+ resource
+ properties:
+ auxResources:
+ description: AuxResources are the compute resources required by the
+ cstor-pool pod side car containers.
+ nullable: true
+ properties:
+ limits:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ description: 'Limits describes the maximum amount of compute resources
+ allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
+ type: object
+ requests:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ description: 'Requests describes the minimum amount of compute
+ resources required. If Requests is omitted for a container,
+ it defaults to Limits if that is explicitly specified, otherwise
+ to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
+ type: object
+ type: object
+ pools:
+ description: Pools is the spec for pools for various nodes where it
+ should be created.
+ items:
+ description: PoolSpec is the spec for pool on node where it should
+ be created.
+ properties:
+ dataRaidGroups:
+ description: DataRaidGroups is the raid group configuration
+ for the given pool.
+ items:
+ description: RaidGroup contains the details of a raid group
+ for the pool
+ properties:
+ blockDevices:
+ items:
+ description: CStorPoolInstanceBlockDevice contains the
+ details of block devices that constitutes a raid group.
+ properties:
+ blockDeviceName:
+ description: BlockDeviceName is the name of the
+ block device.
+ type: string
+ capacity:
+ description: Capacity is the capacity of the block
+ device. It is system generated
+ format: int64
+ type: integer
+ devLink:
+ description: DevLink is the dev link for block devices
+ type: string
+ required:
+ - blockDeviceName
+ type: object
+ type: array
+ required:
+ - blockDevices
+ type: object
+ type: array
+ nodeSelector:
+ additionalProperties:
+ type: string
+ description: NodeSelector is the labels that will be used to
+ select a node for pool provisioning. Required field
+ type: object
+ poolConfig:
+ description: PoolConfig is the default pool config that applies
+ to the pool on node.
+ properties:
+ auxResources:
+ description: AuxResources are the compute resources required
+ by the cstor-pool pod side car containers.
+ nullable: true
+ properties:
+ limits:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ description: 'Limits describes the maximum amount of
+ compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
+ type: object
+ requests:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ description: 'Requests describes the minimum amount
+ of compute resources required. If Requests is omitted
+ for a container, it defaults to Limits if that is
+ explicitly specified, otherwise to an implementation-defined
+ value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
+ type: object
+ type: object
+ compression:
+ description: 'Compression to enable compression Optional
+ -- defaults to off Possible values : lz, off'
+ type: string
+ dataRaidGroupType:
+ description: DataRaidGroupType is the raid type.
+ type: string
+ priorityClassName:
+ description: PriorityClassName if specified applies to this
+ pool pod If left empty, DefaultPriorityClassName is applied.
+ (See CStorPoolClusterSpec.DefaultPriorityClassName) If
+ both are empty, not priority class is applied.
+ nullable: true
+ type: string
+ resources:
+ description: Resources are the compute resources required
+ by the cstor-pool container.
+ nullable: true
+ properties:
+ limits:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ description: 'Limits describes the maximum amount of
+ compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
+ type: object
+ requests:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ description: 'Requests describes the minimum amount
+ of compute resources required. If Requests is omitted
+ for a container, it defaults to Limits if that is
+ explicitly specified, otherwise to an implementation-defined
+ value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
+ type: object
+ type: object
+ roThresholdLimit:
+ description: 'ROThresholdLimit is threshold(percentage base)
+ limit for pool read only mode. If ROThresholdLimit(%)
+ amount of pool storage is reached then pool will set to
+ readonly. NOTE: 1. If ROThresholdLimit is set to 100 then
+ entire pool storage will be used by default it will
+ be set to 85%. 2. ROThresholdLimit value will be 0 <=
+ ROThresholdLimit <= 100.'
+ nullable: true
+ type: integer
+ thickProvision:
+ description: ThickProvision to enable thick provisioning
+ Optional -- defaults to false
+ type: boolean
+ tolerations:
+ description: Tolerations, if specified, the pool pod's tolerations.
+ items:
+ description: The pod this Toleration is attached to tolerates
+ any taint that matches the triple
+ using the matching operator .
+ properties:
+ effect:
+ description: Effect indicates the taint effect to
+ match. Empty means match all taint effects. When
+ specified, allowed values are NoSchedule, PreferNoSchedule
+ and NoExecute.
+ type: string
+ key:
+ description: Key is the taint key that the toleration
+ applies to. Empty means match all taint keys. If
+ the key is empty, operator must be Exists; this
+ combination means to match all values and all keys.
+ type: string
+ operator:
+ description: Operator represents a key's relationship
+ to the value. Valid operators are Exists and Equal.
+ Defaults to Equal. Exists is equivalent to wildcard
+ for value, so that a pod can tolerate all taints
+ of a particular category.
+ type: string
+ tolerationSeconds:
+ description: TolerationSeconds represents the period
+ of time the toleration (which must be of effect
+ NoExecute, otherwise this field is ignored) tolerates
+ the taint. By default, it is not set, which means
+ tolerate the taint forever (do not evict). Zero
+ and negative values will be treated as 0 (evict
+ immediately) by the system.
+ format: int64
+ type: integer
+ value:
+ description: Value is the taint value the toleration
+ matches to. If the operator is Exists, the value
+ should be empty, otherwise just a regular string.
+ type: string
+ type: object
+ nullable: true
+ type: array
+ writeCacheGroupType:
+ description: WriteCacheGroupType is the write cache raid
+ type.
+ type: string
+ required:
+ - dataRaidGroupType
+ type: object
+ writeCacheRaidGroups:
+ description: WriteCacheRaidGroups is the write cache raid group.
+ items:
+ description: RaidGroup contains the details of a raid group
+ for the pool
+ properties:
+ blockDevices:
+ items:
+ description: CStorPoolInstanceBlockDevice contains the
+ details of block devices that constitutes a raid group.
+ properties:
+ blockDeviceName:
+ description: BlockDeviceName is the name of the
+ block device.
+ type: string
+ capacity:
+ description: Capacity is the capacity of the block
+ device. It is system generated
+ format: int64
+ type: integer
+ devLink:
+ description: DevLink is the dev link for block devices
+ type: string
+ required:
+ - blockDeviceName
+ type: object
+ type: array
+ required:
+ - blockDevices
+ type: object
+ nullable: true
+ type: array
+ required:
+ - dataRaidGroups
+ - nodeSelector
+ type: object
+ type: array
+ priorityClassName:
+ description: DefaultPriorityClassName if specified applies to all
+ the pool pods in the pool spec if the priorityClass at the pool
+ level is not specified.
+ type: string
+ resources:
+ description: DefaultResources are the compute resources required by
+ the cstor-pool container. If the resources at PoolConfig is not
+ specified, this is written to CSPI PoolConfig.
+ nullable: true
+ properties:
+ limits:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ description: 'Limits describes the maximum amount of compute resources
+ allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
+ type: object
+ requests:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ description: 'Requests describes the minimum amount of compute
+ resources required. If Requests is omitted for a container,
+ it defaults to Limits if that is explicitly specified, otherwise
+ to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
+ type: object
+ type: object
+ tolerations:
+ description: Tolerations, if specified, are the pool pod's tolerations
+ If tolerations at PoolConfig is empty, this is written to CSPI PoolConfig.
+ items:
+ description: The pod this Toleration is attached to tolerates any
+ taint that matches the triple using the matching
+ operator .
+ properties:
+ effect:
+ description: Effect indicates the taint effect to match. Empty
+ means match all taint effects. When specified, allowed values
+ are NoSchedule, PreferNoSchedule and NoExecute.
+ type: string
+ key:
+ description: Key is the taint key that the toleration applies
+ to. Empty means match all taint keys. If the key is empty,
+ operator must be Exists; this combination means to match all
+ values and all keys.
+ type: string
+ operator:
+ description: Operator represents a key's relationship to the
+ value. Valid operators are Exists and Equal. Defaults to Equal.
+ Exists is equivalent to wildcard for value, so that a pod
+ can tolerate all taints of a particular category.
+ type: string
+ tolerationSeconds:
+ description: TolerationSeconds represents the period of time
+ the toleration (which must be of effect NoExecute, otherwise
+ this field is ignored) tolerates the taint. By default, it
+ is not set, which means tolerate the taint forever (do not
+ evict). Zero and negative values will be treated as 0 (evict
+ immediately) by the system.
+ format: int64
+ type: integer
+ value:
+ description: Value is the taint value the toleration matches
+ to. If the operator is Exists, the value should be empty,
+ otherwise just a regular string.
+ type: string
+ type: object
+ nullable: true
+ type: array
+ type: object
+ status:
+ description: CStorPoolClusterStatus represents the latest available observations
+ of a CSPC's current state.
+ properties:
+ conditions:
+ description: Current state of CSPC.
+ items:
+ description: CStorPoolClusterCondition describes the state of a
+ CSPC at a certain point.
+ properties:
+ lastTransitionTime:
+ description: Last time the condition transitioned from one status
+ to another.
+ format: date-time
+ type: string
+ lastUpdateTime:
+ description: The last time this condition was updated.
+ format: date-time
+ type: string
+ message:
+ description: A human readable message indicating details about
+ the transition.
+ type: string
+ reason:
+ description: The reason for the condition's last transition.
+ type: string
+ status:
+ description: Status of the condition, one of True, False, Unknown.
+ type: string
+ type:
+ description: Type of CSPC condition.
+ type: string
+ required:
+ - status
+ - type
+ type: object
+ nullable: true
+ type: array
+ desiredInstances:
+ description: DesiredInstances is the number of CSPI(s) that should
+ be provisioned.
+ format: int32
+ nullable: true
+ type: integer
+ healthyInstances:
+ description: HealthyInstances is the number of CSPI(s) that are healthy.
+ format: int32
+ nullable: true
+ type: integer
+ provisionedInstances:
+ description: ProvisionedInstances is the the number of CSPI present
+ at the current state.
+ format: int32
+ nullable: true
+ type: integer
+ type: object
+ versionDetails:
+ description: VersionDetails provides the details for upgrade
+ properties:
+ autoUpgrade:
+ description: If AutoUpgrade is set to true then the resource is upgraded
+ automatically without any manual steps
+ type: boolean
+ desired:
+ description: Desired is the version that we want to upgrade or the
+ control plane version
+ type: string
+ status:
+ description: Status gives the status of reconciliation triggered when
+ the desired and current version are not same
+ properties:
+ current:
+ description: Current is the version of resource
+ type: string
+ dependentsUpgraded:
+ description: DependentsUpgraded gives the details whether all
+ children of a resource are upgraded to desired version or not
+ type: boolean
+ lastUpdateTime:
+ description: LastUpdateTime is the time the status was last updated
+ format: date-time
+ nullable: true
+ type: string
+ message:
+ description: Message is a human readable message if some error
+ occurs
+ type: string
+ reason:
+ description: Reason is the actual reason for the error state
+ type: string
+ state:
+ description: State is the state of reconciliation
+ type: string
+ type: object
+ type: object
+ required:
+ - spec
+ type: object
+ served: true
+ storage: true
+ subresources: {}
+status:
+ acceptedNames:
+ kind: ""
+ plural: ""
+ conditions: []
+ storedVersions: []
diff --git a/deploy/helm/charts/crds/cstorpoolinstance.yaml b/deploy/helm/charts/crds/cstorpoolinstance.yaml
new file mode 100644
index 00000000..7766c6a0
--- /dev/null
+++ b/deploy/helm/charts/crds/cstorpoolinstance.yaml
@@ -0,0 +1,455 @@
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ annotations:
+ controller-gen.kubebuilder.io/version: v0.4.0
+ creationTimestamp: null
+ name: cstorpoolinstances.cstor.openebs.io
+spec:
+ group: cstor.openebs.io
+ names:
+ kind: CStorPoolInstance
+ listKind: CStorPoolInstanceList
+ plural: cstorpoolinstances
+ shortNames:
+ - cspi
+ singular: cstorpoolinstance
+ scope: Namespaced
+ versions:
+ - additionalPrinterColumns:
+ - description: Host name where cstorpool instances scheduled
+ jsonPath: .spec.hostName
+ name: HostName
+ type: string
+ - description: The amount of storage space within the pool that has been physically
+ allocated
+ jsonPath: .status.capacity.used
+ name: Allocated
+ priority: 1
+ type: string
+ - description: The amount of usable free space available in the pool
+ jsonPath: .status.capacity.free
+ name: Free
+ type: string
+ - description: Total amount of usable space in pool
+ jsonPath: .status.capacity.total
+ name: Capacity
+ type: string
+ - description: Identifies the pool read only mode
+ jsonPath: .status.readOnly
+ name: ReadOnly
+ type: boolean
+ - description: Represents no.of replicas present in the pool
+ jsonPath: .status.provisionedReplicas
+ name: ProvisionedReplicas
+ type: integer
+ - description: Represents no.of healthy replicas present in the pool
+ jsonPath: .status.healthyReplicas
+ name: HealthyReplicas
+ type: integer
+ - description: Represents the type of the storage pool
+ jsonPath: .spec.poolConfig.dataRaidGroupType
+ name: Type
+ priority: 1
+ type: string
+ - description: Identifies the current health of the pool
+ jsonPath: .status.phase
+ name: Status
+ type: string
+ - description: Age of CStorPoolInstance
+ jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ name: v1
+ schema:
+ openAPIV3Schema:
+ description: CStorPoolInstance describes a cstor pool instance resource.
+ properties:
+ apiVersion:
+ description: 'APIVersion defines the versioned schema of this representation
+ of an object. Servers should convert recognized schemas to the latest
+ internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
+ type: string
+ kind:
+ description: 'Kind is a string value representing the REST resource this
+ object represents. Servers may infer this from the endpoint the client
+ submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
+ type: string
+ metadata:
+ type: object
+ spec:
+ description: Spec is the specification of the cstorpoolinstance resource.
+ properties:
+ dataRaidGroups:
+ description: DataRaidGroups is the raid group configuration for the
+ given pool.
+ items:
+ description: RaidGroup contains the details of a raid group for
+ the pool
+ properties:
+ blockDevices:
+ items:
+ description: CStorPoolInstanceBlockDevice contains the details
+ of block devices that constitutes a raid group.
+ properties:
+ blockDeviceName:
+ description: BlockDeviceName is the name of the block
+ device.
+ type: string
+ capacity:
+ description: Capacity is the capacity of the block device.
+ It is system generated
+ format: int64
+ type: integer
+ devLink:
+ description: DevLink is the dev link for block devices
+ type: string
+ required:
+ - blockDeviceName
+ type: object
+ type: array
+ required:
+ - blockDevices
+ type: object
+ type: array
+ hostName:
+ description: HostName is the name of kubernetes node where the pool
+ should be created.
+ type: string
+ nodeSelector:
+ additionalProperties:
+ type: string
+ description: NodeSelector is the labels that will be used to select
+ a node for pool provisioning. Required field
+ type: object
+ poolConfig:
+ description: PoolConfig is the default pool config that applies to
+ the pool on node.
+ properties:
+ auxResources:
+ description: AuxResources are the compute resources required by
+ the cstor-pool pod side car containers.
+ nullable: true
+ properties:
+ limits:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ description: 'Limits describes the maximum amount of compute
+ resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
+ type: object
+ requests:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ description: 'Requests describes the minimum amount of compute
+ resources required. If Requests is omitted for a container,
+ it defaults to Limits if that is explicitly specified, otherwise
+ to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
+ type: object
+ type: object
+ compression:
+ description: 'Compression to enable compression Optional -- defaults
+ to off Possible values : lz, off'
+ type: string
+ dataRaidGroupType:
+ description: DataRaidGroupType is the raid type.
+ type: string
+ priorityClassName:
+ description: PriorityClassName if specified applies to this pool
+ pod If left empty, DefaultPriorityClassName is applied. (See
+ CStorPoolClusterSpec.DefaultPriorityClassName) If both are empty,
+ not priority class is applied.
+ nullable: true
+ type: string
+ resources:
+ description: Resources are the compute resources required by the
+ cstor-pool container.
+ nullable: true
+ properties:
+ limits:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ description: 'Limits describes the maximum amount of compute
+ resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
+ type: object
+ requests:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ description: 'Requests describes the minimum amount of compute
+ resources required. If Requests is omitted for a container,
+ it defaults to Limits if that is explicitly specified, otherwise
+ to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
+ type: object
+ type: object
+ roThresholdLimit:
+ description: 'ROThresholdLimit is threshold(percentage base) limit
+ for pool read only mode. If ROThresholdLimit(%) amount of pool
+ storage is reached then pool will set to readonly. NOTE: 1.
+ If ROThresholdLimit is set to 100 then entire pool storage
+ will be used by default it will be set to 85%. 2. ROThresholdLimit
+ value will be 0 <= ROThresholdLimit <= 100.'
+ nullable: true
+ type: integer
+ thickProvision:
+ description: ThickProvision to enable thick provisioning Optional
+ -- defaults to false
+ type: boolean
+ tolerations:
+ description: Tolerations, if specified, the pool pod's tolerations.
+ items:
+ description: The pod this Toleration is attached to tolerates
+ any taint that matches the triple using
+ the matching operator .
+ properties:
+ effect:
+ description: Effect indicates the taint effect to match.
+ Empty means match all taint effects. When specified, allowed
+ values are NoSchedule, PreferNoSchedule and NoExecute.
+ type: string
+ key:
+ description: Key is the taint key that the toleration applies
+ to. Empty means match all taint keys. If the key is empty,
+ operator must be Exists; this combination means to match
+ all values and all keys.
+ type: string
+ operator:
+ description: Operator represents a key's relationship to
+ the value. Valid operators are Exists and Equal. Defaults
+ to Equal. Exists is equivalent to wildcard for value,
+ so that a pod can tolerate all taints of a particular
+ category.
+ type: string
+ tolerationSeconds:
+ description: TolerationSeconds represents the period of
+ time the toleration (which must be of effect NoExecute,
+ otherwise this field is ignored) tolerates the taint.
+ By default, it is not set, which means tolerate the taint
+ forever (do not evict). Zero and negative values will
+ be treated as 0 (evict immediately) by the system.
+ format: int64
+ type: integer
+ value:
+ description: Value is the taint value the toleration matches
+ to. If the operator is Exists, the value should be empty,
+ otherwise just a regular string.
+ type: string
+ type: object
+ nullable: true
+ type: array
+ writeCacheGroupType:
+ description: WriteCacheGroupType is the write cache raid type.
+ type: string
+ required:
+ - dataRaidGroupType
+ type: object
+ writeCacheRaidGroups:
+ description: WriteCacheRaidGroups is the write cache raid group.
+ items:
+ description: RaidGroup contains the details of a raid group for
+ the pool
+ properties:
+ blockDevices:
+ items:
+ description: CStorPoolInstanceBlockDevice contains the details
+ of block devices that constitutes a raid group.
+ properties:
+ blockDeviceName:
+ description: BlockDeviceName is the name of the block
+ device.
+ type: string
+ capacity:
+ description: Capacity is the capacity of the block device.
+ It is system generated
+ format: int64
+ type: integer
+ devLink:
+ description: DevLink is the dev link for block devices
+ type: string
+ required:
+ - blockDeviceName
+ type: object
+ type: array
+ required:
+ - blockDevices
+ type: object
+ nullable: true
+ type: array
+ required:
+ - dataRaidGroups
+ - nodeSelector
+ type: object
+ status:
+ description: Status is the possible statuses of the cstorpoolinstance
+ resource.
+ properties:
+ capacity:
+ description: Capacity describes the capacity details of a cstor pool
+ properties:
+ free:
+ anyOf:
+ - type: integer
+ - type: string
+ description: Amount of usable space in the pool after excluding
+ metadata and raid parity
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ total:
+ anyOf:
+ - type: integer
+ - type: string
+ description: Sum of usable capacity in all the data raidgroups
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ used:
+ anyOf:
+ - type: integer
+ - type: string
+ description: Amount of physical data (and its metadata) written
+ to pool after applying compression, etc..,
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ zfs:
+ description: ZFSCapacityAttributes contains advanced information
+ about pool capacity details
+ properties:
+ logicalUsed:
+ anyOf:
+ - type: integer
+ - type: string
+ description: LogicalUsed is the amount of space that is "logically"
+ consumed by this pool and all its descendents. The logical
+ space ignores the effect of the compression and copies properties,
+ giving a quantity closer to the amount of data that applications
+ see. However, it does include space consumed by metadata.
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ required:
+ - logicalUsed
+ type: object
+ required:
+ - free
+ - total
+ - used
+ - zfs
+ type: object
+ conditions:
+ description: Current state of CSPI with details.
+ items:
+ description: CSPIConditionType describes the state of a CSPI at
+ a certain point.
+ properties:
+ lastTransitionTime:
+ description: Last time the condition transitioned from one status
+ to another.
+ format: date-time
+ type: string
+ lastUpdateTime:
+ description: The last time this condition was updated.
+ format: date-time
+ type: string
+ message:
+ description: A human readable message indicating details about
+ the transition.
+ type: string
+ reason:
+ description: The reason for the condition's last transition.
+ type: string
+ status:
+ description: Status of the condition, one of True, False, Unknown.
+ type: string
+ type:
+ description: Type of CSPC condition.
+ type: string
+ required:
+ - status
+ - type
+ type: object
+ type: array
+ healthyReplicas:
+ description: HealthyReplicas describes the total count of healthy
+ Volume Replicas in the cstor pool
+ format: int32
+ type: integer
+ phase:
+ description: ' The phase of a CStorPool is a simple, high-level summary
+ of the pool state on the node.'
+ type: string
+ provisionedReplicas:
+ description: ProvisionedReplicas describes the total count of Volume
+ Replicas present in the cstor pool
+ format: int32
+ type: integer
+ readOnly:
+ description: ReadOnly if pool is readOnly or not
+ type: boolean
+ required:
+ - healthyReplicas
+ - provisionedReplicas
+ - readOnly
+ type: object
+ versionDetails:
+ description: VersionDetails is the openebs version.
+ properties:
+ autoUpgrade:
+ description: If AutoUpgrade is set to true then the resource is upgraded
+ automatically without any manual steps
+ type: boolean
+ desired:
+ description: Desired is the version that we want to upgrade or the
+ control plane version
+ type: string
+ status:
+ description: Status gives the status of reconciliation triggered when
+ the desired and current version are not same
+ properties:
+ current:
+ description: Current is the version of resource
+ type: string
+ dependentsUpgraded:
+ description: DependentsUpgraded gives the details whether all
+ children of a resource are upgraded to desired version or not
+ type: boolean
+ lastUpdateTime:
+ description: LastUpdateTime is the time the status was last updated
+ format: date-time
+ nullable: true
+ type: string
+ message:
+ description: Message is a human readable message if some error
+ occurs
+ type: string
+ reason:
+ description: Reason is the actual reason for the error state
+ type: string
+ state:
+ description: State is the state of reconciliation
+ type: string
+ type: object
+ type: object
+ required:
+ - spec
+ type: object
+ served: true
+ storage: true
+ subresources: {}
+status:
+ acceptedNames:
+ kind: ""
+ plural: ""
+ conditions: []
+ storedVersions: []
diff --git a/deploy/helm/charts/crds/cstorrestore.yaml b/deploy/helm/charts/crds/cstorrestore.yaml
new file mode 100644
index 00000000..d013407f
--- /dev/null
+++ b/deploy/helm/charts/crds/cstorrestore.yaml
@@ -0,0 +1,106 @@
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ annotations:
+ controller-gen.kubebuilder.io/version: v0.4.0
+ creationTimestamp: null
+ name: cstorrestores.cstor.openebs.io
+spec:
+ group: cstor.openebs.io
+ names:
+ kind: CStorRestore
+ listKind: CStorRestoreList
+ plural: cstorrestores
+ shortNames:
+ - crestore
+ singular: cstorrestore
+ scope: Namespaced
+ versions:
+ - additionalPrinterColumns:
+ - description: Name of the snapshot which is restored
+ jsonPath: .spec.restoreName
+ name: Backup
+ type: string
+ - description: Volume on which restore is performed
+ jsonPath: .spec.volumeName
+ name: Volume
+ type: string
+ - description: Identifies the state of the restore
+ jsonPath: .status
+ name: Status
+ type: string
+ name: v1
+ schema:
+ openAPIV3Schema:
+ description: CStorRestore describes a cstor restore resource created as a
+ custom resource
+ properties:
+ apiVersion:
+ description: 'APIVersion defines the versioned schema of this representation
+ of an object. Servers should convert recognized schemas to the latest
+ internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
+ type: string
+ kind:
+ description: 'Kind is a string value representing the REST resource this
+ object represents. Servers may infer this from the endpoint the client
+ submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
+ type: string
+ metadata:
+ type: object
+ spec:
+ description: CStorRestoreSpec is the spec for a CStorRestore resource
+ properties:
+ localRestore:
+ description: Local defines whether restore is from local/remote
+ type: boolean
+ maxretrycount:
+ description: MaxRestoreRetryCount is the maximum number of attempt,
+ will be performed to restore
+ type: integer
+ restoreName:
+ description: RestoreName holds restore name
+ type: string
+ restoreSrc:
+ description: RestoreSrc can be ip:port in case of restore from remote
+ or volumeName in case of local restore
+ type: string
+ retrycount:
+ description: RetryCount represents the number of restore attempts
+ performed for the restore
+ type: integer
+ size:
+ anyOf:
+ - type: integer
+ - type: string
+ description: Size represents the size of a snapshot to restore
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ storageClass:
+ description: StorageClass represents name of StorageClass of restore
+ volume
+ type: string
+ volumeName:
+ description: VolumeName is used to restore the data to corresponding
+ volume
+ type: string
+ required:
+ - restoreName
+ - restoreSrc
+ - volumeName
+ type: object
+ status:
+ description: CStorRestoreStatus is a string type that represents the status
+ of the restore
+ type: string
+ required:
+ - spec
+ type: object
+ served: true
+ storage: true
+ subresources: {}
+status:
+ acceptedNames:
+ kind: ""
+ plural: ""
+ conditions: []
+ storedVersions: []
diff --git a/deploy/helm/charts/crds/cstorvolume.yaml b/deploy/helm/charts/crds/cstorvolume.yaml
new file mode 100644
index 00000000..e1abc5c7
--- /dev/null
+++ b/deploy/helm/charts/crds/cstorvolume.yaml
@@ -0,0 +1,271 @@
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ annotations:
+ controller-gen.kubebuilder.io/version: v0.4.0
+ creationTimestamp: null
+ name: cstorvolumes.cstor.openebs.io
+spec:
+ group: cstor.openebs.io
+ names:
+ kind: CStorVolume
+ listKind: CStorVolumeList
+ plural: cstorvolumes
+ shortNames:
+ - cv
+ singular: cstorvolume
+ scope: Namespaced
+ versions:
+ - additionalPrinterColumns:
+ - description: Current volume capacity
+ jsonPath: .status.capacity
+ name: Capacity
+ type: string
+ - description: Identifies the current health of the volume
+ jsonPath: .status.phase
+ name: Status
+ type: string
+ - description: Age of CStorVolume
+ jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ name: v1
+ schema:
+ openAPIV3Schema:
+ description: CStorVolume describes a cstor volume resource created as custom
+ resource
+ properties:
+ apiVersion:
+ description: 'APIVersion defines the versioned schema of this representation
+ of an object. Servers should convert recognized schemas to the latest
+ internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
+ type: string
+ kind:
+ description: 'Kind is a string value representing the REST resource this
+ object represents. Servers may infer this from the endpoint the client
+ submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
+ type: string
+ metadata:
+ type: object
+ spec:
+ description: CStorVolumeSpec is the spec for a CStorVolume resource
+ properties:
+ capacity:
+ anyOf:
+ - type: integer
+ - type: string
+ description: Capacity represents the desired size of the underlying
+ volume.
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ consistencyFactor:
+ description: ConsistencyFactor is minimum number of volume replicas
+ i.e. `RF/2 + 1` has to be connected to the target for write operations.
+ Basically more then 50% of replica has to be connected to target.
+ type: integer
+ desiredReplicationFactor:
+ description: DesiredReplicationFactor represents maximum number of
+ replicas that are allowed to connect to the target. Required for
+ scale operations
+ type: integer
+ iqn:
+ description: Target iSCSI Qualified Name.combination of nodeBase
+ type: string
+ replicaDetails:
+ description: ReplicaDetails refers to the trusty replica information
+ properties:
+ knownReplicas:
+ additionalProperties:
+ type: string
+ description: KnownReplicas represents the replicas that target
+ can trust to read data
+ type: object
+ type: object
+ replicationFactor:
+ description: ReplicationFactor represents number of volume replica
+ created during volume provisioning connect to the target
+ type: integer
+ targetIP:
+ description: TargetIP IP of the iSCSI target service
+ type: string
+ targetPort:
+ description: iSCSI Target Port typically TCP ports 3260
+ type: string
+ targetPortal:
+ description: iSCSI Target Portal. The Portal is combination of IP:port
+ (typically TCP ports 3260)
+ type: string
+ type: object
+ status:
+ description: CStorVolumeStatus is for handling status of cvr.
+ properties:
+ capacity:
+ anyOf:
+ - type: integer
+ - type: string
+ description: Represents the actual capacity of the underlying volume.
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ conditions:
+ description: Current Condition of cstorvolume. If underlying persistent
+ volume is being resized then the Condition will be set to 'ResizePending'.
+ items:
+ description: CStorVolumeCondition contains details about state of
+ cstorvolume
+ properties:
+ lastProbeTime:
+ description: Last time we probed the condition.
+ format: date-time
+ type: string
+ lastTransitionTime:
+ description: Last time the condition transitioned from one status
+ to another.
+ format: date-time
+ type: string
+ message:
+ description: Human-readable message indicating details about
+ last transition.
+ type: string
+ reason:
+ description: Unique, this should be a short, machine understandable
+ string that gives the reason for condition's last transition.
+ If it reports "ResizePending" that means the underlying cstorvolume
+ is being resized.
+ type: string
+ status:
+ description: ConditionStatus states in which state condition
+ is present
+ type: string
+ type:
+ description: CStorVolumeConditionType is a valid value of CStorVolumeCondition.Type
+ type: string
+ required:
+ - status
+ - type
+ type: object
+ type: array
+ lastTransitionTime:
+ description: LastTransitionTime refers to the time when the phase
+ changes
+ format: date-time
+ nullable: true
+ type: string
+ lastUpdateTime:
+ description: LastUpdateTime refers to the time when last status updated
+ due to any operations
+ format: date-time
+ nullable: true
+ type: string
+ message:
+ description: A human-readable message indicating details about why
+ the volume is in this state.
+ type: string
+ phase:
+ description: CStorVolumePhase is to hold result of action.
+ type: string
+ replicaDetails:
+ description: ReplicaDetails refers to the trusty replica information
+ properties:
+ knownReplicas:
+ additionalProperties:
+ type: string
+ description: KnownReplicas represents the replicas that target
+ can trust to read data
+ type: object
+ type: object
+ replicaStatuses:
+ items:
+ description: ReplicaStatus stores the status of replicas
+ properties:
+ checkpointedIOSeq:
+ description: Represents IO number of replica persisted on the
+ disk
+ type: string
+ inflightRead:
+ description: Ongoing reads I/O from target to replica
+ type: string
+ inflightSync:
+ description: Ongoing sync I/O from target to replica
+ type: string
+ inflightWrite:
+ description: ongoing writes I/O from target to replica
+ type: string
+ mode:
+ description: Mode represents replica status i.e. Healthy, Degraded
+ type: string
+ quorum:
+ description: 'Quorum indicates wheather data wrtitten to the
+ replica is lost or exists. "0" means: data has been lost(
+ might be ephimeral case) and will recostruct data from other
+ Healthy replicas in a write-only mode 1 means: written data
+ is exists on replica'
+ type: string
+ replicaId:
+ description: ID is replica unique identifier
+ type: string
+ upTime:
+ description: time since the replica connected to target
+ type: integer
+ required:
+ - checkpointedIOSeq
+ - inflightRead
+ - inflightSync
+ - inflightWrite
+ - mode
+ - quorum
+ - replicaId
+ - upTime
+ type: object
+ type: array
+ type: object
+ versionDetails:
+ description: VersionDetails provides the details for upgrade
+ properties:
+ autoUpgrade:
+ description: If AutoUpgrade is set to true then the resource is upgraded
+ automatically without any manual steps
+ type: boolean
+ desired:
+ description: Desired is the version that we want to upgrade or the
+ control plane version
+ type: string
+ status:
+ description: Status gives the status of reconciliation triggered when
+ the desired and current version are not same
+ properties:
+ current:
+ description: Current is the version of resource
+ type: string
+ dependentsUpgraded:
+ description: DependentsUpgraded gives the details whether all
+ children of a resource are upgraded to desired version or not
+ type: boolean
+ lastUpdateTime:
+ description: LastUpdateTime is the time the status was last updated
+ format: date-time
+ nullable: true
+ type: string
+ message:
+ description: Message is a human readable message if some error
+ occurs
+ type: string
+ reason:
+ description: Reason is the actual reason for the error state
+ type: string
+ state:
+ description: State is the state of reconciliation
+ type: string
+ type: object
+ type: object
+ required:
+ - spec
+ type: object
+ served: true
+ storage: true
+ subresources: {}
+status:
+ acceptedNames:
+ kind: ""
+ plural: ""
+ conditions: []
+ storedVersions: []
diff --git a/deploy/helm/charts/crds/cstorvolumeattachment.yaml b/deploy/helm/charts/crds/cstorvolumeattachment.yaml
new file mode 100644
index 00000000..dfdd217f
--- /dev/null
+++ b/deploy/helm/charts/crds/cstorvolumeattachment.yaml
@@ -0,0 +1,17 @@
+---
+apiVersion: apiextensions.k8s.io/v1beta1
+kind: CustomResourceDefinition
+metadata:
+ name: cstorvolumeattachments.cstor.openebs.io
+spec:
+ group: cstor.openebs.io
+ version: v1
+ scope: Namespaced
+ names:
+ plural: cstorvolumeattachments
+ singular: cstorvolumeattachment
+ kind: CStorVolumeAttachment
+ shortNames:
+ - cstorvolumeattachment
+ - cva
+---
\ No newline at end of file
diff --git a/deploy/helm/charts/crds/cstorvolumeconfig.yaml b/deploy/helm/charts/crds/cstorvolumeconfig.yaml
new file mode 100644
index 00000000..d4dfcc33
--- /dev/null
+++ b/deploy/helm/charts/crds/cstorvolumeconfig.yaml
@@ -0,0 +1,639 @@
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ annotations:
+ controller-gen.kubebuilder.io/version: v0.4.0
+ creationTimestamp: null
+ name: cstorvolumeconfigs.cstor.openebs.io
+spec:
+ group: cstor.openebs.io
+ names:
+ kind: CStorVolumeConfig
+ listKind: CStorVolumeConfigList
+ plural: cstorvolumeconfigs
+ shortNames:
+ - cvc
+ singular: cstorvolumeconfig
+ scope: Namespaced
+ versions:
+ - additionalPrinterColumns:
+ - description: Identifies the volume capacity
+ jsonPath: .status.capacity.storage
+ name: Capacity
+ type: string
+ - description: Identifies the volume provisioning status
+ jsonPath: .status.phase
+ name: Status
+ type: string
+ - description: Age of CStorVolumeReplica
+ jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ name: v1
+ schema:
+ openAPIV3Schema:
+ description: CStorVolumeConfig describes a cstor volume config resource created
+ as custom resource. CStorVolumeConfig is a request for creating cstor volume
+ related resources like deployment, svc etc.
+ properties:
+ apiVersion:
+ description: 'APIVersion defines the versioned schema of this representation
+ of an object. Servers should convert recognized schemas to the latest
+ internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
+ type: string
+ kind:
+ description: 'Kind is a string value representing the REST resource this
+ object represents. Servers may infer this from the endpoint the client
+ submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
+ type: string
+ metadata:
+ type: object
+ publish:
+ description: Publish contains info related to attachment of a volume to
+ a node. i.e. NodeId etc.
+ properties:
+ nodeId:
+ description: NodeID contains publish info related to attachment of
+ a volume to a node.
+ type: string
+ type: object
+ spec:
+ description: Spec defines a specification of a cstor volume config required
+ to provisione cstor volume resources
+ properties:
+ capacity:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ description: Capacity represents the actual resources of the underlying
+ cstor volume.
+ type: object
+ cstorVolumeRef:
+ description: CStorVolumeRef has the information about where CstorVolumeClaim
+ is created from.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: 'If referring to a piece of an object instead of
+ an entire object, this string should contain a valid JSON/Go
+ field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within
+ a pod, this would take on a value like: "spec.containers{name}"
+ (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]"
+ (container with index 2 in this pod). This syntax is chosen
+ only to have some well-defined way of referencing a part of
+ an object. TODO: this design is not final and this field is
+ subject to change in the future.'
+ type: string
+ kind:
+ description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
+ type: string
+ name:
+ description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+ type: string
+ namespace:
+ description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/'
+ type: string
+ resourceVersion:
+ description: 'Specific resourceVersion to which this reference
+ is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency'
+ type: string
+ uid:
+ description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids'
+ type: string
+ type: object
+ cstorVolumeSource:
+ description: CStorVolumeSource contains the source volumeName@snapShotname
+ combaination. This will be filled only if it is a clone creation.
+ type: string
+ policy:
+ description: Policy contains volume specific required policies target
+ and replicas
+ properties:
+ provision:
+ description: replicaAffinity is set to true then volume replica
+ resources need to be distributed across the pool instances
+ properties:
+ blockSize:
+ description: BlockSize is the logical block size in multiple
+ of 512 bytes BlockSize specifies the block size of the volume.
+ The blocksize cannot be changed once the volume has been
+ written, so it should be set at volume creation time. The
+ default blocksize for volumes is 4 Kbytes. Any power of
+ 2 from 512 bytes to 128 Kbytes is valid.
+ format: int32
+ type: integer
+ replicaAffinity:
+ description: replicaAffinity is set to true then volume replica
+ resources need to be distributed across the cstor pool instances
+ based on the given topology
+ type: boolean
+ required:
+ - replicaAffinity
+ type: object
+ replica:
+ description: ReplicaSpec represents configuration related to replicas
+ resources
+ properties:
+ compression:
+ description: The zle compression algorithm compresses runs
+ of zeros.
+ type: string
+ zvolWorkers:
+ description: IOWorkers represents number of threads that executes
+ client IOs
+ type: string
+ type: object
+ replicaPoolInfo:
+ description: 'ReplicaPoolInfo holds the pool information of volume
+ replicas. Ex: If volume is provisioned on which CStor pool volume
+ replicas exist'
+ items:
+ description: ReplicaPoolInfo represents the pool information
+ of volume replica
+ properties:
+ poolName:
+ description: PoolName represents the pool name where volume
+ replica exists
+ type: string
+ required:
+ - poolName
+ type: object
+ type: array
+ target:
+ description: TargetSpec represents configuration related to cstor
+ target and its resources
+ properties:
+ affinity:
+ description: PodAffinity if specified, are the target pod's
+ affinities
+ properties:
+ preferredDuringSchedulingIgnoredDuringExecution:
+ description: The scheduler will prefer to schedule pods
+ to nodes that satisfy the affinity expressions specified
+ by this field, but it may choose a node that violates
+ one or more of the expressions. The node that is most
+ preferred is the one with the greatest sum of weights,
+ i.e. for each node that meets all of the scheduling
+ requirements (resource request, requiredDuringScheduling
+ affinity expressions, etc.), compute a sum by iterating
+ through the elements of this field and adding "weight"
+ to the sum if the node has pods which matches the corresponding
+ podAffinityTerm; the node(s) with the highest sum are
+ the most preferred.
+ items:
+ description: The weights of all of the matched WeightedPodAffinityTerm
+ fields are added per-node to find the most preferred
+ node(s)
+ properties:
+ podAffinityTerm:
+ description: Required. A pod affinity term, associated
+ with the corresponding weight.
+ properties:
+ labelSelector:
+ description: A label query over a set of resources,
+ in this case pods.
+ properties:
+ matchExpressions:
+ description: matchExpressions is a list
+ of label selector requirements. The requirements
+ are ANDed.
+ items:
+ description: A label selector requirement
+ is a selector that contains values,
+ a key, and an operator that relates
+ the key and values.
+ properties:
+ key:
+ description: key is the label key
+ that the selector applies to.
+ type: string
+ operator:
+ description: operator represents a
+ key's relationship to a set of values.
+ Valid operators are In, NotIn, Exists
+ and DoesNotExist.
+ type: string
+ values:
+ description: values is an array of
+ string values. If the operator is
+ In or NotIn, the values array must
+ be non-empty. If the operator is
+ Exists or DoesNotExist, the values
+ array must be empty. This array
+ is replaced during a strategic merge
+ patch.
+ items:
+ type: string
+ type: array
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ description: matchLabels is a map of {key,value}
+ pairs. A single {key,value} in the matchLabels
+ map is equivalent to an element of matchExpressions,
+ whose key field is "key", the operator
+ is "In", and the values array contains
+ only "value". The requirements are ANDed.
+ type: object
+ type: object
+ namespaces:
+ description: namespaces specifies which namespaces
+ the labelSelector applies to (matches against);
+ null or empty list means "this pod's namespace"
+ items:
+ type: string
+ type: array
+ topologyKey:
+ description: This pod should be co-located (affinity)
+ or not co-located (anti-affinity) with the
+ pods matching the labelSelector in the specified
+ namespaces, where co-located is defined as
+ running on a node whose value of the label
+ with key topologyKey matches that of any node
+ on which any of the selected pods is running.
+ Empty topologyKey is not allowed.
+ type: string
+ required:
+ - topologyKey
+ type: object
+ weight:
+ description: weight associated with matching the
+ corresponding podAffinityTerm, in the range 1-100.
+ format: int32
+ type: integer
+ required:
+ - podAffinityTerm
+ - weight
+ type: object
+ type: array
+ requiredDuringSchedulingIgnoredDuringExecution:
+ description: If the affinity requirements specified by
+ this field are not met at scheduling time, the pod will
+ not be scheduled onto the node. If the affinity requirements
+ specified by this field cease to be met at some point
+ during pod execution (e.g. due to a pod label update),
+ the system may or may not try to eventually evict the
+ pod from its node. When there are multiple elements,
+ the lists of nodes corresponding to each podAffinityTerm
+ are intersected, i.e. all terms must be satisfied.
+ items:
+ description: Defines a set of pods (namely those matching
+ the labelSelector relative to the given namespace(s))
+ that this pod should be co-located (affinity) or not
+ co-located (anti-affinity) with, where co-located
+ is defined as running on a node whose value of the
+ label with key matches that of any node
+ on which a pod of the set of pods is running
+ properties:
+ labelSelector:
+ description: A label query over a set of resources,
+ in this case pods.
+ properties:
+ matchExpressions:
+ description: matchExpressions is a list of label
+ selector requirements. The requirements are
+ ANDed.
+ items:
+ description: A label selector requirement
+ is a selector that contains values, a key,
+ and an operator that relates the key and
+ values.
+ properties:
+ key:
+ description: key is the label key that
+ the selector applies to.
+ type: string
+ operator:
+ description: operator represents a key's
+ relationship to a set of values. Valid
+ operators are In, NotIn, Exists and
+ DoesNotExist.
+ type: string
+ values:
+ description: values is an array of string
+ values. If the operator is In or NotIn,
+ the values array must be non-empty.
+ If the operator is Exists or DoesNotExist,
+ the values array must be empty. This
+ array is replaced during a strategic
+ merge patch.
+ items:
+ type: string
+ type: array
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ description: matchLabels is a map of {key,value}
+ pairs. A single {key,value} in the matchLabels
+ map is equivalent to an element of matchExpressions,
+ whose key field is "key", the operator is
+ "In", and the values array contains only "value".
+ The requirements are ANDed.
+ type: object
+ type: object
+ namespaces:
+ description: namespaces specifies which namespaces
+ the labelSelector applies to (matches against);
+ null or empty list means "this pod's namespace"
+ items:
+ type: string
+ type: array
+ topologyKey:
+ description: This pod should be co-located (affinity)
+ or not co-located (anti-affinity) with the pods
+ matching the labelSelector in the specified namespaces,
+ where co-located is defined as running on a node
+ whose value of the label with key topologyKey
+ matches that of any node on which any of the selected
+ pods is running. Empty topologyKey is not allowed.
+ type: string
+ required:
+ - topologyKey
+ type: object
+ type: array
+ type: object
+ auxResources:
+ description: AuxResources are the compute resources required
+ by the cstor-target pod side car containers.
+ properties:
+ limits:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ description: 'Limits describes the maximum amount of compute
+ resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
+ type: object
+ requests:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ description: 'Requests describes the minimum amount of
+ compute resources required. If Requests is omitted for
+ a container, it defaults to Limits if that is explicitly
+ specified, otherwise to an implementation-defined value.
+ More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
+ type: object
+ type: object
+ luWorkers:
+ description: IOWorkers sets the number of threads that are
+ working on above queue
+ format: int64
+ type: integer
+ monitor:
+ description: Monitor enables or disables the target exporter
+ sidecar
+ type: boolean
+ nodeSelector:
+ additionalProperties:
+ type: string
+ description: NodeSelector is the labels that will be used
+ to select a node for target pod scheduleing Required field
+ type: object
+ priorityClassName:
+ description: PriorityClassName if specified applies to this
+ target pod If left empty, no priority class is applied.
+ type: string
+ queueDepth:
+ description: QueueDepth sets the queue size at iSCSI target
+ which limits the ongoing IO count from client
+ type: string
+ replicationFactor:
+ description: ReplicationFactor represents maximum number of
+ replicas that are allowed to connect to the target
+ format: int64
+ type: integer
+ resources:
+ description: Resources are the compute resources required
+ by the cstor-target container.
+ properties:
+ limits:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ description: 'Limits describes the maximum amount of compute
+ resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
+ type: object
+ requests:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ description: 'Requests describes the minimum amount of
+ compute resources required. If Requests is omitted for
+ a container, it defaults to Limits if that is explicitly
+ specified, otherwise to an implementation-defined value.
+ More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
+ type: object
+ type: object
+ tolerations:
+ description: Tolerations, if specified, are the target pod's
+ tolerations
+ items:
+ description: The pod this Toleration is attached to tolerates
+ any taint that matches the triple using
+ the matching operator .
+ properties:
+ effect:
+ description: Effect indicates the taint effect to match.
+ Empty means match all taint effects. When specified,
+ allowed values are NoSchedule, PreferNoSchedule and
+ NoExecute.
+ type: string
+ key:
+ description: Key is the taint key that the toleration
+ applies to. Empty means match all taint keys. If the
+ key is empty, operator must be Exists; this combination
+ means to match all values and all keys.
+ type: string
+ operator:
+ description: Operator represents a key's relationship
+ to the value. Valid operators are Exists and Equal.
+ Defaults to Equal. Exists is equivalent to wildcard
+ for value, so that a pod can tolerate all taints of
+ a particular category.
+ type: string
+ tolerationSeconds:
+ description: TolerationSeconds represents the period
+ of time the toleration (which must be of effect NoExecute,
+ otherwise this field is ignored) tolerates the taint.
+ By default, it is not set, which means tolerate the
+ taint forever (do not evict). Zero and negative values
+ will be treated as 0 (evict immediately) by the system.
+ format: int64
+ type: integer
+ value:
+ description: Value is the taint value the toleration
+ matches to. If the operator is Exists, the value should
+ be empty, otherwise just a regular string.
+ type: string
+ type: object
+ type: array
+ type: object
+ type: object
+ provision:
+ description: Provision represents the initial volume configuration
+ for the underlying cstor volume based on the persistent volume request
+ by user. Provision properties are immutable
+ properties:
+ capacity:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ description: Capacity represents initial capacity of volume replica
+ required during volume clone operations to maintain some metadata
+ info related to child resources like snapshot, cloned volumes.
+ type: object
+ replicaCount:
+ description: ReplicaCount represents initial cstor volume replica
+ count, its will not be updated later on based on scale up/down
+ operations, only readonly operations and validations.
+ type: integer
+ required:
+ - capacity
+ - replicaCount
+ type: object
+ required:
+ - capacity
+ - policy
+ - provision
+ type: object
+ status:
+ description: Status represents the current information/status for the
+ cstor volume config, populated by the controller.
+ properties:
+ capacity:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ description: Capacity the actual resources of the underlying volume.
+ type: object
+ condition:
+ items:
+ description: CStorVolumeConfigCondition contains details about state
+ of cstor volume
+ properties:
+ lastProbeTime:
+ description: Last time we probed the condition.
+ format: date-time
+ type: string
+ lastTransitionTime:
+ description: Last time the condition transitioned from one status
+ to another.
+ format: date-time
+ type: string
+ message:
+ description: Human-readable message indicating details about
+ last transition.
+ type: string
+ reason:
+ description: Reason is a brief CamelCase string that describes
+ any failure
+ type: string
+ type:
+ description: Current Condition of cstor volume config. If underlying
+ persistent volume is being resized then the Condition will
+ be set to 'ResizeStarted' etc
+ type: string
+ required:
+ - message
+ - reason
+ - type
+ type: object
+ type: array
+ phase:
+ description: Phase represents the current phase of CStorVolumeConfig.
+ type: string
+ poolInfo:
+ description: PoolInfo represents current pool names where volume replicas
+ exists
+ items:
+ type: string
+ type: array
+ type: object
+ versionDetails:
+ description: VersionDetails provides the details for upgrade
+ properties:
+ autoUpgrade:
+ description: If AutoUpgrade is set to true then the resource is upgraded
+ automatically without any manual steps
+ type: boolean
+ desired:
+ description: Desired is the version that we want to upgrade or the
+ control plane version
+ type: string
+ status:
+ description: Status gives the status of reconciliation triggered when
+ the desired and current version are not same
+ properties:
+ current:
+ description: Current is the version of resource
+ type: string
+ dependentsUpgraded:
+ description: DependentsUpgraded gives the details whether all
+ children of a resource are upgraded to desired version or not
+ type: boolean
+ lastUpdateTime:
+ description: LastUpdateTime is the time the status was last updated
+ format: date-time
+ nullable: true
+ type: string
+ message:
+ description: Message is a human readable message if some error
+ occurs
+ type: string
+ reason:
+ description: Reason is the actual reason for the error state
+ type: string
+ state:
+ description: State is the state of reconciliation
+ type: string
+ type: object
+ type: object
+ required:
+ - spec
+ - status
+ - versionDetails
+ type: object
+ served: true
+ storage: true
+ subresources: {}
+status:
+ acceptedNames:
+ kind: ""
+ plural: ""
+ conditions: []
+ storedVersions: []
diff --git a/deploy/helm/charts/crds/cstorvolumepolicy.yaml b/deploy/helm/charts/crds/cstorvolumepolicy.yaml
new file mode 100644
index 00000000..cd0b942c
--- /dev/null
+++ b/deploy/helm/charts/crds/cstorvolumepolicy.yaml
@@ -0,0 +1,425 @@
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ annotations:
+ controller-gen.kubebuilder.io/version: v0.4.0
+ creationTimestamp: null
+ name: cstorvolumepolicies.cstor.openebs.io
+spec:
+ group: cstor.openebs.io
+ names:
+ kind: CStorVolumePolicy
+ listKind: CStorVolumePolicyList
+ plural: cstorvolumepolicies
+ shortNames:
+ - cvp
+ singular: cstorvolumepolicy
+ scope: Namespaced
+ versions:
+ - name: v1
+ schema:
+ openAPIV3Schema:
+ description: CStorVolumePolicy describes a configuration required for cstor
+ volume resources
+ properties:
+ apiVersion:
+ description: 'APIVersion defines the versioned schema of this representation
+ of an object. Servers should convert recognized schemas to the latest
+ internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
+ type: string
+ kind:
+ description: 'Kind is a string value representing the REST resource this
+ object represents. Servers may infer this from the endpoint the client
+ submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
+ type: string
+ metadata:
+ type: object
+ spec:
+ description: Spec defines a configuration info of a cstor volume required
+ to provisione cstor volume resources
+ properties:
+ provision:
+ description: replicaAffinity is set to true then volume replica resources
+ need to be distributed across the pool instances
+ properties:
+ blockSize:
+ description: BlockSize is the logical block size in multiple of
+ 512 bytes BlockSize specifies the block size of the volume.
+ The blocksize cannot be changed once the volume has been written,
+ so it should be set at volume creation time. The default blocksize
+ for volumes is 4 Kbytes. Any power of 2 from 512 bytes to 128
+ Kbytes is valid.
+ format: int32
+ type: integer
+ replicaAffinity:
+ description: replicaAffinity is set to true then volume replica
+ resources need to be distributed across the cstor pool instances
+ based on the given topology
+ type: boolean
+ required:
+ - replicaAffinity
+ type: object
+ replica:
+ description: ReplicaSpec represents configuration related to replicas
+ resources
+ properties:
+ compression:
+ description: The zle compression algorithm compresses runs of
+ zeros.
+ type: string
+ zvolWorkers:
+ description: IOWorkers represents number of threads that executes
+ client IOs
+ type: string
+ type: object
+ replicaPoolInfo:
+ description: 'ReplicaPoolInfo holds the pool information of volume
+ replicas. Ex: If volume is provisioned on which CStor pool volume
+ replicas exist'
+ items:
+ description: ReplicaPoolInfo represents the pool information of
+ volume replica
+ properties:
+ poolName:
+ description: PoolName represents the pool name where volume
+ replica exists
+ type: string
+ required:
+ - poolName
+ type: object
+ type: array
+ target:
+ description: TargetSpec represents configuration related to cstor
+ target and its resources
+ properties:
+ affinity:
+ description: PodAffinity if specified, are the target pod's affinities
+ properties:
+ preferredDuringSchedulingIgnoredDuringExecution:
+ description: The scheduler will prefer to schedule pods to
+ nodes that satisfy the affinity expressions specified by
+ this field, but it may choose a node that violates one or
+ more of the expressions. The node that is most preferred
+ is the one with the greatest sum of weights, i.e. for each
+ node that meets all of the scheduling requirements (resource
+ request, requiredDuringScheduling affinity expressions,
+ etc.), compute a sum by iterating through the elements of
+ this field and adding "weight" to the sum if the node has
+ pods which matches the corresponding podAffinityTerm; the
+ node(s) with the highest sum are the most preferred.
+ items:
+ description: The weights of all of the matched WeightedPodAffinityTerm
+ fields are added per-node to find the most preferred node(s)
+ properties:
+ podAffinityTerm:
+ description: Required. A pod affinity term, associated
+ with the corresponding weight.
+ properties:
+ labelSelector:
+ description: A label query over a set of resources,
+ in this case pods.
+ properties:
+ matchExpressions:
+ description: matchExpressions is a list of label
+ selector requirements. The requirements are
+ ANDed.
+ items:
+ description: A label selector requirement
+ is a selector that contains values, a key,
+ and an operator that relates the key and
+ values.
+ properties:
+ key:
+ description: key is the label key that
+ the selector applies to.
+ type: string
+ operator:
+ description: operator represents a key's
+ relationship to a set of values. Valid
+ operators are In, NotIn, Exists and
+ DoesNotExist.
+ type: string
+ values:
+ description: values is an array of string
+ values. If the operator is In or NotIn,
+ the values array must be non-empty.
+ If the operator is Exists or DoesNotExist,
+ the values array must be empty. This
+ array is replaced during a strategic
+ merge patch.
+ items:
+ type: string
+ type: array
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ description: matchLabels is a map of {key,value}
+ pairs. A single {key,value} in the matchLabels
+ map is equivalent to an element of matchExpressions,
+ whose key field is "key", the operator is
+ "In", and the values array contains only "value".
+ The requirements are ANDed.
+ type: object
+ type: object
+ namespaces:
+ description: namespaces specifies which namespaces
+ the labelSelector applies to (matches against);
+ null or empty list means "this pod's namespace"
+ items:
+ type: string
+ type: array
+ topologyKey:
+ description: This pod should be co-located (affinity)
+ or not co-located (anti-affinity) with the pods
+ matching the labelSelector in the specified namespaces,
+ where co-located is defined as running on a node
+ whose value of the label with key topologyKey
+ matches that of any node on which any of the selected
+ pods is running. Empty topologyKey is not allowed.
+ type: string
+ required:
+ - topologyKey
+ type: object
+ weight:
+ description: weight associated with matching the corresponding
+ podAffinityTerm, in the range 1-100.
+ format: int32
+ type: integer
+ required:
+ - podAffinityTerm
+ - weight
+ type: object
+ type: array
+ requiredDuringSchedulingIgnoredDuringExecution:
+ description: If the affinity requirements specified by this
+ field are not met at scheduling time, the pod will not be
+ scheduled onto the node. If the affinity requirements specified
+ by this field cease to be met at some point during pod execution
+ (e.g. due to a pod label update), the system may or may
+ not try to eventually evict the pod from its node. When
+ there are multiple elements, the lists of nodes corresponding
+ to each podAffinityTerm are intersected, i.e. all terms
+ must be satisfied.
+ items:
+ description: Defines a set of pods (namely those matching
+ the labelSelector relative to the given namespace(s))
+ that this pod should be co-located (affinity) or not co-located
+ (anti-affinity) with, where co-located is defined as running
+ on a node whose value of the label with key
+ matches that of any node on which a pod of the set of
+ pods is running
+ properties:
+ labelSelector:
+ description: A label query over a set of resources,
+ in this case pods.
+ properties:
+ matchExpressions:
+ description: matchExpressions is a list of label
+ selector requirements. The requirements are ANDed.
+ items:
+ description: A label selector requirement is a
+ selector that contains values, a key, and an
+ operator that relates the key and values.
+ properties:
+ key:
+ description: key is the label key that the
+ selector applies to.
+ type: string
+ operator:
+ description: operator represents a key's relationship
+ to a set of values. Valid operators are
+ In, NotIn, Exists and DoesNotExist.
+ type: string
+ values:
+ description: values is an array of string
+ values. If the operator is In or NotIn,
+ the values array must be non-empty. If the
+ operator is Exists or DoesNotExist, the
+ values array must be empty. This array is
+ replaced during a strategic merge patch.
+ items:
+ type: string
+ type: array
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ description: matchLabels is a map of {key,value}
+ pairs. A single {key,value} in the matchLabels
+ map is equivalent to an element of matchExpressions,
+ whose key field is "key", the operator is "In",
+ and the values array contains only "value". The
+ requirements are ANDed.
+ type: object
+ type: object
+ namespaces:
+ description: namespaces specifies which namespaces the
+ labelSelector applies to (matches against); null or
+ empty list means "this pod's namespace"
+ items:
+ type: string
+ type: array
+ topologyKey:
+ description: This pod should be co-located (affinity)
+ or not co-located (anti-affinity) with the pods matching
+ the labelSelector in the specified namespaces, where
+ co-located is defined as running on a node whose value
+ of the label with key topologyKey matches that of
+ any node on which any of the selected pods is running.
+ Empty topologyKey is not allowed.
+ type: string
+ required:
+ - topologyKey
+ type: object
+ type: array
+ type: object
+ auxResources:
+ description: AuxResources are the compute resources required by
+ the cstor-target pod side car containers.
+ properties:
+ limits:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ description: 'Limits describes the maximum amount of compute
+ resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
+ type: object
+ requests:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ description: 'Requests describes the minimum amount of compute
+ resources required. If Requests is omitted for a container,
+ it defaults to Limits if that is explicitly specified, otherwise
+ to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
+ type: object
+ type: object
+ luWorkers:
+ description: IOWorkers sets the number of threads that are working
+ on above queue
+ format: int64
+ type: integer
+ monitor:
+ description: Monitor enables or disables the target exporter sidecar
+ type: boolean
+ nodeSelector:
+ additionalProperties:
+ type: string
+ description: NodeSelector is the labels that will be used to select
+ a node for target pod scheduleing Required field
+ type: object
+ priorityClassName:
+ description: PriorityClassName if specified applies to this target
+ pod If left empty, no priority class is applied.
+ type: string
+ queueDepth:
+ description: QueueDepth sets the queue size at iSCSI target which
+ limits the ongoing IO count from client
+ type: string
+ replicationFactor:
+ description: ReplicationFactor represents maximum number of replicas
+ that are allowed to connect to the target
+ format: int64
+ type: integer
+ resources:
+ description: Resources are the compute resources required by the
+ cstor-target container.
+ properties:
+ limits:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ description: 'Limits describes the maximum amount of compute
+ resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
+ type: object
+ requests:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ description: 'Requests describes the minimum amount of compute
+ resources required. If Requests is omitted for a container,
+ it defaults to Limits if that is explicitly specified, otherwise
+ to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
+ type: object
+ type: object
+ tolerations:
+ description: Tolerations, if specified, are the target pod's tolerations
+ items:
+ description: The pod this Toleration is attached to tolerates
+ any taint that matches the triple using
+ the matching operator .
+ properties:
+ effect:
+ description: Effect indicates the taint effect to match.
+ Empty means match all taint effects. When specified, allowed
+ values are NoSchedule, PreferNoSchedule and NoExecute.
+ type: string
+ key:
+ description: Key is the taint key that the toleration applies
+ to. Empty means match all taint keys. If the key is empty,
+ operator must be Exists; this combination means to match
+ all values and all keys.
+ type: string
+ operator:
+ description: Operator represents a key's relationship to
+ the value. Valid operators are Exists and Equal. Defaults
+ to Equal. Exists is equivalent to wildcard for value,
+ so that a pod can tolerate all taints of a particular
+ category.
+ type: string
+ tolerationSeconds:
+ description: TolerationSeconds represents the period of
+ time the toleration (which must be of effect NoExecute,
+ otherwise this field is ignored) tolerates the taint.
+ By default, it is not set, which means tolerate the taint
+ forever (do not evict). Zero and negative values will
+ be treated as 0 (evict immediately) by the system.
+ format: int64
+ type: integer
+ value:
+ description: Value is the taint value the toleration matches
+ to. If the operator is Exists, the value should be empty,
+ otherwise just a regular string.
+ type: string
+ type: object
+ type: array
+ type: object
+ type: object
+ status:
+ description: CStorVolumePolicyStatus is for handling status of CstorVolumePolicy
+ properties:
+ phase:
+ type: string
+ type: object
+ required:
+ - spec
+ type: object
+ served: true
+ storage: true
+status:
+ acceptedNames:
+ kind: ""
+ plural: ""
+ conditions: []
+ storedVersions: []
diff --git a/deploy/helm/charts/crds/cstorvolumereplica.yaml b/deploy/helm/charts/crds/cstorvolumereplica.yaml
new file mode 100644
index 00000000..edc7b40a
--- /dev/null
+++ b/deploy/helm/charts/crds/cstorvolumereplica.yaml
@@ -0,0 +1,216 @@
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ annotations:
+ controller-gen.kubebuilder.io/version: v0.4.0
+ creationTimestamp: null
+ name: cstorvolumereplicas.cstor.openebs.io
+spec:
+ group: cstor.openebs.io
+ names:
+ kind: CStorVolumeReplica
+ listKind: CStorVolumeReplicaList
+ plural: cstorvolumereplicas
+ shortNames:
+ - cvr
+ singular: cstorvolumereplica
+ scope: Namespaced
+ versions:
+ - additionalPrinterColumns:
+ - description: The amount of disk space consumed by a dataset and all its descendents
+ jsonPath: .status.capacity.total
+ name: Allocated
+ type: string
+ - description: The amount of space that is logically consumed by this dataset
+ jsonPath: .status.capacity.used
+ name: Used
+ type: string
+ - description: Identifies the current state of the replicas
+ jsonPath: .status.phase
+ name: Status
+ type: string
+ - description: Age of CStorVolumeReplica
+ jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ name: v1
+ schema:
+ openAPIV3Schema:
+ description: CStorVolumeReplica describes a cstor volume resource created
+ as custom resource
+ properties:
+ apiVersion:
+ description: 'APIVersion defines the versioned schema of this representation
+ of an object. Servers should convert recognized schemas to the latest
+ internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
+ type: string
+ kind:
+ description: 'Kind is a string value representing the REST resource this
+ object represents. Servers may infer this from the endpoint the client
+ submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
+ type: string
+ metadata:
+ type: object
+ spec:
+ description: CStorVolumeReplicaSpec is the spec for a CStorVolumeReplica
+ resource
+ properties:
+ blockSize:
+ description: BlockSize is the logical block size in multiple of 512
+ bytes BlockSize specifies the block size of the volume. The blocksize
+ cannot be changed once the volume has been written, so it should
+ be set at volume creation time. The default blocksize for volumes
+ is 4 Kbytes. Any power of 2 from 512 bytes to 128 Kbytes is valid.
+ format: int32
+ type: integer
+ capacity:
+ description: Represents the actual capacity of the underlying volume
+ type: string
+ compression:
+ description: 'Controls the compression algorithm used for this volumes
+ examples: on|off|gzip|gzip-N|lz4|lzjb|zle'
+ type: string
+ replicaid:
+ description: ReplicaID is unique number to identify the replica
+ type: string
+ targetIP:
+ description: TargetIP represents iscsi target IP through which replica
+ cummunicates IO workloads and other volume operations like snapshot
+ and resize requests
+ type: string
+ zvolWorkers:
+ description: ZvolWorkers represents number of threads that executes
+ client IOs
+ type: string
+ type: object
+ status:
+ description: CStorVolumeReplicaStatus is for handling status of cvr.
+ properties:
+ capacity:
+ description: CStorVolumeCapacityDetails represents capacity info of
+ replica
+ properties:
+ total:
+ description: The amount of space consumed by this volume replica
+ and all its descendents
+ type: string
+ used:
+ description: The amount of space that is "logically" accessible
+ by this dataset. The logical space ignores the effect of the
+ compression and copies properties, giving a quantity closer
+ to the amount of data that applications see. However, it does
+ include space consumed by metadata
+ type: string
+ required:
+ - total
+ - used
+ type: object
+ lastTransitionTime:
+ description: LastTransitionTime refers to the time when the phase
+ changes
+ format: date-time
+ nullable: true
+ type: string
+ lastUpdateTime:
+ description: The last updated time
+ format: date-time
+ nullable: true
+ type: string
+ message:
+ description: A human readable message indicating details about the
+ transition.
+ type: string
+ pendingSnapshots:
+ additionalProperties:
+ description: CStorSnapshotInfo represents the snapshot information
+ related to particular snapshot
+ properties:
+ logicalReferenced:
+ description: LogicalReferenced describes the amount of space
+ that is "logically" accessable by this snapshot. This logical
+ space ignores the effect of the compression and copies properties,
+ giving a quantity closer to the amount of data that application
+ see. It also includes space consumed by metadata.
+ format: int64
+ type: integer
+ required:
+ - logicalReferenced
+ type: object
+ description: PendingSnapshots contains list of pending snapshots that
+ are not yet available on this replica
+ type: object
+ phase:
+ description: CStorVolumeReplicaPhase is to holds different phases
+ of replica
+ type: string
+ snapshots:
+ additionalProperties:
+ description: CStorSnapshotInfo represents the snapshot information
+ related to particular snapshot
+ properties:
+ logicalReferenced:
+ description: LogicalReferenced describes the amount of space
+ that is "logically" accessable by this snapshot. This logical
+ space ignores the effect of the compression and copies properties,
+ giving a quantity closer to the amount of data that application
+ see. It also includes space consumed by metadata.
+ format: int64
+ type: integer
+ required:
+ - logicalReferenced
+ type: object
+ description: Snapshots contains list of snapshots, and their properties,
+ created on CVR
+ type: object
+ type: object
+ versionDetails:
+ description: VersionDetails provides the details for upgrade
+ properties:
+ autoUpgrade:
+ description: If AutoUpgrade is set to true then the resource is upgraded
+ automatically without any manual steps
+ type: boolean
+ desired:
+ description: Desired is the version that we want to upgrade or the
+ control plane version
+ type: string
+ status:
+ description: Status gives the status of reconciliation triggered when
+ the desired and current version are not same
+ properties:
+ current:
+ description: Current is the version of resource
+ type: string
+ dependentsUpgraded:
+ description: DependentsUpgraded gives the details whether all
+ children of a resource are upgraded to desired version or not
+ type: boolean
+ lastUpdateTime:
+ description: LastUpdateTime is the time the status was last updated
+ format: date-time
+ nullable: true
+ type: string
+ message:
+ description: Message is a human readable message if some error
+ occurs
+ type: string
+ reason:
+ description: Reason is the actual reason for the error state
+ type: string
+ state:
+ description: State is the state of reconciliation
+ type: string
+ type: object
+ type: object
+ required:
+ - spec
+ type: object
+ served: true
+ storage: true
+ subresources: {}
+status:
+ acceptedNames:
+ kind: ""
+ plural: ""
+ conditions: []
+ storedVersions: []
diff --git a/deploy/helm/charts/crds/migrationtask.yaml b/deploy/helm/charts/crds/migrationtask.yaml
new file mode 100644
index 00000000..4dd2e543
--- /dev/null
+++ b/deploy/helm/charts/crds/migrationtask.yaml
@@ -0,0 +1,128 @@
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ annotations:
+ controller-gen.kubebuilder.io/version: v0.4.0
+ creationTimestamp: null
+ name: migrationtasks.openebs.io
+spec:
+ group: openebs.io
+ names:
+ kind: MigrationTask
+ listKind: MigrationTaskList
+ plural: migrationtasks
+ shortNames:
+ - mtask
+ singular: migrationtask
+ scope: Namespaced
+ versions:
+ - name: v1alpha1
+ schema:
+ openAPIV3Schema:
+ description: MigrationTask represents an migration task
+ properties:
+ apiVersion:
+ description: 'APIVersion defines the versioned schema of this representation
+ of an object. Servers should convert recognized schemas to the latest
+ internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
+ type: string
+ kind:
+ description: 'Kind is a string value representing the REST resource this
+ object represents. Servers may infer this from the endpoint the client
+ submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
+ type: string
+ metadata:
+ type: object
+ spec:
+ description: Spec i.e. specifications of the MigrationTask
+ properties:
+ cstorPool:
+ description: MigrateCStorPool contains the details of the cstor pool
+ to be migrated
+ properties:
+ rename:
+ description: If a CSPC with the same name as SPC already exists
+ then we can rename SPC during migration using Rename
+ type: string
+ spcName:
+ description: SPCName contains the name of the storage pool claim
+ to be migrated
+ type: string
+ type: object
+ cstorVolume:
+ description: MigrateCStorVolume contains the details of the cstor
+ volume to be migrated
+ properties:
+ pvName:
+ description: PVName contains the name of the pv associated with
+ the cstor volume to be migrated
+ type: string
+ type: object
+ type: object
+ status:
+ description: Status of MigrationTask
+ properties:
+ completedTime:
+ description: CompletedTime of Migrate
+ format: date-time
+ nullable: true
+ type: string
+ migrationDetailedStatuses:
+ description: MigrationDetailedStatuses contains the list of statuses
+ of each step
+ items:
+ description: MigrationDetailedStatuses represents the latest available
+ observations of a MigrationTask current state.
+ properties:
+ lastUpdatedAt:
+ description: LastUpdatedTime of a MigrateStep
+ format: date-time
+ nullable: true
+ type: string
+ message:
+ description: A human-readable message indicating details about
+ why the migrationStep is in this state
+ type: string
+ phase:
+ description: Phase indicates if the MigrateStep is waiting,
+ errored or completed.
+ type: string
+ reason:
+ description: Reason is a brief CamelCase string that describes
+ any failure and is meant for machine parsing and tidy display
+ in the CLI
+ type: string
+ startTime:
+ description: StartTime of a MigrateStep
+ format: date-time
+ nullable: true
+ type: string
+ step:
+ type: string
+ type: object
+ type: array
+ phase:
+ description: Phase indicates if a migrationTask is started, success
+ or errored
+ type: string
+ retries:
+ description: Retries is the number of times the job attempted to migration
+ the resource
+ type: integer
+ startTime:
+ description: StartTime of Migrate
+ format: date-time
+ nullable: true
+ type: string
+ type: object
+ required:
+ - spec
+ type: object
+ served: true
+ storage: true
+status:
+ acceptedNames:
+ kind: ""
+ plural: ""
+ conditions: []
+ storedVersions: []
diff --git a/deploy/helm/charts/crds/upgradetask.yaml b/deploy/helm/charts/crds/upgradetask.yaml
new file mode 100644
index 00000000..13126416
--- /dev/null
+++ b/deploy/helm/charts/crds/upgradetask.yaml
@@ -0,0 +1,24 @@
+---
+apiVersion: apiextensions.k8s.io/v1beta1
+kind: CustomResourceDefinition
+metadata:
+ # name must match the spec fields below, and be in the form: .
+ name: upgradetasks.openebs.io
+spec:
+ # group name to use for REST API: /apis//
+ group: openebs.io
+ # version name to use for REST API: /apis//
+ version: v1alpha1
+ # either Namespaced or Cluster
+ scope: Namespaced
+ names:
+ # plural name to be used in the URL: /apis///
+ plural: upgradetasks
+ # singular name to be used as an alias on the CLI and for display
+ singular: upgradetask
+ # kind is normally the CamelCased singular type. Your resource manifests use this.
+ kind: UpgradeTask
+ # shortNames allow shorter string to match your resource on the CLI
+ shortNames:
+ - utask
+---
diff --git a/deploy/helm/charts/crds/volumesnapshot.yaml b/deploy/helm/charts/crds/volumesnapshot.yaml
new file mode 100644
index 00000000..5628fb39
--- /dev/null
+++ b/deploy/helm/charts/crds/volumesnapshot.yaml
@@ -0,0 +1,146 @@
+apiVersion: apiextensions.k8s.io/v1beta1
+kind: CustomResourceDefinition
+metadata:
+ name: volumesnapshots.snapshot.storage.k8s.io
+spec:
+ group: snapshot.storage.k8s.io
+ names:
+ kind: VolumeSnapshot
+ listKind: VolumeSnapshotList
+ plural: volumesnapshots
+ singular: volumesnapshot
+ scope: Namespaced
+ subresources:
+ status: {}
+ # this field is supported in kubernetes 1.15+
+ # https://v1-15.docs.kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/
+ #preserveUnknownFields: false
+ validation:
+ openAPIV3Schema:
+ description: VolumeSnapshot is a user's request for either creating a point-in-time
+ snapshot of a persistent volume, or binding to a pre-existing snapshot.
+ properties:
+ apiVersion:
+ description: 'APIVersion defines the versioned schema of this representation
+ of an object. Servers should convert recognized schemas to the latest
+ internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources'
+ type: string
+ kind:
+ description: 'Kind is a string value representing the REST resource this
+ object represents. Servers may infer this from the endpoint the client
+ submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds'
+ type: string
+ spec:
+ description: 'spec defines the desired characteristics of a snapshot requested
+ by a user. More info: https://kubernetes.io/docs/concepts/storage/volume-snapshots#volumesnapshots
+ Required.'
+ properties:
+ source:
+ description: source specifies where a snapshot will be created from.
+ This field is immutable after creation. Required.
+ properties:
+ persistentVolumeClaimName:
+ description: persistentVolumeClaimName specifies the name of the
+ PersistentVolumeClaim object in the same namespace as the VolumeSnapshot
+ object where the snapshot should be dynamically taken from. This
+ field is immutable.
+ type: string
+ volumeSnapshotContentName:
+ description: volumeSnapshotContentName specifies the name of a pre-existing
+ VolumeSnapshotContent object. This field is immutable.
+ type: string
+ type: object
+ volumeSnapshotClassName:
+ description: 'volumeSnapshotClassName is the name of the VolumeSnapshotClass
+ requested by the VolumeSnapshot. If not specified, the default snapshot
+ class will be used if one exists. If not specified, and there is no
+ default snapshot class, dynamic snapshot creation will fail. Empty
+ string is not allowed for this field. TODO(xiangqian): a webhook validation
+ on empty string. More info: https://kubernetes.io/docs/concepts/storage/volume-snapshot-classes'
+ type: string
+ required:
+ - source
+ type: object
+ status:
+ description: 'status represents the current information of a snapshot. NOTE:
+ status can be modified by sources other than system controllers, and must
+ not be depended upon for accuracy. Controllers should only use information
+ from the VolumeSnapshotContent object after verifying that the binding
+ is accurate and complete.'
+ properties:
+ boundVolumeSnapshotContentName:
+ description: 'boundVolumeSnapshotContentName represents the name of
+ the VolumeSnapshotContent object to which the VolumeSnapshot object
+ is bound. If not specified, it indicates that the VolumeSnapshot object
+ has not been successfully bound to a VolumeSnapshotContent object
+ yet. NOTE: Specified boundVolumeSnapshotContentName alone does not
+ mean binding is valid. Controllers MUST always verify bidirectional
+ binding between VolumeSnapshot and VolumeSnapshotContent to
+ avoid possible security issues.'
+ type: string
+ creationTime:
+ description: creationTime is the timestamp when the point-in-time snapshot
+ is taken by the underlying storage system. In dynamic snapshot creation
+ case, this field will be filled in with the "creation_time" value
+ returned from CSI "CreateSnapshotRequest" gRPC call. For a pre-existing
+ snapshot, this field will be filled with the "creation_time" value
+ returned from the CSI "ListSnapshots" gRPC call if the driver supports
+ it. If not specified, it indicates that the creation time of the snapshot
+ is unknown.
+ format: date-time
+ type: string
+ error:
+ description: error is the last observed error during snapshot creation,
+ if any. This field could be helpful to upper level controllers(i.e.,
+ application controller) to decide whether they should continue on
+ waiting for the snapshot to be created based on the type of error
+ reported.
+ properties:
+ message:
+ description: 'message is a string detailing the encountered error
+ during snapshot creation if specified. NOTE: message may be logged,
+ and it should not contain sensitive information.'
+ type: string
+ time:
+ description: time is the timestamp when the error was encountered.
+ format: date-time
+ type: string
+ type: object
+ readyToUse:
+ description: readyToUse indicates if a snapshot is ready to be used
+ to restore a volume. In dynamic snapshot creation case, this field
+ will be filled in with the "ready_to_use" value returned from CSI
+ "CreateSnapshotRequest" gRPC call. For a pre-existing snapshot, this
+ field will be filled with the "ready_to_use" value returned from the
+ CSI "ListSnapshots" gRPC call if the driver supports it, otherwise,
+ this field will be set to "True". If not specified, it means the readiness
+ of a snapshot is unknown.
+ type: boolean
+ restoreSize:
+ description: restoreSize represents the complete size of the snapshot
+ in bytes. In dynamic snapshot creation case, this field will be filled
+ in with the "size_bytes" value returned from CSI "CreateSnapshotRequest"
+ gRPC call. For a pre-existing snapshot, this field will be filled
+ with the "size_bytes" value returned from the CSI "ListSnapshots"
+ gRPC call if the driver supports it. When restoring a volume from
+ this snapshot, the size of the volume MUST NOT be smaller than the
+ restoreSize if it is specified, otherwise the restoration will fail.
+ If not specified, it indicates that the size is unknown.
+ type: string
+ type: object
+ required:
+ - spec
+ type: object
+ version: v1beta1
+ versions:
+ - name: v1beta1
+ served: true
+ storage: true
+status:
+ acceptedNames:
+ kind: ""
+ plural: ""
+ conditions: []
+ storedVersions: []
+
+---
\ No newline at end of file
diff --git a/deploy/helm/charts/crds/volumesnapshotclass.yaml b/deploy/helm/charts/crds/volumesnapshotclass.yaml
new file mode 100644
index 00000000..3204fc49
--- /dev/null
+++ b/deploy/helm/charts/crds/volumesnapshotclass.yaml
@@ -0,0 +1,70 @@
+---
+apiVersion: apiextensions.k8s.io/v1beta1
+kind: CustomResourceDefinition
+metadata:
+ name: volumesnapshotclasses.snapshot.storage.k8s.io
+spec:
+ group: snapshot.storage.k8s.io
+ names:
+ kind: VolumeSnapshotClass
+ listKind: VolumeSnapshotClassList
+ plural: volumesnapshotclasses
+ singular: volumesnapshotclass
+ scope: Cluster
+ # this field is supported in kubernetes 1.15+
+ # https://v1-15.docs.kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/
+ #preserveUnknownFields: false
+ validation:
+ openAPIV3Schema:
+ description: VolumeSnapshotClass specifies parameters that a underlying storage
+ system uses when creating a volume snapshot. A specific VolumeSnapshotClass
+ is used by specifying its name in a VolumeSnapshot object. VolumeSnapshotClasses
+ are non-namespaced
+ properties:
+ apiVersion:
+ description: 'APIVersion defines the versioned schema of this representation
+ of an object. Servers should convert recognized schemas to the latest
+ internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources'
+ type: string
+ deletionPolicy:
+ description: deletionPolicy determines whether a VolumeSnapshotContent created
+ through the VolumeSnapshotClass should be deleted when its bound VolumeSnapshot
+ is deleted. Supported values are "Retain" and "Delete". "Retain" means
+ that the VolumeSnapshotContent and its physical snapshot on underlying
+ storage system are kept. "Delete" means that the VolumeSnapshotContent
+ and its physical snapshot on underlying storage system are deleted. Required.
+ enum:
+ - Delete
+ - Retain
+ type: string
+ driver:
+ description: driver is the name of the storage driver that handles this
+ VolumeSnapshotClass. Required.
+ type: string
+ kind:
+ description: 'Kind is a string value representing the REST resource this
+ object represents. Servers may infer this from the endpoint the client
+ submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds'
+ type: string
+ parameters:
+ additionalProperties:
+ type: string
+ description: parameters is a key-value map with storage driver specific
+ parameters for creating snapshots. These values are opaque to Kubernetes.
+ type: object
+ required:
+ - deletionPolicy
+ - driver
+ type: object
+ version: v1beta1
+ versions:
+ - name: v1beta1
+ served: true
+ storage: true
+status:
+ acceptedNames:
+ kind: ""
+ plural: ""
+ conditions: []
+ storedVersions: []
+---
\ No newline at end of file
diff --git a/deploy/helm/charts/crds/volumesnapshotcontent.yaml b/deploy/helm/charts/crds/volumesnapshotcontent.yaml
new file mode 100644
index 00000000..3ea4331a
--- /dev/null
+++ b/deploy/helm/charts/crds/volumesnapshotcontent.yaml
@@ -0,0 +1,198 @@
+apiVersion: apiextensions.k8s.io/v1beta1
+kind: CustomResourceDefinition
+metadata:
+ name: volumesnapshotcontents.snapshot.storage.k8s.io
+spec:
+ group: snapshot.storage.k8s.io
+ names:
+ kind: VolumeSnapshotContent
+ listKind: VolumeSnapshotContentList
+ plural: volumesnapshotcontents
+ singular: volumesnapshotcontent
+ scope: Cluster
+ subresources:
+ status: {}
+ # this field is supported in kubernetes 1.15+
+ # https://v1-15.docs.kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/
+ #preserveUnknownFields: false
+ validation:
+ openAPIV3Schema:
+ description: VolumeSnapshotContent represents the actual "on-disk" snapshot
+ object in the underlying storage system
+ properties:
+ apiVersion:
+ description: 'APIVersion defines the versioned schema of this representation
+ of an object. Servers should convert recognized schemas to the latest
+ internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources'
+ type: string
+ kind:
+ description: 'Kind is a string value representing the REST resource this
+ object represents. Servers may infer this from the endpoint the client
+ submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds'
+ type: string
+ spec:
+ description: spec defines properties of a VolumeSnapshotContent created
+ by the underlying storage system. Required.
+ properties:
+ deletionPolicy:
+ description: deletionPolicy determines whether this VolumeSnapshotContent
+ and its physical snapshot on the underlying storage system should
+ be deleted when its bound VolumeSnapshot is deleted. Supported values
+ are "Retain" and "Delete". "Retain" means that the VolumeSnapshotContent
+ and its physical snapshot on underlying storage system are kept. "Delete"
+ means that the VolumeSnapshotContent and its physical snapshot on
+ underlying storage system are deleted. In dynamic snapshot creation
+ case, this field will be filled in with the "DeletionPolicy" field
+ defined in the VolumeSnapshotClass the VolumeSnapshot refers to. For
+ pre-existing snapshots, users MUST specify this field when creating
+ the VolumeSnapshotContent object. Required.
+ enum:
+ - Delete
+ - Retain
+ type: string
+ driver:
+ description: driver is the name of the CSI driver used to create the
+ physical snapshot on the underlying storage system. This MUST be the
+ same as the name returned by the CSI GetPluginName() call for that
+ driver. Required.
+ type: string
+ source:
+ description: source specifies from where a snapshot will be created.
+ This field is immutable after creation. Required.
+ properties:
+ snapshotHandle:
+ description: snapshotHandle specifies the CSI "snapshot_id" of a
+ pre-existing snapshot on the underlying storage system. This field
+ is immutable.
+ type: string
+ volumeHandle:
+ description: volumeHandle specifies the CSI "volume_id" of the volume
+ from which a snapshot should be dynamically taken from. This field
+ is immutable.
+ type: string
+ type: object
+ volumeSnapshotClassName:
+ description: name of the VolumeSnapshotClass to which this snapshot
+ belongs.
+ type: string
+ volumeSnapshotRef:
+ description: volumeSnapshotRef specifies the VolumeSnapshot object to
+ which this VolumeSnapshotContent object is bound. VolumeSnapshot.Spec.VolumeSnapshotContentName
+ field must reference to this VolumeSnapshotContent's name for the
+ bidirectional binding to be valid. For a pre-existing VolumeSnapshotContent
+ object, name and namespace of the VolumeSnapshot object MUST be provided
+ for binding to happen. This field is immutable after creation. Required.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: 'If referring to a piece of an object instead of an
+ entire object, this string should contain a valid JSON/Go field
+ access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within
+ a pod, this would take on a value like: "spec.containers{name}"
+ (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]"
+ (container with index 2 in this pod). This syntax is chosen only
+ to have some well-defined way of referencing a part of an object.
+ TODO: this design is not final and this field is subject to change
+ in the future.'
+ type: string
+ kind:
+ description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds'
+ type: string
+ name:
+ description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+ type: string
+ namespace:
+ description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/'
+ type: string
+ resourceVersion:
+ description: 'Specific resourceVersion to which this reference is
+ made, if any. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency'
+ type: string
+ uid:
+ description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids'
+ type: string
+ type: object
+ required:
+ - deletionPolicy
+ - driver
+ - source
+ - volumeSnapshotRef
+ type: object
+ status:
+ description: status represents the current information of a snapshot.
+ properties:
+ creationTime:
+ description: creationTime is the timestamp when the point-in-time snapshot
+ is taken by the underlying storage system. In dynamic snapshot creation
+ case, this field will be filled in with the "creation_time" value
+ returned from CSI "CreateSnapshotRequest" gRPC call. For a pre-existing
+ snapshot, this field will be filled with the "creation_time" value
+ returned from the CSI "ListSnapshots" gRPC call if the driver supports
+ it. If not specified, it indicates the creation time is unknown. The
+ format of this field is a Unix nanoseconds time encoded as an int64.
+ On Unix, the command `date +%s%N` returns the current time in nanoseconds
+ since 1970-01-01 00:00:00 UTC.
+ format: int64
+ type: integer
+ error:
+ description: error is the latest observed error during snapshot creation,
+ if any.
+ properties:
+ message:
+ description: 'message is a string detailing the encountered error
+ during snapshot creation if specified. NOTE: message may be logged,
+ and it should not contain sensitive information.'
+ type: string
+ time:
+ description: time is the timestamp when the error was encountered.
+ format: date-time
+ type: string
+ type: object
+ readyToUse:
+ description: readyToUse indicates if a snapshot is ready to be used
+ to restore a volume. In dynamic snapshot creation case, this field
+ will be filled in with the "ready_to_use" value returned from CSI
+ "CreateSnapshotRequest" gRPC call. For a pre-existing snapshot, this
+ field will be filled with the "ready_to_use" value returned from the
+ CSI "ListSnapshots" gRPC call if the driver supports it, otherwise,
+ this field will be set to "True". If not specified, it means the readiness
+ of a snapshot is unknown.
+ type: boolean
+ restoreSize:
+ description: restoreSize represents the complete size of the snapshot
+ in bytes. In dynamic snapshot creation case, this field will be filled
+ in with the "size_bytes" value returned from CSI "CreateSnapshotRequest"
+ gRPC call. For a pre-existing snapshot, this field will be filled
+ with the "size_bytes" value returned from the CSI "ListSnapshots"
+ gRPC call if the driver supports it. When restoring a volume from
+ this snapshot, the size of the volume MUST NOT be smaller than the
+ restoreSize if it is specified, otherwise the restoration will fail.
+ If not specified, it indicates that the size is unknown.
+ format: int64
+ minimum: 0
+ type: integer
+ snapshotHandle:
+ description: snapshotHandle is the CSI "snapshot_id" of a snapshot on
+ the underlying storage system. If not specified, it indicates that
+ dynamic snapshot creation has either failed or it is still in progress.
+ type: string
+ type: object
+ required:
+ - spec
+ type: object
+ version: v1beta1
+ versions:
+ - name: v1beta1
+ served: true
+ storage: true
+status:
+ acceptedNames:
+ kind: ""
+ plural: ""
+ conditions: []
+ storedVersions: []
+---
\ No newline at end of file
diff --git a/deploy/helm/charts/templates/NOTES.txt b/deploy/helm/charts/templates/NOTES.txt
new file mode 100644
index 00000000..1dadf47d
--- /dev/null
+++ b/deploy/helm/charts/templates/NOTES.txt
@@ -0,0 +1,11 @@
+The OpenEBS cstor has been installed check its status by running:
+$ kubectl get pods -n {{ .Release.Namespace }}
+
+Use `kubectl get bd -n {{ .Release.Namespace }} ` to see the list of
+blockdevices attached to the Kubernetes cluster nodes.
+
+For more information, visit our Slack at https://openebs.io/community or view
+the documentation online at http://docs.openebs.io/.
+
+For more information related to cstor pool and volume provisioning, visit
+https://github.com/openebs/cstor-operators/tree/master/docs .
diff --git a/deploy/helm/charts/templates/_helpers.tpl b/deploy/helm/charts/templates/_helpers.tpl
new file mode 100644
index 00000000..2366146e
--- /dev/null
+++ b/deploy/helm/charts/templates/_helpers.tpl
@@ -0,0 +1,179 @@
+{{/* vim: set filetype=mustache: */}}
+{{/*
+Expand the name of the chart.
+*/}}
+{{- define "cstor.name" -}}
+{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
+{{- end }}
+
+{{/*
+Create a default fully qualified app name.
+We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
+If release name contains chart name it will be used as a full name.
+*/}}
+{{- define "cstor.fullname" -}}
+{{- if .Values.fullnameOverride }}
+{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
+{{- else }}
+{{- $name := default .Chart.Name .Values.nameOverride }}
+{{- if contains $name .Release.Name }}
+{{- .Release.Name | trunc 63 | trimSuffix "-" }}
+{{- else }}
+{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
+{{- end }}
+{{- end }}
+{{- end }}
+
+{{/*
+Create chart name and version as used by the chart label.
+*/}}
+{{- define "cstor.chart" -}}
+{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
+{{- end }}
+
+{{/*
+Create the name of the service account to use
+*/}}
+{{- define "cstor.serviceAccountName" -}}
+{{- if .Values.serviceAccount.create }}
+{{- default (include "cstor.fullname" .) .Values.serviceAccount.name }}
+{{- else }}
+{{- default "default" .Values.serviceAccount.name }}
+{{- end }}
+{{- end }}
+
+{{/*
+Define meta labels for cstor components
+*/}}
+{{- define "cstor.common.metaLabels" -}}
+chart: {{ template "cstor.chart" . }}
+heritage: {{ .Release.Service }}
+openebs.io/version: {{ .Values.release.version | quote }}
+{{- end -}}
+
+{{/*
+Create match labels for cstor admission server
+*/}}
+{{- define "cstor.admissionServer.matchLabels" -}}
+app: {{ .Values.admissionServer.componentName | quote }}
+release: {{ .Release.Name }}
+component: {{ .Values.admissionServer.componentName | quote }}
+{{- end -}}
+
+{{/*
+Create component labels for cstor admission server
+*/}}
+{{- define "cstor.admissionServer.componentLabels" -}}
+openebs.io/component-name: {{ .Values.admissionServer.componentName | quote }}
+{{- end -}}
+
+{{/*
+Create labels for cstor admission server
+*/}}
+{{- define "cstor.admissionServer.labels" -}}
+{{ include "cstor.common.metaLabels" . }}
+{{ include "cstor.admissionServer.matchLabels" . }}
+{{ include "cstor.admissionServer.componentLabels" . }}
+{{- end -}}
+
+{{/*
+Create match labels for cstor cspc operator
+*/}}
+{{- define "cstor.cspcOperator.matchLabels" -}}
+name: {{ .Values.cspcOperator.componentName | quote }}
+release: {{ .Release.Name }}
+component: {{ .Values.cspcOperator.componentName | quote }}
+{{- end -}}
+
+{{/*
+Create component labels cstor cspc operator
+*/}}
+{{- define "cstor.cspcOperator.componentLabels" -}}
+openebs.io/component-name: {{ .Values.cspcOperator.componentName | quote }}
+{{- end -}}
+
+
+{{/*
+Create labels for cstor cspc operator
+*/}}
+{{- define "cstor.cspcOperator.labels" -}}
+{{ include "cstor.common.metaLabels" . }}
+{{ include "cstor.cspcOperator.matchLabels" . }}
+{{ include "cstor.cspcOperator.componentLabels" . }}
+{{- end -}}
+
+{{/*
+Create match labels for cstor cvc operator
+*/}}
+{{- define "cstor.cvcOperator.matchLabels" -}}
+name: {{ .Values.cvcOperator.componentName | quote }}
+release: {{ .Release.Name }}
+component: {{ .Values.cvcOperator.componentName | quote }}
+{{- end -}}
+
+{{/*
+Create component labels cstor cvc operator
+*/}}
+{{- define "cstor.cvcOperator.componentLabels" -}}
+openebs.io/component-name: {{ .Values.cvcOperator.componentName | quote }}
+{{- end -}}
+
+
+{{/*
+Create labels for cstor cvc operator
+*/}}
+{{- define "cstor.cvcOperator.labels" -}}
+{{ include "cstor.common.metaLabels" . }}
+{{ include "cstor.cvcOperator.matchLabels" . }}
+{{ include "cstor.cvcOperator.componentLabels" . }}
+{{- end -}}
+
+{{/*
+Create match labels for cstor csi node operator
+*/}}
+{{- define "cstor.csiNode.matchLabels" -}}
+name: {{ .Values.csiNode.componentName | quote }}
+release: {{ .Release.Name }}
+component: {{ .Values.csiNode.componentName | quote }}
+{{- end -}}
+
+{{/*
+Create component labels cstor csi node operator
+*/}}
+{{- define "cstor.csiNode.componentLabels" -}}
+openebs.io/component-name: {{ .Values.csiNode.componentName | quote }}
+{{- end -}}
+
+{{/*
+Create labels for cstor csi node operator
+*/}}
+{{- define "cstor.csiNode.labels" -}}
+{{ include "cstor.common.metaLabels" . }}
+{{ include "cstor.csiNode.matchLabels" . }}
+{{ include "cstor.csiNode.componentLabels" . }}
+{{- end -}}
+
+{{/*
+Create match labels for cstor csi controller
+*/}}
+{{- define "cstor.csiController.matchLabels" -}}
+name: {{ .Values.csiController.componentName | quote }}
+release: {{ .Release.Name }}
+component: {{ .Values.csiController.componentName | quote }}
+{{- end -}}
+
+{{/*
+Create component labels cstor csi controller
+*/}}
+{{- define "cstor.csiController.componentLabels" -}}
+openebs.io/component-name: {{ .Values.csiController.componentName | quote }}
+{{- end -}}
+
+{{/*
+Create labels for cstor csi controller
+*/}}
+{{- define "cstor.csiController.labels" -}}
+{{ include "cstor.common.metaLabels" . }}
+{{ include "cstor.csiController.matchLabels" . }}
+{{ include "cstor.csiController.componentLabels" . }}
+{{- end -}}
diff --git a/deploy/helm/charts/templates/admission-server.yaml b/deploy/helm/charts/templates/admission-server.yaml
new file mode 100644
index 00000000..0909c9d7
--- /dev/null
+++ b/deploy/helm/charts/templates/admission-server.yaml
@@ -0,0 +1,59 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: {{ template "cstor.fullname" . }}-admission-server
+ {{- with .Values.admissionServer.annotations }}
+ annotations: {{ toYaml . | nindent 4 }}
+ {{- end }}
+ labels:
+ {{- include "cstor.admissionServer.labels" . | nindent 4 }}
+spec:
+ replicas: {{ .Values.admissionServer.replicas }}
+ strategy:
+ type: Recreate
+ rollingUpdate: null
+ selector:
+ matchLabels:
+ {{- include "cstor.admissionServer.matchLabels" . | nindent 6 }}
+ template:
+ metadata:
+ labels:
+ {{- include "cstor.admissionServer.labels" . | nindent 8 }}
+ {{- if .Values.admissionServer.podLabels }}
+ {{ toYaml .Values.admissionServer.podLabels | nindent 8 }}
+ {{- end }}
+ spec:
+ serviceAccountName: {{ .Values.serviceAccount.cstorOperator.name }}
+ containers:
+ - name: {{ template "cstor.fullname" . }}-admission-webhook
+ image: "{{ .Values.admissionServer.image.registry }}{{ .Values.admissionServer.image.repository }}:{{ .Values.admissionServer.image.tag }}"
+ imagePullPolicy: {{ .Values.admissionServer.image.pullPolicy }}
+ resources:
+{{ toYaml .Values.admissionServer.resources | indent 12 }}
+ args:
+ - -alsologtostderr
+ - -v=2
+ - 2>&1
+ env:
+ - name: OPENEBS_NAMESPACE
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.namespace
+ - name: ADMISSION_WEBHOOK_FAILURE_POLICY
+ value: {{ .Values.admissionServer.failurePolicy }}
+{{- if .Values.imagePullSecrets }}
+ imagePullSecrets:
+{{ toYaml .Values.imagePullSecrets | indent 2 }}
+{{- end }}
+{{- if .Values.admissionServer.nodeSelector }}
+ nodeSelector:
+{{ toYaml .Values.admissionServer.nodeSelector | indent 8 }}
+{{- end }}
+{{- if .Values.admissionServer.securityContext }}
+ securityContext:
+{{ toYaml .Values.admissionServer.securityContext | indent 8 }}
+{{- end }}
+{{- if .Values.admissionServer.tolerations }}
+ tolerations:
+{{ toYaml .Values.admissionServer.tolerations | indent 8 }}
+{{- end }}
diff --git a/deploy/helm/charts/templates/csi-controller-rbac.yaml b/deploy/helm/charts/templates/csi-controller-rbac.yaml
new file mode 100644
index 00000000..7e2cb587
--- /dev/null
+++ b/deploy/helm/charts/templates/csi-controller-rbac.yaml
@@ -0,0 +1,190 @@
+{{- if .Values.serviceAccount.csiController.create -}}
+kind: ServiceAccount
+apiVersion: v1
+metadata:
+ name: {{ .Values.serviceAccount.csiController.name }}
+ labels:
+ {{- include "cstor.csiController.labels" . | nindent 4 }}
+ namespace: {{ .Release.Namespace }}
+{{- end }}
+{{- if .Values.rbac.create }}
+---
+# cstor csi roles and bindings
+kind: ClusterRoleBinding
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: openebs-cstor-csi-snapshotter-binding
+ labels:
+ {{- include "cstor.csiController.labels" . | nindent 4 }}
+subjects:
+ - kind: ServiceAccount
+ name: {{ .Values.serviceAccount.csiController.name }}
+ namespace: {{ .Release.Namespace }}
+roleRef:
+ kind: ClusterRole
+ name: openebs-cstor-csi-snapshotter-role
+ apiGroup: rbac.authorization.k8s.io
+---
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: openebs-cstor-csi-snapshotter-role
+ labels:
+ {{- include "cstor.csiController.labels" . | nindent 4 }}
+rules:
+ - apiGroups: [""]
+ resources: ["persistentvolumes"]
+ verbs: ["get", "list", "watch"]
+ - apiGroups: [""]
+ resources: ["persistentvolumeclaims"]
+ verbs: ["get", "list", "watch"]
+ - apiGroups: ["storage.k8s.io"]
+ resources: ["storageclasses"]
+ verbs: ["get", "list", "watch"]
+ - apiGroups: [""]
+ resources: ["events"]
+ verbs: ["list", "watch", "create", "update", "patch"]
+ - apiGroups: [""]
+ resources: ["secrets"]
+ verbs: ["get", "list"]
+ - apiGroups: ["snapshot.storage.k8s.io"]
+ resources: ["volumesnapshotclasses"]
+ verbs: ["get", "list", "watch"]
+ - apiGroups: ["snapshot.storage.k8s.io"]
+ resources: ["volumesnapshotcontents"]
+ verbs: ["create", "get", "list", "watch", "update", "delete"]
+ - apiGroups: ["snapshot.storage.k8s.io"]
+ resources: ["volumesnapshotcontents/status"]
+ verbs: ["update"]
+ - apiGroups: ["snapshot.storage.k8s.io"]
+ resources: ["volumesnapshots"]
+ verbs: ["get", "list", "watch", "update"]
+ - apiGroups: ["snapshot.storage.k8s.io"]
+ resources: ["volumesnapshots/status"]
+ verbs: ["update"]
+ - apiGroups: ["coordination.k8s.io"]
+ resources: ["leases"]
+ verbs: ["get", "watch", "list", "delete", "update", "create"]
+ - apiGroups: ["apiextensions.k8s.io"]
+ resources: ["customresourcedefinitions"]
+ verbs: ["create", "list", "watch", "delete", "get", "update"]
+---
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: openebs-cstor-csi-provisioner-role
+ labels:
+ {{- include "cstor.csiController.labels" . | nindent 4 }}
+rules:
+ - apiGroups: [""]
+ resources: ["secrets","namespaces"]
+ verbs: ["get", "list"]
+ - apiGroups: [""]
+ resources: ["persistentvolumes", "services"]
+ verbs: ["get", "list", "watch", "create", "delete", "update", "patch"]
+ - apiGroups: [""]
+ resources: ["persistentvolumeclaims"]
+ verbs: ["get", "list", "watch", "update"]
+ - apiGroups: [""]
+ resources: ["persistentvolumeclaims/status"]
+ verbs: ["update", "patch"]
+ - apiGroups: ["storage.k8s.io"]
+ resources: ["storageclasses", "csinodes"]
+ verbs: ["get", "list", "watch"]
+ - apiGroups: [""]
+ resources: ["events"]
+ verbs: ["list", "watch", "create", "update", "patch"]
+ - apiGroups: ["snapshot.storage.k8s.io"]
+ resources: ["volumesnapshots"]
+ verbs: ["get", "list"]
+ - apiGroups: ["storage.k8s.io"]
+ resources: ["volumeattachments"]
+ verbs: ["get", "list", "watch", "create", "delete", "update", "patch"]
+ - apiGroups: ["snapshot.storage.k8s.io"]
+ resources: ["volumesnapshotcontents"]
+ verbs: ["get", "list"]
+ - apiGroups: ["coordination.k8s.io"]
+ resources: ["leases"]
+ verbs: ["*"]
+ - apiGroups: ["*"]
+ resources: ["cstorvolumeattachments", "cstorvolumes","cstorvolumeconfigs"]
+ verbs: ["*"]
+---
+kind: ClusterRoleBinding
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: openebs-cstor-csi-provisioner-binding
+ labels:
+ {{- include "cstor.csiController.labels" . | nindent 4 }}
+subjects:
+ - kind: ServiceAccount
+ name: {{ .Values.serviceAccount.csiController.name }}
+ namespace: {{ .Release.Namespace }}
+roleRef:
+ kind: ClusterRole
+ name: openebs-cstor-csi-provisioner-role
+ apiGroup: rbac.authorization.k8s.io
+---
+############################## CSI- Attacher #######################
+# Attacher must be able to work with PVs, nodes and VolumeAttachments
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: openebs-cstor-csi-attacher-role
+ labels:
+ {{- include "cstor.csiController.labels" . | nindent 4 }}
+rules:
+ - apiGroups: [""]
+ resources: ["persistentvolumes"]
+ verbs: ["get", "list", "watch", "update"]
+ - apiGroups: [""]
+ resources: ["nodes"]
+ verbs: ["get", "list", "watch"]
+ - apiGroups: ["csi.storage.k8s.io"]
+ resources: ["csinodeinfos"]
+ verbs: ["get", "list", "watch"]
+ - apiGroups: ["storage.k8s.io"]
+ resources: ["volumeattachments", "csinodes"]
+ verbs: ["get", "list", "watch", "update"]
+---
+kind: ClusterRoleBinding
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: openebs-cstor-csi-attacher-binding
+ labels:
+ {{- include "cstor.csiController.labels" . | nindent 4 }}
+subjects:
+ - kind: ServiceAccount
+ name: {{ .Values.serviceAccount.csiController.name }}
+ namespace: {{ .Release.Namespace }}
+roleRef:
+ kind: ClusterRole
+ name: openebs-cstor-csi-attacher-role
+ apiGroup: rbac.authorization.k8s.io
+---
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: openebs-cstor-csi-cluster-registrar-role
+ labels:
+ {{- include "cstor.csiController.labels" . | nindent 4 }}
+rules:
+ - apiGroups: ["csi.storage.k8s.io"]
+ resources: ["csidrivers"]
+ verbs: ["create", "delete"]
+---
+kind: ClusterRoleBinding
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: openebs-cstor-csi-cluster-registrar-binding
+ labels:
+ {{- include "cstor.csiController.labels" . | nindent 4 }}
+subjects:
+ - kind: ServiceAccount
+ name: {{ .Values.serviceAccount.csiController.name }}
+ namespace: {{ .Release.Namespace }}
+roleRef:
+ kind: ClusterRole
+ name: openebs-cstor-csi-cluster-registrar-role
+ apiGroup: rbac.authorization.k8s.io
+{{- end }}
diff --git a/deploy/helm/charts/templates/csi-controller.yaml b/deploy/helm/charts/templates/csi-controller.yaml
new file mode 100644
index 00000000..6b549085
--- /dev/null
+++ b/deploy/helm/charts/templates/csi-controller.yaml
@@ -0,0 +1,148 @@
+kind: StatefulSet
+apiVersion: apps/v1
+metadata:
+ name: {{ template "cstor.fullname" . }}-csi-controller
+ {{- with .Values.csiController.annotations }}
+ annotations: {{ toYaml . | nindent 4 }}
+ {{- end }}
+ labels:
+ {{- include "cstor.csiController.labels" . | nindent 4 }}
+spec:
+ selector:
+ matchLabels:
+ {{- include "cstor.csiController.matchLabels" . | nindent 6 }}
+ serviceName: "openebs-csi"
+ replicas: {{ .Values.csiController.replicas }}
+ template:
+ metadata:
+ labels:
+ {{- include "cstor.csiController.labels" . | nindent 8 }}
+ {{- if .Values.csiController.podLabels }}
+ {{ toYaml .Values.csiController.podLabels | nindent 8 }}
+ {{- end }}
+ spec:
+ priorityClassName: openebs-csi-controller-critical
+ serviceAccount: {{ .Values.serviceAccount.csiController.name }}
+ containers:
+ - name: {{ .Values.csiController.resizer.name }}
+ image: "{{ .Values.csiController.resizer.image.registry }}{{ .Values.csiController.resizer.image.repository }}:{{ .Values.csiController.resizer.image.tag }}"
+ resources:
+{{ toYaml .Values.csiController.resources | indent 12 }}
+ args:
+ - "--v=5"
+ - "--csi-address=$(ADDRESS)"
+ - "--leader-election"
+ env:
+ - name: ADDRESS
+ value: /var/lib/csi/sockets/pluginproxy/csi.sock
+ imagePullPolicy: {{ .Values.csiController.resizer.image.pullPolicy }}
+ volumeMounts:
+ - name: socket-dir
+ mountPath: /var/lib/csi/sockets/pluginproxy/
+ - name: {{ .Values.csiController.snapshotter.name }}
+ image: "{{ .Values.csiController.snapshotter.image.registry }}{{ .Values.csiController.snapshotter.image.repository }}:{{ .Values.csiController.snapshotter.image.tag }}"
+ args:
+ - "--csi-address=$(ADDRESS)"
+ env:
+ - name: ADDRESS
+ value: /var/lib/csi/sockets/pluginproxy/csi.sock
+ imagePullPolicy: {{ .Values.csiController.snapshotter.image.pullPolicy }}
+ volumeMounts:
+ - name: socket-dir
+ mountPath: /var/lib/csi/sockets/pluginproxy/
+ - name: {{ .Values.csiController.snapshotController.name }}
+ image: "{{ .Values.csiController.snapshotController.image.registry }}{{ .Values.csiController.snapshotController.image.repository }}:{{ .Values.csiController.snapshotController.image.tag }}"
+ args:
+ - "--v=5"
+ - "--leader-election=false"
+ imagePullPolicy: {{ .Values.csiController.snapshotController.image.pullPolicy }}
+ - name: {{ .Values.csiController.provisioner.name }}
+ image: "{{ .Values.csiController.provisioner.image.registry }}{{ .Values.csiController.provisioner.image.repository }}:{{ .Values.csiController.provisioner.image.tag }}"
+ imagePullPolicy: {{ .Values.csiController.provisioner.image.pullPolicy }}
+ args:
+ - "--provisioner=cstor.csi.openebs.io"
+ - "--csi-address=$(ADDRESS)"
+ - "--v=5"
+ - "--feature-gates=Topology=true"
+ - "--extra-create-metadata=true"
+ env:
+ - name: MY_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.name
+ - name: ADDRESS
+ value: /var/lib/csi/sockets/pluginproxy/csi.sock
+ volumeMounts:
+ - name: socket-dir
+ mountPath: /var/lib/csi/sockets/pluginproxy/
+ - name: {{ .Values.csiController.attacher.name }}
+ image: "{{ .Values.csiController.attacher.image.registry }}{{ .Values.csiController.attacher.image.repository }}:{{ .Values.csiController.attacher.image.tag }}"
+ imagePullPolicy: {{ .Values.csiController.attacher.image.pullPolicy }}
+ args:
+ - "--v=5"
+ - "--csi-address=$(ADDRESS)"
+ env:
+ - name: ADDRESS
+ value: /var/lib/csi/sockets/pluginproxy/csi.sock
+ volumeMounts:
+ - name: socket-dir
+ mountPath: /var/lib/csi/sockets/pluginproxy/
+ - name: {{ .Values.csiController.driverRegistrar.name }}
+ image: "{{ .Values.csiController.driverRegistrar.image.registry }}{{ .Values.csiController.driverRegistrar.image.repository }}:{{ .Values.csiController.driverRegistrar.image.tag }}"
+ imagePullPolicy: {{ .Values.csiController.driverRegistrar.image.pullPolicy }}
+ args:
+ - "--v=5"
+ - "--driver-requires-attachment=true"
+ - "--csi-address=$(ADDRESS)"
+ env:
+ - name: ADDRESS
+ value: /var/lib/csi/sockets/pluginproxy/csi.sock
+ volumeMounts:
+ - name: socket-dir
+ mountPath: /var/lib/csi/sockets/pluginproxy/
+ - name: {{ .Values.cstorCSIPlugin.name }}
+ image: "{{ .Values.cstorCSIPlugin.image.registry }}{{ .Values.cstorCSIPlugin.image.repository }}:{{ .Values.cstorCSIPlugin.image.tag }}"
+ imagePullPolicy: {{ .Values.cstorCSIPlugin.image.pullPolicy }}
+ env:
+ - name: OPENEBS_CONTROLLER_DRIVER
+ value: controller
+ - name: OPENEBS_CSI_ENDPOINT
+ value: unix:///var/lib/csi/sockets/pluginproxy/csi.sock
+ - name: OPENEBS_CSI_API_URL
+ value: https://openebs.io
+ # OpenEBS namespace where the openebs cstor operator components
+ # has been installed
+ - name: OPENEBS_NAMESPACE
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.namespace
+ - name: OPENEBS_IO_INSTALLER_TYPE
+ value: "cstor-helm"
+ - name: OPENEBS_IO_ENABLE_ANALYTICS
+ value: "{{ .Values.analytics.enabled }}"
+ args :
+ - "--endpoint=$(OPENEBS_CSI_ENDPOINT)"
+ - "--url=$(OPENEBS_CSI_API_URL)"
+ - "--plugin=$(OPENEBS_CONTROLLER_DRIVER)"
+ volumeMounts:
+ - name: socket-dir
+ mountPath: /var/lib/csi/sockets/pluginproxy/
+ volumes:
+ - name: socket-dir
+ emptyDir: {}
+{{- if .Values.imagePullSecrets }}
+ imagePullSecrets:
+{{ toYaml .Values.imagePullSecrets | indent 2 }}
+{{- end }}
+{{- if .Values.csiController.nodeSelector }}
+ nodeSelector:
+{{ toYaml .Values.csiController.nodeSelector | indent 8 }}
+{{- end }}
+{{- if .Values.csiController.securityContext }}
+ securityContext:
+{{ toYaml .Values.csiController.securityContext | indent 8 }}
+{{- end }}
+{{- if .Values.csiController.tolerations }}
+ tolerations:
+{{ toYaml .Values.csiController.tolerations | indent 8 }}
+{{- end }}
diff --git a/deploy/helm/charts/templates/csi-driver.yaml b/deploy/helm/charts/templates/csi-driver.yaml
new file mode 100644
index 00000000..ed9eb92f
--- /dev/null
+++ b/deploy/helm/charts/templates/csi-driver.yaml
@@ -0,0 +1,16 @@
+{{- if .Values.csiDriver.create -}}
+apiVersion: storage.k8s.io/v1beta1
+kind: CSIDriver
+metadata:
+ name: cstor.csi.openebs.io
+spec:
+ # Supports persistent inline volumes.
+ volumeLifecycleModes:
+ - Persistent
+ # Not yet supported but added just to support upgrade control plane seamlessly
+ - Ephemeral
+ # To determine at runtime which mode a volume uses, pod info and its
+ # "csi.storage.k8s.io/ephemeral" entry are needed.
+ podInfoOnMount: {{ .Values.csiDriver.podInfoOnMount }}
+ attachRequired: {{ .Values.csiDriver.attachRequired }}
+{{- end }}
\ No newline at end of file
diff --git a/deploy/helm/charts/templates/csi-iscsiadm-config.yaml b/deploy/helm/charts/templates/csi-iscsiadm-config.yaml
new file mode 100644
index 00000000..4c134ad6
--- /dev/null
+++ b/deploy/helm/charts/templates/csi-iscsiadm-config.yaml
@@ -0,0 +1,18 @@
+kind: ConfigMap
+apiVersion: v1
+metadata:
+ name: openebs-cstor-csi-iscsiadm
+data:
+ iscsiadm: |
+ #!/bin/sh
+ if [ -x /host/sbin/iscsiadm ]; then
+ chroot /host /sbin/iscsiadm "$@"
+ elif [ -x /host/usr/local/sbin/iscsiadm ]; then
+ chroot /host /usr/local/sbin/iscsiadm "$@"
+ elif [ -x /host/bin/iscsiadm ]; then
+ chroot /host /bin/iscsiadm "$@"
+ elif [ -x /host/usr/local/bin/iscsiadm ]; then
+ chroot /host /usr/local/bin/iscsiadm "$@"
+ else
+ chroot /host iscsiadm "$@"
+ fi
diff --git a/deploy/helm/charts/templates/csi-node-rbac.yaml b/deploy/helm/charts/templates/csi-node-rbac.yaml
new file mode 100644
index 00000000..08f852bf
--- /dev/null
+++ b/deploy/helm/charts/templates/csi-node-rbac.yaml
@@ -0,0 +1,43 @@
+{{- if .Values.serviceAccount.csiNode.create -}}
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: {{ .Values.serviceAccount.csiNode.name }}
+ labels:
+ {{- include "cstor.csiNode.labels" . | nindent 4 }}
+ namespace: {{ .Release.Namespace }}
+{{- end }}
+{{- if .Values.rbac.create }}
+---
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: openebs-cstor-csi-registrar-role
+ labels:
+ {{- include "cstor.csiNode.labels" . | nindent 4 }}
+rules:
+ - apiGroups: [""]
+ resources: ["events"]
+ verbs: ["get", "list", "watch", "create", "update", "patch"]
+ - apiGroups: [""]
+ resources: ["persistentvolumes", "nodes", "services"]
+ verbs: ["get", "list", "patch"]
+ - apiGroups: ["*"]
+ resources: ["cstorvolumeattachments", "cstorvolumes","cstorvolumeconfigs"]
+ verbs: ["get", "list", "watch", "create", "update", "delete", "patch"]
+---
+kind: ClusterRoleBinding
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: openebs-cstor-csi-registrar-binding
+ labels:
+ {{- include "cstor.csiNode.labels" . | nindent 4 }}
+subjects:
+ - kind: ServiceAccount
+ name: {{ .Values.serviceAccount.csiNode.name }}
+ namespace: {{ .Release.Namespace }}
+roleRef:
+ kind: ClusterRole
+ name: openebs-cstor-csi-registrar-role
+ apiGroup: rbac.authorization.k8s.io
+{{- end }}
diff --git a/deploy/helm/charts/templates/csi-node.yaml b/deploy/helm/charts/templates/csi-node.yaml
new file mode 100644
index 00000000..3acb8c1f
--- /dev/null
+++ b/deploy/helm/charts/templates/csi-node.yaml
@@ -0,0 +1,145 @@
+kind: DaemonSet
+apiVersion: apps/v1
+metadata:
+ name: {{ template "cstor.fullname" . }}-csi-node
+ {{- with .Values.csiNode.annotations }}
+ annotations: {{ toYaml . | nindent 4 }}
+ {{- end }}
+ labels:
+ {{- include "cstor.csiNode.labels" . | nindent 4 }}
+spec:
+ selector:
+ matchLabels:
+ {{- include "cstor.csiNode.matchLabels" . | nindent 6 }}
+ template:
+ metadata:
+ labels:
+ {{- include "cstor.csiNode.labels" . | nindent 8 }}
+ {{- if .Values.csiNode.podLabels }}
+ {{ toYaml .Values.csiNode.podLabels | nindent 8 }}
+ {{- end }}
+ spec:
+ priorityClassName: openebs-csi-node-critical
+ serviceAccount: {{ .Values.serviceAccount.csiNode.name }}
+ hostNetwork: true
+ containers:
+ - name: {{ .Values.csiNode.driverRegistrar.name }}
+ image: "{{ .Values.csiNode.driverRegistrar.image.registry }}{{ .Values.csiNode.driverRegistrar.image.repository }}:{{ .Values.csiNode.driverRegistrar.image.tag }}"
+ imagePullPolicy: {{ .Values.csiNode.driverRegistrar.image.pullPolicy }}
+ resources:
+{{ toYaml .Values.csiNode.resources | indent 12 }}
+ args:
+ - "--v=5"
+ - "--csi-address=$(ADDRESS)"
+ - "--kubelet-registration-path=$(DRIVER_REG_SOCK_PATH)"
+ lifecycle:
+ preStop:
+ exec:
+ command: ["/bin/sh", "-c", "rm -rf /registration/cstor.csi.openebs.io /registration/cstor.csi.openebs.io-reg.sock"]
+ env:
+ - name: ADDRESS
+ value: /plugin/csi.sock
+ - name: DRIVER_REG_SOCK_PATH
+ value: {{ .Values.csiNode.kubeletDir }}plugins/cstor.csi.openebs.io/csi.sock
+ - name: KUBE_NODE_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: spec.nodeName
+ - name: NODE_DRIVER
+ value: openebs-cstor-csi
+ volumeMounts:
+ - name: plugin-dir
+ mountPath: /plugin
+ - name: registration-dir
+ mountPath: /registration
+ - name: {{ .Values.cstorCSIPlugin.name }}
+ securityContext:
+ privileged: true
+ capabilities:
+ add: ["CAP_MKNOD", "CAP_SYS_ADMIN", "SYS_ADMIN"]
+ allowPrivilegeEscalation: true
+ image: "{{ .Values.cstorCSIPlugin.image.registry }}{{ .Values.cstorCSIPlugin.image.repository }}:{{ .Values.cstorCSIPlugin.image.tag }}"
+ imagePullPolicy: {{ .Values.cstorCSIPlugin.image.pullPolicy }}
+ args:
+ - "--nodeid=$(OPENEBS_NODE_ID)"
+ - "--endpoint=$(OPENEBS_CSI_ENDPOINT)"
+ - "--url=$(OPENEBS_CSI_API_URL)"
+ - "--plugin=$(OPENEBS_NODE_DRIVER)"
+ env:
+ - name: OPENEBS_NODE_ID
+ valueFrom:
+ fieldRef:
+ fieldPath: spec.nodeName
+ - name: OPENEBS_CSI_ENDPOINT
+ value: unix:///plugin/csi.sock
+ - name: OPENEBS_NODE_DRIVER
+ value: node
+ - name: OPENEBS_CSI_API_URL
+ value: https://openebs.io
+ # OpenEBS namespace where the openebs cstor operator components
+ # has been installed
+ - name: OPENEBS_NAMESPACE
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.namespace
+ # Enable/Disable auto-remount feature, when volumes
+ # recovers form the read-only state
+ - name: REMOUNT
+ value: "{{ .Values.cstorCSIPlugin.remount }}"
+ volumeMounts:
+ - name: plugin-dir
+ mountPath: /plugin
+ - name: device-dir
+ mountPath: /dev
+ - name: pods-mount-dir
+ mountPath: {{ .Values.csiNode.kubeletDir }}
+ # needed so that any mounts setup inside this container are
+ # propagated back to the host machine.
+ mountPropagation: "Bidirectional"
+ - name: host-root
+ mountPath: /host
+ mountPropagation: "HostToContainer"
+ - name: chroot-iscsiadm
+ mountPath: /sbin/iscsiadm
+ subPath: iscsiadm
+ volumes:
+ - name: device-dir
+ hostPath:
+ path: /dev
+ type: Directory
+ - name: registration-dir
+ hostPath:
+ path: {{ .Values.csiNode.kubeletDir }}plugins_registry/
+ type: DirectoryOrCreate
+ - name: plugin-dir
+ hostPath:
+ path: {{ .Values.csiNode.kubeletDir }}plugins/cstor.csi.openebs.io/
+ type: DirectoryOrCreate
+ - name: pods-mount-dir
+ hostPath:
+ path: {{ .Values.csiNode.kubeletDir }}
+ type: Directory
+ - name: chroot-iscsiadm
+ configMap:
+ defaultMode: 0555
+ name: openebs-cstor-csi-iscsiadm
+ - name: host-root
+ hostPath:
+ path: /
+ type: Directory
+{{- if .Values.imagePullSecrets }}
+ imagePullSecrets:
+{{ toYaml .Values.imagePullSecrets | indent 2 }}
+{{- end }}
+{{- if .Values.csiNode.nodeSelector }}
+ nodeSelector:
+{{ toYaml .Values.csiNode.nodeSelector | indent 8 }}
+{{- end }}
+{{- if .Values.csiNode.securityContext }}
+ securityContext:
+{{ toYaml .Values.csiNode.securityContext | indent 8 }}
+{{- end }}
+{{- if .Values.csiNode.tolerations }}
+ tolerations:
+{{ toYaml .Values.csiNode.tolerations | indent 8 }}
+{{- end }}
diff --git a/deploy/helm/charts/templates/cspc-operator.yaml b/deploy/helm/charts/templates/cspc-operator.yaml
new file mode 100644
index 00000000..dd4ac148
--- /dev/null
+++ b/deploy/helm/charts/templates/cspc-operator.yaml
@@ -0,0 +1,82 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: {{ template "cstor.fullname" . }}-cspc-operator
+ {{- with .Values.cspcOperator.annotations }}
+ annotations: {{ toYaml . | nindent 4 }}
+ {{- end }}
+ labels:
+ {{- include "cstor.cspcOperator.labels" . | nindent 4 }}
+spec:
+ selector:
+ matchLabels:
+ {{- include "cstor.cspcOperator.matchLabels" . | nindent 6 }}
+ replicas: {{ .Values.cspcOperator.replicas }}
+ strategy:
+ type: Recreate
+ template:
+ metadata:
+ {{- with .Values.cspcOperator.podAnnotations }}
+ annotations: {{ toYaml . | nindent 8 }}
+ {{- end }}
+ labels:
+ {{- include "cstor.cspcOperator.labels" . | nindent 8 }}
+ {{- if .Values.cspcOperator.podLabels }}
+ {{ toYaml .Values.cspcOperator.podLabels | nindent 8 }}
+ {{- end }}
+ spec:
+ serviceAccountName: {{ .Values.serviceAccount.cstorOperator.name }}
+ containers:
+ - name: {{ template "cstor.fullname" . }}-cspc-operator
+ imagePullPolicy: {{ .Values.cspcOperator.image.pullPolicy }}
+ image: "{{ .Values.cspcOperator.image.registry }}{{ .Values.cspcOperator.image.repository }}:{{ .Values.cspcOperator.image.tag }}"
+ resources:
+{{ toYaml .Values.cspcOperator.resources | indent 12 }}
+ env:
+ - name: OPENEBS_NAMESPACE
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.namespace
+ - name: OPENEBS_SERVICEACCOUNT_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: spec.serviceAccountName
+ - name: CSPC_OPERATOR_POD_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.name
+ # OPENEBS_IO_BASE_DIR is used to configure base directory for openebs on host path.
+ # Where OpenEBS can store required files. Default base path will be /var/openebs
+ # - name: OPENEBS_IO_BASE_DIR
+ # value: "/var/openebs"
+ # OPENEBS_IO_CSTOR_POOL_SPARSE_DIR can be used to specify the hostpath
+ # to be used for saving the shared content between the side cars
+ # of cstor pool pod. This ENV is also used to indicate the location
+ # of the sparse devices.
+ # The default path used is /var/openebs/sparse
+ #- name: OPENEBS_IO_CSTOR_POOL_SPARSE_DIR
+ # value: "/var/openebs/sparse"
+ - name: OPENEBS_IO_CSPI_MGMT_IMAGE
+ value: "{{ .Values.cspcOperator.poolManager.image.registry }}{{ .Values.cspcOperator.poolManager.image.repository }}:{{ .Values.cspcOperator.poolManager.image.tag }}"
+ - name: OPENEBS_IO_CSTOR_POOL_IMAGE
+ value: "{{ .Values.cspcOperator.cstorPool.image.registry }}{{ .Values.cspcOperator.cstorPool.image.repository }}:{{ .Values.cspcOperator.cstorPool.image.tag }}"
+ - name: OPENEBS_IO_CSTOR_POOL_EXPORTER_IMAGE
+ value: "{{ .Values.cspcOperator.cstorPoolExporter.image.registry }}{{ .Values.cspcOperator.cstorPoolExporter.image.repository }}:{{ .Values.cspcOperator.cstorPoolExporter.image.tag }}"
+ - name: RESYNC_INTERVAL
+ value: "{{ .Values.cspcOperator.resyncInterval }}"
+{{- if .Values.imagePullSecrets }}
+ imagePullSecrets:
+{{ toYaml .Values.imagePullSecrets | indent 2 }}
+{{- end }}
+{{- if .Values.cspcOperator.nodeSelector }}
+ nodeSelector:
+{{ toYaml .Values.cspcOperator.nodeSelector | indent 8 }}
+{{- end }}
+{{- if .Values.cspcOperator.securityContext }}
+ securityContext:
+{{ toYaml .Values.cspcOperator.securityContext | indent 8 }}
+{{- end }}
+{{- if .Values.cspcOperator.tolerations }}
+ tolerations:
+{{ toYaml .Values.cspcOperator.tolerations | indent 8 }}
+{{- end }}
diff --git a/deploy/helm/charts/templates/cvc-operator-service.yaml b/deploy/helm/charts/templates/cvc-operator-service.yaml
new file mode 100644
index 00000000..8c679d85
--- /dev/null
+++ b/deploy/helm/charts/templates/cvc-operator-service.yaml
@@ -0,0 +1,15 @@
+apiVersion: v1
+kind: Service
+metadata:
+ name: {{ template "cstor.fullname" . }}-cvc-operator-svc
+ labels:
+ {{- include "cstor.cvcOperator.labels" . | nindent 4 }}
+spec:
+ ports:
+ - name: api
+ port: 5757
+ protocol: TCP
+ targetPort: 5757
+ selector:
+ name: cvc-operator
+ sessionAffinity: None
diff --git a/deploy/helm/charts/templates/cvc-operator.yaml b/deploy/helm/charts/templates/cvc-operator.yaml
new file mode 100644
index 00000000..a7458f53
--- /dev/null
+++ b/deploy/helm/charts/templates/cvc-operator.yaml
@@ -0,0 +1,71 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: {{ template "cstor.fullname" . }}-cvc-operator
+ {{- with .Values.cvcOperator.annotations }}
+ annotations: {{ toYaml . | nindent 4 }}
+ {{- end }}
+ labels:
+ {{- include "cstor.cvcOperator.labels" . | nindent 4 }}
+spec:
+ selector:
+ matchLabels:
+ {{- include "cstor.cvcOperator.matchLabels" . | nindent 6 }}
+ replicas: {{ .Values.cvcOperator.replicas }}
+ strategy:
+ type: Recreate
+ template:
+ metadata:
+ labels:
+ {{- include "cstor.cvcOperator.labels" . | nindent 8 }}
+ {{- if .Values.cvcOperator.podLabels }}
+ {{ toYaml .Values.cvcOperator.podLabels | nindent 8 }}
+ {{- end }}
+ spec:
+ serviceAccountName: {{ .Values.serviceAccount.cstorOperator.name }}
+ containers:
+ - name: {{ template "cstor.fullname" . }}-cvc-operator
+ imagePullPolicy: {{ .Values.cvcOperator.image.pullPolicy }}
+ image: "{{ .Values.cvcOperator.image.registry }}{{ .Values.cvcOperator.image.repository }}:{{ .Values.cvcOperator.image.tag }}"
+ resources:
+{{ toYaml .Values.cvcOperator.resources | indent 12 }}
+ env:
+ # OPENEBS_IO_BASE_DIR is used to configure base directory for openebs on host path.
+ # Where OpenEBS can store required files. Default base path will be /var/openebs
+ # - name: OPENEBS_IO_BASE_DIR
+ # value: "/var/openebs"
+ # OPENEBS_IO_CSTOR_TARGET_DIR can be used to specify the hostpath
+ # that to be used for saving the core dump of cstor volume pod.
+ # The default path used is /var/openebs/sparse
+ #- name: OPENEBS_IO_CSTOR_TARGET_DIR
+ # value: "/var/openebs/sparse"
+ - name: OPENEBS_NAMESPACE
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.namespace
+ - name: OPENEBS_SERVICEACCOUNT_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: spec.serviceAccountName
+ - name: OPENEBS_IO_CSTOR_TARGET_IMAGE
+ value: "{{ .Values.cvcOperator.target.image.registry }}{{ .Values.cvcOperator.target.image.repository }}:{{ .Values.cvcOperator.target.image.tag }}"
+ - name: OPENEBS_IO_CSTOR_VOLUME_MGMT_IMAGE
+ value: "{{ .Values.cvcOperator.volumeMgmt.image.registry }}{{ .Values.cvcOperator.volumeMgmt.image.repository }}:{{ .Values.cvcOperator.volumeMgmt.image.tag }}"
+ - name: OPENEBS_IO_VOLUME_MONITOR_IMAGE
+ value: "{{ .Values.cvcOperator.volumeExporter.image.registry }}{{ .Values.cvcOperator.volumeExporter.image.repository }}:{{ .Values.cvcOperator.volumeExporter.image.tag }}"
+{{- if .Values.imagePullSecrets }}
+ imagePullSecrets:
+{{ toYaml .Values.imagePullSecrets | indent 2 }}
+{{- end }}
+{{- if .Values.cvcOperator.nodeSelector }}
+ nodeSelector:
+{{ toYaml .Values.cvcOperator.nodeSelector | indent 8 }}
+{{- end }}
+{{- if .Values.cvcOperator.securityContext }}
+ securityContext:
+{{ toYaml .Values.cvcOperator.securityContext | indent 8 }}
+{{- end }}
+{{- if .Values.cvcOperator.tolerations }}
+ tolerations:
+{{ toYaml .Values.cvcOperator.tolerations | indent 8 }}
+{{- end }}
diff --git a/deploy/helm/charts/templates/priority-class.yaml b/deploy/helm/charts/templates/priority-class.yaml
new file mode 100644
index 00000000..76dca16c
--- /dev/null
+++ b/deploy/helm/charts/templates/priority-class.yaml
@@ -0,0 +1,15 @@
+apiVersion: scheduling.k8s.io/v1
+kind: PriorityClass
+metadata:
+ name: openebs-csi-controller-critical
+value: 900000000
+globalDefault: false
+description: "This priority class should be used for the CStor CSI driver controller deployment only."
+---
+apiVersion: scheduling.k8s.io/v1
+kind: PriorityClass
+metadata:
+ name: openebs-csi-node-critical
+value: 900001000
+globalDefault: false
+description: "This priority class should be used for the CStor CSI driver node deployment only."
diff --git a/deploy/helm/charts/templates/rbac.yaml b/deploy/helm/charts/templates/rbac.yaml
new file mode 100644
index 00000000..74845bde
--- /dev/null
+++ b/deploy/helm/charts/templates/rbac.yaml
@@ -0,0 +1,117 @@
+{{- if .Values.serviceAccount.cstorOperator.create -}}
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: {{ .Values.serviceAccount.cstorOperator.name }}
+ labels:
+ {{- include "cstor.common.metaLabels" . | nindent 4 }}
+ {{- with .Values.serviceAccount.annotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+{{- end }}
+{{- if .Values.rbac.create }}
+---
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: openebs-cstor-operator
+ {{- with .Values.serviceAccount.annotations }}
+ annotations: {{ toYaml . | nindent 4 }}
+ {{- end }}
+ labels:
+ {{- include "cstor.common.metaLabels" . | nindent 4 }}
+rules:
+ - apiGroups: ["*"]
+ resources: ["nodes", "nodes/proxy"]
+ verbs: ["*"]
+ - apiGroups: ["*"]
+ resources: ["namespaces", "services", "pods", "deployments", "deployments/finalizers", "replicationcontrollers", "replicasets", "events", "endpoints", "configmaps", "secrets", "jobs", "cronjobs"]
+ verbs: ["*"]
+ - apiGroups: ["*"]
+ resources: ["statefulsets", "daemonsets"]
+ verbs: ["*"]
+ - apiGroups: ["*"]
+ resources: ["resourcequotas", "limitranges"]
+ verbs: ["list", "watch"]
+ - apiGroups: ["*"]
+ resources: ["certificatesigningrequests"]
+ verbs: ["list", "watch"]
+ - apiGroups: ["*"]
+ resources: ["storageclasses", "persistentvolumeclaims", "persistentvolumes"]
+ verbs: ["*"]
+ - apiGroups: ["apiextensions.k8s.io"]
+ resources: ["customresourcedefinitions"]
+ verbs: [ "get", "list", "create", "update", "delete", "patch"]
+ - apiGroups: ["openebs.io"]
+ resources: ["*"]
+ verbs: ["*" ]
+ - apiGroups: ["cstor.openebs.io"]
+ resources: ["*"]
+ verbs: ["*" ]
+ - apiGroups: ["coordination.k8s.io"]
+ resources: ["leases"]
+ verbs: ["get", "watch", "list", "delete", "update", "create"]
+ - apiGroups: ["admissionregistration.k8s.io"]
+ resources: ["validatingwebhookconfigurations", "mutatingwebhookconfigurations"]
+ verbs: ["get", "create", "list", "delete", "update", "patch"]
+ - nonResourceURLs: ["/metrics"]
+ verbs: ["get"]
+ - apiGroups: ["*"]
+ resources: ["upgradetasks","migrationtasks"]
+ verbs: ["*"]
+ - apiGroups: ["*"]
+ resources: ["poddisruptionbudgets"]
+ verbs: ["get", "list", "create", "delete", "watch"]
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+ name: openebs-cstor-operator
+ {{- with .Values.serviceAccount.annotations }}
+ annotations: {{ toYaml . | nindent 4 }}
+ {{- end }}
+ labels:
+ {{- include "cstor.common.metaLabels" . | nindent 4 }}
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: openebs-cstor-operator
+subjects:
+- kind: ServiceAccount
+ name: {{ .Values.serviceAccount.cstorOperator.name }}
+ namespace: {{ .Release.Namespace }}
+---
+# Define Role that allows operations required for migration of snapshots
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: openebs-cstor-migration
+ labels:
+ {{- include "cstor.common.metaLabels" . | nindent 4 }}
+rules:
+ - apiGroups: ["snapshot.storage.k8s.io"]
+ resources: ["volumesnapshotclasses"]
+ verbs: ["get", "list"]
+ - apiGroups: ["snapshot.storage.k8s.io"]
+ resources: ["volumesnapshotcontents"]
+ verbs: ["create", "get", "list"]
+ - apiGroups: ["snapshot.storage.k8s.io"]
+ resources: ["volumesnapshots"]
+ verbs: ["create", "get", "list"]
+---
+kind: ClusterRoleBinding
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: openebs-cstor-migration
+ labels:
+ {{- include "cstor.common.metaLabels" . | nindent 4 }}
+subjects:
+- kind: ServiceAccount
+ name: {{ .Values.serviceAccount.cstorOperator.name }}
+ namespace: {{ .Release.Namespace }}
+roleRef:
+ kind: ClusterRole
+ name: openebs-cstor-migration
+ apiGroup: rbac.authorization.k8s.io
+{{- end }}
diff --git a/deploy/helm/charts/values.yaml b/deploy/helm/charts/values.yaml
new file mode 100644
index 00000000..27315abc
--- /dev/null
+++ b/deploy/helm/charts/values.yaml
@@ -0,0 +1,244 @@
+# Default values for cstor-operators.
+# This is a YAML-formatted file.
+# Declare variables to be passed into your templates.
+
+release:
+ version: "2.4.0"
+
+# If false, openebs NDM sub-chart will not be installed
+openebsNDM:
+ enabled: true
+
+rbac:
+ # rbac.create: `true` if rbac resources should be created
+ create: true
+ # rbac.pspEnabled: `true` if PodSecurityPolicy resources should be created
+ pspEnabled: false
+
+imagePullSecrets:
+# - name: "image-pull-secret"
+
+cspcOperator:
+ componentName: cspc-operator
+ poolManager:
+ image:
+ registry:
+ repository: openebs/cstor-pool-manager
+ tag: 2.4.0
+ cstorPool:
+ image:
+ registry:
+ repository: openebs/cstor-pool
+ tag: 2.4.0
+ cstorPoolExporter:
+ image:
+ registry:
+ repository: openebs/m-exporter
+ tag: 2.4.0
+ image:
+ # Make sure that registry name end with a '/'.
+ # For example : quay.io/ is a correct value here and quay.io is incorrect
+ registry:
+ repository: openebs/cspc-operator
+ pullPolicy: IfNotPresent
+ # Overrides the image tag whose default is the chart appVersion.
+ tag: 2.4.0
+ annotations: {}
+ resyncInterval: "30"
+ podAnnotations: {}
+ podLabels: {}
+ nodeSelector: {}
+ tolerations: []
+ resources: {}
+ securityContext: {}
+
+cvcOperator:
+ componentName: cvc-operator
+ target:
+ image:
+ registry:
+ repository: openebs/cstor-istgt
+ tag: 2.4.0
+ volumeMgmt:
+ image:
+ registry:
+ repository: openebs/cstor-volume-manager
+ tag: 2.4.0
+ volumeExporter:
+ image:
+ registry:
+ repository: openebs/m-exporter
+ tag: 2.4.0
+ image:
+ # Make sure that registry name end with a '/'.
+ # For example : quay.io/ is a correct value here and quay.io is incorrect
+ registry:
+ repository: openebs/cvc-operator
+ pullPolicy: IfNotPresent
+ # Overrides the image tag whose default is the chart appVersion.
+ tag: 2.4.0
+ annotations: {}
+ resyncInterval: "30"
+ podAnnotations: {}
+ podLabels: {}
+ nodeSelector: {}
+ tolerations: []
+ resources: {}
+ securityContext: {}
+
+csiController:
+ componentName: "openebs-cstor-csi-controller"
+ resizer:
+ name: "csi-resizer"
+ image:
+ # Make sure that registry name end with a '/'.
+ # For example : quay.io/ is a correct value here and quay.io is incorrect
+ registry: quay.io/
+ repository: k8scsi/csi-resizer
+ pullPolicy: IfNotPresent
+ # Overrides the image tag whose default is the chart appVersion.
+ tag: v0.4.0
+ snapshotter:
+ name: "csi-snapshotter"
+ image:
+ # Make sure that registry name end with a '/'.
+ # For example : quay.io/ is a correct value here and quay.io is incorrect
+ registry: quay.io/
+ repository: k8scsi/csi-snapshotter
+ pullPolicy: IfNotPresent
+ # Overrides the image tag whose default is the chart appVersion.
+ tag: v2.0.1
+ snapshotController:
+ name: "snapshot-controller"
+ image:
+ # Make sure that registry name end with a '/'.
+ # For example : quay.io/ is a correct value here and quay.io is incorrect
+ registry: quay.io/
+ repository: k8scsi/snapshot-controller
+ pullPolicy: IfNotPresent
+ # Overrides the image tag whose default is the chart appVersion.
+ tag: v2.0.1
+ attacher:
+ name: "csi-attacher"
+ image:
+ # Make sure that registry name end with a '/'.
+ # For example : quay.io/ is a correct value here and quay.io is incorrect
+ registry: quay.io/
+ repository: k8scsi/csi-attacher
+ pullPolicy: IfNotPresent
+ # Overrides the image tag whose default is the chart appVersion.
+ tag: v2.0.0
+ provisioner:
+ name: "csi-provisioner"
+ image:
+ # Make sure that registry name end with a '/'.
+ # For example : quay.io/ is a correct value here and quay.io is incorrect
+ registry: quay.io/
+ repository: k8scsi/csi-provisioner
+ pullPolicy: IfNotPresent
+ # Overrides the image tag whose default is the chart appVersion.
+ tag: v1.6.0
+ driverRegistrar:
+ name: "csi-cluster-driver-registrar"
+ image:
+ # Make sure that registry name end with a '/'.
+ # For example : quay.io/ is a correct value here and quay.io is incorrect
+ registry: quay.io/
+ repository: k8scsi/csi-cluster-driver-registrar
+ pullPolicy: IfNotPresent
+ # Overrides the image tag whose default is the chart appVersion.
+ tag: v1.0.1
+ annotations: {}
+ podAnnotations: {}
+ podLabels: {}
+ nodeSelector: {}
+ tolerations: []
+ resources: {}
+ securityContext: {}
+
+cstorCSIPlugin:
+ name: cstor-csi-plugin
+ image:
+ # Make sure that registry name end with a '/'.
+ # For example : quay.io/ is a correct value here and quay.io is incorrect
+ registry:
+ repository: openebs/cstor-csi-driver
+ pullPolicy: IfNotPresent
+ # Overrides the image tag whose default is the chart appVersion.
+ tag: 2.4.0
+ remount: "true"
+
+csiNode:
+ componentName: "openebs-cstor-csi-node"
+ driverRegistrar:
+ name: "csi-node-driver-registrar"
+ image:
+ registry: quay.io/
+ repository: k8scsi/csi-node-driver-registrar
+ pullPolicy: IfNotPresent
+ # Overrides the image tag whose default is the chart appVersion.
+ tag: v1.0.1
+ updateStrategy:
+ type: RollingUpdate
+ annotations: {}
+ podAnnotations: {}
+ resources: {}
+ # limits:
+ # cpu: 10m
+ # memory: 32Mi
+ # requests:
+ # cpu: 10m
+ # memory: 32Mi
+ ## Labels to be added to openebs-cstor-csi-node pods
+ podLabels: {}
+ # kubeletDir path can be configured to run on various different k8s ditributions like
+ # microk8s where kubelet root dir is not (/var/lib/kubelet/). For example microk8s,
+ # we need to change the kubelet directory to `/var/snap/microk8s/common/var/lib/kubelet/`
+ kubeletDir: "/var/lib/kubelet/"
+ nodeSelector: {}
+ tolerations: []
+ securityContext: {}
+
+csiDriver:
+ create: true
+ podInfoOnMount: true
+ attachRequired: true
+
+admissionServer:
+ componentName: cstor-admission-webhook
+ image:
+ # Make sure that registry name end with a '/'.
+ # For example : quay.io/ is a correct value here and quay.io is incorrect
+ registry:
+ repository: openebs/cstor-webhook
+ pullPolicy: IfNotPresent
+ # Overrides the image tag whose default is the chart appVersion.
+ tag: 2.4.0
+ failurePolicy: "Fail"
+ annotations: {}
+ podAnnotations: {}
+ podLabels: {}
+ nodeSelector: {}
+ tolerations: []
+ resources: {}
+ securityContext: {}
+
+serviceAccount:
+ # Annotations to add to the service account
+ annotations: {}
+ cstorOperator:
+ create: true
+ name: openebs-cstor-operator
+ csiController:
+ # Specifies whether a service account should be created
+ create: true
+ name: openebs-cstor-csi-controller-sa
+ csiNode:
+ # Specifies whether a service account should be created
+ create: true
+ name: openebs-cstor-csi-node-sa
+
+analytics:
+ enabled: true
+ # Specify in hours the duration after which a ping event needs to be sent.
+ pingInterval: "24h"