Initial commit
This commit is contained in:
6
charts/zfs-localpv/Chart.lock
Normal file
6
charts/zfs-localpv/Chart.lock
Normal file
@@ -0,0 +1,6 @@
|
||||
dependencies:
|
||||
- name: crds
|
||||
repository: ""
|
||||
version: 2.9.0
|
||||
digest: sha256:0032f71831e5ecceb72f7968521d3385a4e9d078a100f03d913014de19df2800
|
||||
generated: "2025-11-18T08:12:41.465080026Z"
|
||||
22
charts/zfs-localpv/Chart.yaml
Normal file
22
charts/zfs-localpv/Chart.yaml
Normal file
@@ -0,0 +1,22 @@
|
||||
apiVersion: v2
|
||||
appVersion: 2.9.0
|
||||
dependencies:
|
||||
- condition: crds.enabled
|
||||
name: crds
|
||||
repository: ""
|
||||
version: 2.9.0
|
||||
description: Helm chart for CSI Driver for dynamic provisioning of ZFS Persistent
|
||||
Local Volumes. For instructions on how to use this helm chart, see - https://openebs.github.io/zfs-localpv/
|
||||
home: https://openebs.io/
|
||||
icon: https://raw.githubusercontent.com/cncf/artwork/master/projects/openebs/icon/color/openebs-icon-color.png
|
||||
keywords:
|
||||
- cloud-native-storage
|
||||
- block-storage
|
||||
- filesystem
|
||||
- ZFS
|
||||
- Local Persistent Volumes
|
||||
- storage
|
||||
name: zfs-localpv
|
||||
sources:
|
||||
- https://github.com/openebs/zfs-localpv
|
||||
version: 2.9.0
|
||||
124
charts/zfs-localpv/README.md
Normal file
124
charts/zfs-localpv/README.md
Normal file
@@ -0,0 +1,124 @@
|
||||
|
||||
# OpenEBS Local PV ZFS Provisioner
|
||||
|
||||
[](https://opensource.org/licenses/Apache-2.0)
|
||||

|
||||

|
||||
|
||||
A Helm chart for openebs localpv zfs provisioner. This chart bootstraps OpenEBS ZFS LocalPV provisioner deployment on a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager.
|
||||
|
||||
|
||||
**Homepage:** <http://www.openebs.io/>
|
||||
|
||||
## Get Repo Info
|
||||
|
||||
```console
|
||||
helm repo add openebs-zfslocalpv https://openebs.github.io/zfs-localpv
|
||||
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/zfs-localpv/) for install instructions via helm3.
|
||||
|
||||
```console
|
||||
# Helm
|
||||
$ helm install [RELEASE_NAME] openebs-zfslocalpv/zfs-localpv
|
||||
```
|
||||
|
||||
**Note:** If moving from the operator to helm
|
||||
- Make sure the namespace provided in the helm install command is same as `OPENEBS_NAMESPACE` (by default it is `openebs`) env in the controller deployment.
|
||||
- Before installing, clean up the stale deployment and daemonset from `openebs` namespace using the below commands
|
||||
```sh
|
||||
kubectl delete deploy openebs-zfs-controller -n openebs
|
||||
kubectl delete ds openebs-zfs-node -n openebs
|
||||
```
|
||||
|
||||
|
||||
_See [configuration](#configuration) below._
|
||||
|
||||
_See [helm install](https://helm.sh/docs/helm/helm_install/) 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 ZFS Localpv chart and their default values.
|
||||
|
||||
## Values
|
||||
|
||||
| Key | Type | Default Value | Description |
|
||||
|----------------------------------------------------------------------|--------|-----------------------------|-------------------------------------------------------------------------------------------------------|
|
||||
| `analytics.enabled` | bool | `true` | Enables or disables analytics reporting for the chart. |
|
||||
| `analytics.installerType` | string | `"zfs-localpv-helm"` | Specifies the installer type for analytics. |
|
||||
| `backupGC.enabled` | bool | `false` | Enables or disables garbage collection for backups. |
|
||||
| `crds.csi.volumeSnapshots.enabled` | bool | `true` | Enables or disables the installation of Volume Snapshot CRDs. |
|
||||
| `crds.zfsLocalPv.enabled` | bool | `true` | Enables or disables the installation of ZFS Local Persistent Volume CRDs. |
|
||||
| `enableHelmMetaLabels` | bool | `true` | Adds Helm-specific metadata labels to the components. |
|
||||
| `feature.storageCapacity` | bool | `true` | Enables or disables storage capacity tracking feature. |
|
||||
| `imagePullSecrets` | list | `[]` | List of secrets to use when pulling images from private registries. |
|
||||
| `loggingLabels."openebs.io/logging"` | string | `"true"` | Enables or disables logging for OpenEBS components. |
|
||||
| `rbac.pspEnabled` | bool | `false` | Enables or disables the creation of PodSecurityPolicy resources. |
|
||||
| `role` | string | `"openebs-zfs"` | Specifies the role for the OpenEBS ZFS component. |
|
||||
| `serviceAccount.zfsController.create` | bool | `true` | Specifies whether a service account should be created for the ZFS controller. |
|
||||
| `serviceAccount.zfsController.name` | string | `"openebs-zfs-controller-sa"` | The name of the service account to use for the ZFS controller. |
|
||||
| `serviceAccount.zfsNode.create` | bool | `true` | Specifies whether a service account should be created for the ZFS node. |
|
||||
| `serviceAccount.zfsNode.name` | string | `"openebs-zfs-node-sa"` | The name of the service account to use for the ZFS node. |
|
||||
| `zfs.bin` | string | `"zfs"` | Path to the ZFS binary. |
|
||||
| `zfsController.additionalVolumes` | list | `[]` | Additional volumes to mount into the ZFS controller pods. |
|
||||
| `zfsController.annotations` | map | `{}` | Annotations to add to the ZFS controller pods. |
|
||||
| `zfsController.componentName` | string | `"openebs-zfs-controller"` | Name of the ZFS controller component. |
|
||||
| `zfsController.initContainers` | list | `[]` | List of init containers to run before the ZFS controller pods. |
|
||||
| `zfsController.nodeSelector` | map | `{}` | Node selector for scheduling ZFS controller pods. |
|
||||
| `zfsController.podAnnotations` | map | `{}` | Annotations to add to the ZFS controller pods. |
|
||||
| `zfsController.podLabels.name` | string | `"openebs-zfs-controller"` | Labels to add to the ZFS controller pods. |
|
||||
| `zfsController.priorityClass.create` | bool | `true` | Specifies whether to create a priority class for the ZFS controller pods. |
|
||||
| `zfsController.priorityClass.name` | string | `"zfs-csi-controller-critical"` | The name of the priority class to use for the ZFS controller pods. |
|
||||
| `zfsController.provisioner.extraArgs` | list | `[]` | Additional arguments to pass to the CSI provisioner. |
|
||||
| `zfsController.provisioner.image.pullPolicy` | string | `"IfNotPresent"` | Image pull policy for the CSI provisioner. |
|
||||
| `zfsController.provisioner.image.registry` | string | `"registry.k8s.io/"` | Image registry for the CSI provisioner. |
|
||||
| `zfsController.provisioner.image.repository` | string | `"sig-storage/csi-provisioner"` | Image repository for the CSI provisioner. |
|
||||
| `zfsController.provisioner.image.tag` | string | `"v5.2.0"` | Image tag for the CSI provisioner. |
|
||||
| `zfsController.provisioner.name` | string | `"csi-provisioner"` | Name of the CSI provisioner container. |
|
||||
| `zfsController.replicas` | int | `1` | Number of replicas for the ZFS controller deployment. |
|
||||
| `zfsController.resizer.extraArgs` | list | `[]` | Additional arguments to pass to the CSI resizer. |
|
||||
| `zfsController.resizer.image.pullPolicy` | string | `"IfNotPresent"` | Image pull policy for the CSI resizer. |
|
||||
| `zfsController.resizer.image.registry` | string | `"registry.k8s.io/"` | Image registry for the CSI resizer. |
|
||||
| `zfsController.resizer.image.repository` | string | `"sig-storage/csi-resizer"` | Image repository for the CSI resizer. |
|
||||
| `zfsController.resizer.image.tag` | string | `"v1.13.2"` | Image tag for the CSI resizer. |
|
||||
| `zfsController.resizer.name` | string | `"csi-resizer"` | Name of the CSI resizer container. |
|
||||
| `zfsController.resources` | map | `{}` | Resource requests and limits for the ZFS controller pods. |
|
||||
| `zfsController.securityContext` | map | `{}` | Security context for the ZFS controller pods. |
|
||||
| `zfsController.snapshotController.extraArgs` | list | `[]` | Additional arguments to pass to the snapshot controller. |
|
||||
| `zfsController.snapshotController.image.pullPolicy` | string | `"IfNotPresent"` | Image pull policy for the snapshot controller. |
|
||||
| `zfsController.snapshotController.image.registry` | string | `"registry.k8s.io/"` | Image registry for the snapshot controller. |
|
||||
| `zfsController.snapshotController.image.repository` | string | `"sig-storage/snapshot-controller"` | Image repository for the snapshot controller. |
|
||||
| `zfsController.snapshotController.image.tag` | string | `"v8.2.0"` | Image tag for the snapshot controller.
|
||||
|
||||
Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`.
|
||||
|
||||
Alternatively, a YAML file that specifies the values for the parameters can be provided while installing the chart. For example,
|
||||
|
||||
```bash
|
||||
helm install <release-name> -f values.yaml openebs/zfs-localpv
|
||||
```
|
||||
|
||||
> **Tip**: You can use the default [values.yaml](values.yaml)
|
||||
23
charts/zfs-localpv/charts/crds/.helmignore
Normal file
23
charts/zfs-localpv/charts/crds/.helmignore
Normal file
@@ -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/
|
||||
4
charts/zfs-localpv/charts/crds/Chart.yaml
Normal file
4
charts/zfs-localpv/charts/crds/Chart.yaml
Normal file
@@ -0,0 +1,4 @@
|
||||
apiVersion: v2
|
||||
description: A Helm chart that collects CustomResourceDefinitions (CRDs) from zfs-localpv.
|
||||
name: crds
|
||||
version: 2.9.0
|
||||
19
charts/zfs-localpv/charts/crds/templates/_helpers.tpl
Normal file
19
charts/zfs-localpv/charts/crds/templates/_helpers.tpl
Normal file
@@ -0,0 +1,19 @@
|
||||
{{/* vim: set filetype=mustache: */}}
|
||||
|
||||
{{/*
|
||||
Adds extra annotations to CRDs. This targets two scenarios: preventing CRD recycling in case
|
||||
the chart is removed; and adding custom annotations.
|
||||
NOTE: This function assumes the element `metadata.annotations` already exists.
|
||||
|
||||
Usage:
|
||||
{{- include "crds.extraAnnotations" .Values.csi.volumeSnapshots | nindent 4 }}
|
||||
*/}}
|
||||
|
||||
{{- define "crds.extraAnnotations" -}}
|
||||
{{- if .keep -}}
|
||||
helm.sh/resource-policy: keep
|
||||
{{ end }}
|
||||
{{- with .annotations }}
|
||||
{{- toYaml . }}
|
||||
{{- end }}
|
||||
{{- end -}}
|
||||
@@ -0,0 +1,155 @@
|
||||
{{- if .Values.csi.volumeSnapshots.enabled -}}
|
||||
apiVersion: apiextensions.k8s.io/v1
|
||||
kind: CustomResourceDefinition
|
||||
metadata:
|
||||
annotations:
|
||||
api-approved.kubernetes.io: https://github.com/kubernetes-csi/external-snapshotter/pull/814
|
||||
controller-gen.kubebuilder.io/version: v0.11.3
|
||||
{{- include "crds.extraAnnotations" .Values.csi.volumeSnapshots | nindent 4 }}
|
||||
creationTimestamp: null
|
||||
name: volumesnapshotclasses.snapshot.storage.k8s.io
|
||||
spec:
|
||||
group: snapshot.storage.k8s.io
|
||||
names:
|
||||
kind: VolumeSnapshotClass
|
||||
listKind: VolumeSnapshotClassList
|
||||
plural: volumesnapshotclasses
|
||||
shortNames:
|
||||
- vsclass
|
||||
- vsclasses
|
||||
singular: volumesnapshotclass
|
||||
scope: Cluster
|
||||
versions:
|
||||
- additionalPrinterColumns:
|
||||
- jsonPath: .driver
|
||||
name: Driver
|
||||
type: string
|
||||
- description: Determines whether a VolumeSnapshotContent created through the
|
||||
VolumeSnapshotClass should be deleted when its bound VolumeSnapshot is deleted.
|
||||
jsonPath: .deletionPolicy
|
||||
name: DeletionPolicy
|
||||
type: string
|
||||
- jsonPath: .metadata.creationTimestamp
|
||||
name: Age
|
||||
type: date
|
||||
name: v1
|
||||
schema:
|
||||
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/sig-architecture/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/sig-architecture/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
|
||||
served: true
|
||||
storage: true
|
||||
subresources: {}
|
||||
- additionalPrinterColumns:
|
||||
- jsonPath: .driver
|
||||
name: Driver
|
||||
type: string
|
||||
- description: |
|
||||
Determines whether a VolumeSnapshotContent created through the
|
||||
VolumeSnapshotClass should be deleted when its bound VolumeSnapshot is deleted.
|
||||
jsonPath: .deletionPolicy
|
||||
name: DeletionPolicy
|
||||
type: string
|
||||
- jsonPath: .metadata.creationTimestamp
|
||||
name: Age
|
||||
type: date
|
||||
deprecated: true
|
||||
deprecationWarning: snapshot.storage.k8s.io/v1beta1 VolumeSnapshotClass is deprecated;
|
||||
use snapshot.storage.k8s.io/v1 VolumeSnapshotClass
|
||||
name: v1beta1
|
||||
schema:
|
||||
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/sig-architecture/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/sig-architecture/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
|
||||
served: false
|
||||
storage: false
|
||||
subresources: {}
|
||||
status:
|
||||
acceptedNames:
|
||||
kind: ""
|
||||
plural: ""
|
||||
conditions: []
|
||||
storedVersions: []
|
||||
{{- end -}}
|
||||
@@ -0,0 +1,499 @@
|
||||
{{- if .Values.csi.volumeSnapshots.enabled -}}
|
||||
apiVersion: apiextensions.k8s.io/v1
|
||||
kind: CustomResourceDefinition
|
||||
metadata:
|
||||
annotations:
|
||||
api-approved.kubernetes.io: https://github.com/kubernetes-csi/external-snapshotter/pull/814
|
||||
controller-gen.kubebuilder.io/version: v0.11.3
|
||||
{{- include "crds.extraAnnotations" .Values.csi.volumeSnapshots | nindent 4 }}
|
||||
creationTimestamp: null
|
||||
name: volumesnapshotcontents.snapshot.storage.k8s.io
|
||||
spec:
|
||||
group: snapshot.storage.k8s.io
|
||||
names:
|
||||
kind: VolumeSnapshotContent
|
||||
listKind: VolumeSnapshotContentList
|
||||
plural: volumesnapshotcontents
|
||||
shortNames:
|
||||
- vsc
|
||||
- vscs
|
||||
singular: volumesnapshotcontent
|
||||
scope: Cluster
|
||||
versions:
|
||||
- additionalPrinterColumns:
|
||||
- description: Indicates if the snapshot is ready to be used to restore a volume.
|
||||
jsonPath: .status.readyToUse
|
||||
name: ReadyToUse
|
||||
type: boolean
|
||||
- description: Represents the complete size of the snapshot in bytes
|
||||
jsonPath: .status.restoreSize
|
||||
name: RestoreSize
|
||||
type: integer
|
||||
- description: Determines whether this VolumeSnapshotContent and its physical
|
||||
snapshot on the underlying storage system should be deleted when its bound
|
||||
VolumeSnapshot is deleted.
|
||||
jsonPath: .spec.deletionPolicy
|
||||
name: DeletionPolicy
|
||||
type: string
|
||||
- description: Name of the CSI driver used to create the physical snapshot on
|
||||
the underlying storage system.
|
||||
jsonPath: .spec.driver
|
||||
name: Driver
|
||||
type: string
|
||||
- description: Name of the VolumeSnapshotClass to which this snapshot belongs.
|
||||
jsonPath: .spec.volumeSnapshotClassName
|
||||
name: VolumeSnapshotClass
|
||||
type: string
|
||||
- description: Name of the VolumeSnapshot object to which this VolumeSnapshotContent
|
||||
object is bound.
|
||||
jsonPath: .spec.volumeSnapshotRef.name
|
||||
name: VolumeSnapshot
|
||||
type: string
|
||||
- description: Namespace of the VolumeSnapshot object to which this VolumeSnapshotContent
|
||||
object is bound.
|
||||
jsonPath: .spec.volumeSnapshotRef.namespace
|
||||
name: VolumeSnapshotNamespace
|
||||
type: string
|
||||
- jsonPath: .metadata.creationTimestamp
|
||||
name: Age
|
||||
type: date
|
||||
name: v1
|
||||
schema:
|
||||
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/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
|
||||
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. For dynamically provisioned
|
||||
snapshots, this field will automatically be filled in by the CSI
|
||||
snapshotter sidecar with the "DeletionPolicy" field defined in the
|
||||
corresponding VolumeSnapshotClass. 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 whether the snapshot is (or should be)
|
||||
dynamically provisioned or already exists, and just requires a Kubernetes
|
||||
object representation. This field is immutable after creation. Required.
|
||||
oneOf:
|
||||
- required:
|
||||
- snapshotHandle
|
||||
- required:
|
||||
- volumeHandle
|
||||
properties:
|
||||
snapshotHandle:
|
||||
description: snapshotHandle specifies the CSI "snapshot_id" of
|
||||
a pre-existing snapshot on the underlying storage system for
|
||||
which a Kubernetes object representation was (or should be)
|
||||
created. 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
|
||||
sourceVolumeMode:
|
||||
description: SourceVolumeMode is the mode of the volume whose snapshot
|
||||
is taken. Can be either “Filesystem” or “Block”. If not specified,
|
||||
it indicates the source volume's mode is unknown. This field is
|
||||
immutable. This field is an alpha field.
|
||||
type: string
|
||||
volumeSnapshotClassName:
|
||||
description: name of the VolumeSnapshotClass from which this snapshot
|
||||
was (or will be) created. Note that after provisioning, the VolumeSnapshotClass
|
||||
may be deleted or recreated with different set of values, and as
|
||||
such, should not be referenced post-snapshot creation.
|
||||
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/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
|
||||
x-kubernetes-map-type: atomic
|
||||
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 by the CSI snapshotter
|
||||
sidecar with the "creation_time" value returned from CSI "CreateSnapshot"
|
||||
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 last observed error during snapshot creation,
|
||||
if any. Upon success after retry, this error field will be cleared.
|
||||
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 by the CSI snapshotter sidecar with the "ready_to_use"
|
||||
value returned from CSI "CreateSnapshot" 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 by the CSI snapshotter sidecar with the "size_bytes" value
|
||||
returned from CSI "CreateSnapshot" 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
|
||||
volumeGroupSnapshotContentName:
|
||||
description: VolumeGroupSnapshotContentName is the name of the VolumeGroupSnapshotContent
|
||||
of which this VolumeSnapshotContent is a part of.
|
||||
type: string
|
||||
type: object
|
||||
required:
|
||||
- spec
|
||||
type: object
|
||||
served: true
|
||||
storage: true
|
||||
subresources:
|
||||
status: {}
|
||||
- additionalPrinterColumns:
|
||||
- description: Indicates if the snapshot is ready to be used to restore a volume.
|
||||
jsonPath: .status.readyToUse
|
||||
name: ReadyToUse
|
||||
type: boolean
|
||||
- description: Represents the complete size of the snapshot in bytes
|
||||
jsonPath: .status.restoreSize
|
||||
name: RestoreSize
|
||||
type: integer
|
||||
- description: Determines whether this VolumeSnapshotContent and its physical
|
||||
snapshot on the underlying storage system should be deleted when its bound
|
||||
VolumeSnapshot is deleted.
|
||||
jsonPath: .spec.deletionPolicy
|
||||
name: DeletionPolicy
|
||||
type: string
|
||||
- description: Name of the CSI driver used to create the physical snapshot on
|
||||
the underlying storage system.
|
||||
jsonPath: .spec.driver
|
||||
name: Driver
|
||||
type: string
|
||||
- description: Name of the VolumeSnapshotClass to which this snapshot belongs.
|
||||
jsonPath: .spec.volumeSnapshotClassName
|
||||
name: VolumeSnapshotClass
|
||||
type: string
|
||||
- description: Name of the VolumeSnapshot object to which this VolumeSnapshotContent
|
||||
object is bound.
|
||||
jsonPath: .spec.volumeSnapshotRef.name
|
||||
name: VolumeSnapshot
|
||||
type: string
|
||||
- description: Namespace of the VolumeSnapshot object to which this VolumeSnapshotContent
|
||||
object is bound.
|
||||
jsonPath: .spec.volumeSnapshotRef.namespace
|
||||
name: VolumeSnapshotNamespace
|
||||
type: string
|
||||
- jsonPath: .metadata.creationTimestamp
|
||||
name: Age
|
||||
type: date
|
||||
deprecated: true
|
||||
deprecationWarning: snapshot.storage.k8s.io/v1beta1 VolumeSnapshotContent is deprecated;
|
||||
use snapshot.storage.k8s.io/v1 VolumeSnapshotContent
|
||||
name: v1beta1
|
||||
schema:
|
||||
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/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
|
||||
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. For dynamically provisioned
|
||||
snapshots, this field will automatically be filled in by the CSI
|
||||
snapshotter sidecar with the "DeletionPolicy" field defined in the
|
||||
corresponding VolumeSnapshotClass. 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 whether the snapshot is (or should be)
|
||||
dynamically provisioned or already exists, and just requires a Kubernetes
|
||||
object representation. 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 for
|
||||
which a Kubernetes object representation was (or should be)
|
||||
created. 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 from which this snapshot
|
||||
was (or will be) created. Note that after provisioning, the VolumeSnapshotClass
|
||||
may be deleted or recreated with different set of values, and as
|
||||
such, should not be referenced post-snapshot creation.
|
||||
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/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
|
||||
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 by the CSI snapshotter
|
||||
sidecar with the "creation_time" value returned from CSI "CreateSnapshot"
|
||||
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 last observed error during snapshot creation,
|
||||
if any. Upon success after retry, this error field will be cleared.
|
||||
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 by the CSI snapshotter sidecar with the "ready_to_use"
|
||||
value returned from CSI "CreateSnapshot" 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 by the CSI snapshotter sidecar with the "size_bytes" value
|
||||
returned from CSI "CreateSnapshot" 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
|
||||
served: false
|
||||
storage: false
|
||||
subresources:
|
||||
status: {}
|
||||
status:
|
||||
acceptedNames:
|
||||
kind: ""
|
||||
plural: ""
|
||||
conditions: []
|
||||
storedVersions: []
|
||||
{{- end -}}
|
||||
@@ -0,0 +1,400 @@
|
||||
{{- if .Values.csi.volumeSnapshots.enabled -}}
|
||||
apiVersion: apiextensions.k8s.io/v1
|
||||
kind: CustomResourceDefinition
|
||||
metadata:
|
||||
annotations:
|
||||
api-approved.kubernetes.io: https://github.com/kubernetes-csi/external-snapshotter/pull/814
|
||||
controller-gen.kubebuilder.io/version: v0.11.3
|
||||
{{- include "crds.extraAnnotations" .Values.csi.volumeSnapshots | nindent 4 }}
|
||||
creationTimestamp: null
|
||||
name: volumesnapshots.snapshot.storage.k8s.io
|
||||
spec:
|
||||
group: snapshot.storage.k8s.io
|
||||
names:
|
||||
kind: VolumeSnapshot
|
||||
listKind: VolumeSnapshotList
|
||||
plural: volumesnapshots
|
||||
shortNames:
|
||||
- vs
|
||||
singular: volumesnapshot
|
||||
scope: Namespaced
|
||||
versions:
|
||||
- additionalPrinterColumns:
|
||||
- description: Indicates if the snapshot is ready to be used to restore a volume.
|
||||
jsonPath: .status.readyToUse
|
||||
name: ReadyToUse
|
||||
type: boolean
|
||||
- description: If a new snapshot needs to be created, this contains the name of
|
||||
the source PVC from which this snapshot was (or will be) created.
|
||||
jsonPath: .spec.source.persistentVolumeClaimName
|
||||
name: SourcePVC
|
||||
type: string
|
||||
- description: If a snapshot already exists, this contains the name of the existing
|
||||
VolumeSnapshotContent object representing the existing snapshot.
|
||||
jsonPath: .spec.source.volumeSnapshotContentName
|
||||
name: SourceSnapshotContent
|
||||
type: string
|
||||
- description: Represents the minimum size of volume required to rehydrate from
|
||||
this snapshot.
|
||||
jsonPath: .status.restoreSize
|
||||
name: RestoreSize
|
||||
type: string
|
||||
- description: The name of the VolumeSnapshotClass requested by the VolumeSnapshot.
|
||||
jsonPath: .spec.volumeSnapshotClassName
|
||||
name: SnapshotClass
|
||||
type: string
|
||||
- description: Name of the VolumeSnapshotContent object to which the VolumeSnapshot
|
||||
object intends to bind to. Please note that verification of binding actually
|
||||
requires checking both VolumeSnapshot and VolumeSnapshotContent to ensure
|
||||
both are pointing at each other. Binding MUST be verified prior to usage of
|
||||
this object.
|
||||
jsonPath: .status.boundVolumeSnapshotContentName
|
||||
name: SnapshotContent
|
||||
type: string
|
||||
- description: Timestamp when the point-in-time snapshot was taken by the underlying
|
||||
storage system.
|
||||
jsonPath: .status.creationTime
|
||||
name: CreationTime
|
||||
type: date
|
||||
- jsonPath: .metadata.creationTimestamp
|
||||
name: Age
|
||||
type: date
|
||||
name: v1
|
||||
schema:
|
||||
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/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
|
||||
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.
|
||||
oneOf:
|
||||
- required:
|
||||
- persistentVolumeClaimName
|
||||
- required:
|
||||
- volumeSnapshotContentName
|
||||
properties:
|
||||
persistentVolumeClaimName:
|
||||
description: persistentVolumeClaimName specifies the name of the
|
||||
PersistentVolumeClaim object representing the volume from which
|
||||
a snapshot should be created. This PVC is assumed to be in the
|
||||
same namespace as the VolumeSnapshot object. This field should
|
||||
be set if the snapshot does not exists, and needs to be created.
|
||||
This field is immutable.
|
||||
type: string
|
||||
volumeSnapshotContentName:
|
||||
description: volumeSnapshotContentName specifies the name of a
|
||||
pre-existing VolumeSnapshotContent object representing an existing
|
||||
volume snapshot. This field should be set if the snapshot already
|
||||
exists and only needs a representation in Kubernetes. This field
|
||||
is immutable.
|
||||
type: string
|
||||
type: object
|
||||
volumeSnapshotClassName:
|
||||
description: |
|
||||
VolumeSnapshotClassName is the name of the VolumeSnapshotClass
|
||||
requested by the VolumeSnapshot. VolumeSnapshotClassName may be
|
||||
left nil to indicate that the default SnapshotClass should be used.
|
||||
A given cluster may have multiple default Volume SnapshotClasses:
|
||||
one default per CSI Driver. If a VolumeSnapshot does not specify
|
||||
a SnapshotClass, VolumeSnapshotSource will be checked to figure
|
||||
out what the associated CSI Driver is, and the default VolumeSnapshotClass
|
||||
associated with that CSI Driver will be used. If more than one VolumeSnapshotClass
|
||||
exist for a given CSI Driver and more than one have been marked
|
||||
as default, CreateSnapshot will fail and generate an event. Empty
|
||||
string is not allowed for this field.
|
||||
type: string
|
||||
required:
|
||||
- source
|
||||
type: object
|
||||
status:
|
||||
description: status represents the current information of a snapshot.
|
||||
Consumers must verify binding between VolumeSnapshot and VolumeSnapshotContent
|
||||
objects is successful (by validating that both VolumeSnapshot and VolumeSnapshotContent
|
||||
point at each other) before using this object.
|
||||
properties:
|
||||
boundVolumeSnapshotContentName:
|
||||
description: |
|
||||
boundVolumeSnapshotContentName is the name of the VolumeSnapshotContent
|
||||
object to which this VolumeSnapshot object intends to bind to. If
|
||||
not specified, it indicates that the VolumeSnapshot object has not
|
||||
been successfully bound to a VolumeSnapshotContent object yet. NOTE:
|
||||
To avoid possible security issues, consumers must verify binding
|
||||
between VolumeSnapshot and VolumeSnapshotContent objects is successful
|
||||
(by validating that both VolumeSnapshot and VolumeSnapshotContent
|
||||
point at each other) before using this object.
|
||||
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 by the snapshot controller
|
||||
with the "creation_time" value returned from CSI "CreateSnapshot"
|
||||
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 may indicate
|
||||
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. The snapshot controller will keep retrying when an error
|
||||
occurs during the snapshot creation. Upon success, this error field
|
||||
will be cleared.
|
||||
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 the snapshot is ready to be used
|
||||
to restore a volume. In dynamic snapshot creation case, this field
|
||||
will be filled in by the snapshot controller with the "ready_to_use"
|
||||
value returned from CSI "CreateSnapshot" 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 minimum size of volume required
|
||||
to create a volume from this snapshot. In dynamic snapshot creation
|
||||
case, this field will be filled in by the snapshot controller with
|
||||
the "size_bytes" value returned from CSI "CreateSnapshot" 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.
|
||||
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||
type: string
|
||||
x-kubernetes-int-or-string: true
|
||||
volumeGroupSnapshotName:
|
||||
description: VolumeGroupSnapshotName is the name of the VolumeGroupSnapshot
|
||||
of which this VolumeSnapshot is a part of.
|
||||
type: string
|
||||
type: object
|
||||
required:
|
||||
- spec
|
||||
type: object
|
||||
served: true
|
||||
storage: true
|
||||
subresources:
|
||||
status: {}
|
||||
- additionalPrinterColumns:
|
||||
- description: Indicates if the snapshot is ready to be used to restore a volume.
|
||||
jsonPath: .status.readyToUse
|
||||
name: ReadyToUse
|
||||
type: boolean
|
||||
- description: If a new snapshot needs to be created, this contains the name of
|
||||
the source PVC from which this snapshot was (or will be) created.
|
||||
jsonPath: .spec.source.persistentVolumeClaimName
|
||||
name: SourcePVC
|
||||
type: string
|
||||
- description: If a snapshot already exists, this contains the name of the existing
|
||||
VolumeSnapshotContent object representing the existing snapshot.
|
||||
jsonPath: .spec.source.volumeSnapshotContentName
|
||||
name: SourceSnapshotContent
|
||||
type: string
|
||||
- description: Represents the minimum size of volume required to rehydrate from
|
||||
this snapshot.
|
||||
jsonPath: .status.restoreSize
|
||||
name: RestoreSize
|
||||
type: string
|
||||
- description: The name of the VolumeSnapshotClass requested by the VolumeSnapshot.
|
||||
jsonPath: .spec.volumeSnapshotClassName
|
||||
name: SnapshotClass
|
||||
type: string
|
||||
- description: Name of the VolumeSnapshotContent object to which the VolumeSnapshot
|
||||
object intends to bind to. Please note that verification of binding actually
|
||||
requires checking both VolumeSnapshot and VolumeSnapshotContent to ensure
|
||||
both are pointing at each other. Binding MUST be verified prior to usage of
|
||||
this object.
|
||||
jsonPath: .status.boundVolumeSnapshotContentName
|
||||
name: SnapshotContent
|
||||
type: string
|
||||
- description: Timestamp when the point-in-time snapshot was taken by the underlying
|
||||
storage system.
|
||||
jsonPath: .status.creationTime
|
||||
name: CreationTime
|
||||
type: date
|
||||
- jsonPath: .metadata.creationTimestamp
|
||||
name: Age
|
||||
type: date
|
||||
deprecated: true
|
||||
deprecationWarning: snapshot.storage.k8s.io/v1beta1 VolumeSnapshot is deprecated;
|
||||
use snapshot.storage.k8s.io/v1 VolumeSnapshot
|
||||
name: v1beta1
|
||||
schema:
|
||||
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/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
|
||||
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 representing the volume from which
|
||||
a snapshot should be created. This PVC is assumed to be in the
|
||||
same namespace as the VolumeSnapshot object. This field should
|
||||
be set if the snapshot does not exists, and needs to be created.
|
||||
This field is immutable.
|
||||
type: string
|
||||
volumeSnapshotContentName:
|
||||
description: volumeSnapshotContentName specifies the name of a
|
||||
pre-existing VolumeSnapshotContent object representing an existing
|
||||
volume snapshot. This field should be set if the snapshot already
|
||||
exists and only needs a representation in Kubernetes. This field
|
||||
is immutable.
|
||||
type: string
|
||||
type: object
|
||||
volumeSnapshotClassName:
|
||||
description: |
|
||||
VolumeSnapshotClassName is the name of the VolumeSnapshotClass
|
||||
requested by the VolumeSnapshot. VolumeSnapshotClassName may be
|
||||
left nil to indicate that the default SnapshotClass should be used.
|
||||
A given cluster may have multiple default Volume SnapshotClasses:
|
||||
one default per CSI Driver. If a VolumeSnapshot does not specify
|
||||
a SnapshotClass, VolumeSnapshotSource will be checked to figure
|
||||
out what the associated CSI Driver is, and the default VolumeSnapshotClass
|
||||
associated with that CSI Driver will be used. If more than one VolumeSnapshotClass
|
||||
exist for a given CSI Driver and more than one have been marked
|
||||
as default, CreateSnapshot will fail and generate an event. Empty
|
||||
string is not allowed for this field.
|
||||
type: string
|
||||
required:
|
||||
- source
|
||||
type: object
|
||||
status:
|
||||
description: status represents the current information of a snapshot.
|
||||
Consumers must verify binding between VolumeSnapshot and VolumeSnapshotContent
|
||||
objects is successful (by validating that both VolumeSnapshot and VolumeSnapshotContent
|
||||
point at each other) before using this object.
|
||||
properties:
|
||||
boundVolumeSnapshotContentName:
|
||||
description: |
|
||||
boundVolumeSnapshotContentName is the name of the VolumeSnapshotContent
|
||||
object to which this VolumeSnapshot object intends to bind to. If
|
||||
not specified, it indicates that the VolumeSnapshot object has not
|
||||
been successfully bound to a VolumeSnapshotContent object yet. NOTE:
|
||||
To avoid possible security issues, consumers must verify binding
|
||||
between VolumeSnapshot and VolumeSnapshotContent objects is successful
|
||||
(by validating that both VolumeSnapshot and VolumeSnapshotContent
|
||||
point at each other) before using this object.
|
||||
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 by the snapshot controller
|
||||
with the "creation_time" value returned from CSI "CreateSnapshot"
|
||||
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 may indicate
|
||||
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. The snapshot controller will keep retrying when an error
|
||||
occurs during the snapshot creation. Upon success, this error field
|
||||
will be cleared.
|
||||
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 the snapshot is ready to be used
|
||||
to restore a volume. In dynamic snapshot creation case, this field
|
||||
will be filled in by the snapshot controller with the "ready_to_use"
|
||||
value returned from CSI "CreateSnapshot" 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 minimum size of volume required
|
||||
to create a volume from this snapshot. In dynamic snapshot creation
|
||||
case, this field will be filled in by the snapshot controller with
|
||||
the "size_bytes" value returned from CSI "CreateSnapshot" 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.
|
||||
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||
type: string
|
||||
x-kubernetes-int-or-string: true
|
||||
type: object
|
||||
required:
|
||||
- spec
|
||||
type: object
|
||||
served: false
|
||||
storage: false
|
||||
subresources:
|
||||
status: {}
|
||||
status:
|
||||
acceptedNames:
|
||||
kind: ""
|
||||
plural: ""
|
||||
conditions: []
|
||||
storedVersions: []
|
||||
{{- end -}}
|
||||
105
charts/zfs-localpv/charts/crds/templates/zfsbackup.yaml
Normal file
105
charts/zfs-localpv/charts/crds/templates/zfsbackup.yaml
Normal file
@@ -0,0 +1,105 @@
|
||||
{{- if .Values.zfsLocalPv.enabled -}}
|
||||
---
|
||||
apiVersion: apiextensions.k8s.io/v1
|
||||
kind: CustomResourceDefinition
|
||||
metadata:
|
||||
annotations:
|
||||
controller-gen.kubebuilder.io/version: v0.19.0
|
||||
{{- include "crds.extraAnnotations" .Values.zfsLocalPv | nindent 4 }}
|
||||
name: zfsbackups.zfs.openebs.io
|
||||
spec:
|
||||
group: zfs.openebs.io
|
||||
names:
|
||||
kind: ZFSBackup
|
||||
listKind: ZFSBackupList
|
||||
plural: zfsbackups
|
||||
shortNames:
|
||||
- zb
|
||||
singular: zfsbackup
|
||||
scope: Namespaced
|
||||
versions:
|
||||
- additionalPrinterColumns:
|
||||
- description: Previous snapshot for backup
|
||||
jsonPath: .spec.prevSnapName
|
||||
name: PrevSnap
|
||||
type: string
|
||||
- description: Backup status
|
||||
jsonPath: .status
|
||||
name: Status
|
||||
type: string
|
||||
- description: Age of the volume
|
||||
jsonPath: .metadata.creationTimestamp
|
||||
name: Age
|
||||
type: date
|
||||
name: v1
|
||||
schema:
|
||||
openAPIV3Schema:
|
||||
description: ZFSBackup describes a zfs 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: ZFSBackupSpec is the spec for a ZFSBackup resource
|
||||
properties:
|
||||
backupDest:
|
||||
description: BackupDest is the remote address for backup transfer
|
||||
minLength: 1
|
||||
pattern: ^([0-9]+.[0-9]+.[0-9]+.[0-9]+:[0-9]+)$
|
||||
type: string
|
||||
ownerNodeID:
|
||||
description: OwnerNodeID is a name of the nodes where the source volume
|
||||
is
|
||||
minLength: 1
|
||||
type: string
|
||||
prevSnapName:
|
||||
description: PrevSnapName is the last completed-backup's snapshot
|
||||
name
|
||||
type: string
|
||||
snapName:
|
||||
description: SnapName is the snapshot name for backup
|
||||
minLength: 1
|
||||
type: string
|
||||
volumeName:
|
||||
description: VolumeName is a name of the volume for which this backup
|
||||
is destined
|
||||
minLength: 1
|
||||
type: string
|
||||
required:
|
||||
- backupDest
|
||||
- ownerNodeID
|
||||
- volumeName
|
||||
type: object
|
||||
status:
|
||||
description: ZFSBackupStatus is to hold status of backup
|
||||
enum:
|
||||
- Init
|
||||
- Done
|
||||
- Failed
|
||||
- Pending
|
||||
- InProgress
|
||||
- Invalid
|
||||
type: string
|
||||
required:
|
||||
- spec
|
||||
- status
|
||||
type: object
|
||||
served: true
|
||||
storage: true
|
||||
subresources: {}
|
||||
{{- end -}}
|
||||
86
charts/zfs-localpv/charts/crds/templates/zfsnode.yaml
Normal file
86
charts/zfs-localpv/charts/crds/templates/zfsnode.yaml
Normal file
@@ -0,0 +1,86 @@
|
||||
{{- if .Values.zfsLocalPv.enabled -}}
|
||||
---
|
||||
apiVersion: apiextensions.k8s.io/v1
|
||||
kind: CustomResourceDefinition
|
||||
metadata:
|
||||
annotations:
|
||||
controller-gen.kubebuilder.io/version: v0.19.0
|
||||
{{- include "crds.extraAnnotations" .Values.zfsLocalPv | nindent 4 }}
|
||||
name: zfsnodes.zfs.openebs.io
|
||||
spec:
|
||||
group: zfs.openebs.io
|
||||
names:
|
||||
kind: ZFSNode
|
||||
listKind: ZFSNodeList
|
||||
plural: zfsnodes
|
||||
shortNames:
|
||||
- zfsnode
|
||||
singular: zfsnode
|
||||
scope: Namespaced
|
||||
versions:
|
||||
- name: v1
|
||||
schema:
|
||||
openAPIV3Schema:
|
||||
description: |-
|
||||
ZFSNode records information about all zfs pools available
|
||||
in a node. In general, the openebs node-agent creates the ZFSNode
|
||||
object & periodically synchronizing the zfs pools available in the node.
|
||||
ZFSNode has an owner reference pointing to the corresponding node object.
|
||||
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
|
||||
pools:
|
||||
items:
|
||||
description: Pool specifies attributes of a given zfs pool that exists
|
||||
on the node.
|
||||
properties:
|
||||
free:
|
||||
anyOf:
|
||||
- type: integer
|
||||
- type: string
|
||||
description: Free specifies the available capacity of zfs pool.
|
||||
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||
x-kubernetes-int-or-string: true
|
||||
name:
|
||||
description: Name of the zfs pool.
|
||||
minLength: 1
|
||||
type: string
|
||||
used:
|
||||
anyOf:
|
||||
- type: integer
|
||||
- type: string
|
||||
description: Used specifies the used capacity of zfs pool.
|
||||
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||
x-kubernetes-int-or-string: true
|
||||
uuid:
|
||||
description: UUID denotes a unique identity of a zfs pool.
|
||||
minLength: 1
|
||||
type: string
|
||||
required:
|
||||
- free
|
||||
- name
|
||||
- used
|
||||
- uuid
|
||||
type: object
|
||||
type: array
|
||||
required:
|
||||
- pools
|
||||
type: object
|
||||
served: true
|
||||
storage: true
|
||||
{{- end -}}
|
||||
242
charts/zfs-localpv/charts/crds/templates/zfsrestore.yaml
Normal file
242
charts/zfs-localpv/charts/crds/templates/zfsrestore.yaml
Normal file
@@ -0,0 +1,242 @@
|
||||
{{- if .Values.zfsLocalPv.enabled -}}
|
||||
---
|
||||
apiVersion: apiextensions.k8s.io/v1
|
||||
kind: CustomResourceDefinition
|
||||
metadata:
|
||||
annotations:
|
||||
controller-gen.kubebuilder.io/version: v0.19.0
|
||||
{{- include "crds.extraAnnotations" .Values.zfsLocalPv | nindent 4 }}
|
||||
name: zfsrestores.zfs.openebs.io
|
||||
spec:
|
||||
group: zfs.openebs.io
|
||||
names:
|
||||
kind: ZFSRestore
|
||||
listKind: ZFSRestoreList
|
||||
plural: zfsrestores
|
||||
singular: zfsrestore
|
||||
scope: Namespaced
|
||||
versions:
|
||||
- name: v1
|
||||
schema:
|
||||
openAPIV3Schema:
|
||||
description: ZFSRestore 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: ZFSRestoreSpec is the spec for a ZFSRestore resource
|
||||
properties:
|
||||
ownerNodeID:
|
||||
description: owner node name where restore volume is present
|
||||
minLength: 1
|
||||
type: string
|
||||
restoreSrc:
|
||||
description: it can be ip:port in case of restore from remote or volumeName
|
||||
in case of local restore
|
||||
minLength: 1
|
||||
pattern: ^([0-9]+.[0-9]+.[0-9]+.[0-9]+:[0-9]+)$
|
||||
type: string
|
||||
volumeName:
|
||||
description: volume name to where restore has to be performed
|
||||
minLength: 1
|
||||
type: string
|
||||
required:
|
||||
- ownerNodeID
|
||||
- restoreSrc
|
||||
- volumeName
|
||||
type: object
|
||||
status:
|
||||
description: ZFSRestoreStatus is to hold result of action.
|
||||
enum:
|
||||
- Init
|
||||
- Done
|
||||
- Failed
|
||||
- Pending
|
||||
- InProgress
|
||||
- Invalid
|
||||
type: string
|
||||
volSpec:
|
||||
description: |-
|
||||
VolumeInfo defines ZFS volume parameters for all modes in which
|
||||
ZFS volumes can be created like - ZFS volume with filesystem,
|
||||
ZFS Volume exposed as zfs or ZFS volume exposed as raw block device.
|
||||
Some of the parameters can be only set during creation time
|
||||
(as specified in the details of the parameter), and a few are editable.
|
||||
In case of Cloned volumes, the parameters are assigned the same values
|
||||
as the source volume.
|
||||
properties:
|
||||
capacity:
|
||||
description: Capacity of the volume
|
||||
minLength: 1
|
||||
type: string
|
||||
compression:
|
||||
description: |-
|
||||
Compression specifies the block-level compression algorithm to be applied to the ZFS Volume.
|
||||
The value "on" indicates ZFS to use the default compression algorithm. The default compression
|
||||
algorithm used by ZFS will be either lzjb or, if the lz4_compress feature is enabled, lz4.
|
||||
Compression property can be edited after the volume has been created. The change will only
|
||||
be applied to the newly-written data. For instance, if the Volume was created with "off" and
|
||||
the next day the compression was modified to "on", the data written prior to setting "on" will
|
||||
not be compressed.
|
||||
Default Value: off.
|
||||
pattern: ^(on|off|lzjb|zstd(?:-fast|-[1-9]|-1[0-9])?|gzip(?:-[1-9])?|zle|lz4)$
|
||||
type: string
|
||||
dedup:
|
||||
description: |-
|
||||
Deduplication is the process for removing redundant data at the block level,
|
||||
reducing the total amount of data stored. If a file system has the dedup property
|
||||
enabled, duplicate data blocks are removed synchronously.
|
||||
The result is that only unique data is stored and common components are shared among files.
|
||||
Deduplication can consume significant processing power (CPU) and memory as well as generate additional disk IO.
|
||||
Before creating a pool with deduplication enabled, ensure that you have planned your hardware
|
||||
requirements appropriately and implemented appropriate recovery practices, such as regular backups.
|
||||
As an alternative to deduplication consider using compression=lz4, as a less resource-intensive alternative.
|
||||
should be enabled on the zvol.
|
||||
Dedup property can be edited after the volume has been created.
|
||||
Default Value: off.
|
||||
enum:
|
||||
- "on"
|
||||
- "off"
|
||||
type: string
|
||||
encryption:
|
||||
description: |-
|
||||
Enabling the encryption feature allows for the creation of
|
||||
encrypted filesystems and volumes. ZFS will encrypt file and zvol data,
|
||||
file attributes, ACLs, permission bits, directory listings, FUID mappings,
|
||||
and userused / groupused data. ZFS will not encrypt metadata related to the
|
||||
pool structure, including dataset and snapshot names, dataset hierarchy,
|
||||
properties, file size, file holes, and deduplication tables
|
||||
(though the deduplicated data itself is encrypted).
|
||||
Default Value: off.
|
||||
pattern: ^(on|off|aes-128-[c,g]cm|aes-192-[c,g]cm|aes-256-[c,g]cm)$
|
||||
type: string
|
||||
fsType:
|
||||
description: |-
|
||||
FsType specifies filesystem type for the zfs volume/dataset.
|
||||
If FsType is provided as "zfs", then the driver will create a
|
||||
ZFS dataset, formatting is not required as underlying filesystem is ZFS anyway.
|
||||
If FsType is ext2, ext3, ext4 or xfs, then the driver will create a ZVOL and
|
||||
format the volume accordingly.
|
||||
FsType can not be modified once volume has been provisioned.
|
||||
Default Value: ext4.
|
||||
type: string
|
||||
keyformat:
|
||||
description: |-
|
||||
KeyFormat specifies format of the encryption key
|
||||
The supported KeyFormats are passphrase, raw, hex.
|
||||
enum:
|
||||
- passphrase
|
||||
- raw
|
||||
- hex
|
||||
type: string
|
||||
keylocation:
|
||||
description: KeyLocation is the location of key for the encryption
|
||||
type: string
|
||||
ownerNodeID:
|
||||
description: |-
|
||||
OwnerNodeID is the Node ID where the ZPOOL is running which is where
|
||||
the volume has been provisioned.
|
||||
OwnerNodeID can not be edited after the volume has been provisioned.
|
||||
minLength: 1
|
||||
type: string
|
||||
poolName:
|
||||
description: |-
|
||||
poolName specifies the name of the pool where the volume has been created.
|
||||
PoolName can not be edited after the volume has been provisioned.
|
||||
minLength: 1
|
||||
type: string
|
||||
quotaType:
|
||||
description: |-
|
||||
quotaType determines whether the dataset volume quota type is of type "quota" or "refquota".
|
||||
QuotaType can not be modified once volume has been provisioned.
|
||||
Default Value: quota.
|
||||
enum:
|
||||
- quota
|
||||
- refquota
|
||||
type: string
|
||||
recordsize:
|
||||
description: |-
|
||||
Specifies a suggested block size for files in the file system.
|
||||
The size specified must be a power of two greater than or equal to 512 and less than or equal to 128 Kbytes.
|
||||
RecordSize property can be edited after the volume has been created.
|
||||
Changing the file system's recordsize affects only files created afterward; existing files are unaffected.
|
||||
Default Value: 128k.
|
||||
minLength: 1
|
||||
type: string
|
||||
shared:
|
||||
description: |-
|
||||
Shared specifies whether the volume can be shared among multiple pods.
|
||||
If it is not set to "yes", then the ZFS-LocalPV Driver will not allow
|
||||
the volumes to be mounted by more than one pods.
|
||||
enum:
|
||||
- "yes"
|
||||
- "no"
|
||||
type: string
|
||||
snapname:
|
||||
description: |-
|
||||
SnapName specifies the name of the snapshot where the volume has been cloned from.
|
||||
Snapname can not be edited after the volume has been provisioned.
|
||||
type: string
|
||||
thinProvision:
|
||||
description: |-
|
||||
ThinProvision describes whether space reservation for the source volume is required or not.
|
||||
The value "yes" indicates that volume should be thin provisioned and "no" means thick provisioning of the volume.
|
||||
If thinProvision is set to "yes" then volume can be provisioned even if the ZPOOL does not
|
||||
have the enough capacity.
|
||||
If thinProvision is set to "no" then volume can be provisioned only if the ZPOOL has enough
|
||||
capacity and capacity required by volume can be reserved.
|
||||
ThinProvision can not be modified once volume has been provisioned.
|
||||
Default Value: no.
|
||||
enum:
|
||||
- "yes"
|
||||
- "no"
|
||||
type: string
|
||||
volblocksize:
|
||||
description: |-
|
||||
VolBlockSize specifies the block size for the zvol.
|
||||
The volsize can only be set to a multiple of volblocksize, and cannot be zero.
|
||||
VolBlockSize can not be edited after the volume has been provisioned.
|
||||
Default Value: 8k.
|
||||
minLength: 1
|
||||
type: string
|
||||
volumeType:
|
||||
description: |-
|
||||
volumeType determines whether the volume is of type "DATASET" or "ZVOL".
|
||||
If fstype provided in the storageclass is "zfs", a volume of type dataset will be created.
|
||||
If "ext4", "ext3", "ext2" or "xfs" is mentioned as fstype
|
||||
in the storageclass, then a volume of type zvol will be created, which will be
|
||||
further formatted as the fstype provided in the storageclass.
|
||||
VolumeType can not be modified once volume has been provisioned.
|
||||
enum:
|
||||
- ZVOL
|
||||
- DATASET
|
||||
type: string
|
||||
required:
|
||||
- capacity
|
||||
- ownerNodeID
|
||||
- poolName
|
||||
- volumeType
|
||||
type: object
|
||||
required:
|
||||
- spec
|
||||
- status
|
||||
type: object
|
||||
served: true
|
||||
storage: true
|
||||
{{- end -}}
|
||||
397
charts/zfs-localpv/charts/crds/templates/zfssnapshot.yaml
Normal file
397
charts/zfs-localpv/charts/crds/templates/zfssnapshot.yaml
Normal file
@@ -0,0 +1,397 @@
|
||||
{{- if .Values.zfsLocalPv.enabled -}}
|
||||
---
|
||||
apiVersion: apiextensions.k8s.io/v1
|
||||
kind: CustomResourceDefinition
|
||||
metadata:
|
||||
annotations:
|
||||
controller-gen.kubebuilder.io/version: v0.19.0
|
||||
{{- include "crds.extraAnnotations" .Values.zfsLocalPv | nindent 4 }}
|
||||
name: zfssnapshots.zfs.openebs.io
|
||||
spec:
|
||||
group: zfs.openebs.io
|
||||
names:
|
||||
kind: ZFSSnapshot
|
||||
listKind: ZFSSnapshotList
|
||||
plural: zfssnapshots
|
||||
shortNames:
|
||||
- zfssnap
|
||||
singular: zfssnapshot
|
||||
scope: Namespaced
|
||||
versions:
|
||||
- name: v1
|
||||
schema:
|
||||
openAPIV3Schema:
|
||||
description: ZFSSnapshot represents a ZFS Snapshot of the zfsvolume
|
||||
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: |-
|
||||
VolumeInfo defines ZFS volume parameters for all modes in which
|
||||
ZFS volumes can be created like - ZFS volume with filesystem,
|
||||
ZFS Volume exposed as zfs or ZFS volume exposed as raw block device.
|
||||
Some of the parameters can be only set during creation time
|
||||
(as specified in the details of the parameter), and a few are editable.
|
||||
In case of Cloned volumes, the parameters are assigned the same values
|
||||
as the source volume.
|
||||
properties:
|
||||
capacity:
|
||||
description: Capacity of the volume
|
||||
minLength: 1
|
||||
type: string
|
||||
compression:
|
||||
description: |-
|
||||
Compression specifies the block-level compression algorithm to be applied to the ZFS Volume.
|
||||
The value "on" indicates ZFS to use the default compression algorithm. The default compression
|
||||
algorithm used by ZFS will be either lzjb or, if the lz4_compress feature is enabled, lz4.
|
||||
Compression property can be edited after the volume has been created. The change will only
|
||||
be applied to the newly-written data. For instance, if the Volume was created with "off" and
|
||||
the next day the compression was modified to "on", the data written prior to setting "on" will
|
||||
not be compressed.
|
||||
Default Value: off.
|
||||
pattern: ^(on|off|lzjb|zstd(?:-fast|-[1-9]|-1[0-9])?|gzip(?:-[1-9])?|zle|lz4)$
|
||||
type: string
|
||||
dedup:
|
||||
description: |-
|
||||
Deduplication is the process for removing redundant data at the block level,
|
||||
reducing the total amount of data stored. If a file system has the dedup property
|
||||
enabled, duplicate data blocks are removed synchronously.
|
||||
The result is that only unique data is stored and common components are shared among files.
|
||||
Deduplication can consume significant processing power (CPU) and memory as well as generate additional disk IO.
|
||||
Before creating a pool with deduplication enabled, ensure that you have planned your hardware
|
||||
requirements appropriately and implemented appropriate recovery practices, such as regular backups.
|
||||
As an alternative to deduplication consider using compression=lz4, as a less resource-intensive alternative.
|
||||
should be enabled on the zvol.
|
||||
Dedup property can be edited after the volume has been created.
|
||||
Default Value: off.
|
||||
enum:
|
||||
- "on"
|
||||
- "off"
|
||||
type: string
|
||||
encryption:
|
||||
description: |-
|
||||
Enabling the encryption feature allows for the creation of
|
||||
encrypted filesystems and volumes. ZFS will encrypt file and zvol data,
|
||||
file attributes, ACLs, permission bits, directory listings, FUID mappings,
|
||||
and userused / groupused data. ZFS will not encrypt metadata related to the
|
||||
pool structure, including dataset and snapshot names, dataset hierarchy,
|
||||
properties, file size, file holes, and deduplication tables
|
||||
(though the deduplicated data itself is encrypted).
|
||||
Default Value: off.
|
||||
pattern: ^(on|off|aes-128-[c,g]cm|aes-192-[c,g]cm|aes-256-[c,g]cm)$
|
||||
type: string
|
||||
fsType:
|
||||
description: |-
|
||||
FsType specifies filesystem type for the zfs volume/dataset.
|
||||
If FsType is provided as "zfs", then the driver will create a
|
||||
ZFS dataset, formatting is not required as underlying filesystem is ZFS anyway.
|
||||
If FsType is ext2, ext3, ext4 or xfs, then the driver will create a ZVOL and
|
||||
format the volume accordingly.
|
||||
FsType can not be modified once volume has been provisioned.
|
||||
Default Value: ext4.
|
||||
type: string
|
||||
keyformat:
|
||||
description: |-
|
||||
KeyFormat specifies format of the encryption key
|
||||
The supported KeyFormats are passphrase, raw, hex.
|
||||
enum:
|
||||
- passphrase
|
||||
- raw
|
||||
- hex
|
||||
type: string
|
||||
keylocation:
|
||||
description: KeyLocation is the location of key for the encryption
|
||||
type: string
|
||||
ownerNodeID:
|
||||
description: |-
|
||||
OwnerNodeID is the Node ID where the ZPOOL is running which is where
|
||||
the volume has been provisioned.
|
||||
OwnerNodeID can not be edited after the volume has been provisioned.
|
||||
minLength: 1
|
||||
type: string
|
||||
poolName:
|
||||
description: |-
|
||||
poolName specifies the name of the pool where the volume has been created.
|
||||
PoolName can not be edited after the volume has been provisioned.
|
||||
minLength: 1
|
||||
type: string
|
||||
quotaType:
|
||||
description: |-
|
||||
quotaType determines whether the dataset volume quota type is of type "quota" or "refquota".
|
||||
QuotaType can not be modified once volume has been provisioned.
|
||||
Default Value: quota.
|
||||
enum:
|
||||
- quota
|
||||
- refquota
|
||||
type: string
|
||||
recordsize:
|
||||
description: |-
|
||||
Specifies a suggested block size for files in the file system.
|
||||
The size specified must be a power of two greater than or equal to 512 and less than or equal to 128 Kbytes.
|
||||
RecordSize property can be edited after the volume has been created.
|
||||
Changing the file system's recordsize affects only files created afterward; existing files are unaffected.
|
||||
Default Value: 128k.
|
||||
minLength: 1
|
||||
type: string
|
||||
shared:
|
||||
description: |-
|
||||
Shared specifies whether the volume can be shared among multiple pods.
|
||||
If it is not set to "yes", then the ZFS-LocalPV Driver will not allow
|
||||
the volumes to be mounted by more than one pods.
|
||||
enum:
|
||||
- "yes"
|
||||
- "no"
|
||||
type: string
|
||||
snapname:
|
||||
description: |-
|
||||
SnapName specifies the name of the snapshot where the volume has been cloned from.
|
||||
Snapname can not be edited after the volume has been provisioned.
|
||||
type: string
|
||||
thinProvision:
|
||||
description: |-
|
||||
ThinProvision describes whether space reservation for the source volume is required or not.
|
||||
The value "yes" indicates that volume should be thin provisioned and "no" means thick provisioning of the volume.
|
||||
If thinProvision is set to "yes" then volume can be provisioned even if the ZPOOL does not
|
||||
have the enough capacity.
|
||||
If thinProvision is set to "no" then volume can be provisioned only if the ZPOOL has enough
|
||||
capacity and capacity required by volume can be reserved.
|
||||
ThinProvision can not be modified once volume has been provisioned.
|
||||
Default Value: no.
|
||||
enum:
|
||||
- "yes"
|
||||
- "no"
|
||||
type: string
|
||||
volblocksize:
|
||||
description: |-
|
||||
VolBlockSize specifies the block size for the zvol.
|
||||
The volsize can only be set to a multiple of volblocksize, and cannot be zero.
|
||||
VolBlockSize can not be edited after the volume has been provisioned.
|
||||
Default Value: 8k.
|
||||
minLength: 1
|
||||
type: string
|
||||
volumeType:
|
||||
description: |-
|
||||
volumeType determines whether the volume is of type "DATASET" or "ZVOL".
|
||||
If fstype provided in the storageclass is "zfs", a volume of type dataset will be created.
|
||||
If "ext4", "ext3", "ext2" or "xfs" is mentioned as fstype
|
||||
in the storageclass, then a volume of type zvol will be created, which will be
|
||||
further formatted as the fstype provided in the storageclass.
|
||||
VolumeType can not be modified once volume has been provisioned.
|
||||
enum:
|
||||
- ZVOL
|
||||
- DATASET
|
||||
type: string
|
||||
required:
|
||||
- capacity
|
||||
- ownerNodeID
|
||||
- poolName
|
||||
- volumeType
|
||||
type: object
|
||||
status:
|
||||
description: SnapStatus string that reflects if the snapshot was created
|
||||
successfully
|
||||
properties:
|
||||
state:
|
||||
type: string
|
||||
type: object
|
||||
required:
|
||||
- spec
|
||||
- status
|
||||
type: object
|
||||
served: true
|
||||
storage: true
|
||||
- name: v1alpha1
|
||||
schema:
|
||||
openAPIV3Schema:
|
||||
description: ZFSSnapshot represents a ZFS Snapshot of the zfsvolume
|
||||
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: |-
|
||||
VolumeInfo defines ZFS volume parameters for all modes in which
|
||||
ZFS volumes can be created like - ZFS volume with filesystem,
|
||||
ZFS Volume exposed as zfs or ZFS volume exposed as raw block device.
|
||||
Some of the parameters can be only set during creation time
|
||||
(as specified in the details of the parameter), and a few are editable.
|
||||
In case of Cloned volumes, the parameters are assigned the same values
|
||||
as the source volume.
|
||||
properties:
|
||||
capacity:
|
||||
description: Capacity of the volume
|
||||
minLength: 1
|
||||
type: string
|
||||
compression:
|
||||
description: |-
|
||||
Compression specifies the block-level compression algorithm to be applied to the ZFS Volume.
|
||||
The value "on" indicates ZFS to use the default compression algorithm. The default compression
|
||||
algorithm used by ZFS will be either lzjb or, if the lz4_compress feature is enabled, lz4.
|
||||
Compression property can be edited after the volume has been created. The change will only
|
||||
be applied to the newly-written data. For instance, if the Volume was created with "off" and
|
||||
the next day the compression was modified to "on", the data written prior to setting "on" will
|
||||
not be compressed.
|
||||
Default Value: off.
|
||||
pattern: ^(on|off|lzjb|gzip|gzip-[1-9]|zle|lz4)$
|
||||
type: string
|
||||
dedup:
|
||||
description: |-
|
||||
Deduplication is the process for removing redundant data at the block level,
|
||||
reducing the total amount of data stored. If a file system has the dedup property
|
||||
enabled, duplicate data blocks are removed synchronously.
|
||||
The result is that only unique data is stored and common components are shared among files.
|
||||
Deduplication can consume significant processing power (CPU) and memory as well as generate additional disk IO.
|
||||
Before creating a pool with deduplication enabled, ensure that you have planned your hardware
|
||||
requirements appropriately and implemented appropriate recovery practices, such as regular backups.
|
||||
As an alternative to deduplication consider using compression=lz4, as a less resource-intensive alternative.
|
||||
should be enabled on the zvol.
|
||||
Dedup property can be edited after the volume has been created.
|
||||
Default Value: off.
|
||||
enum:
|
||||
- "on"
|
||||
- "off"
|
||||
type: string
|
||||
encryption:
|
||||
description: |-
|
||||
Enabling the encryption feature allows for the creation of
|
||||
encrypted filesystems and volumes. ZFS will encrypt file and zvol data,
|
||||
file attributes, ACLs, permission bits, directory listings, FUID mappings,
|
||||
and userused / groupused data. ZFS will not encrypt metadata related to the
|
||||
pool structure, including dataset and snapshot names, dataset hierarchy,
|
||||
properties, file size, file holes, and deduplication tables
|
||||
(though the deduplicated data itself is encrypted).
|
||||
Default Value: off.
|
||||
pattern: ^(on|off|aes-128-[c,g]cm|aes-192-[c,g]cm|aes-256-[c,g]cm)$
|
||||
type: string
|
||||
fsType:
|
||||
description: |-
|
||||
FsType specifies filesystem type for the zfs volume/dataset.
|
||||
If FsType is provided as "zfs", then the driver will create a
|
||||
ZFS dataset, formatting is not required as underlying filesystem is ZFS anyway.
|
||||
If FsType is ext2, ext3, ext4 or xfs, then the driver will create a ZVOL and
|
||||
format the volume accordingly.
|
||||
FsType can not be modified once volume has been provisioned.
|
||||
Default Value: ext4.
|
||||
type: string
|
||||
keyformat:
|
||||
description: |-
|
||||
KeyFormat specifies format of the encryption key
|
||||
The supported KeyFormats are passphrase, raw, hex.
|
||||
enum:
|
||||
- passphrase
|
||||
- raw
|
||||
- hex
|
||||
type: string
|
||||
keylocation:
|
||||
description: KeyLocation is the location of key for the encryption
|
||||
type: string
|
||||
ownerNodeID:
|
||||
description: |-
|
||||
OwnerNodeID is the Node ID where the ZPOOL is running which is where
|
||||
the volume has been provisioned.
|
||||
OwnerNodeID can not be edited after the volume has been provisioned.
|
||||
minLength: 1
|
||||
type: string
|
||||
poolName:
|
||||
description: |-
|
||||
poolName specifies the name of the pool where the volume has been created.
|
||||
PoolName can not be edited after the volume has been provisioned.
|
||||
minLength: 1
|
||||
type: string
|
||||
recordsize:
|
||||
description: |-
|
||||
Specifies a suggested block size for files in the file system.
|
||||
The size specified must be a power of two greater than or equal to 512 and less than or equal to 128 Kbytes.
|
||||
RecordSize property can be edited after the volume has been created.
|
||||
Changing the file system's recordsize affects only files created afterward; existing files are unaffected.
|
||||
Default Value: 128k.
|
||||
minLength: 1
|
||||
type: string
|
||||
snapname:
|
||||
description: |-
|
||||
SnapName specifies the name of the snapshot where the volume has been cloned from.
|
||||
Snapname can not be edited after the volume has been provisioned.
|
||||
type: string
|
||||
thinProvision:
|
||||
description: |-
|
||||
ThinProvision describes whether space reservation for the source volume is required or not.
|
||||
The value "yes" indicates that volume should be thin provisioned and "no" means thick provisioning of the volume.
|
||||
If thinProvision is set to "yes" then volume can be provisioned even if the ZPOOL does not
|
||||
have the enough capacity.
|
||||
If thinProvision is set to "no" then volume can be provisioned only if the ZPOOL has enough
|
||||
capacity and capacity required by volume can be reserved.
|
||||
ThinProvision can not be modified once volume has been provisioned.
|
||||
Default Value: no.
|
||||
enum:
|
||||
- "yes"
|
||||
- "no"
|
||||
type: string
|
||||
volblocksize:
|
||||
description: |-
|
||||
VolBlockSize specifies the block size for the zvol.
|
||||
The volsize can only be set to a multiple of volblocksize, and cannot be zero.
|
||||
VolBlockSize can not be edited after the volume has been provisioned.
|
||||
Default Value: 8k.
|
||||
minLength: 1
|
||||
type: string
|
||||
volumeType:
|
||||
description: |-
|
||||
volumeType determines whether the volume is of type "DATASET" or "ZVOL".
|
||||
If fstype provided in the storageclass is "zfs", a volume of type dataset will be created.
|
||||
If "ext4", "ext3", "ext2" or "xfs" is mentioned as fstype
|
||||
in the storageclass, then a volume of type zvol will be created, which will be
|
||||
further formatted as the fstype provided in the storageclass.
|
||||
VolumeType can not be modified once volume has been provisioned.
|
||||
enum:
|
||||
- ZVOL
|
||||
- DATASET
|
||||
type: string
|
||||
required:
|
||||
- capacity
|
||||
- ownerNodeID
|
||||
- poolName
|
||||
- volumeType
|
||||
type: object
|
||||
status:
|
||||
description: SnapStatus string that reflects if the snapshot was created
|
||||
successfully
|
||||
properties:
|
||||
state:
|
||||
type: string
|
||||
type: object
|
||||
required:
|
||||
- spec
|
||||
- status
|
||||
type: object
|
||||
served: true
|
||||
storage: false
|
||||
{{- end -}}
|
||||
465
charts/zfs-localpv/charts/crds/templates/zfsvolume.yaml
Normal file
465
charts/zfs-localpv/charts/crds/templates/zfsvolume.yaml
Normal file
@@ -0,0 +1,465 @@
|
||||
{{- if .Values.zfsLocalPv.enabled -}}
|
||||
---
|
||||
apiVersion: apiextensions.k8s.io/v1
|
||||
kind: CustomResourceDefinition
|
||||
metadata:
|
||||
annotations:
|
||||
controller-gen.kubebuilder.io/version: v0.19.0
|
||||
{{- include "crds.extraAnnotations" .Values.zfsLocalPv | nindent 4 }}
|
||||
name: zfsvolumes.zfs.openebs.io
|
||||
spec:
|
||||
group: zfs.openebs.io
|
||||
names:
|
||||
kind: ZFSVolume
|
||||
listKind: ZFSVolumeList
|
||||
plural: zfsvolumes
|
||||
shortNames:
|
||||
- zfsvol
|
||||
- zv
|
||||
singular: zfsvolume
|
||||
scope: Namespaced
|
||||
versions:
|
||||
- additionalPrinterColumns:
|
||||
- description: ZFS Pool where the volume is created
|
||||
jsonPath: .spec.poolName
|
||||
name: ZPool
|
||||
type: string
|
||||
- description: Node where the volume is created
|
||||
jsonPath: .spec.ownerNodeID
|
||||
name: NodeID
|
||||
type: string
|
||||
- description: Size of the volume
|
||||
jsonPath: .spec.capacity
|
||||
name: Size
|
||||
type: string
|
||||
- description: Status of the volume
|
||||
jsonPath: .status.state
|
||||
name: Status
|
||||
type: string
|
||||
- description: filesystem created on the volume
|
||||
jsonPath: .spec.fsType
|
||||
name: Filesystem
|
||||
type: string
|
||||
- description: Age of the volume
|
||||
jsonPath: .metadata.creationTimestamp
|
||||
name: Age
|
||||
type: date
|
||||
name: v1
|
||||
schema:
|
||||
openAPIV3Schema:
|
||||
description: ZFSVolume represents a ZFS based volume
|
||||
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: |-
|
||||
VolumeInfo defines ZFS volume parameters for all modes in which
|
||||
ZFS volumes can be created like - ZFS volume with filesystem,
|
||||
ZFS Volume exposed as zfs or ZFS volume exposed as raw block device.
|
||||
Some of the parameters can be only set during creation time
|
||||
(as specified in the details of the parameter), and a few are editable.
|
||||
In case of Cloned volumes, the parameters are assigned the same values
|
||||
as the source volume.
|
||||
properties:
|
||||
capacity:
|
||||
description: Capacity of the volume
|
||||
minLength: 1
|
||||
type: string
|
||||
compression:
|
||||
description: |-
|
||||
Compression specifies the block-level compression algorithm to be applied to the ZFS Volume.
|
||||
The value "on" indicates ZFS to use the default compression algorithm. The default compression
|
||||
algorithm used by ZFS will be either lzjb or, if the lz4_compress feature is enabled, lz4.
|
||||
Compression property can be edited after the volume has been created. The change will only
|
||||
be applied to the newly-written data. For instance, if the Volume was created with "off" and
|
||||
the next day the compression was modified to "on", the data written prior to setting "on" will
|
||||
not be compressed.
|
||||
Default Value: off.
|
||||
pattern: ^(on|off|lzjb|zstd(?:-fast|-[1-9]|-1[0-9])?|gzip(?:-[1-9])?|zle|lz4)$
|
||||
type: string
|
||||
dedup:
|
||||
description: |-
|
||||
Deduplication is the process for removing redundant data at the block level,
|
||||
reducing the total amount of data stored. If a file system has the dedup property
|
||||
enabled, duplicate data blocks are removed synchronously.
|
||||
The result is that only unique data is stored and common components are shared among files.
|
||||
Deduplication can consume significant processing power (CPU) and memory as well as generate additional disk IO.
|
||||
Before creating a pool with deduplication enabled, ensure that you have planned your hardware
|
||||
requirements appropriately and implemented appropriate recovery practices, such as regular backups.
|
||||
As an alternative to deduplication consider using compression=lz4, as a less resource-intensive alternative.
|
||||
should be enabled on the zvol.
|
||||
Dedup property can be edited after the volume has been created.
|
||||
Default Value: off.
|
||||
enum:
|
||||
- "on"
|
||||
- "off"
|
||||
type: string
|
||||
encryption:
|
||||
description: |-
|
||||
Enabling the encryption feature allows for the creation of
|
||||
encrypted filesystems and volumes. ZFS will encrypt file and zvol data,
|
||||
file attributes, ACLs, permission bits, directory listings, FUID mappings,
|
||||
and userused / groupused data. ZFS will not encrypt metadata related to the
|
||||
pool structure, including dataset and snapshot names, dataset hierarchy,
|
||||
properties, file size, file holes, and deduplication tables
|
||||
(though the deduplicated data itself is encrypted).
|
||||
Default Value: off.
|
||||
pattern: ^(on|off|aes-128-[c,g]cm|aes-192-[c,g]cm|aes-256-[c,g]cm)$
|
||||
type: string
|
||||
fsType:
|
||||
description: |-
|
||||
FsType specifies filesystem type for the zfs volume/dataset.
|
||||
If FsType is provided as "zfs", then the driver will create a
|
||||
ZFS dataset, formatting is not required as underlying filesystem is ZFS anyway.
|
||||
If FsType is ext2, ext3, ext4 or xfs, then the driver will create a ZVOL and
|
||||
format the volume accordingly.
|
||||
FsType can not be modified once volume has been provisioned.
|
||||
Default Value: ext4.
|
||||
type: string
|
||||
keyformat:
|
||||
description: |-
|
||||
KeyFormat specifies format of the encryption key
|
||||
The supported KeyFormats are passphrase, raw, hex.
|
||||
enum:
|
||||
- passphrase
|
||||
- raw
|
||||
- hex
|
||||
type: string
|
||||
keylocation:
|
||||
description: KeyLocation is the location of key for the encryption
|
||||
type: string
|
||||
ownerNodeID:
|
||||
description: |-
|
||||
OwnerNodeID is the Node ID where the ZPOOL is running which is where
|
||||
the volume has been provisioned.
|
||||
OwnerNodeID can not be edited after the volume has been provisioned.
|
||||
minLength: 1
|
||||
type: string
|
||||
poolName:
|
||||
description: |-
|
||||
poolName specifies the name of the pool where the volume has been created.
|
||||
PoolName can not be edited after the volume has been provisioned.
|
||||
minLength: 1
|
||||
type: string
|
||||
quotaType:
|
||||
description: |-
|
||||
quotaType determines whether the dataset volume quota type is of type "quota" or "refquota".
|
||||
QuotaType can not be modified once volume has been provisioned.
|
||||
Default Value: quota.
|
||||
enum:
|
||||
- quota
|
||||
- refquota
|
||||
type: string
|
||||
recordsize:
|
||||
description: |-
|
||||
Specifies a suggested block size for files in the file system.
|
||||
The size specified must be a power of two greater than or equal to 512 and less than or equal to 128 Kbytes.
|
||||
RecordSize property can be edited after the volume has been created.
|
||||
Changing the file system's recordsize affects only files created afterward; existing files are unaffected.
|
||||
Default Value: 128k.
|
||||
minLength: 1
|
||||
type: string
|
||||
shared:
|
||||
description: |-
|
||||
Shared specifies whether the volume can be shared among multiple pods.
|
||||
If it is not set to "yes", then the ZFS-LocalPV Driver will not allow
|
||||
the volumes to be mounted by more than one pods.
|
||||
enum:
|
||||
- "yes"
|
||||
- "no"
|
||||
type: string
|
||||
snapname:
|
||||
description: |-
|
||||
SnapName specifies the name of the snapshot where the volume has been cloned from.
|
||||
Snapname can not be edited after the volume has been provisioned.
|
||||
type: string
|
||||
thinProvision:
|
||||
description: |-
|
||||
ThinProvision describes whether space reservation for the source volume is required or not.
|
||||
The value "yes" indicates that volume should be thin provisioned and "no" means thick provisioning of the volume.
|
||||
If thinProvision is set to "yes" then volume can be provisioned even if the ZPOOL does not
|
||||
have the enough capacity.
|
||||
If thinProvision is set to "no" then volume can be provisioned only if the ZPOOL has enough
|
||||
capacity and capacity required by volume can be reserved.
|
||||
ThinProvision can not be modified once volume has been provisioned.
|
||||
Default Value: no.
|
||||
enum:
|
||||
- "yes"
|
||||
- "no"
|
||||
type: string
|
||||
volblocksize:
|
||||
description: |-
|
||||
VolBlockSize specifies the block size for the zvol.
|
||||
The volsize can only be set to a multiple of volblocksize, and cannot be zero.
|
||||
VolBlockSize can not be edited after the volume has been provisioned.
|
||||
Default Value: 8k.
|
||||
minLength: 1
|
||||
type: string
|
||||
volumeType:
|
||||
description: |-
|
||||
volumeType determines whether the volume is of type "DATASET" or "ZVOL".
|
||||
If fstype provided in the storageclass is "zfs", a volume of type dataset will be created.
|
||||
If "ext4", "ext3", "ext2" or "xfs" is mentioned as fstype
|
||||
in the storageclass, then a volume of type zvol will be created, which will be
|
||||
further formatted as the fstype provided in the storageclass.
|
||||
VolumeType can not be modified once volume has been provisioned.
|
||||
enum:
|
||||
- ZVOL
|
||||
- DATASET
|
||||
type: string
|
||||
required:
|
||||
- capacity
|
||||
- ownerNodeID
|
||||
- poolName
|
||||
- volumeType
|
||||
type: object
|
||||
status:
|
||||
description: VolStatus string that specifies the current state of the
|
||||
volume provisioning request.
|
||||
properties:
|
||||
state:
|
||||
description: |-
|
||||
State specifies the current state of the volume provisioning request.
|
||||
The state "Pending" means that the volume creation request has not
|
||||
processed yet. The state "Ready" means that the volume has been created
|
||||
and it is ready for the use.
|
||||
enum:
|
||||
- Pending
|
||||
- Ready
|
||||
- Failed
|
||||
type: string
|
||||
type: object
|
||||
required:
|
||||
- spec
|
||||
type: object
|
||||
served: true
|
||||
storage: true
|
||||
subresources: {}
|
||||
- additionalPrinterColumns:
|
||||
- description: ZFS Pool where the volume is created
|
||||
jsonPath: .spec.poolName
|
||||
name: ZPool
|
||||
type: string
|
||||
- description: Node where the volume is created
|
||||
jsonPath: .spec.ownerNodeID
|
||||
name: Node
|
||||
type: string
|
||||
- description: Size of the volume
|
||||
jsonPath: .spec.capacity
|
||||
name: Size
|
||||
type: string
|
||||
- description: Status of the volume
|
||||
jsonPath: .status.state
|
||||
name: Status
|
||||
type: string
|
||||
- description: filesystem created on the volume
|
||||
jsonPath: .spec.fsType
|
||||
name: Filesystem
|
||||
type: string
|
||||
- description: Age of the volume
|
||||
jsonPath: .metadata.creationTimestamp
|
||||
name: Age
|
||||
type: date
|
||||
name: v1alpha1
|
||||
schema:
|
||||
openAPIV3Schema:
|
||||
description: ZFSVolume represents a ZFS based volume
|
||||
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: |-
|
||||
VolumeInfo defines ZFS volume parameters for all modes in which
|
||||
ZFS volumes can be created like - ZFS volume with filesystem,
|
||||
ZFS Volume exposed as zfs or ZFS volume exposed as raw block device.
|
||||
Some of the parameters can be only set during creation time
|
||||
(as specified in the details of the parameter), and a few are editable.
|
||||
In case of Cloned volumes, the parameters are assigned the same values
|
||||
as the source volume.
|
||||
properties:
|
||||
capacity:
|
||||
description: Capacity of the volume
|
||||
minLength: 1
|
||||
type: string
|
||||
compression:
|
||||
description: |-
|
||||
Compression specifies the block-level compression algorithm to be applied to the ZFS Volume.
|
||||
The value "on" indicates ZFS to use the default compression algorithm. The default compression
|
||||
algorithm used by ZFS will be either lzjb or, if the lz4_compress feature is enabled, lz4.
|
||||
Compression property can be edited after the volume has been created. The change will only
|
||||
be applied to the newly-written data. For instance, if the Volume was created with "off" and
|
||||
the next day the compression was modified to "on", the data written prior to setting "on" will
|
||||
not be compressed.
|
||||
Default Value: off.
|
||||
pattern: ^(on|off|lzjb|gzip|gzip-[1-9]|zle|lz4)$
|
||||
type: string
|
||||
dedup:
|
||||
description: |-
|
||||
Deduplication is the process for removing redundant data at the block level,
|
||||
reducing the total amount of data stored. If a file system has the dedup property
|
||||
enabled, duplicate data blocks are removed synchronously.
|
||||
The result is that only unique data is stored and common components are shared among files.
|
||||
Deduplication can consume significant processing power (CPU) and memory as well as generate additional disk IO.
|
||||
Before creating a pool with deduplication enabled, ensure that you have planned your hardware
|
||||
requirements appropriately and implemented appropriate recovery practices, such as regular backups.
|
||||
As an alternative to deduplication consider using compression=lz4, as a less resource-intensive alternative.
|
||||
should be enabled on the zvol.
|
||||
Dedup property can be edited after the volume has been created.
|
||||
Default Value: off.
|
||||
enum:
|
||||
- "on"
|
||||
- "off"
|
||||
type: string
|
||||
encryption:
|
||||
description: |-
|
||||
Enabling the encryption feature allows for the creation of
|
||||
encrypted filesystems and volumes. ZFS will encrypt file and zvol data,
|
||||
file attributes, ACLs, permission bits, directory listings, FUID mappings,
|
||||
and userused / groupused data. ZFS will not encrypt metadata related to the
|
||||
pool structure, including dataset and snapshot names, dataset hierarchy,
|
||||
properties, file size, file holes, and deduplication tables
|
||||
(though the deduplicated data itself is encrypted).
|
||||
Default Value: off.
|
||||
pattern: ^(on|off|aes-128-[c,g]cm|aes-192-[c,g]cm|aes-256-[c,g]cm)$
|
||||
type: string
|
||||
fsType:
|
||||
description: |-
|
||||
FsType specifies filesystem type for the zfs volume/dataset.
|
||||
If FsType is provided as "zfs", then the driver will create a
|
||||
ZFS dataset, formatting is not required as underlying filesystem is ZFS anyway.
|
||||
If FsType is ext2, ext3, ext4 or xfs, then the driver will create a ZVOL and
|
||||
format the volume accordingly.
|
||||
FsType can not be modified once volume has been provisioned.
|
||||
Default Value: ext4.
|
||||
type: string
|
||||
keyformat:
|
||||
description: |-
|
||||
KeyFormat specifies format of the encryption key
|
||||
The supported KeyFormats are passphrase, raw, hex.
|
||||
enum:
|
||||
- passphrase
|
||||
- raw
|
||||
- hex
|
||||
type: string
|
||||
keylocation:
|
||||
description: KeyLocation is the location of key for the encryption
|
||||
type: string
|
||||
ownerNodeID:
|
||||
description: |-
|
||||
OwnerNodeID is the Node ID where the ZPOOL is running which is where
|
||||
the volume has been provisioned.
|
||||
OwnerNodeID can not be edited after the volume has been provisioned.
|
||||
minLength: 1
|
||||
type: string
|
||||
poolName:
|
||||
description: |-
|
||||
poolName specifies the name of the pool where the volume has been created.
|
||||
PoolName can not be edited after the volume has been provisioned.
|
||||
minLength: 1
|
||||
type: string
|
||||
recordsize:
|
||||
description: |-
|
||||
Specifies a suggested block size for files in the file system.
|
||||
The size specified must be a power of two greater than or equal to 512 and less than or equal to 128 Kbytes.
|
||||
RecordSize property can be edited after the volume has been created.
|
||||
Changing the file system's recordsize affects only files created afterward; existing files are unaffected.
|
||||
Default Value: 128k.
|
||||
minLength: 1
|
||||
type: string
|
||||
snapname:
|
||||
description: |-
|
||||
SnapName specifies the name of the snapshot where the volume has been cloned from.
|
||||
Snapname can not be edited after the volume has been provisioned.
|
||||
type: string
|
||||
thinProvision:
|
||||
description: |-
|
||||
ThinProvision describes whether space reservation for the source volume is required or not.
|
||||
The value "yes" indicates that volume should be thin provisioned and "no" means thick provisioning of the volume.
|
||||
If thinProvision is set to "yes" then volume can be provisioned even if the ZPOOL does not
|
||||
have the enough capacity.
|
||||
If thinProvision is set to "no" then volume can be provisioned only if the ZPOOL has enough
|
||||
capacity and capacity required by volume can be reserved.
|
||||
ThinProvision can not be modified once volume has been provisioned.
|
||||
Default Value: no.
|
||||
enum:
|
||||
- "yes"
|
||||
- "no"
|
||||
type: string
|
||||
volblocksize:
|
||||
description: |-
|
||||
VolBlockSize specifies the block size for the zvol.
|
||||
The volsize can only be set to a multiple of volblocksize, and cannot be zero.
|
||||
VolBlockSize can not be edited after the volume has been provisioned.
|
||||
Default Value: 8k.
|
||||
minLength: 1
|
||||
type: string
|
||||
volumeType:
|
||||
description: |-
|
||||
volumeType determines whether the volume is of type "DATASET" or "ZVOL".
|
||||
If fstype provided in the storageclass is "zfs", a volume of type dataset will be created.
|
||||
If "ext4", "ext3", "ext2" or "xfs" is mentioned as fstype
|
||||
in the storageclass, then a volume of type zvol will be created, which will be
|
||||
further formatted as the fstype provided in the storageclass.
|
||||
VolumeType can not be modified once volume has been provisioned.
|
||||
enum:
|
||||
- ZVOL
|
||||
- DATASET
|
||||
type: string
|
||||
required:
|
||||
- capacity
|
||||
- ownerNodeID
|
||||
- poolName
|
||||
- volumeType
|
||||
type: object
|
||||
status:
|
||||
description: VolStatus string that specifies the current state of the
|
||||
volume provisioning request.
|
||||
properties:
|
||||
state:
|
||||
description: |-
|
||||
State specifies the current state of the volume provisioning request.
|
||||
The state "Pending" means that the volume creation request has not
|
||||
processed yet. The state "Ready" means that the volume has been created
|
||||
and it is ready for the use.
|
||||
enum:
|
||||
- Pending
|
||||
- Ready
|
||||
type: string
|
||||
type: object
|
||||
required:
|
||||
- spec
|
||||
type: object
|
||||
served: true
|
||||
storage: false
|
||||
subresources: {}
|
||||
{{- end -}}
|
||||
12
charts/zfs-localpv/charts/crds/values.yaml
Normal file
12
charts/zfs-localpv/charts/crds/values.yaml
Normal file
@@ -0,0 +1,12 @@
|
||||
zfsLocalPv:
|
||||
# Install zfs-localpv CRDs
|
||||
enabled: true
|
||||
# -- Keep CRDs on chart uninstall
|
||||
keep: true
|
||||
|
||||
csi:
|
||||
volumeSnapshots:
|
||||
# Install Volume Snapshot CRDs
|
||||
enabled: true
|
||||
# -- Keep CRDs on chart uninstall
|
||||
keep: true
|
||||
5
charts/zfs-localpv/templates/NOTES.txt
Normal file
5
charts/zfs-localpv/templates/NOTES.txt
Normal file
@@ -0,0 +1,5 @@
|
||||
The OpenEBS ZFS LocalPV has been installed. Check its status by running:
|
||||
$ kubectl get pods -n {{ .Release.Namespace }} -l role=openebs-zfs
|
||||
|
||||
For more information, visit our Slack at https://openebs.io/community or view
|
||||
the documentation online at http://docs.openebs.io/.
|
||||
162
charts/zfs-localpv/templates/_helpers.tpl
Normal file
162
charts/zfs-localpv/templates/_helpers.tpl
Normal file
@@ -0,0 +1,162 @@
|
||||
{{/* vim: set filetype=mustache: */}}
|
||||
{{/*
|
||||
Expand the name of the chart.
|
||||
*/}}
|
||||
{{- define "zfslocalpv.name" -}}
|
||||
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Create a default fully qualified localpv provisioner 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 "zfslocalpv.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 "zfslocalpv.chart" -}}
|
||||
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
|
||||
{{- end -}}
|
||||
|
||||
|
||||
{{/*
|
||||
Create the name of the service account for controller
|
||||
*/}}
|
||||
{{- define "zfslocalpv.zfsController.serviceAccountName" -}}
|
||||
{{- if .Values.serviceAccount.zfsController.create }}
|
||||
{{- default (include "zfslocalpv.fullname" .) .Values.serviceAccount.zfsController.name }}
|
||||
{{- else }}
|
||||
{{- default "default" .Values.serviceAccount.zfsController.name }}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Create the name of the service account to use
|
||||
*/}}
|
||||
{{- define "zfslocalpv.zfsNode.serviceAccountName" -}}
|
||||
{{- if .Values.serviceAccount.zfsNode.create }}
|
||||
{{- default (include "zfslocalpv.fullname" .) .Values.serviceAccount.zfsNode.name }}
|
||||
{{- else }}
|
||||
{{- default "default" .Values.serviceAccount.zfsNode.name }}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Define meta labels for openebs zfs-localpv components
|
||||
*/}}
|
||||
{{- define "zfslocalpv.common.metaLabels" -}}
|
||||
{{- if or (not (hasKey .Values "enableHelmMetaLabels")) .Values.enableHelmMetaLabels -}}
|
||||
chart: {{ template "zfslocalpv.chart" . }}
|
||||
heritage: {{ .Release.Service }}
|
||||
{{ end -}}
|
||||
openebs.io/version: {{ .Chart.AppVersion | quote }}
|
||||
role: {{ .Values.role | quote }}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Create match labels for openebs zfs-localpv controller
|
||||
*/}}
|
||||
{{- define "zfslocalpv.zfsController.matchLabels" -}}
|
||||
app: {{ .Values.zfsController.componentName | quote }}
|
||||
{{ if or (not (hasKey .Values "enableHelmMetaLabels")) .Values.enableHelmMetaLabels -}}
|
||||
release: {{ .Release.Name }}
|
||||
{{ end -}}
|
||||
component: {{ .Values.zfsController.componentName | quote }}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Create component labels for zfslocalpv controller
|
||||
*/}}
|
||||
{{- define "zfslocalpv.zfsController.componentLabels" -}}
|
||||
openebs.io/component-name: {{ .Values.zfsController.componentName | quote }}
|
||||
{{- end -}}
|
||||
|
||||
|
||||
{{/*
|
||||
Create labels for openebs zfs-localpv controller
|
||||
*/}}
|
||||
{{- define "zfslocalpv.zfsController.labels" -}}
|
||||
{{ include "zfslocalpv.common.metaLabels" . }}
|
||||
{{ include "zfslocalpv.zfsController.matchLabels" . }}
|
||||
{{ include "zfslocalpv.zfsController.componentLabels" . }}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Create match labels for openebs zfs-localpv node daemon
|
||||
*/}}
|
||||
{{- define "zfslocalpv.zfsNode.matchLabels" -}}
|
||||
name: {{ .Values.zfsNode.componentName | quote }}{{ if or (not (hasKey .Values "enableHelmMetaLabels")) .Values.enableHelmMetaLabels }}
|
||||
release: {{ .Release.Name }}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Create component labels openebs zfs-localpv node daemon
|
||||
*/}}
|
||||
{{- define "zfslocalpv.zfsNode.componentLabels" -}}
|
||||
app: {{ .Values.zfsNode.componentName | quote }}
|
||||
openebs.io/component-name: {{ .Values.zfsNode.componentName | quote }}
|
||||
{{- end -}}
|
||||
|
||||
|
||||
{{/*
|
||||
Create labels for openebs zfs-localpv node daemon
|
||||
*/}}
|
||||
{{- define "zfslocalpv.zfsNode.labels" -}}
|
||||
{{ include "zfslocalpv.common.metaLabels" . }}
|
||||
{{ include "zfslocalpv.zfsNode.matchLabels" . }}
|
||||
{{ include "zfslocalpv.zfsNode.componentLabels" . }}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Create the name of the priority class for csi node plugin
|
||||
*/}}
|
||||
{{- define "zfslocalpv.zfsNode.priorityClassName" -}}
|
||||
{{- if .Values.zfsNode.priorityClass.create }}
|
||||
{{- printf "%s-%s" .Release.Name .Values.zfsNode.priorityClass.name | trunc 63 | trimSuffix "-" }}
|
||||
{{- else }}
|
||||
{{- printf "%s" .Values.zfsNode.priorityClass.name | trunc 63 | trimSuffix "-" }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Create the name of the priority class for csi controller plugin
|
||||
*/}}
|
||||
{{- define "zfslocalpv.zfsController.priorityClassName" -}}
|
||||
{{- if .Values.zfsController.priorityClass.create }}
|
||||
{{- printf "%s-%s" .Release.Name .Values.zfsController.priorityClass.name | trunc 63 | trimSuffix "-" }}
|
||||
{{- else }}
|
||||
{{- printf "%s" .Values.zfsController.priorityClass.name | trunc 63 | trimSuffix "-" }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Enable zfsController containers leader election if replicas > 1
|
||||
*/}}
|
||||
{{- define "zfslocalpv.zfsController.leaderElection" -}}
|
||||
{{- with .Values.zfsController.replicas | int }}
|
||||
{{- if gt . 1 }}
|
||||
- "--leader-election"
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Ensure that the path to kubelet ends with a slash
|
||||
*/}}
|
||||
{{- define "zfslocalpv.zfsNode.kubeletDir" -}}
|
||||
{{- printf "%s/" (.Values.zfsNode.kubeletDir | trimSuffix "/") -}}
|
||||
{{- end }}
|
||||
17
charts/zfs-localpv/templates/configmap.yaml
Normal file
17
charts/zfs-localpv/templates/configmap.yaml
Normal file
@@ -0,0 +1,17 @@
|
||||
kind: ConfigMap
|
||||
apiVersion: v1
|
||||
metadata:
|
||||
name: openebs-zfspv-bin
|
||||
namespace: {{ .Release.Namespace }} # should be the same namespace where it is getting mounted
|
||||
labels:
|
||||
{{- include "zfslocalpv.zfsNode.labels" . | nindent 4 }}
|
||||
data:
|
||||
zfs: |
|
||||
#!/bin/sh
|
||||
if [ -x /host/sbin/zfs ]; then
|
||||
chroot /host /sbin/zfs "$@"
|
||||
elif [ -x /host/usr/sbin/zfs ]; then
|
||||
chroot /host /usr/sbin/zfs "$@"
|
||||
else
|
||||
chroot /host "{{ .Values.zfs.bin }}" "$@"
|
||||
fi
|
||||
10
charts/zfs-localpv/templates/csidriver.yaml
Normal file
10
charts/zfs-localpv/templates/csidriver.yaml
Normal file
@@ -0,0 +1,10 @@
|
||||
# Create the CSI Driver object
|
||||
apiVersion: storage.k8s.io/v1
|
||||
kind: CSIDriver
|
||||
metadata:
|
||||
name: zfs.csi.openebs.io
|
||||
spec:
|
||||
# do not require volumeattachment
|
||||
attachRequired: false
|
||||
podInfoOnMount: false
|
||||
storageCapacity: {{ .Values.feature.storageCapacity }}
|
||||
19
charts/zfs-localpv/templates/priority-class.yaml
Normal file
19
charts/zfs-localpv/templates/priority-class.yaml
Normal file
@@ -0,0 +1,19 @@
|
||||
{{- if .Values.zfsController.priorityClass.create }}
|
||||
apiVersion: scheduling.k8s.io/v1
|
||||
kind: PriorityClass
|
||||
metadata:
|
||||
name: {{ template "zfslocalpv.zfsController.priorityClassName" . }}
|
||||
value: 900000000
|
||||
globalDefault: false
|
||||
description: "This priority class should be used for the CStor CSI driver controller deployment only."
|
||||
{{- end }}
|
||||
---
|
||||
{{- if .Values.zfsNode.priorityClass.create }}
|
||||
apiVersion: scheduling.k8s.io/v1
|
||||
kind: PriorityClass
|
||||
metadata:
|
||||
name: {{ template "zfslocalpv.zfsNode.priorityClassName" . }}
|
||||
value: 900001000
|
||||
globalDefault: false
|
||||
description: "This priority class should be used for the CStor CSI driver node deployment only."
|
||||
{{- end }}
|
||||
24
charts/zfs-localpv/templates/psp.yaml
Normal file
24
charts/zfs-localpv/templates/psp.yaml
Normal file
@@ -0,0 +1,24 @@
|
||||
{{- if .Values.rbac.pspEnabled }}
|
||||
apiVersion: policy/v1beta1
|
||||
kind: PodSecurityPolicy
|
||||
metadata:
|
||||
name: openebs-zfs-node-psp
|
||||
labels:
|
||||
{{- include "zfslocalpv.zfsNode.labels" . | nindent 4 }}
|
||||
spec:
|
||||
privileged: true
|
||||
allowPrivilegeEscalation: true
|
||||
allowedCapabilities: ['*']
|
||||
volumes: ['*']
|
||||
hostNetwork: true
|
||||
hostIPC: true
|
||||
hostPID: true
|
||||
runAsUser:
|
||||
rule: 'RunAsAny'
|
||||
seLinux:
|
||||
rule: 'RunAsAny'
|
||||
supplementalGroups:
|
||||
rule: 'RunAsAny'
|
||||
fsGroup:
|
||||
rule: 'RunAsAny'
|
||||
{{- end }}
|
||||
200
charts/zfs-localpv/templates/rbac.yaml
Normal file
200
charts/zfs-localpv/templates/rbac.yaml
Normal file
@@ -0,0 +1,200 @@
|
||||
{{- if .Values.serviceAccount.zfsController.create -}}
|
||||
kind: ServiceAccount
|
||||
apiVersion: v1
|
||||
metadata:
|
||||
name: {{ .Values.serviceAccount.zfsController.name }}
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
{{- include "zfslocalpv.zfsController.labels" . | nindent 4 }}
|
||||
---
|
||||
kind: ClusterRole
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
metadata:
|
||||
name: openebs-zfs-provisioner-role
|
||||
labels:
|
||||
{{- include "zfslocalpv.zfsController.labels" . | nindent 4 }}
|
||||
rules:
|
||||
- apiGroups: [""]
|
||||
resources: ["secrets"]
|
||||
verbs: ["get", "list"]
|
||||
- apiGroups: [""]
|
||||
resources: ["namespaces"]
|
||||
verbs: ["*"]
|
||||
- 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: [ "storage.k8s.io" ]
|
||||
resources: [ "csistoragecapacities"]
|
||||
verbs: ["*"]
|
||||
- apiGroups: [""]
|
||||
resources: ["events"]
|
||||
verbs: ["list", "watch", "create", "update", "patch"]
|
||||
- apiGroups: ["coordination.k8s.io"]
|
||||
resources: ["leases"]
|
||||
verbs: ["get", "watch", "list", "delete", "update", "create"]
|
||||
- apiGroups: [""]
|
||||
resources: ["nodes"]
|
||||
verbs: ["get", "list", "watch"]
|
||||
- apiGroups: [""]
|
||||
resources: ["pods"]
|
||||
verbs: ["get", "list", "watch", "update", "patch"]
|
||||
- apiGroups: [""]
|
||||
resources: ["pods"]
|
||||
verbs: ["get", "list", "watch", "update", "patch"]
|
||||
- apiGroups: ["*"]
|
||||
resources: ["zfsvolumes", "zfssnapshots", "zfsbackups", "zfsrestores", "zfsnodes"]
|
||||
verbs: ["*"]
|
||||
---
|
||||
kind: ClusterRoleBinding
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
metadata:
|
||||
name: openebs-zfs-provisioner-binding
|
||||
labels:
|
||||
{{- include "zfslocalpv.zfsController.labels" . | nindent 4 }}
|
||||
subjects:
|
||||
- kind: ServiceAccount
|
||||
name: {{ .Values.serviceAccount.zfsController.name }}
|
||||
namespace: {{ .Release.Namespace }}
|
||||
roleRef:
|
||||
kind: ClusterRole
|
||||
name: openebs-zfs-provisioner-role
|
||||
apiGroup: rbac.authorization.k8s.io
|
||||
---
|
||||
kind: ClusterRole
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
metadata:
|
||||
name: openebs-zfs-snapshotter-role
|
||||
labels:
|
||||
{{- include "zfslocalpv.zfsController.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", "patch"]
|
||||
- apiGroups: ["snapshot.storage.k8s.io"]
|
||||
resources: ["volumesnapshots"]
|
||||
verbs: ["get", "list", "watch", "update", "patch"]
|
||||
- apiGroups: ["snapshot.storage.k8s.io"]
|
||||
resources: ["volumesnapshotcontents/status"]
|
||||
verbs: ["update", "patch"]
|
||||
- apiGroups: ["snapshot.storage.k8s.io"]
|
||||
resources: ["volumesnapshots/status"]
|
||||
verbs: ["update"]
|
||||
- apiGroups: ["apiextensions.k8s.io"]
|
||||
resources: ["customresourcedefinitions"]
|
||||
verbs: ["create", "list", "watch", "delete"]
|
||||
---
|
||||
kind: ClusterRoleBinding
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
metadata:
|
||||
name: openebs-zfs-snapshotter-binding
|
||||
labels:
|
||||
{{- include "zfslocalpv.zfsController.labels" . | nindent 4 }}
|
||||
subjects:
|
||||
- kind: ServiceAccount
|
||||
name: {{ .Values.serviceAccount.zfsController.name }}
|
||||
namespace: {{ .Release.Namespace }}
|
||||
roleRef:
|
||||
kind: ClusterRole
|
||||
name: openebs-zfs-snapshotter-role
|
||||
apiGroup: rbac.authorization.k8s.io
|
||||
---
|
||||
{{ end }}
|
||||
{{- if .Values.serviceAccount.zfsNode.create -}}
|
||||
apiVersion: v1
|
||||
kind: ServiceAccount
|
||||
metadata:
|
||||
name: {{ .Values.serviceAccount.zfsNode.name }}
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
{{- include "zfslocalpv.zfsNode.labels" . | nindent 4 }}
|
||||
---
|
||||
kind: ClusterRole
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
metadata:
|
||||
name: openebs-zfs-driver-registrar-role
|
||||
labels:
|
||||
{{- include "zfslocalpv.zfsNode.labels" . | nindent 4 }}
|
||||
rules:
|
||||
- apiGroups: [""]
|
||||
resources: ["events"]
|
||||
verbs: ["get", "list", "watch", "create", "update", "patch"]
|
||||
- apiGroups: [""]
|
||||
resources: ["persistentvolumes", "nodes", "services"]
|
||||
verbs: ["get", "list"]
|
||||
- apiGroups: ["*"]
|
||||
resources: ["zfsvolumes", "zfssnapshots", "zfsbackups", "zfsrestores", "zfsnodes"]
|
||||
verbs: ["get", "list", "watch", "create", "update", "patch"]
|
||||
---
|
||||
kind: ClusterRoleBinding
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
metadata:
|
||||
name: openebs-zfs-driver-registrar-binding
|
||||
labels:
|
||||
{{- include "zfslocalpv.zfsNode.labels" . | nindent 4 }}
|
||||
subjects:
|
||||
- kind: ServiceAccount
|
||||
name: {{ .Values.serviceAccount.zfsNode.name }}
|
||||
namespace: {{ .Release.Namespace }}
|
||||
roleRef:
|
||||
kind: ClusterRole
|
||||
name: openebs-zfs-driver-registrar-role
|
||||
apiGroup: rbac.authorization.k8s.io
|
||||
|
||||
{{- if .Values.rbac.pspEnabled }}
|
||||
---
|
||||
kind: ClusterRole
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
metadata:
|
||||
name: openebs-zfs-node-role
|
||||
labels:
|
||||
{{- include "zfslocalpv.zfsNode.labels" . | nindent 4 }}
|
||||
rules:
|
||||
- apiGroups: ['policy']
|
||||
resources: ['podsecuritypolicies']
|
||||
verbs: ['use']
|
||||
resourceNames:
|
||||
- openebs-zfs-node-psp
|
||||
---
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: ClusterRoleBinding
|
||||
metadata:
|
||||
name: openebs-zfs-node-binding
|
||||
labels:
|
||||
{{- include "zfslocalpv.zfsNode.labels" . | nindent 4 }}
|
||||
roleRef:
|
||||
apiGroup: rbac.authorization.k8s.io
|
||||
kind: ClusterRole
|
||||
name: openebs-zfs-node-role
|
||||
subjects:
|
||||
- kind: ServiceAccount
|
||||
name: {{ .Values.serviceAccount.zfsNode.name }}
|
||||
namespace: {{ $.Release.Namespace }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
177
charts/zfs-localpv/templates/zfs-controller.yaml
Normal file
177
charts/zfs-localpv/templates/zfs-controller.yaml
Normal file
@@ -0,0 +1,177 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: {{ template "zfslocalpv.fullname" . }}-controller
|
||||
namespace: {{ .Release.Namespace }}
|
||||
{{- with .Values.zfsController.annotations }}
|
||||
annotations: {{ toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
labels:
|
||||
{{- include "zfslocalpv.zfsController.labels" . | nindent 4 }}
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
{{- include "zfslocalpv.zfsController.matchLabels" . | nindent 6 }}
|
||||
replicas: {{ .Values.zfsController.replicas }}
|
||||
template:
|
||||
metadata:
|
||||
{{- with .Values.zfsController.podAnnotations }}
|
||||
annotations: {{ toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
labels:
|
||||
{{- include "zfslocalpv.zfsController.labels" . | nindent 8 -}}
|
||||
{{- with .Values.zfsController.podLabels}}
|
||||
{{ toYaml . | nindent 8 -}}
|
||||
{{- end}}
|
||||
{{- with .Values.loggingLabels}}
|
||||
{{ toYaml . | nindent 8 -}}
|
||||
{{- end}}
|
||||
spec:
|
||||
{{- if .Values.zfsController.priorityClass.create }}
|
||||
priorityClassName: {{ template "zfslocalpv.zfsController.priorityClassName" . }}
|
||||
{{- end }}
|
||||
serviceAccountName: {{ .Values.serviceAccount.zfsController.name }}
|
||||
{{- if .Values.zfsController.initContainers }}
|
||||
initContainers:
|
||||
{{- range $key, $value := .Values.zfsController.initContainers }}
|
||||
- name: {{ $key }}
|
||||
{{ toYaml $value | indent 10 }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
containers:
|
||||
- name: {{ .Values.zfsController.resizer.name }}
|
||||
image: "{{ .Values.zfsController.resizer.image.registry }}{{ .Values.zfsController.resizer.image.repository }}:{{ .Values.zfsController.resizer.image.tag }}"
|
||||
args:
|
||||
- "--v=5"
|
||||
- "--csi-address=$(ADDRESS)"
|
||||
{{- include "zfslocalpv.zfsController.leaderElection" . | indent 12 }}
|
||||
{{- range .Values.zfsController.resizer.extraArgs }}
|
||||
- {{ tpl . $ | quote }}
|
||||
{{- end }}
|
||||
env:
|
||||
- name: ADDRESS
|
||||
value: /var/lib/csi/sockets/pluginproxy/csi.sock
|
||||
imagePullPolicy: {{ .Values.zfsController.resizer.image.pullPolicy }}
|
||||
volumeMounts:
|
||||
- name: socket-dir
|
||||
mountPath: /var/lib/csi/sockets/pluginproxy/
|
||||
resources:
|
||||
{{- toYaml .Values.zfsController.resources | nindent 12 }}
|
||||
- name: {{ .Values.zfsController.snapshotter.name }}
|
||||
image: "{{ .Values.zfsController.snapshotter.image.registry }}{{ .Values.zfsController.snapshotter.image.repository }}:{{ .Values.zfsController.snapshotter.image.tag }}"
|
||||
imagePullPolicy: {{ .Values.zfsController.snapshotter.image.pullPolicy }}
|
||||
args:
|
||||
- "--csi-address=$(ADDRESS)"
|
||||
{{- include "zfslocalpv.zfsController.leaderElection" . | indent 12 }}
|
||||
{{- range .Values.zfsController.snapshotter.extraArgs }}
|
||||
- {{ tpl . $ | quote }}
|
||||
{{- end }}
|
||||
env:
|
||||
- name: ADDRESS
|
||||
value: /var/lib/csi/sockets/pluginproxy/csi.sock
|
||||
volumeMounts:
|
||||
- name: socket-dir
|
||||
mountPath: /var/lib/csi/sockets/pluginproxy/
|
||||
resources:
|
||||
{{- toYaml .Values.zfsController.resources | nindent 12 }}
|
||||
- name: {{ .Values.zfsController.snapshotController.name }}
|
||||
image: "{{ .Values.zfsController.snapshotController.image.registry }}{{ .Values.zfsController.snapshotController.image.repository }}:{{ .Values.zfsController.snapshotController.image.tag }}"
|
||||
args:
|
||||
- "--v=5"
|
||||
{{- include "zfslocalpv.zfsController.leaderElection" . | indent 12 }}
|
||||
{{- range .Values.zfsController.snapshotController.extraArgs }}
|
||||
- {{ tpl . $ | quote }}
|
||||
{{- end }}
|
||||
imagePullPolicy: {{ .Values.zfsController.snapshotController.image.pullPolicy }}
|
||||
resources:
|
||||
{{- toYaml .Values.zfsController.resources | nindent 12 }}
|
||||
- name: {{ .Values.zfsController.provisioner.name }}
|
||||
image: "{{ .Values.zfsController.provisioner.image.registry }}{{ .Values.zfsController.provisioner.image.repository }}:{{ .Values.zfsController.provisioner.image.tag }}"
|
||||
imagePullPolicy: {{ .Values.zfsController.provisioner.image.pullPolicy }}
|
||||
args:
|
||||
- "--csi-address=$(ADDRESS)"
|
||||
- "--v=5"
|
||||
- "--feature-gates=Topology=true"
|
||||
- "--strict-topology"
|
||||
- "--enable-capacity={{ .Values.feature.storageCapacity }}"
|
||||
- "--extra-create-metadata=true"
|
||||
- "--default-fstype=ext4"
|
||||
{{- include "zfslocalpv.zfsController.leaderElection" . | indent 12 }}
|
||||
{{- range .Values.zfsController.provisioner.extraArgs }}
|
||||
- {{ tpl . $ | quote }}
|
||||
{{- end }}
|
||||
env:
|
||||
- name: ADDRESS
|
||||
value: /var/lib/csi/sockets/pluginproxy/csi.sock
|
||||
- name: NAMESPACE
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: metadata.namespace
|
||||
- name: POD_NAME
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: metadata.name
|
||||
volumeMounts:
|
||||
- name: socket-dir
|
||||
mountPath: /var/lib/csi/sockets/pluginproxy/
|
||||
resources:
|
||||
{{- toYaml .Values.zfsController.resources | nindent 12 }}
|
||||
- name: {{ .Values.zfsPlugin.name }}
|
||||
image: "{{ .Values.zfsPlugin.image.registry }}{{ .Values.zfsPlugin.image.repository }}:{{ .Values.zfsPlugin.image.tag }}"
|
||||
imagePullPolicy: {{ .Values.zfsPlugin.image.pullPolicy }}
|
||||
env:
|
||||
- name: OPENEBS_CONTROLLER_DRIVER
|
||||
value: controller
|
||||
- name: OPENEBS_CSI_ENDPOINT
|
||||
value: unix:///var/lib/csi/sockets/pluginproxy/csi.sock
|
||||
- name: OPENEBS_NAMESPACE
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: metadata.namespace
|
||||
- name: OPENEBS_IO_INSTALLER_TYPE
|
||||
value: "{{ if (not (hasKey .Values.analytics "installerType")) }}zfs-localpv-helm{{ else }}{{ .Values.analytics.installerType }}{{ end }}"
|
||||
- name: OPENEBS_IO_ENABLE_ANALYTICS
|
||||
value: "{{ .Values.analytics.enabled }}"
|
||||
{{- if .Values.analytics.gaId }}
|
||||
- name: GA_ID
|
||||
value: {{ .Values.analytics.gaId | quote }}
|
||||
{{- end }}
|
||||
{{- if .Values.analytics.gaKey }}
|
||||
- name: GA_KEY
|
||||
value: {{ .Values.analytics.gaKey | quote }}
|
||||
{{- end }}
|
||||
- name: OPENEBS_IO_ENABLE_BACKUP_GC
|
||||
value: "{{ .Values.backupGC.enabled }}"
|
||||
args :
|
||||
- "--endpoint=$(OPENEBS_CSI_ENDPOINT)"
|
||||
- "--plugin=$(OPENEBS_CONTROLLER_DRIVER)"
|
||||
volumeMounts:
|
||||
- name: socket-dir
|
||||
mountPath: /var/lib/csi/sockets/pluginproxy/
|
||||
resources:
|
||||
{{- toYaml .Values.zfsController.resources | nindent 12 }}
|
||||
volumes:
|
||||
- name: socket-dir
|
||||
emptyDir: {}
|
||||
{{- if .Values.zfsController.additionalVolumes }}
|
||||
{{- range $name, $config := .Values.zfsController.additionalVolumes }}
|
||||
- name: {{ $name }}
|
||||
{{- tpl (toYaml $config) $ | nindent 10 }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- if .Values.imagePullSecrets }}
|
||||
imagePullSecrets:
|
||||
{{ toYaml .Values.imagePullSecrets | indent 8 }}
|
||||
{{- end }}
|
||||
{{- if .Values.zfsController.nodeSelector }}
|
||||
nodeSelector:
|
||||
{{ toYaml .Values.zfsController.nodeSelector | indent 8 }}
|
||||
{{- end }}
|
||||
{{- if .Values.zfsController.securityContext }}
|
||||
securityContext:
|
||||
{{ toYaml .Values.zfsController.securityContext | indent 8 }}
|
||||
{{- end }}
|
||||
{{- if .Values.zfsController.tolerations }}
|
||||
tolerations:
|
||||
{{ toYaml .Values.zfsController.tolerations | indent 8 }}
|
||||
{{- end }}
|
||||
171
charts/zfs-localpv/templates/zfs-node.yaml
Normal file
171
charts/zfs-localpv/templates/zfs-node.yaml
Normal file
@@ -0,0 +1,171 @@
|
||||
kind: DaemonSet
|
||||
apiVersion: apps/v1
|
||||
metadata:
|
||||
name: {{ template "zfslocalpv.fullname" . }}-node
|
||||
namespace: {{ .Release.Namespace }}
|
||||
{{- with .Values.zfsNode.annotations }}
|
||||
annotations: {{ toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
labels:
|
||||
{{- include "zfslocalpv.zfsNode.labels" . | nindent 4 }}
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
{{- include "zfslocalpv.zfsNode.matchLabels" . | nindent 6 }}
|
||||
updateStrategy:
|
||||
rollingUpdate:
|
||||
maxUnavailable: 100%
|
||||
type: RollingUpdate
|
||||
template:
|
||||
metadata:
|
||||
{{- with .Values.zfsNode.podAnnotations }}
|
||||
annotations: {{ toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
labels:
|
||||
{{- include "zfslocalpv.zfsNode.labels" . | nindent 8 }}
|
||||
{{- with .Values.zfsNode.podLabels}}
|
||||
{{ toYaml . | nindent 8 }}
|
||||
{{- end}}
|
||||
{{- with .Values.loggingLabels}}
|
||||
{{ toYaml . | nindent 8 }}
|
||||
{{- end}}
|
||||
spec:
|
||||
{{- if .Values.zfsNode.priorityClass.create }}
|
||||
priorityClassName: {{ template "zfslocalpv.zfsNode.priorityClassName" . }}
|
||||
{{- end }}
|
||||
serviceAccountName: {{ .Values.serviceAccount.zfsNode.name }}
|
||||
hostNetwork: true
|
||||
{{- if .Values.zfsNode.initContainers }}
|
||||
initContainers:
|
||||
{{- range $key, $value := .Values.zfsNode.initContainers }}
|
||||
- name: {{ $key }}
|
||||
{{ toYaml $value | indent 10 }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
containers:
|
||||
- name: {{ .Values.zfsNode.driverRegistrar.name }}
|
||||
image: "{{ .Values.zfsNode.driverRegistrar.image.registry }}{{ .Values.zfsNode.driverRegistrar.image.repository }}:{{ .Values.zfsNode.driverRegistrar.image.tag }}"
|
||||
imagePullPolicy: {{ .Values.zfsNode.driverRegistrar.image.pullPolicy }}
|
||||
args:
|
||||
- "--v=5"
|
||||
- "--csi-address=$(ADDRESS)"
|
||||
- "--kubelet-registration-path=$(DRIVER_REG_SOCK_PATH)"
|
||||
lifecycle:
|
||||
preStop:
|
||||
exec:
|
||||
command: ["/bin/sh", "-c", "rm -rf /registration/zfs-localpv /registration/zfs-localpv-reg.sock"]
|
||||
env:
|
||||
- name: ADDRESS
|
||||
value: /plugin/csi.sock
|
||||
- name: DRIVER_REG_SOCK_PATH
|
||||
value: {{ printf "%s%s" (include "zfslocalpv.zfsNode.kubeletDir" .) "plugins/zfs-localpv/csi.sock" | quote }}
|
||||
- name: KUBE_NODE_NAME
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: spec.nodeName
|
||||
- name: NODE_DRIVER
|
||||
value: openebs-zfs
|
||||
volumeMounts:
|
||||
- name: plugin-dir
|
||||
mountPath: /plugin
|
||||
- name: registration-dir
|
||||
mountPath: /registration
|
||||
resources:
|
||||
{{- toYaml .Values.zfsNode.resources | nindent 12 }}
|
||||
- name: {{ .Values.zfsPlugin.name }}
|
||||
securityContext:
|
||||
privileged: true
|
||||
allowPrivilegeEscalation: true
|
||||
image: "{{ .Values.zfsPlugin.image.registry }}{{ .Values.zfsPlugin.image.repository }}:{{ .Values.zfsPlugin.image.tag }}"
|
||||
imagePullPolicy: {{ .Values.zfsPlugin.image.pullPolicy }}
|
||||
args:
|
||||
- "--nodename=$(OPENEBS_NODE_NAME)"
|
||||
- "--endpoint=$(OPENEBS_CSI_ENDPOINT)"
|
||||
- "--plugin=$(OPENEBS_NODE_DRIVER)"
|
||||
env:
|
||||
- name: OPENEBS_NODE_NAME
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: spec.nodeName
|
||||
- name: OPENEBS_CSI_ENDPOINT
|
||||
value: unix:///plugin/csi.sock
|
||||
- name: OPENEBS_NODE_DRIVER
|
||||
value: agent
|
||||
- name: OPENEBS_NAMESPACE
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: metadata.namespace
|
||||
- name: ALLOWED_TOPOLOGIES
|
||||
value: "{{ .Values.zfsNode.allowedTopologyKeys }}"
|
||||
volumeMounts:
|
||||
- name: plugin-dir
|
||||
mountPath: /plugin
|
||||
- name: device-dir
|
||||
mountPath: /dev
|
||||
- name: encr-keys
|
||||
mountPath: /home/keys
|
||||
- name: chroot-zfs
|
||||
mountPath: /sbin/zfs
|
||||
subPath: zfs
|
||||
- name: host-root
|
||||
mountPath: /host
|
||||
mountPropagation: "HostToContainer"
|
||||
readOnly: true
|
||||
- name: pods-mount-dir
|
||||
mountPath: {{ include "zfslocalpv.zfsNode.kubeletDir" . | quote }}
|
||||
# needed so that any mounts setup inside this container are
|
||||
# propagated back to the host machine.
|
||||
mountPropagation: "Bidirectional"
|
||||
resources:
|
||||
{{- toYaml .Values.zfsNode.resources | nindent 12 }}
|
||||
volumes:
|
||||
- name: device-dir
|
||||
hostPath:
|
||||
path: /dev
|
||||
type: Directory
|
||||
- name: encr-keys
|
||||
hostPath:
|
||||
path: {{ .Values.zfsNode.encrKeysDir }}
|
||||
type: DirectoryOrCreate
|
||||
- name: chroot-zfs
|
||||
configMap:
|
||||
defaultMode: 0555
|
||||
name: openebs-zfspv-bin
|
||||
- name: host-root
|
||||
hostPath:
|
||||
path: /
|
||||
type: Directory
|
||||
- name: registration-dir
|
||||
hostPath:
|
||||
path: {{ printf "%s%s" (include "zfslocalpv.zfsNode.kubeletDir" .) "plugins_registry/" | quote }}
|
||||
type: DirectoryOrCreate
|
||||
- name: plugin-dir
|
||||
hostPath:
|
||||
path: {{ printf "%s%s" (include "zfslocalpv.zfsNode.kubeletDir" .) "plugins/zfs-localpv/" | quote }}
|
||||
type: DirectoryOrCreate
|
||||
- name: pods-mount-dir
|
||||
hostPath:
|
||||
path: {{ include "zfslocalpv.zfsNode.kubeletDir" . | quote }}
|
||||
type: Directory
|
||||
{{- if .Values.zfsNode.additionalVolumes }}
|
||||
{{- range $name, $config := .Values.zfsNode.additionalVolumes }}
|
||||
- name: {{ $name }}
|
||||
{{- tpl (toYaml $config) $ | nindent 10 }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- if .Values.imagePullSecrets }}
|
||||
imagePullSecrets:
|
||||
{{ toYaml .Values.imagePullSecrets | indent 8 }}
|
||||
{{- end }}
|
||||
{{- if .Values.zfsNode.nodeSelector }}
|
||||
nodeSelector:
|
||||
{{ toYaml .Values.zfsNode.nodeSelector | indent 8 }}
|
||||
{{- end }}
|
||||
{{- if .Values.zfsNode.securityContext }}
|
||||
securityContext:
|
||||
{{ toYaml .Values.zfsNode.securityContext | indent 8 }}
|
||||
{{- end }}
|
||||
{{- if .Values.zfsNode.tolerations }}
|
||||
tolerations:
|
||||
{{ toYaml .Values.zfsNode.tolerations | indent 8 }}
|
||||
{{- end }}
|
||||
189
charts/zfs-localpv/values.yaml
Normal file
189
charts/zfs-localpv/values.yaml
Normal file
@@ -0,0 +1,189 @@
|
||||
# Default values for openebs-zfslocalpv.
|
||||
# This is a YAML-formatted file.
|
||||
# Declare variables to be passed into your templates.
|
||||
imagePullSecrets:
|
||||
# - name: "image-pull-secret"
|
||||
|
||||
feature:
|
||||
# enable storage capacity tracking feature
|
||||
# Ref: https://kubernetes:io/docs/concepts/storage/storage-capacity
|
||||
storageCapacity: true
|
||||
|
||||
rbac:
|
||||
# rbac.pspEnabled: `true` if PodSecurityPolicy resources should be created
|
||||
pspEnabled: false
|
||||
|
||||
loggingLabels:
|
||||
openebs.io/logging: "true"
|
||||
|
||||
# zfsNode contains the configurables for
|
||||
# the zfs node daemonset
|
||||
zfsNode:
|
||||
componentName: openebs-zfs-node
|
||||
driverRegistrar:
|
||||
name: "csi-node-driver-registrar"
|
||||
image:
|
||||
# Make sure that registry name end with a '/'.
|
||||
# For example : registry.k8s.io/ is a correct value here and quay.io is incorrect
|
||||
registry: registry.k8s.io/
|
||||
repository: sig-storage/csi-node-driver-registrar
|
||||
pullPolicy: IfNotPresent
|
||||
# Overrides the image tag whose default is the chart appVersion.
|
||||
tag: v2.13.0
|
||||
updateStrategy:
|
||||
type: RollingUpdate
|
||||
annotations: {}
|
||||
podAnnotations: {}
|
||||
resources: {}
|
||||
# limits:
|
||||
# cpu: 10m
|
||||
# memory: 32Mi
|
||||
# requests:
|
||||
# cpu: 10m
|
||||
# memory: 32Mi
|
||||
# This can be configured to run on various different k8s distributions like
|
||||
# microk8s where kubelet dir is different
|
||||
kubeletDir: "/var/lib/kubelet/"
|
||||
encrKeysDir: "/home/keys"
|
||||
## Labels to be added to openebs-zfs node pods
|
||||
podLabels: {}
|
||||
nodeSelector: {}
|
||||
tolerations: []
|
||||
securityContext: {}
|
||||
labels: {}
|
||||
priorityClass:
|
||||
create: true
|
||||
name: zfs-csi-node-critical
|
||||
# allowed topologykeys for csi driver
|
||||
# The desired comma separated keys can be added here,
|
||||
# by default all the node label keys are allowed.
|
||||
# For example:
|
||||
# allowedTopologyKeys: "kubernetes.io/hostname,openebs.io/rack"
|
||||
allowedTopologyKeys: "All"
|
||||
initContainers: {}
|
||||
additionalVolumes: {}
|
||||
|
||||
# zfsController contains the configurables for
|
||||
# the zfs controller deployment
|
||||
zfsController:
|
||||
componentName: openebs-zfs-controller
|
||||
initContainers: {}
|
||||
additionalVolumes: {}
|
||||
replicas: 1
|
||||
resizer:
|
||||
name: "csi-resizer"
|
||||
image:
|
||||
# Make sure that registry name end with a '/'.
|
||||
# For example : registry.k8s.io/ is a correct value here and quay.io is incorrect
|
||||
registry: registry.k8s.io/
|
||||
repository: sig-storage/csi-resizer
|
||||
pullPolicy: IfNotPresent
|
||||
# Overrides the image tag whose default is the chart appVersion.
|
||||
tag: v1.13.2
|
||||
extraArgs: []
|
||||
snapshotter:
|
||||
name: "csi-snapshotter"
|
||||
image:
|
||||
# Make sure that registry name end with a '/'.
|
||||
# For example : registry.k8s.io/ is a correct value here and quay.io is incorrect
|
||||
registry: registry.k8s.io/
|
||||
repository: sig-storage/csi-snapshotter
|
||||
pullPolicy: IfNotPresent
|
||||
# Overrides the image tag whose default is the chart appVersion.
|
||||
tag: v8.2.0
|
||||
extraArgs: []
|
||||
snapshotController:
|
||||
name: "snapshot-controller"
|
||||
image:
|
||||
# Make sure that registry name end with a '/'.
|
||||
# For example : registry.k8s.io/ is a correct value here and quay.io is incorrect
|
||||
registry: registry.k8s.io/
|
||||
repository: sig-storage/snapshot-controller
|
||||
pullPolicy: IfNotPresent
|
||||
# Overrides the image tag whose default is the chart appVersion.
|
||||
tag: v8.2.0
|
||||
extraArgs: []
|
||||
provisioner:
|
||||
name: "csi-provisioner"
|
||||
image:
|
||||
# Make sure that registry name end with a '/'.
|
||||
# For example : registry.k8s.io/ is a correct value here and quay.io is incorrect
|
||||
registry: registry.k8s.io/
|
||||
repository: sig-storage/csi-provisioner
|
||||
pullPolicy: IfNotPresent
|
||||
# Overrides the image tag whose default is the chart appVersion.
|
||||
tag: v5.2.0
|
||||
extraArgs: []
|
||||
updateStrategy:
|
||||
type: RollingUpdate
|
||||
annotations: {}
|
||||
podAnnotations: {}
|
||||
resources: {}
|
||||
# limits:
|
||||
# cpu: 10m
|
||||
# memory: 32Mi
|
||||
# requests:
|
||||
# cpu: 10m
|
||||
# memory: 32Mi
|
||||
## Labels to be added to openebs-zfs controller pods
|
||||
podLabels:
|
||||
name: openebs-zfs-controller
|
||||
nodeSelector: {}
|
||||
tolerations: []
|
||||
securityContext: {}
|
||||
priorityClass:
|
||||
create: true
|
||||
name: zfs-csi-controller-critical
|
||||
|
||||
# zfsPlugin is the common csi container used by the
|
||||
# controller deployment and node daemonset
|
||||
zfsPlugin:
|
||||
name: "openebs-zfs-plugin"
|
||||
image:
|
||||
# Make sure that registry name end with a '/'.
|
||||
# For example : registry.k8s.io/ is a correct value here and quay.io is incorrect
|
||||
registry: docker.io/
|
||||
repository: openebs/zfs-driver
|
||||
pullPolicy: IfNotPresent
|
||||
# Overrides the image tag whose default is the chart appVersion.
|
||||
tag: 2.9.0
|
||||
role: openebs-zfs
|
||||
|
||||
serviceAccount:
|
||||
zfsController:
|
||||
# Specifies whether a service account should be created
|
||||
create: true
|
||||
# The name of the service account to use.
|
||||
# If not set and create is true, a name is generated using the fullname template
|
||||
name: openebs-zfs-controller-sa
|
||||
zfsNode:
|
||||
# Specifies whether a service account should be created
|
||||
create: true
|
||||
# The name of the service account to use.
|
||||
# If not set and create is true, a name is generated using the fullname template
|
||||
name: openebs-zfs-node-sa
|
||||
|
||||
analytics:
|
||||
enabled: true
|
||||
installerType: "zfs-localpv-helm"
|
||||
|
||||
backupGC:
|
||||
enabled: false
|
||||
|
||||
zfs:
|
||||
# If you use a non-standard path to the zfs binary, specify it here
|
||||
# bin: /run/current-system/sw/bin/zfs
|
||||
bin: zfs
|
||||
|
||||
crds:
|
||||
zfsLocalPv:
|
||||
# Install zfs-localpv CRDs
|
||||
enabled: true
|
||||
csi:
|
||||
volumeSnapshots:
|
||||
# Install Volume Snapshot CRDs
|
||||
enabled: true
|
||||
|
||||
# Allows adding helm specific labels to the components.
|
||||
# Only useful for generating independent templates from helm.
|
||||
enableHelmMetaLabels: true
|
||||
Reference in New Issue
Block a user