mirror of
https://github.com/TECHNOFAB11/zfs-localpv.git
synced 2025-12-11 22:10:11 +01:00
feat(validation): adding validation for ZFSPV CR parameters (#66)
Validating few parameters for the ZFSVolume custom resource - compression can be "on", "off", "lzjb", "gzip", "gzip-[1-9]", "zle" and "lz4" - encryption can be "on", "off", "aes-128-ccm", "aes-192-ccm", "aes-256-ccm", "aes-128-gcm", "aes-192-gcm", and "aes-256-gcm" - dedup can be "on" and "off" - poolname can be string - ownernodeid can be string - thinprovision can be "yes" and "no" - volumetype can be "DATASET" and "ZVOL" Also added required fields needed to create ZFSVolume CR - ownerNodeID - poolname - volumeType - capacity Signed-off-by: Pawan <pawan@mayadata.io>
This commit is contained in:
parent
fbd4812642
commit
ae724ee096
12 changed files with 2206 additions and 342 deletions
8
Makefile
8
Makefile
|
|
@ -61,12 +61,16 @@ test: format
|
|||
# Bootstrap downloads tools required
|
||||
# during build
|
||||
.PHONY: bootstrap
|
||||
bootstrap:
|
||||
bootstrap: controller-gen
|
||||
@for tool in $(EXTERNAL_TOOLS) ; do \
|
||||
echo "+ Installing $$tool" ; \
|
||||
go get -u $$tool; \
|
||||
done
|
||||
|
||||
.PHONY: controller-gen
|
||||
controller-gen:
|
||||
TMP_DIR=$(shell mktemp -d) && cd $$TMP_DIR && go mod init tmp && go get sigs.k8s.io/controller-tools/cmd/controller-gen@v0.2.8 && rm -rf $$TMP_DIR;
|
||||
|
||||
# SRC_PKG is the path of code files
|
||||
SRC_PKG := github.com/openebs/zfs-localpv/pkg
|
||||
|
||||
|
|
@ -136,7 +140,7 @@ informer:
|
|||
|
||||
manifests:
|
||||
@echo "+ Generating zfs localPV crds"
|
||||
$(PWD)/buildscripts/update-crd.sh
|
||||
$(PWD)/buildscripts/generate-manifests.sh
|
||||
|
||||
.PHONY: zfs-driver
|
||||
zfs-driver: format
|
||||
|
|
|
|||
80
buildscripts/generate-manifests.sh
Executable file
80
buildscripts/generate-manifests.sh
Executable file
|
|
@ -0,0 +1,80 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Copyright 2019 The Kubernetes Authors.
|
||||
# Copyright 2020 The OpenEBS Authors.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
#set -o errexit
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
|
||||
## find or download controller-gen
|
||||
CONTROLLER_GEN=$(which controller-gen)
|
||||
|
||||
if [ "$CONTROLLER_GEN" = "" ]
|
||||
then
|
||||
echo "ERROR: failed to get controller-gen, Please run make bootstrap to install it";
|
||||
exit 1;
|
||||
fi
|
||||
|
||||
SCRIPT_ROOT=$(unset CDPATH && cd $(dirname "${BASH_SOURCE[0]}")/.. && pwd)
|
||||
|
||||
$CONTROLLER_GEN crd:trivialVersions=true,preserveUnknownFields=false paths=${SCRIPT_ROOT}/pkg/apis/openebs.io/zfs/v1alpha1 output:crd:artifacts:config=deploy/yamls
|
||||
|
||||
## create the the crd yamls
|
||||
|
||||
echo '
|
||||
|
||||
##############################################
|
||||
########### ############
|
||||
########### ZFSVolume CRD ############
|
||||
########### ############
|
||||
##############################################
|
||||
|
||||
# ZFSVolume CRD is autogenerated via `make manifests` command.
|
||||
# Do the modification in the code and run the `make manifests` command
|
||||
# to generate the CRD definition' > deploy/yamls/zfsvolume-crd.yaml
|
||||
|
||||
cat deploy/yamls/zfs.openebs.io_zfsvolumes.yaml >> deploy/yamls/zfsvolume-crd.yaml
|
||||
rm deploy/yamls/zfs.openebs.io_zfsvolumes.yaml
|
||||
|
||||
echo '
|
||||
|
||||
##############################################
|
||||
########### ############
|
||||
########### ZFSSnapshot CRD ############
|
||||
########### ############
|
||||
##############################################
|
||||
|
||||
# ZFSSnapshot CRD is autogenerated via `make manifests` command.
|
||||
# Do the modification in the code and run the `make manifests` command
|
||||
# to generate the CRD definition' > deploy/yamls/zfssnapshot-crd.yaml
|
||||
|
||||
cat deploy/yamls/zfs.openebs.io_zfssnapshots.yaml >> deploy/yamls/zfssnapshot-crd.yaml
|
||||
rm deploy/yamls/zfs.openebs.io_zfssnapshots.yaml
|
||||
|
||||
## create the operator file using all the yamls
|
||||
|
||||
echo '# This manifest is autogenerated via `make manifests` command
|
||||
# Do the modification to the zfs-driver.yaml in directory deploy/yamls/
|
||||
# and then run `make manifests` command
|
||||
|
||||
# This manifest deploys the OpenEBS ZFS control plane components,
|
||||
# with associated CRs & RBAC rules.
|
||||
' > deploy/zfs-operator.yaml
|
||||
|
||||
cat deploy/yamls/namespace.yaml deploy/yamls/zfsvolume-crd.yaml deploy/yamls/zfssnapshot-crd.yaml deploy/yamls/zfs-driver.yaml >> deploy/zfs-operator.yaml
|
||||
|
||||
# To use your own boilerplate text use:
|
||||
# --go-header-file ${SCRIPT_ROOT}/hack/custom-boilerplate.go.txt
|
||||
|
|
@ -17,7 +17,7 @@ set -e
|
|||
DST_REPO="$GOPATH/src/github.com/openebs/zfs-localpv"
|
||||
|
||||
function checkGitDiff() {
|
||||
if [[ `git diff --shortstat | wc -l` != 0 ]]; then echo "Some files got changed after $1";printf "\n";git diff --stat;printf "\n"; exit 1; fi
|
||||
if [[ `git diff --shortstat | wc -l` != 0 ]]; then echo "Some files got changed after $1";printf "\n";git diff;printf "\n"; exit 1; fi
|
||||
}
|
||||
|
||||
#make golint-travis
|
||||
|
|
@ -29,6 +29,12 @@ rc=$?; if [[ $rc != 0 ]]; then echo "make kubegen failed"; exit $rc; fi
|
|||
checkGitDiff "make kubegen"
|
||||
printf "\n"
|
||||
|
||||
echo "Running : make manifests"
|
||||
make manifests
|
||||
rc=$?; if [[ $rc != 0 ]]; then echo "make manifests failed"; exit $rc; fi
|
||||
checkGitDiff "make manifests"
|
||||
printf "\n"
|
||||
|
||||
./buildscripts/test-cov.sh
|
||||
rc=$?; if [[ $rc != 0 ]]; then exit $rc; fi
|
||||
|
||||
|
|
|
|||
|
|
@ -1,45 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Copyright 2019 The Kubernetes Authors.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
#set -o errexit
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
|
||||
## find or download controller-gen
|
||||
CONTROLLER_GEN=$(which controller-gen)
|
||||
|
||||
if [ "$CONTROLLER_GEN" = "" ]
|
||||
then
|
||||
TMP_DIR=$(mktemp -d);
|
||||
cd $TMP_DIR;
|
||||
go mod init tmp;
|
||||
go get sigs.k8s.io/controller-tools/cmd/controller-gen@v0.2.8;
|
||||
rm -rf $TMP_DIR;
|
||||
CONTROLLER_GEN=$(which controller-gen)
|
||||
fi
|
||||
|
||||
if [ "$CONTROLLER_GEN" = "" ]
|
||||
then
|
||||
echo "ERROR: failed to get controller-gen";
|
||||
exit 1;
|
||||
fi
|
||||
|
||||
SCRIPT_ROOT=$(unset CDPATH && cd $(dirname "${BASH_SOURCE[0]}")/.. && pwd)
|
||||
|
||||
$CONTROLLER_GEN crd:trivialVersions=true,preserveUnknownFields=false paths=${SCRIPT_ROOT}/pkg/apis/openebs.io/zfs/v1alpha1 output:crd:artifacts:config=deploy/yamls
|
||||
|
||||
# To use your own boilerplate text use:
|
||||
# --go-header-file ${SCRIPT_ROOT}/hack/custom-boilerplate.go.txt
|
||||
14
deploy/yamls/namespace.yaml
Normal file
14
deploy/yamls/namespace.yaml
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
# Create the OpenEBS namespace
|
||||
# This is the default namespace where the ZFS driver will create all
|
||||
# its resources. If we want to change it to use a different namespace
|
||||
# modify this to create the new namespace and also modify the OPENEBS_NAMESPACE
|
||||
# env for the ZFS Driver's controller and agent deployments.
|
||||
# please note that this should be changed while initial setup, once ZFS Driver
|
||||
# is deployed with a namespace, we should never modify it as old resources will
|
||||
# not be available under the new namespace and ZFS Driver looks for all the resources
|
||||
# in the OPENEBS_NAMESPACE namespace passed as an env.
|
||||
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: openebs
|
||||
917
deploy/yamls/zfs-driver.yaml
Normal file
917
deploy/yamls/zfs-driver.yaml
Normal file
|
|
@ -0,0 +1,917 @@
|
|||
|
||||
---
|
||||
|
||||
apiVersion: apiextensions.k8s.io/v1beta1
|
||||
kind: CustomResourceDefinition
|
||||
metadata:
|
||||
annotations:
|
||||
controller-gen.kubebuilder.io/version: (devel)
|
||||
api-approved.kubernetes.io: "https://github.com/kubernetes-csi/external-snapshotter/pull/139"
|
||||
creationTimestamp: null
|
||||
name: volumesnapshotclasses.snapshot.storage.k8s.io
|
||||
spec:
|
||||
group: snapshot.storage.k8s.io
|
||||
names:
|
||||
kind: VolumeSnapshotClass
|
||||
listKind: VolumeSnapshotClassList
|
||||
plural: volumesnapshotclasses
|
||||
singular: volumesnapshotclass
|
||||
scope: Cluster
|
||||
#preserveUnknownFields: false # this field is supported in kubernetes 1.15+ https://v1-15.docs.kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/
|
||||
validation:
|
||||
openAPIV3Schema:
|
||||
description: VolumeSnapshotClass specifies parameters that a underlying storage
|
||||
system uses when creating a volume snapshot. A specific VolumeSnapshotClass
|
||||
is used by specifying its name in a VolumeSnapshot object. VolumeSnapshotClasses
|
||||
are non-namespaced
|
||||
properties:
|
||||
apiVersion:
|
||||
description: 'APIVersion defines the versioned schema of this representation
|
||||
of an object. Servers should convert recognized schemas to the latest
|
||||
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources'
|
||||
type: string
|
||||
deletionPolicy:
|
||||
description: deletionPolicy determines whether a VolumeSnapshotContent created
|
||||
through the VolumeSnapshotClass should be deleted when its bound VolumeSnapshot
|
||||
is deleted. Supported values are "Retain" and "Delete". "Retain" means
|
||||
that the VolumeSnapshotContent and its physical snapshot on underlying
|
||||
storage system are kept. "Delete" means that the VolumeSnapshotContent
|
||||
and its physical snapshot on underlying storage system are deleted. Required.
|
||||
enum:
|
||||
- Delete
|
||||
- Retain
|
||||
type: string
|
||||
driver:
|
||||
description: driver is the name of the storage driver that handles this
|
||||
VolumeSnapshotClass. Required.
|
||||
type: string
|
||||
kind:
|
||||
description: 'Kind is a string value representing the REST resource this
|
||||
object represents. Servers may infer this from the endpoint the client
|
||||
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds'
|
||||
type: string
|
||||
parameters:
|
||||
additionalProperties:
|
||||
type: string
|
||||
description: parameters is a key-value map with storage driver specific
|
||||
parameters for creating snapshots. These values are opaque to Kubernetes.
|
||||
type: object
|
||||
required:
|
||||
- deletionPolicy
|
||||
- driver
|
||||
type: object
|
||||
version: v1beta1
|
||||
versions:
|
||||
- name: v1beta1
|
||||
served: true
|
||||
storage: true
|
||||
status:
|
||||
acceptedNames:
|
||||
kind: ""
|
||||
plural: ""
|
||||
conditions: []
|
||||
storedVersions: []
|
||||
---
|
||||
apiVersion: apiextensions.k8s.io/v1beta1
|
||||
kind: CustomResourceDefinition
|
||||
metadata:
|
||||
annotations:
|
||||
controller-gen.kubebuilder.io/version: (devel)
|
||||
api-approved.kubernetes.io: "https://github.com/kubernetes-csi/external-snapshotter/pull/139"
|
||||
creationTimestamp: null
|
||||
name: volumesnapshotcontents.snapshot.storage.k8s.io
|
||||
spec:
|
||||
group: snapshot.storage.k8s.io
|
||||
names:
|
||||
kind: VolumeSnapshotContent
|
||||
listKind: VolumeSnapshotContentList
|
||||
plural: volumesnapshotcontents
|
||||
singular: volumesnapshotcontent
|
||||
scope: Cluster
|
||||
subresources:
|
||||
status: {}
|
||||
#preserveUnknownFields: false # this field is supported in kubernetes 1.15+ https://v1-15.docs.kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/
|
||||
validation:
|
||||
openAPIV3Schema:
|
||||
description: VolumeSnapshotContent represents the actual "on-disk" snapshot
|
||||
object in the underlying storage system
|
||||
properties:
|
||||
apiVersion:
|
||||
description: 'APIVersion defines the versioned schema of this representation
|
||||
of an object. Servers should convert recognized schemas to the latest
|
||||
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources'
|
||||
type: string
|
||||
kind:
|
||||
description: 'Kind is a string value representing the REST resource this
|
||||
object represents. Servers may infer this from the endpoint the client
|
||||
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds'
|
||||
type: string
|
||||
spec:
|
||||
description: spec defines properties of a VolumeSnapshotContent created
|
||||
by the underlying storage system. Required.
|
||||
properties:
|
||||
deletionPolicy:
|
||||
description: deletionPolicy determines whether this VolumeSnapshotContent
|
||||
and its physical snapshot on the underlying storage system should
|
||||
be deleted when its bound VolumeSnapshot is deleted. Supported values
|
||||
are "Retain" and "Delete". "Retain" means that the VolumeSnapshotContent
|
||||
and its physical snapshot on underlying storage system are kept. "Delete"
|
||||
means that the VolumeSnapshotContent and its physical snapshot on
|
||||
underlying storage system are deleted. In dynamic snapshot creation
|
||||
case, this field will be filled in with the "DeletionPolicy" field
|
||||
defined in the VolumeSnapshotClass the VolumeSnapshot refers to. For
|
||||
pre-existing snapshots, users MUST specify this field when creating
|
||||
the VolumeSnapshotContent object. Required.
|
||||
enum:
|
||||
- Delete
|
||||
- Retain
|
||||
type: string
|
||||
driver:
|
||||
description: driver is the name of the CSI driver used to create the
|
||||
physical snapshot on the underlying storage system. This MUST be the
|
||||
same as the name returned by the CSI GetPluginName() call for that
|
||||
driver. Required.
|
||||
type: string
|
||||
source:
|
||||
description: source specifies from where a snapshot will be created.
|
||||
This field is immutable after creation. Required.
|
||||
properties:
|
||||
snapshotHandle:
|
||||
description: snapshotHandle specifies the CSI "snapshot_id" of a
|
||||
pre-existing snapshot on the underlying storage system. This field
|
||||
is immutable.
|
||||
type: string
|
||||
volumeHandle:
|
||||
description: volumeHandle specifies the CSI "volume_id" of the volume
|
||||
from which a snapshot should be dynamically taken from. This field
|
||||
is immutable.
|
||||
type: string
|
||||
type: object
|
||||
volumeSnapshotClassName:
|
||||
description: name of the VolumeSnapshotClass to which this snapshot
|
||||
belongs.
|
||||
type: string
|
||||
volumeSnapshotRef:
|
||||
description: volumeSnapshotRef specifies the VolumeSnapshot object to
|
||||
which this VolumeSnapshotContent object is bound. VolumeSnapshot.Spec.VolumeSnapshotContentName
|
||||
field must reference to this VolumeSnapshotContent's name for the
|
||||
bidirectional binding to be valid. For a pre-existing VolumeSnapshotContent
|
||||
object, name and namespace of the VolumeSnapshot object MUST be provided
|
||||
for binding to happen. This field is immutable after creation. Required.
|
||||
properties:
|
||||
apiVersion:
|
||||
description: API version of the referent.
|
||||
type: string
|
||||
fieldPath:
|
||||
description: 'If referring to a piece of an object instead of an
|
||||
entire object, this string should contain a valid JSON/Go field
|
||||
access statement, such as desiredState.manifest.containers[2].
|
||||
For example, if the object reference is to a container within
|
||||
a pod, this would take on a value like: "spec.containers{name}"
|
||||
(where "name" refers to the name of the container that triggered
|
||||
the event) or if no container name is specified "spec.containers[2]"
|
||||
(container with index 2 in this pod). This syntax is chosen only
|
||||
to have some well-defined way of referencing a part of an object.
|
||||
TODO: this design is not final and this field is subject to change
|
||||
in the future.'
|
||||
type: string
|
||||
kind:
|
||||
description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds'
|
||||
type: string
|
||||
name:
|
||||
description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
|
||||
type: string
|
||||
namespace:
|
||||
description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/'
|
||||
type: string
|
||||
resourceVersion:
|
||||
description: 'Specific resourceVersion to which this reference is
|
||||
made, if any. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency'
|
||||
type: string
|
||||
uid:
|
||||
description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids'
|
||||
type: string
|
||||
type: object
|
||||
required:
|
||||
- deletionPolicy
|
||||
- driver
|
||||
- source
|
||||
- volumeSnapshotRef
|
||||
type: object
|
||||
status:
|
||||
description: status represents the current information of a snapshot.
|
||||
properties:
|
||||
creationTime:
|
||||
description: creationTime is the timestamp when the point-in-time snapshot
|
||||
is taken by the underlying storage system. In dynamic snapshot creation
|
||||
case, this field will be filled in with the "creation_time" value
|
||||
returned from CSI "CreateSnapshotRequest" gRPC call. For a pre-existing
|
||||
snapshot, this field will be filled with the "creation_time" value
|
||||
returned from the CSI "ListSnapshots" gRPC call if the driver supports
|
||||
it. If not specified, it indicates the creation time is unknown. The
|
||||
format of this field is a Unix nanoseconds time encoded as an int64.
|
||||
On Unix, the command `date +%s%N` returns the current time in nanoseconds
|
||||
since 1970-01-01 00:00:00 UTC.
|
||||
format: int64
|
||||
type: integer
|
||||
error:
|
||||
description: error is the latest observed error during snapshot creation,
|
||||
if any.
|
||||
properties:
|
||||
message:
|
||||
description: 'message is a string detailing the encountered error
|
||||
during snapshot creation if specified. NOTE: message may be logged,
|
||||
and it should not contain sensitive information.'
|
||||
type: string
|
||||
time:
|
||||
description: time is the timestamp when the error was encountered.
|
||||
format: date-time
|
||||
type: string
|
||||
type: object
|
||||
readyToUse:
|
||||
description: readyToUse indicates if a snapshot is ready to be used
|
||||
to restore a volume. In dynamic snapshot creation case, this field
|
||||
will be filled in with the "ready_to_use" value returned from CSI
|
||||
"CreateSnapshotRequest" gRPC call. For a pre-existing snapshot, this
|
||||
field will be filled with the "ready_to_use" value returned from the
|
||||
CSI "ListSnapshots" gRPC call if the driver supports it, otherwise,
|
||||
this field will be set to "True". If not specified, it means the readiness
|
||||
of a snapshot is unknown.
|
||||
type: boolean
|
||||
restoreSize:
|
||||
description: restoreSize represents the complete size of the snapshot
|
||||
in bytes. In dynamic snapshot creation case, this field will be filled
|
||||
in with the "size_bytes" value returned from CSI "CreateSnapshotRequest"
|
||||
gRPC call. For a pre-existing snapshot, this field will be filled
|
||||
with the "size_bytes" value returned from the CSI "ListSnapshots"
|
||||
gRPC call if the driver supports it. When restoring a volume from
|
||||
this snapshot, the size of the volume MUST NOT be smaller than the
|
||||
restoreSize if it is specified, otherwise the restoration will fail.
|
||||
If not specified, it indicates that the size is unknown.
|
||||
format: int64
|
||||
minimum: 0
|
||||
type: integer
|
||||
snapshotHandle:
|
||||
description: snapshotHandle is the CSI "snapshot_id" of a snapshot on
|
||||
the underlying storage system. If not specified, it indicates that
|
||||
dynamic snapshot creation has either failed or it is still in progress.
|
||||
type: string
|
||||
type: object
|
||||
required:
|
||||
- spec
|
||||
type: object
|
||||
version: v1beta1
|
||||
versions:
|
||||
- name: v1beta1
|
||||
served: true
|
||||
storage: true
|
||||
status:
|
||||
acceptedNames:
|
||||
kind: ""
|
||||
plural: ""
|
||||
conditions: []
|
||||
storedVersions: []
|
||||
---
|
||||
|
||||
apiVersion: apiextensions.k8s.io/v1beta1
|
||||
kind: CustomResourceDefinition
|
||||
metadata:
|
||||
annotations:
|
||||
controller-gen.kubebuilder.io/version: (devel)
|
||||
api-approved.kubernetes.io: "https://github.com/kubernetes-csi/external-snapshotter/pull/139"
|
||||
creationTimestamp: null
|
||||
name: volumesnapshots.snapshot.storage.k8s.io
|
||||
spec:
|
||||
group: snapshot.storage.k8s.io
|
||||
names:
|
||||
kind: VolumeSnapshot
|
||||
listKind: VolumeSnapshotList
|
||||
plural: volumesnapshots
|
||||
singular: volumesnapshot
|
||||
scope: Namespaced
|
||||
subresources:
|
||||
status: {}
|
||||
#preserveUnknownFields: false # this field is supported in kubernetes 1.15+ https://v1-15.docs.kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/
|
||||
validation:
|
||||
openAPIV3Schema:
|
||||
description: VolumeSnapshot is a user's request for either creating a point-in-time
|
||||
snapshot of a persistent volume, or binding to a pre-existing snapshot.
|
||||
properties:
|
||||
apiVersion:
|
||||
description: 'APIVersion defines the versioned schema of this representation
|
||||
of an object. Servers should convert recognized schemas to the latest
|
||||
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources'
|
||||
type: string
|
||||
kind:
|
||||
description: 'Kind is a string value representing the REST resource this
|
||||
object represents. Servers may infer this from the endpoint the client
|
||||
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds'
|
||||
type: string
|
||||
spec:
|
||||
description: 'spec defines the desired characteristics of a snapshot requested
|
||||
by a user. More info: https://kubernetes.io/docs/concepts/storage/volume-snapshots#volumesnapshots
|
||||
Required.'
|
||||
properties:
|
||||
source:
|
||||
description: source specifies where a snapshot will be created from.
|
||||
This field is immutable after creation. Required.
|
||||
properties:
|
||||
persistentVolumeClaimName:
|
||||
description: persistentVolumeClaimName specifies the name of the
|
||||
PersistentVolumeClaim object in the same namespace as the VolumeSnapshot
|
||||
object where the snapshot should be dynamically taken from. This
|
||||
field is immutable.
|
||||
type: string
|
||||
volumeSnapshotContentName:
|
||||
description: volumeSnapshotContentName specifies the name of a pre-existing
|
||||
VolumeSnapshotContent object. This field is immutable.
|
||||
type: string
|
||||
type: object
|
||||
volumeSnapshotClassName:
|
||||
description: 'volumeSnapshotClassName is the name of the VolumeSnapshotClass
|
||||
requested by the VolumeSnapshot. If not specified, the default snapshot
|
||||
class will be used if one exists. If not specified, and there is no
|
||||
default snapshot class, dynamic snapshot creation will fail. Empty
|
||||
string is not allowed for this field. TODO(xiangqian): a webhook validation
|
||||
on empty string. More info: https://kubernetes.io/docs/concepts/storage/volume-snapshot-classes'
|
||||
type: string
|
||||
required:
|
||||
- source
|
||||
type: object
|
||||
status:
|
||||
description: 'status represents the current information of a snapshot. NOTE:
|
||||
status can be modified by sources other than system controllers, and must
|
||||
not be depended upon for accuracy. Controllers should only use information
|
||||
from the VolumeSnapshotContent object after verifying that the binding
|
||||
is accurate and complete.'
|
||||
properties:
|
||||
boundVolumeSnapshotContentName:
|
||||
description: 'boundVolumeSnapshotContentName represents the name of
|
||||
the VolumeSnapshotContent object to which the VolumeSnapshot object
|
||||
is bound. If not specified, it indicates that the VolumeSnapshot object
|
||||
has not been successfully bound to a VolumeSnapshotContent object
|
||||
yet. NOTE: Specified boundVolumeSnapshotContentName alone does not
|
||||
mean binding is valid. Controllers MUST always verify bidirectional
|
||||
binding between VolumeSnapshot and VolumeSnapshotContent to
|
||||
avoid possible security issues.'
|
||||
type: string
|
||||
creationTime:
|
||||
description: creationTime is the timestamp when the point-in-time snapshot
|
||||
is taken by the underlying storage system. In dynamic snapshot creation
|
||||
case, this field will be filled in with the "creation_time" value
|
||||
returned from CSI "CreateSnapshotRequest" gRPC call. For a pre-existing
|
||||
snapshot, this field will be filled with the "creation_time" value
|
||||
returned from the CSI "ListSnapshots" gRPC call if the driver supports
|
||||
it. If not specified, it indicates that the creation time of the snapshot
|
||||
is unknown.
|
||||
format: date-time
|
||||
type: string
|
||||
error:
|
||||
description: error is the last observed error during snapshot creation,
|
||||
if any. This field could be helpful to upper level controllers(i.e.,
|
||||
application controller) to decide whether they should continue on
|
||||
waiting for the snapshot to be created based on the type of error
|
||||
reported.
|
||||
properties:
|
||||
message:
|
||||
description: 'message is a string detailing the encountered error
|
||||
during snapshot creation if specified. NOTE: message may be logged,
|
||||
and it should not contain sensitive information.'
|
||||
type: string
|
||||
time:
|
||||
description: time is the timestamp when the error was encountered.
|
||||
format: date-time
|
||||
type: string
|
||||
type: object
|
||||
readyToUse:
|
||||
description: readyToUse indicates if a snapshot is ready to be used
|
||||
to restore a volume. In dynamic snapshot creation case, this field
|
||||
will be filled in with the "ready_to_use" value returned from CSI
|
||||
"CreateSnapshotRequest" gRPC call. For a pre-existing snapshot, this
|
||||
field will be filled with the "ready_to_use" value returned from the
|
||||
CSI "ListSnapshots" gRPC call if the driver supports it, otherwise,
|
||||
this field will be set to "True". If not specified, it means the readiness
|
||||
of a snapshot is unknown.
|
||||
type: boolean
|
||||
restoreSize:
|
||||
description: restoreSize represents the complete size of the snapshot
|
||||
in bytes. In dynamic snapshot creation case, this field will be filled
|
||||
in with the "size_bytes" value returned from CSI "CreateSnapshotRequest"
|
||||
gRPC call. For a pre-existing snapshot, this field will be filled
|
||||
with the "size_bytes" value returned from the CSI "ListSnapshots"
|
||||
gRPC call if the driver supports it. When restoring a volume from
|
||||
this snapshot, the size of the volume MUST NOT be smaller than the
|
||||
restoreSize if it is specified, otherwise the restoration will fail.
|
||||
If not specified, it indicates that the size is unknown.
|
||||
type: string
|
||||
type: object
|
||||
required:
|
||||
- spec
|
||||
type: object
|
||||
version: v1beta1
|
||||
versions:
|
||||
- name: v1beta1
|
||||
served: true
|
||||
storage: true
|
||||
status:
|
||||
acceptedNames:
|
||||
kind: ""
|
||||
plural: ""
|
||||
conditions: []
|
||||
storedVersions: []
|
||||
---
|
||||
|
||||
##############################################
|
||||
########### ############
|
||||
########### Controller plugin ############
|
||||
########### ############
|
||||
##############################################
|
||||
|
||||
kind: ServiceAccount
|
||||
apiVersion: v1
|
||||
metadata:
|
||||
name: openebs-zfs-controller-sa
|
||||
namespace: kube-system
|
||||
|
||||
---
|
||||
kind: ClusterRole
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
metadata:
|
||||
name: openebs-zfs-provisioner-role
|
||||
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: [""]
|
||||
resources: ["events"]
|
||||
verbs: ["list", "watch", "create", "update", "patch"]
|
||||
- apiGroups: ["coordination.k8s.io"]
|
||||
resources: ["leases"]
|
||||
verbs: ["get", "watch", "list", "delete", "update", "create"]
|
||||
- apiGroups: ["*"]
|
||||
resources: ["zfsvolumes", "zfssnapshots"]
|
||||
verbs: ["*"]
|
||||
---
|
||||
|
||||
kind: ClusterRoleBinding
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
metadata:
|
||||
name: openebs-zfs-provisioner-binding
|
||||
subjects:
|
||||
- kind: ServiceAccount
|
||||
name: openebs-zfs-controller-sa
|
||||
namespace: kube-system
|
||||
roleRef:
|
||||
kind: ClusterRole
|
||||
name: openebs-zfs-provisioner-role
|
||||
apiGroup: rbac.authorization.k8s.io
|
||||
|
||||
---
|
||||
kind: StatefulSet
|
||||
apiVersion: apps/v1
|
||||
metadata:
|
||||
name: openebs-zfs-controller
|
||||
namespace: kube-system
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
app: openebs-zfs-controller
|
||||
role: openebs-zfs
|
||||
serviceName: "openebs-zfs"
|
||||
replicas: 1
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: openebs-zfs-controller
|
||||
role: openebs-zfs
|
||||
spec:
|
||||
affinity:
|
||||
podAntiAffinity:
|
||||
requiredDuringSchedulingIgnoredDuringExecution:
|
||||
- labelSelector:
|
||||
matchExpressions:
|
||||
- key: app
|
||||
operator: In
|
||||
values:
|
||||
- openebs-zfs-controller
|
||||
topologyKey: "kubernetes.io/hostname"
|
||||
priorityClassName: system-cluster-critical
|
||||
serviceAccount: openebs-zfs-controller-sa
|
||||
containers:
|
||||
- name: csi-resizer
|
||||
image: quay.io/k8scsi/csi-resizer:v0.4.0
|
||||
args:
|
||||
- "--v=5"
|
||||
- "--csi-address=$(ADDRESS)"
|
||||
- "--leader-election"
|
||||
env:
|
||||
- name: ADDRESS
|
||||
value: /var/lib/csi/sockets/pluginproxy/csi.sock
|
||||
imagePullPolicy: IfNotPresent
|
||||
volumeMounts:
|
||||
- name: socket-dir
|
||||
mountPath: /var/lib/csi/sockets/pluginproxy/
|
||||
- name: csi-snapshotter
|
||||
image: quay.io/k8scsi/csi-snapshotter:v2.0.1
|
||||
imagePullPolicy: IfNotPresent
|
||||
args:
|
||||
- "--csi-address=$(ADDRESS)"
|
||||
- "--leader-election"
|
||||
env:
|
||||
- name: ADDRESS
|
||||
value: /var/lib/csi/sockets/pluginproxy/csi.sock
|
||||
imagePullPolicy: Always
|
||||
volumeMounts:
|
||||
- name: socket-dir
|
||||
mountPath: /var/lib/csi/sockets/pluginproxy/
|
||||
- name: snapshot-controller
|
||||
image: quay.io/k8scsi/snapshot-controller:v2.0.1
|
||||
args:
|
||||
- "--v=5"
|
||||
- "--leader-election=false"
|
||||
imagePullPolicy: IfNotPresent
|
||||
- name: csi-provisioner
|
||||
image: quay.io/k8scsi/csi-provisioner:v1.5.0
|
||||
imagePullPolicy: IfNotPresent
|
||||
args:
|
||||
- "--csi-address=$(ADDRESS)"
|
||||
- "--v=5"
|
||||
- "--feature-gates=Topology=true"
|
||||
- "--strict-topology"
|
||||
- "--enable-leader-election"
|
||||
- "--leader-election-type=leases"
|
||||
env:
|
||||
- name: ADDRESS
|
||||
value: /var/lib/csi/sockets/pluginproxy/csi.sock
|
||||
volumeMounts:
|
||||
- name: socket-dir
|
||||
mountPath: /var/lib/csi/sockets/pluginproxy/
|
||||
- name: csi-attacher
|
||||
image: quay.io/k8scsi/csi-attacher:v2.0.0
|
||||
imagePullPolicy: IfNotPresent
|
||||
args:
|
||||
- "--v=5"
|
||||
- "--csi-address=$(ADDRESS)"
|
||||
- "--leader-election"
|
||||
env:
|
||||
- name: ADDRESS
|
||||
value: /var/lib/csi/sockets/pluginproxy/csi.sock
|
||||
volumeMounts:
|
||||
- name: socket-dir
|
||||
mountPath: /var/lib/csi/sockets/pluginproxy/
|
||||
- name: csi-cluster-driver-registrar
|
||||
image: quay.io/k8scsi/csi-cluster-driver-registrar:v1.0.1
|
||||
args:
|
||||
- "--v=5"
|
||||
- "--driver-requires-attachment=false"
|
||||
- "--csi-address=$(ADDRESS)"
|
||||
env:
|
||||
- name: ADDRESS
|
||||
value: /var/lib/csi/sockets/pluginproxy/csi.sock
|
||||
volumeMounts:
|
||||
- name: socket-dir
|
||||
mountPath: /var/lib/csi/sockets/pluginproxy/
|
||||
- name: openebs-zfs-plugin
|
||||
image: quay.io/openebs/zfs-driver:ci
|
||||
imagePullPolicy: IfNotPresent
|
||||
env:
|
||||
- name: OPENEBS_CONTROLLER_DRIVER
|
||||
value: controller
|
||||
- name: OPENEBS_CSI_ENDPOINT
|
||||
value: unix:///var/lib/csi/sockets/pluginproxy/csi.sock
|
||||
- name: OPENEBS_NAMESPACE
|
||||
value: openebs
|
||||
- name: OPENEBS_IO_INSTALLER_TYPE
|
||||
value: "zfs-operator"
|
||||
- name: OPENEBS_IO_ENABLE_ANALYTICS
|
||||
value: "true"
|
||||
args :
|
||||
- "--endpoint=$(OPENEBS_CSI_ENDPOINT)"
|
||||
- "--plugin=$(OPENEBS_CONTROLLER_DRIVER)"
|
||||
volumeMounts:
|
||||
- name: socket-dir
|
||||
mountPath: /var/lib/csi/sockets/pluginproxy/
|
||||
volumes:
|
||||
- name: socket-dir
|
||||
emptyDir: {}
|
||||
---
|
||||
|
||||
############################## CSI- Attacher #######################
|
||||
# Attacher must be able to work with PVs, nodes and VolumeAttachments
|
||||
|
||||
kind: ClusterRole
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
metadata:
|
||||
name: openebs-zfs-attacher-role
|
||||
rules:
|
||||
- apiGroups: [""]
|
||||
resources: ["persistentvolumes"]
|
||||
verbs: ["get", "list", "watch", "update"]
|
||||
- apiGroups: [""]
|
||||
resources: ["nodes"]
|
||||
verbs: ["get", "list", "watch"]
|
||||
- apiGroups: ["csi.storage.k8s.io"]
|
||||
resources: ["csinodeinfos"]
|
||||
verbs: ["get", "list", "watch"]
|
||||
- apiGroups: ["storage.k8s.io"]
|
||||
resources: ["volumeattachments", "csinodes"]
|
||||
verbs: ["get", "list", "watch", "update", "patch"]
|
||||
- apiGroups: ["coordination.k8s.io"]
|
||||
resources: ["leases"]
|
||||
verbs: ["get", "watch", "list", "delete", "update", "create"]
|
||||
---
|
||||
kind: ClusterRoleBinding
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
metadata:
|
||||
name: openebs-zfs-attacher-binding
|
||||
subjects:
|
||||
- kind: ServiceAccount
|
||||
name: openebs-zfs-controller-sa
|
||||
namespace: kube-system
|
||||
roleRef:
|
||||
kind: ClusterRole
|
||||
name: openebs-zfs-attacher-role
|
||||
apiGroup: rbac.authorization.k8s.io
|
||||
|
||||
---
|
||||
|
||||
kind: ClusterRole
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
metadata:
|
||||
name: openebs-zfs-snapshotter-role
|
||||
rules:
|
||||
- apiGroups: [""]
|
||||
resources: ["persistentvolumes"]
|
||||
verbs: ["get", "list", "watch"]
|
||||
- apiGroups: [""]
|
||||
resources: ["persistentvolumeclaims"]
|
||||
verbs: ["get", "list", "watch"]
|
||||
- apiGroups: ["storage.k8s.io"]
|
||||
resources: ["storageclasses"]
|
||||
verbs: ["get", "list", "watch"]
|
||||
- apiGroups: [""]
|
||||
resources: ["events"]
|
||||
verbs: ["list", "watch", "create", "update", "patch"]
|
||||
- apiGroups: [""]
|
||||
resources: ["secrets"]
|
||||
verbs: ["get", "list"]
|
||||
- apiGroups: ["snapshot.storage.k8s.io"]
|
||||
resources: ["volumesnapshotclasses"]
|
||||
verbs: ["get", "list", "watch"]
|
||||
- apiGroups: ["snapshot.storage.k8s.io"]
|
||||
resources: ["volumesnapshotcontents"]
|
||||
verbs: ["create", "get", "list", "watch", "update", "delete"]
|
||||
- apiGroups: ["snapshot.storage.k8s.io"]
|
||||
resources: ["volumesnapshots"]
|
||||
verbs: ["get", "list", "watch", "update"]
|
||||
- apiGroups: ["snapshot.storage.k8s.io"]
|
||||
resources: ["volumesnapshotcontents/status"]
|
||||
verbs: ["update"]
|
||||
- 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
|
||||
subjects:
|
||||
- kind: ServiceAccount
|
||||
name: openebs-zfs-controller-sa
|
||||
namespace: kube-system
|
||||
roleRef:
|
||||
kind: ClusterRole
|
||||
name: openebs-zfs-snapshotter-role
|
||||
apiGroup: rbac.authorization.k8s.io
|
||||
|
||||
---
|
||||
|
||||
kind: ClusterRole
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
metadata:
|
||||
name: openebs-zfs-cluster-driver-registrar-role
|
||||
rules:
|
||||
- apiGroups: ["csi.storage.k8s.io"]
|
||||
resources: ["csidrivers"]
|
||||
verbs: ["create", "delete"]
|
||||
|
||||
---
|
||||
|
||||
kind: ClusterRoleBinding
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
metadata:
|
||||
name: openebs-zfs-cluster-driver-registrar-binding
|
||||
subjects:
|
||||
- kind: ServiceAccount
|
||||
name: openebs-zfs-controller-sa
|
||||
namespace: kube-system
|
||||
roleRef:
|
||||
kind: ClusterRole
|
||||
name: openebs-zfs-cluster-driver-registrar-role
|
||||
apiGroup: rbac.authorization.k8s.io
|
||||
|
||||
---
|
||||
|
||||
########################################
|
||||
########### ############
|
||||
########### Node plugin ############
|
||||
########### ############
|
||||
########################################
|
||||
|
||||
apiVersion: v1
|
||||
kind: ServiceAccount
|
||||
metadata:
|
||||
name: openebs-zfs-node-sa
|
||||
namespace: kube-system
|
||||
|
||||
---
|
||||
|
||||
kind: ClusterRole
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
metadata:
|
||||
name: openebs-zfs-driver-registrar-role
|
||||
rules:
|
||||
- apiGroups: [""]
|
||||
resources: ["events"]
|
||||
verbs: ["get", "list", "watch", "create", "update", "patch"]
|
||||
- apiGroups: [""]
|
||||
resources: ["persistentvolumes", "nodes", "services"]
|
||||
verbs: ["get", "list"]
|
||||
- apiGroups: ["*"]
|
||||
resources: ["zfsvolumes", "zfssnapshots"]
|
||||
verbs: ["get", "list", "watch", "create", "update", "patch"]
|
||||
|
||||
---
|
||||
|
||||
kind: ClusterRoleBinding
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
metadata:
|
||||
name: openebs-zfs-driver-registrar-binding
|
||||
subjects:
|
||||
- kind: ServiceAccount
|
||||
name: openebs-zfs-node-sa
|
||||
namespace: kube-system
|
||||
roleRef:
|
||||
kind: ClusterRole
|
||||
name: openebs-zfs-driver-registrar-role
|
||||
apiGroup: rbac.authorization.k8s.io
|
||||
|
||||
---
|
||||
|
||||
kind: DaemonSet
|
||||
apiVersion: apps/v1
|
||||
metadata:
|
||||
name: openebs-zfs-node
|
||||
namespace: kube-system
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
app: openebs-zfs-node
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: openebs-zfs-node
|
||||
role: openebs-zfs
|
||||
spec:
|
||||
priorityClassName: system-node-critical
|
||||
serviceAccount: openebs-zfs-node-sa
|
||||
hostNetwork: true
|
||||
containers:
|
||||
- name: csi-node-driver-registrar
|
||||
image: quay.io/k8scsi/csi-node-driver-registrar:v1.2.0
|
||||
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: /var/lib/kubelet/plugins/zfs-localpv/csi.sock
|
||||
- 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
|
||||
- name: openebs-zfs-plugin
|
||||
securityContext:
|
||||
privileged: true
|
||||
capabilities:
|
||||
add: ["CAP_MKNOD", "CAP_SYS_ADMIN", "SYS_ADMIN"]
|
||||
allowPrivilegeEscalation: true
|
||||
image: quay.io/openebs/zfs-driver:ci
|
||||
imagePullPolicy: IfNotPresent
|
||||
args:
|
||||
- "--nodeid=$(OPENEBS_NODE_ID)"
|
||||
- "--endpoint=$(OPENEBS_CSI_ENDPOINT)"
|
||||
- "--plugin=$(OPENEBS_NODE_DRIVER)"
|
||||
env:
|
||||
- name: OPENEBS_NODE_ID
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: spec.nodeName
|
||||
- name: OPENEBS_CSI_ENDPOINT
|
||||
value: unix:///plugin/csi.sock
|
||||
- name: OPENEBS_NODE_DRIVER
|
||||
value: agent
|
||||
- name: OPENEBS_NAMESPACE
|
||||
value: openebs
|
||||
volumeMounts:
|
||||
- name: plugin-dir
|
||||
mountPath: /plugin
|
||||
- name: device-dir
|
||||
mountPath: /dev
|
||||
- name: encr-keys
|
||||
mountPath: /home/keys
|
||||
- name: zfs-bin
|
||||
mountPath: /sbin/zfs
|
||||
- name: libzpool
|
||||
mountPath: /lib/libzpool.so.2
|
||||
- name: libzfscore
|
||||
mountPath: /lib/libzfs_core.so.1
|
||||
- name: libzfs
|
||||
mountPath: /lib/libzfs.so.2
|
||||
- name: libuutil
|
||||
mountPath: /lib/libuutil.so.1
|
||||
- name: libnvpair
|
||||
mountPath: /lib/libnvpair.so.1
|
||||
- name: pods-mount-dir
|
||||
mountPath: /var/lib/kubelet/pods
|
||||
# needed so that any mounts setup inside this container are
|
||||
# propagated back to the host machine.
|
||||
mountPropagation: "Bidirectional"
|
||||
volumes:
|
||||
- name: device-dir
|
||||
hostPath:
|
||||
path: /dev
|
||||
type: Directory
|
||||
- name: encr-keys
|
||||
hostPath:
|
||||
path: /home/keys
|
||||
type: DirectoryOrCreate
|
||||
- name: zfs-bin
|
||||
hostPath:
|
||||
path: /sbin/zfs
|
||||
type: File
|
||||
- name: libzpool
|
||||
hostPath:
|
||||
path: /lib/libzpool.so.2.0.0
|
||||
type: File
|
||||
- name: libzfscore
|
||||
hostPath:
|
||||
path: /lib/libzfs_core.so.1.0.0
|
||||
type: File
|
||||
- name: libzfs
|
||||
hostPath:
|
||||
path: /lib/libzfs.so.2.0.0
|
||||
type: File
|
||||
- name: libuutil
|
||||
hostPath:
|
||||
path: /lib/libuutil.so.1.0.1
|
||||
type: File
|
||||
- name: libnvpair
|
||||
hostPath:
|
||||
path: /lib/libnvpair.so.1.0.1
|
||||
type: File
|
||||
- name: registration-dir
|
||||
hostPath:
|
||||
path: /var/lib/kubelet/plugins_registry/
|
||||
type: DirectoryOrCreate
|
||||
- name: plugin-dir
|
||||
hostPath:
|
||||
path: /var/lib/kubelet/plugins/zfs-localpv/
|
||||
type: DirectoryOrCreate
|
||||
- name: pods-mount-dir
|
||||
hostPath:
|
||||
path: /var/lib/kubelet/pods
|
||||
type: Directory
|
||||
---
|
||||
|
|
@ -1,153 +0,0 @@
|
|||
|
||||
---
|
||||
apiVersion: apiextensions.k8s.io/v1beta1
|
||||
kind: CustomResourceDefinition
|
||||
metadata:
|
||||
annotations:
|
||||
controller-gen.kubebuilder.io/version: v0.2.8
|
||||
creationTimestamp: null
|
||||
name: zfssnapshots.zfs.openebs.io
|
||||
spec:
|
||||
group: zfs.openebs.io
|
||||
names:
|
||||
kind: ZFSSnapshot
|
||||
listKind: ZFSSnapshotList
|
||||
plural: zfssnapshots
|
||||
shortNames:
|
||||
- zfssnap
|
||||
singular: zfssnapshot
|
||||
preserveUnknownFields: false
|
||||
scope: Namespaced
|
||||
validation:
|
||||
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/api-conventions.md#resources'
|
||||
type: string
|
||||
kind:
|
||||
description: 'Kind is a string value representing the REST resource this
|
||||
object represents. Servers may infer this from the endpoint the client
|
||||
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds'
|
||||
type: string
|
||||
metadata:
|
||||
type: object
|
||||
spec:
|
||||
description: VolumeInfo contains the volume related info for all types of
|
||||
volumes in ZFSVolume
|
||||
properties:
|
||||
capacity:
|
||||
description: Capacity of the volume
|
||||
minLength: 1
|
||||
type: string
|
||||
compression:
|
||||
description: Controls the compression algorithm used for this dataset.
|
||||
Compression specifies if the it should enabled on the zvol. Setting
|
||||
compression to on indicates that the current default compression algorithm
|
||||
should be used. The current default compression algorithm is either
|
||||
lzjb or, if the lz4_compress feature is enabled, lz4. Changing this
|
||||
property affects only newly-written data.
|
||||
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
|
||||
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).
|
||||
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
|
||||
type: string
|
||||
keyformat:
|
||||
description: KeyFormat specifies format of the encryption key
|
||||
type: string
|
||||
keylocation:
|
||||
description: KeyLocation is the location of key for the encryption
|
||||
type: string
|
||||
ownerNodeID:
|
||||
minLength: 1
|
||||
type: string
|
||||
poolName:
|
||||
description: poolName specifies the name of the pool where this volume
|
||||
should be created
|
||||
minLength: 1
|
||||
type: string
|
||||
recordsize:
|
||||
description: RecordSize specifies the record size for the zfs dataset
|
||||
minLength: 1
|
||||
type: string
|
||||
snapname:
|
||||
description: SnapName specifies the name of the snapshot where this
|
||||
volume should be cloned
|
||||
type: string
|
||||
thinProvision:
|
||||
description: Thinprovision specifies if we should thin provisioned the
|
||||
volume or not
|
||||
enum:
|
||||
- "Yes"
|
||||
- "no"
|
||||
type: string
|
||||
volblocksize:
|
||||
description: VolBlockSize specifies the block size for the zvol
|
||||
minLength: 1
|
||||
type: string
|
||||
volumeType:
|
||||
description: volumeType determines whether the volume is of type "DATASET"
|
||||
or "ZVOL". if fsttype provided in the storageclass is "zfs", then
|
||||
it will create a volume of type "DATASET". If "ext4", "ext3", "ext2"
|
||||
or "xfs" is mentioned as fstype in the storageclass, it will create
|
||||
a volume of type "ZVOL" so that it can be further formatted with the
|
||||
fstype provided in the storageclass.
|
||||
enum:
|
||||
- ZVOL
|
||||
- DATASET
|
||||
type: string
|
||||
required:
|
||||
- capacity
|
||||
- ownerNodeID
|
||||
- poolName
|
||||
- volumeType
|
||||
type: object
|
||||
status:
|
||||
properties:
|
||||
state:
|
||||
type: string
|
||||
type: object
|
||||
required:
|
||||
- spec
|
||||
- status
|
||||
type: object
|
||||
version: v1alpha1
|
||||
versions:
|
||||
- name: v1alpha1
|
||||
served: true
|
||||
storage: true
|
||||
status:
|
||||
acceptedNames:
|
||||
kind: ""
|
||||
plural: ""
|
||||
conditions: []
|
||||
storedVersions: []
|
||||
204
deploy/yamls/zfssnapshot-crd.yaml
Normal file
204
deploy/yamls/zfssnapshot-crd.yaml
Normal file
|
|
@ -0,0 +1,204 @@
|
|||
|
||||
|
||||
##############################################
|
||||
########### ############
|
||||
########### ZFSSnapshot CRD ############
|
||||
########### ############
|
||||
##############################################
|
||||
|
||||
# ZFSSnapshot CRD is autogenerated via `make manifests` command.
|
||||
# Do the modification in the code and run the `make manifests` command
|
||||
# to generate the CRD definition
|
||||
|
||||
---
|
||||
apiVersion: apiextensions.k8s.io/v1beta1
|
||||
kind: CustomResourceDefinition
|
||||
metadata:
|
||||
annotations:
|
||||
controller-gen.kubebuilder.io/version: v0.2.8
|
||||
creationTimestamp: null
|
||||
name: zfssnapshots.zfs.openebs.io
|
||||
spec:
|
||||
group: zfs.openebs.io
|
||||
names:
|
||||
kind: ZFSSnapshot
|
||||
listKind: ZFSSnapshotList
|
||||
plural: zfssnapshots
|
||||
shortNames:
|
||||
- zfssnap
|
||||
singular: zfssnapshot
|
||||
preserveUnknownFields: false
|
||||
scope: Namespaced
|
||||
validation:
|
||||
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/api-conventions.md#resources'
|
||||
type: string
|
||||
kind:
|
||||
description: 'Kind is a string value representing the REST resource this
|
||||
object represents. Servers may infer this from the endpoint the client
|
||||
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds'
|
||||
type: string
|
||||
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:
|
||||
properties:
|
||||
state:
|
||||
type: string
|
||||
type: object
|
||||
required:
|
||||
- spec
|
||||
- status
|
||||
type: object
|
||||
version: v1alpha1
|
||||
versions:
|
||||
- name: v1alpha1
|
||||
served: true
|
||||
storage: true
|
||||
status:
|
||||
acceptedNames:
|
||||
kind: ""
|
||||
plural: ""
|
||||
conditions: []
|
||||
storedVersions: []
|
||||
|
|
@ -1,4 +1,15 @@
|
|||
|
||||
|
||||
##############################################
|
||||
########### ############
|
||||
########### ZFSVolume CRD ############
|
||||
########### ############
|
||||
##############################################
|
||||
|
||||
# ZFSVolume CRD is autogenerated via `make manifests` command.
|
||||
# Do the modification in the code and run the `make manifests` command
|
||||
# to generate the CRD definition
|
||||
|
||||
---
|
||||
apiVersion: apiextensions.k8s.io/v1beta1
|
||||
kind: CustomResourceDefinition
|
||||
|
|
@ -69,24 +80,31 @@ spec:
|
|||
metadata:
|
||||
type: object
|
||||
spec:
|
||||
description: VolumeInfo contains the volume related info for all types of
|
||||
volumes in ZFSVolume
|
||||
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: Controls the compression algorithm used for this dataset.
|
||||
Compression specifies if the it should enabled on the zvol. Setting
|
||||
compression to on indicates that the current default compression algorithm
|
||||
should be used. The current default compression algorithm is either
|
||||
lzjb or, if the lz4_compress feature is enabled, lz4. Changing this
|
||||
property affects only newly-written data.
|
||||
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
|
||||
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
|
||||
|
|
@ -97,64 +115,97 @@ spec:
|
|||
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
|
||||
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
|
||||
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).
|
||||
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
|
||||
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
|
||||
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 this volume
|
||||
should be created
|
||||
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: RecordSize specifies the record size for the zfs dataset
|
||||
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 this
|
||||
volume should be cloned
|
||||
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 specifies if we should thin provisioned the
|
||||
volume or not
|
||||
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"
|
||||
- "yes"
|
||||
- "no"
|
||||
type: string
|
||||
volblocksize:
|
||||
description: VolBlockSize specifies the block size for the zvol
|
||||
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 fsttype provided in the storageclass is "zfs", then
|
||||
it will create a volume of type "DATASET". If "ext4", "ext3", "ext2"
|
||||
or "xfs" is mentioned as fstype in the storageclass, it will create
|
||||
a volume of type "ZVOL" so that it can be further formatted with the
|
||||
fstype provided in the storageclass.
|
||||
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
|
||||
|
|
@ -1,74 +1,461 @@
|
|||
# This manifest is autogenerated via `make manifests` command
|
||||
# Do the modification to the zfs-driver.yaml in directory deploy/yamls/
|
||||
# and then run `make manifests` command
|
||||
|
||||
# This manifest deploys the OpenEBS ZFS control plane components,
|
||||
# with associated CRs & RBAC rules.
|
||||
|
||||
# Create the OpenEBS namespace
|
||||
# This is the default namespace where the ZFS driver will create all
|
||||
# its resources. If we want to change it to use a different namespace
|
||||
# modify this to create the new namespace and also modify the OPENEBS_NAMESPACE
|
||||
# env for the ZFS Driver's controller and agent deployments.
|
||||
# please note that this should be changed while initial setup, once ZFS Driver
|
||||
# is deployed with a namespace, we should never modify it as old resources will
|
||||
# not be available under the new namespace and ZFS Driver looks for all the resources
|
||||
# in the OPENEBS_NAMESPACE namespace passed as an env.
|
||||
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: openebs
|
||||
---
|
||||
apiVersion: apiextensions.k8s.io/v1beta1
|
||||
kind: CustomResourceDefinition
|
||||
metadata:
|
||||
name: zfsvolumes.zfs.openebs.io
|
||||
spec:
|
||||
group: zfs.openebs.io
|
||||
version: v1alpha1
|
||||
scope: Namespaced
|
||||
names:
|
||||
plural: zfsvolumes
|
||||
singular: zfsvolume
|
||||
kind: ZFSVolume
|
||||
shortNames:
|
||||
- zfsvol
|
||||
- zv
|
||||
additionalPrinterColumns:
|
||||
- JSONPath: .spec.poolName
|
||||
name: ZPool
|
||||
description: ZFS Pool where the volume is created
|
||||
type: string
|
||||
- JSONPath: .spec.ownerNodeID
|
||||
name: Node
|
||||
description: Node where the volume is created
|
||||
type: string
|
||||
- JSONPath: .spec.capacity
|
||||
name: Size
|
||||
description: Size of the volume
|
||||
type: string
|
||||
- JSONPath: .spec.volblocksize
|
||||
name: volblocksize
|
||||
description: volblocksize for the created zvol
|
||||
type: string
|
||||
- JSONPath: .spec.recordsize
|
||||
name: recordsize
|
||||
description: recordsize for the created zfs dataset
|
||||
type: string
|
||||
- JSONPath: .spec.fsType
|
||||
name: Filesystem
|
||||
description: filesystem created on the volume
|
||||
type: string
|
||||
---
|
||||
|
||||
|
||||
##############################################
|
||||
########### ############
|
||||
########### Snapshot CRDs ############
|
||||
########### ZFSVolume CRD ############
|
||||
########### ############
|
||||
##############################################
|
||||
|
||||
# ZFSVolume CRD is autogenerated via `make manifests` command.
|
||||
# Do the modification in the code and run the `make manifests` command
|
||||
# to generate the CRD definition
|
||||
|
||||
---
|
||||
apiVersion: apiextensions.k8s.io/v1beta1
|
||||
kind: CustomResourceDefinition
|
||||
metadata:
|
||||
annotations:
|
||||
controller-gen.kubebuilder.io/version: v0.2.8
|
||||
creationTimestamp: null
|
||||
name: zfsvolumes.zfs.openebs.io
|
||||
spec:
|
||||
additionalPrinterColumns:
|
||||
- JSONPath: .spec.poolName
|
||||
description: ZFS Pool where the volume is created
|
||||
name: ZPool
|
||||
type: string
|
||||
- JSONPath: .spec.ownerNodeID
|
||||
description: Node where the volume is created
|
||||
name: Node
|
||||
type: string
|
||||
- JSONPath: .spec.capacity
|
||||
description: Size of the volume
|
||||
name: Size
|
||||
type: string
|
||||
- JSONPath: .spec.volblocksize
|
||||
description: volblocksize of volume
|
||||
name: volblocksize
|
||||
type: string
|
||||
- JSONPath: .spec.recordsize
|
||||
description: recordsize of created zfs dataset
|
||||
name: recordsize
|
||||
type: string
|
||||
- JSONPath: .spec.fsType
|
||||
description: filesystem created on the volume
|
||||
name: Filesystem
|
||||
type: string
|
||||
- JSONPath: .status.creationTime
|
||||
description: Timestamp when the volume has been created.
|
||||
name: CreationTime
|
||||
type: date
|
||||
- JSONPath: .metadata.creationTimestamp
|
||||
name: Age
|
||||
type: date
|
||||
group: zfs.openebs.io
|
||||
names:
|
||||
kind: ZFSVolume
|
||||
listKind: ZFSVolumeList
|
||||
plural: zfsvolumes
|
||||
shortNames:
|
||||
- zfsvol
|
||||
- zv
|
||||
singular: zfsvolume
|
||||
preserveUnknownFields: false
|
||||
scope: Namespaced
|
||||
subresources: {}
|
||||
validation:
|
||||
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/api-conventions.md#resources'
|
||||
type: string
|
||||
kind:
|
||||
description: 'Kind is a string value representing the REST resource this
|
||||
object represents. Servers may infer this from the endpoint the client
|
||||
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds'
|
||||
type: string
|
||||
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
|
||||
required:
|
||||
- spec
|
||||
type: object
|
||||
version: v1alpha1
|
||||
versions:
|
||||
- name: v1alpha1
|
||||
served: true
|
||||
storage: true
|
||||
status:
|
||||
acceptedNames:
|
||||
kind: ""
|
||||
plural: ""
|
||||
conditions: []
|
||||
storedVersions: []
|
||||
|
||||
|
||||
##############################################
|
||||
########### ############
|
||||
########### ZFSSnapshot CRD ############
|
||||
########### ############
|
||||
##############################################
|
||||
|
||||
# ZFSSnapshot CRD is autogenerated via `make manifests` command.
|
||||
# Do the modification in the code and run the `make manifests` command
|
||||
# to generate the CRD definition
|
||||
|
||||
---
|
||||
apiVersion: apiextensions.k8s.io/v1beta1
|
||||
kind: CustomResourceDefinition
|
||||
metadata:
|
||||
annotations:
|
||||
controller-gen.kubebuilder.io/version: v0.2.8
|
||||
creationTimestamp: null
|
||||
name: zfssnapshots.zfs.openebs.io
|
||||
spec:
|
||||
group: zfs.openebs.io
|
||||
version: v1alpha1
|
||||
scope: Namespaced
|
||||
names:
|
||||
plural: zfssnapshots
|
||||
singular: zfssnapshot
|
||||
kind: ZFSSnapshot
|
||||
listKind: ZFSSnapshotList
|
||||
plural: zfssnapshots
|
||||
shortNames:
|
||||
- zfssnapshot
|
||||
- zfssnap
|
||||
singular: zfssnapshot
|
||||
preserveUnknownFields: false
|
||||
scope: Namespaced
|
||||
validation:
|
||||
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/api-conventions.md#resources'
|
||||
type: string
|
||||
kind:
|
||||
description: 'Kind is a string value representing the REST resource this
|
||||
object represents. Servers may infer this from the endpoint the client
|
||||
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds'
|
||||
type: string
|
||||
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:
|
||||
properties:
|
||||
state:
|
||||
type: string
|
||||
type: object
|
||||
required:
|
||||
- spec
|
||||
- status
|
||||
type: object
|
||||
version: v1alpha1
|
||||
versions:
|
||||
- name: v1alpha1
|
||||
served: true
|
||||
storage: true
|
||||
status:
|
||||
acceptedNames:
|
||||
kind: ""
|
||||
plural: ""
|
||||
conditions: []
|
||||
storedVersions: []
|
||||
|
||||
---
|
||||
|
||||
apiVersion: apiextensions.k8s.io/v1beta1
|
||||
|
|
|
|||
|
|
@ -78,46 +78,60 @@ type ZFSVolumeList struct {
|
|||
Items []ZFSVolume `json:"items"`
|
||||
}
|
||||
|
||||
// VolumeInfo contains the volume related info
|
||||
// for all types of volumes in ZFSVolume
|
||||
// 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.
|
||||
type VolumeInfo struct {
|
||||
|
||||
// OwnerNodeID is the Node ID which
|
||||
// is the owner of this Volume
|
||||
|
||||
// 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.
|
||||
// +kubebuilder:validation:MinLength=1
|
||||
// +kubebuilder:validation:Required
|
||||
OwnerNodeID string `json:"ownerNodeID"`
|
||||
|
||||
// poolName specifies the name of the
|
||||
// pool where this volume should be created
|
||||
// poolName specifies the name of the pool where the volume has been created.
|
||||
// PoolName can not be edited after the volume has been provisioned.
|
||||
// +kubebuilder:validation:Required
|
||||
// +kubebuilder:validation:MinLength=1
|
||||
PoolName string `json:"poolName"`
|
||||
|
||||
// SnapName specifies the name of the
|
||||
// snapshot where this volume should be cloned
|
||||
// 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.
|
||||
SnapName string `json:"snapname,omitempty"`
|
||||
|
||||
// Capacity of the volume
|
||||
// +kubebuilder:validation:Required
|
||||
// +kubebuilder:validation:MinLength=1
|
||||
Capacity string `json:"capacity"`
|
||||
|
||||
// RecordSize specifies the record size
|
||||
// for the zfs dataset
|
||||
// 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.
|
||||
// +kubebuilder:validation:MinLength=1
|
||||
RecordSize string `json:"recordsize,omitempty"`
|
||||
|
||||
// VolBlockSize specifies the block size for the zvol
|
||||
// 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.
|
||||
// +kubebuilder:validation:MinLength=1
|
||||
VolBlockSize string `json:"volblocksize,omitempty"`
|
||||
|
||||
// Controls the compression algorithm used for this dataset. Compression
|
||||
// specifies if the it should enabled on the zvol. Setting compression to on
|
||||
// indicates that the current default compression algorithm should be used.
|
||||
// The current default compression algorithm is either lzjb or, if the lz4_compress
|
||||
// feature is enabled, lz4.
|
||||
// Changing this property affects only newly-written data.
|
||||
// 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.
|
||||
// +kubebuilder:validation:Pattern="^(on|off|lzjb|gzip|gzip-[1-9]|zle|lz4)$"
|
||||
Compression string `json:"compression,omitempty"`
|
||||
|
||||
|
|
@ -129,7 +143,9 @@ type VolumeInfo struct {
|
|||
// 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
|
||||
// should be enabled on the zvol.
|
||||
// Dedup property can be edited after the volume has been created.
|
||||
// Default Value: off.
|
||||
// +kubebuilder:validation:Enum=on;off
|
||||
Dedup string `json:"dedup,omitempty"`
|
||||
|
||||
|
|
@ -140,6 +156,7 @@ type VolumeInfo struct {
|
|||
// 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.
|
||||
// +kubebuilder:validation:Pattern="^(on|off|aes-128-[c,g]cm|aes-192-[c,g]cm|aes-256-[c,g]cm)$"
|
||||
Encryption string `json:"encryption,omitempty"`
|
||||
|
||||
|
|
@ -147,23 +164,37 @@ type VolumeInfo struct {
|
|||
KeyLocation string `json:"keylocation,omitempty"`
|
||||
|
||||
// KeyFormat specifies format of the encryption key
|
||||
// The supported KeyFormats are passphrase, raw, hex.
|
||||
// +kubebuilder:validation:Enum=passphrase;raw;hex
|
||||
KeyFormat string `json:"keyformat,omitempty"`
|
||||
|
||||
// Thinprovision specifies if we should
|
||||
// thin provisioned the volume or not
|
||||
// +kubebuilder:validation:Enum=Yes;no
|
||||
// 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.
|
||||
// +kubebuilder:validation:Enum=yes;no
|
||||
ThinProvision string `json:"thinProvision,omitempty"`
|
||||
|
||||
// volumeType determines whether the volume is of type "DATASET" or "ZVOL".
|
||||
// if fsttype provided in the storageclass is "zfs", then it will create a
|
||||
// volume of type "DATASET". If "ext4", "ext3", "ext2" or "xfs" is mentioned as fstype
|
||||
// in the storageclass, it will create a volume of type "ZVOL" so that it can be
|
||||
// further formatted with the fstype provided in the storageclass.
|
||||
// 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.
|
||||
// +kubebuilder:validation:Required
|
||||
// +kubebuilder:validation:Enum=ZVOL;DATASET
|
||||
VolumeType string `json:"volumeType"`
|
||||
|
||||
// FsType specifies filesystem type for the
|
||||
// zfs volume/dataset
|
||||
// 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.
|
||||
FsType string `json:"fsType,omitempty"`
|
||||
}
|
||||
|
|
|
|||
430
upgrade/crd.yaml
430
upgrade/crd.yaml
|
|
@ -1,68 +1,436 @@
|
|||
|
||||
|
||||
##############################################
|
||||
########### ############
|
||||
########### ZFSVolume CRD ############
|
||||
########### ############
|
||||
##############################################
|
||||
|
||||
# ZFSVolume CRD is autogenerated via `make manifests` command.
|
||||
# Do the modification in the code and run the `make manifests` command
|
||||
# to generate the CRD definition
|
||||
|
||||
---
|
||||
apiVersion: apiextensions.k8s.io/v1beta1
|
||||
kind: CustomResourceDefinition
|
||||
metadata:
|
||||
annotations:
|
||||
controller-gen.kubebuilder.io/version: v0.2.8
|
||||
creationTimestamp: null
|
||||
name: zfsvolumes.zfs.openebs.io
|
||||
spec:
|
||||
additionalPrinterColumns:
|
||||
- JSONPath: .spec.poolName
|
||||
description: ZFS Pool where the volume is created
|
||||
name: ZPool
|
||||
type: string
|
||||
- JSONPath: .spec.ownerNodeID
|
||||
description: Node where the volume is created
|
||||
name: Node
|
||||
type: string
|
||||
- JSONPath: .spec.capacity
|
||||
description: Size of the volume
|
||||
name: Size
|
||||
type: string
|
||||
- JSONPath: .spec.volblocksize
|
||||
description: volblocksize of volume
|
||||
name: volblocksize
|
||||
type: string
|
||||
- JSONPath: .spec.recordsize
|
||||
description: recordsize of created zfs dataset
|
||||
name: recordsize
|
||||
type: string
|
||||
- JSONPath: .spec.fsType
|
||||
description: filesystem created on the volume
|
||||
name: Filesystem
|
||||
type: string
|
||||
- JSONPath: .status.creationTime
|
||||
description: Timestamp when the volume has been created.
|
||||
name: CreationTime
|
||||
type: date
|
||||
- JSONPath: .metadata.creationTimestamp
|
||||
name: Age
|
||||
type: date
|
||||
group: zfs.openebs.io
|
||||
version: v1alpha1
|
||||
scope: Namespaced
|
||||
names:
|
||||
plural: zfsvolumes
|
||||
singular: zfsvolume
|
||||
kind: ZFSVolume
|
||||
listKind: ZFSVolumeList
|
||||
plural: zfsvolumes
|
||||
shortNames:
|
||||
- zfsvol
|
||||
- zv
|
||||
additionalPrinterColumns:
|
||||
- JSONPath: .spec.poolName
|
||||
name: ZPool
|
||||
description: ZFS Pool where the volume is created
|
||||
singular: zfsvolume
|
||||
preserveUnknownFields: false
|
||||
scope: Namespaced
|
||||
subresources: {}
|
||||
validation:
|
||||
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/api-conventions.md#resources'
|
||||
type: string
|
||||
- JSONPath: .spec.ownerNodeID
|
||||
name: Node
|
||||
description: Node where the volume is created
|
||||
kind:
|
||||
description: 'Kind is a string value representing the REST resource this
|
||||
object represents. Servers may infer this from the endpoint the client
|
||||
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds'
|
||||
type: string
|
||||
- JSONPath: .spec.capacity
|
||||
name: Size
|
||||
description: Size of the volume
|
||||
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
|
||||
- JSONPath: .spec.volblocksize
|
||||
name: volblocksize
|
||||
description: volblocksize for the created zvol
|
||||
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
|
||||
- JSONPath: .spec.recordsize
|
||||
name: recordsize
|
||||
description: recordsize for the created zfs dataset
|
||||
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
|
||||
- JSONPath: .spec.fsType
|
||||
name: Filesystem
|
||||
description: filesystem created on the volume
|
||||
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
|
||||
required:
|
||||
- spec
|
||||
type: object
|
||||
version: v1alpha1
|
||||
versions:
|
||||
- name: v1alpha1
|
||||
served: true
|
||||
storage: true
|
||||
status:
|
||||
acceptedNames:
|
||||
kind: ""
|
||||
plural: ""
|
||||
conditions: []
|
||||
storedVersions: []
|
||||
|
||||
|
||||
##############################################
|
||||
########### ############
|
||||
########### Snapshot CRD ############
|
||||
########### ZFSSnapshot CRD ############
|
||||
########### ############
|
||||
##############################################
|
||||
|
||||
# ZFSSnapshot CRD is autogenerated via `make manifests` command.
|
||||
# Do the modification in the code and run the `make manifests` command
|
||||
# to generate the CRD definition
|
||||
|
||||
---
|
||||
apiVersion: apiextensions.k8s.io/v1beta1
|
||||
kind: CustomResourceDefinition
|
||||
metadata:
|
||||
annotations:
|
||||
controller-gen.kubebuilder.io/version: v0.2.8
|
||||
creationTimestamp: null
|
||||
name: zfssnapshots.zfs.openebs.io
|
||||
spec:
|
||||
group: zfs.openebs.io
|
||||
version: v1alpha1
|
||||
scope: Namespaced
|
||||
names:
|
||||
plural: zfssnapshots
|
||||
singular: zfssnapshot
|
||||
kind: ZFSSnapshot
|
||||
listKind: ZFSSnapshotList
|
||||
plural: zfssnapshots
|
||||
shortNames:
|
||||
- zfssnapshot
|
||||
- zfssnap
|
||||
---
|
||||
singular: zfssnapshot
|
||||
preserveUnknownFields: false
|
||||
scope: Namespaced
|
||||
validation:
|
||||
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/api-conventions.md#resources'
|
||||
type: string
|
||||
kind:
|
||||
description: 'Kind is a string value representing the REST resource this
|
||||
object represents. Servers may infer this from the endpoint the client
|
||||
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds'
|
||||
type: string
|
||||
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:
|
||||
properties:
|
||||
state:
|
||||
type: string
|
||||
type: object
|
||||
required:
|
||||
- spec
|
||||
- status
|
||||
type: object
|
||||
version: v1alpha1
|
||||
versions:
|
||||
- name: v1alpha1
|
||||
served: true
|
||||
storage: true
|
||||
status:
|
||||
acceptedNames:
|
||||
kind: ""
|
||||
plural: ""
|
||||
conditions: []
|
||||
storedVersions: []
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue