Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: vastclusters.storage.vastdata.com
spec:
group: storage.vastdata.com
names:
kind: VastCluster
listKind: VastClusterList
plural: vastclusters
singular: vastcluster
scope: Namespaced
versions:
- name: v1
schema:
openAPIV3Schema:
description: VastCluster is the Schema for the vastclusters API
properties:
apiVersion:
description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
type: string
kind:
description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
type: string
metadata:
type: object
spec:
description: Spec defines the desired state of VastCluster.
oneOf:
- required:
- token
- required:
- username
- password
properties:
endpoint:
description: Endpoint or URL of the VAST mgmt host.
type: string
passphrase:
description: Optional passphrase used to enable LUKS-based host encryption on the client. If present, host-side encryption will be activated automatically.
nullable: true
type: string
password:
description: Password used for authentication.
type: string
sslCert:
description: Optional SSL certificate for secure connections.
nullable: true
type: string
tenant:
description: The tenant name for tenant scoped authentication (tenant admin).
nullable: true
type: string
token:
description: API token for accessing VAST mgmt. If provided, it will be used instead of 'username' and 'password'."
type: string
username:
description: Username used for authentication.
type: string
required:
- endpoint
type: object
status:
description: Status defines the observed state of VastCluster
type: object
x-kubernetes-preserve-unknown-fields: true
type: object
served: true
storage: true
subresources:
status: {}

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,257 @@
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: vaststorages.storage.vastdata.com
spec:
group: storage.vastdata.com
names:
kind: VastStorage
listKind: VastStorageList
plural: vaststorages
singular: vaststorage
scope: Namespaced
versions:
- additionalPrinterColumns:
- description: Secret
jsonPath: .spec.secretName
name: Secret
type: string
- description: Storage Class
jsonPath: .spec.storageClass.name
name: StorageClass
type: string
- description: Snapshot Class
jsonPath: .spec.snapshotClass.name
name: SnapshotClass
type: string
- description: Storage Type
jsonPath: .spec.driverType
name: Type
type: string
name: v1
schema:
openAPIV3Schema:
description: VastStorage is the Schema for the vaststorages API
properties:
apiVersion:
description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
type: string
kind:
description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
type: string
metadata:
type: object
spec:
description: Spec defines the desired state of VastStorage.
properties:
allowVolumeExpansion:
default: true
description: Allows resizing existing volumes.
type: boolean
blockProvisioner:
description: |
[OLM Console only] Used internally by the OpenShift UI form when driverType is 'block'. Automatically sets provisioner. Should not be set manually in YAML mode.
type: string
blockingClones:
default: false
description: |-
If true, the CSI driver will wait for the GSS (global snapshot stream) process to fully complete
before returning from a volume clone operation.
This ensures the volume is fully usable and consistent at the time of provisioning, but may add
significant latency if the underlying GSS operation is long-running.
If false (default), the driver returns as soon as the clone operation is initiated, allowing
Kubernetes to proceed while the data stream continues in the background.
type: boolean
clusterName:
default: ""
description: The name of VastCluster reference.
type: string
createSnapshotClass:
default: true
description: Create SnapshotClass for VastStorage.
type: boolean
driverType:
default: nfs
description: Choose the driver type for VastStorage.
enum:
- nfs
- block
type: string
ephemeralVolumeNameFormat:
default: csi:{namespace}:{name}:{id}
description: String template for CSI-provisioned ephemeral volumes, within VAST.
type: string
fsType:
description: Filesystem type for volume creation.
enum:
- ""
- ext4
- ext3
- xfs
nullable: true
type: string
hostEncryption:
description: |-
Enables encryption using LUKS on the device at the client side.
If set, the CSI driver will expect a `passphrase` to be provided in the vast-mgmt Kubernetes Secret.
nullable: true
properties:
cipher:
description: Encryption cipher used for LUKS.
nullable: true
type: string
hash:
description: Hash algorithm used for key derivation.
nullable: true
type: string
key_size:
description: Key size in bits, e.g., 256 or 512. Must be supported by the selected cipher
nullable: true
type: integer
pbkdf_memory:
description: Memory cost for PBKDF in kilobytes.
nullable: true
type: integer
perf-no_read_workqueue:
default: true
description: Bypass read workqueue. Reduces latency by avoiding workqueue overhead for read operations.
nullable: true
type: boolean
perf-no_write_workqueue:
default: true
description: Bypass write workqueue. Reduces latency by avoiding workqueue overhead for write operations.
nullable: true
type: boolean
perf-same_cpu_crypt:
default: true
description: Use same CPU for encryption work. Improves performance by keeping encryption on the same CPU core.
nullable: true
type: boolean
perf-submit_from_crypt_cpus:
default: true
description: Submit IO from crypt CPUs. Optimizes IO submission path for encrypted devices.
nullable: true
type: boolean
type: object
mountOptions:
default: []
description: Add any extra mount NFS options here.
items:
type: string
type: array
nfsProvisioner:
description: |
[OLM Console only] Used internally by the OpenShift UI form when driverType is 'nfs'. Automatically sets provisioner. Should not be set manually in YAML mode.
type: string
provisioner:
description: The name of VastDriver provisioner reference.
type: string
qosPolicy:
description: Name of QoS policy associated with the view or volume.
nullable: true
type: string
reclaimPolicy:
default: Delete
description: Reclaim policy defines what happens to the volume when the corresponding PersistentVolumeClaim (PVC) is deleted. See https://kubernetes.io/docs/concepts/storage/storage-classes/#reclaim-policy for more details.
enum:
- Delete
- Retain
type: string
secretName:
default: ""
description: The name of VMS Secret object.
type: string
secretNamespace:
default: ""
description: Secret namespace. If not specified, the Secret will be looked up in the same namespace where the Operator is running.
type: string
setDefaultStorageClass:
default: false
description: When enabled, Vast CSI will be set as the default storage class for the entire Kubernetes cluster. This means Vast CSI will automatically be chosen as the storage class for persistent volume claims (PVCs) that do not specify a storage class. See https://kubernetes.io/docs/concepts/storage/storage-classes/#default-storageclass for more details.
type: boolean
snapshotClass:
description: VolumeSnapshotClass definition.
properties:
deletionPolicy:
default: Delete
description: Specifies the deletion policy for snapshots associated with this snapshot class. See https://kubernetes.io/docs/concepts/storage/volume-snapshot-classes/#deletionpolicy for more details.
enum:
- Delete
- Retain
type: string
setDefaultSnapshotClass:
default: false
description: When enabled, this sets the VAST CSI Snapshot Class as the default for creating volume snapshots. This means VAST CSI Snapshot Class will be used automatically when volume snapshots are created without specifying a snapshot class. See https://kubernetes.io/docs/concepts/storage/volume-snapshot-classes/#the-volumesnapshotclass-resource for more details.
type: boolean
snapshotNameFormat:
default: csi:{namespace}:{name}:{id}
type: string
type: object
storagePath:
default: ""
description: Base path where volumes will be located on VAST.
type: string
subsystem:
default: ""
description: VAST subsystem for volume creation.
type: string
tenantName:
description: Tenant name – required for additional filtering when multiple subsystems share the same name.
nullable: true
type: string
transportType:
description: Host connectivity type used for block storage.
enum:
- ""
- TCP
- RDMA
nullable: true
type: string
viewPolicy:
default: ""
description: VAST policy name to create views.
type: string
vipPool:
description: Name of VAST VIP pool to use.
nullable: true
type: string
vipPoolFQDN:
description: "The FQDN of the VIP pool to use. Must specify either vipPool or vipPoolFQDN.\nUsing a DNS skips an API call to the VMS for obtaining a random VIP from the vipPool, \nleading to faster volume mounting.\nNOTE: The driver will prepend the FQDN with a random prefix, which forces the NFS client \nto resolve into a different VIP, thereby distributing the load across the entire range \nof the VIP pool."
nullable: true
type: string
vipPoolFQDNRandomPrefix:
default: true
description: Helps distribute load across the entire VIP pool by randomizing the VIP resolved for each volume mount. If set to true, a random prefix will be added to the VIP FQDN, ensuring that each NFS mount request resolves to a different VIP from the VIP pool.
type: boolean
volumeGroup:
description: |-
Optional template for constructing common volume prefix.
It supports placeholders for the PVC name, namespace, and ID,
which can be used in the format {namespace}, {name}, and {id}.
If not provided, a default template will be used. The volume group
can represent nested folder structures. For example:
- "folder1/folder2/block-{namespace}-{id}
nullable: true
type: string
volumeNameFormat:
default: csi:{namespace}:{name}:{id}
description: String template for CSI-provisioned volume names, within VAST.
type: string
required:
- secretName
- secretNamespace
- clusterName
- driverType
- storagePath
- viewPolicy
- subsystem
type: object
status:
description: Status defines the observed state of VastStorage
type: object
x-kubernetes-preserve-unknown-fields: true
type: object
served: true
storage: true
subresources:
status: {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
apiVersion: v1
kind: Service
metadata:
labels:
app.kubernetes.io/component: kube-rbac-proxy
app.kubernetes.io/created-by: vast-csi-operator
app.kubernetes.io/instance: controller-manager-metrics-service
app.kubernetes.io/name: service
app.kubernetes.io/part-of: vast-csi-operator
control-plane: controller-manager
name: vast-csi-operator-controller-manager-metrics-service
spec:
ports:
- name: https
port: 8443
targetPort: https
selector:
control-plane: controller-manager
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: vast-csi-operator-metrics-reader
rules:
- nonResourceURLs:
- /metrics
verbs:
- get
Loading
Loading