All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
1.6.4 - 2024-11-08
- Fixed an issue that caused the node publish call to attempt to resize a block volume: block volumes are now never attempted to be resized.
- Ensure that snapshot restore requests are tried on nodes that are actually available.
1.6.3 - 2024-06-28
- Fixed node filtering when initial placement was not possible. This now takes the remoteAccessPolicy into account like intended.
1.6.2 - 2024-06-19
- Fix device path passdown when LINSTOR does not report a device path.
1.6.1 - 2024-05-16
- Pass device paths down from CSI Controller on publish, reducing LINSTOR API requests from the CSI Node.
1.6.0 - 2024-05-02
- Support for creating backups with LINSTOR-to-LINSTOR shipping.
1.5.0 - 2024-03-19
- Support specifying multiple storage pools in the parameters, separated by spaces.
- Update base image to Debian 12.
1.4.0 - 2024-02-01
- Update golinstor to support LINSTOR 1.26.0, removing support for Openflex layers.
1.3.1 - 2024-01-30
- Default access policy for resources without replication layer is now "local only".
- Do not try to create diskless resource if there is no compatible diskless layer (DRBD or NVMe) available.
- Do not allow attaching a volume that has no existing replica.
1.3.0 - 2023-11-15
- Support to delete downloaded backups after restore operation (k8s only).
- New parameter
overProvision
: when set available capacity on a node is calculated by taking into account the reserved capacity in the pool based on existing volumes.
- When not using topology, select a random node to download the backup. This should prevent the same node being used to download all backups.
1.2.3 - 2023-08-31
- Reduced load on LINSTOR when attaching volumes.
- Reduced load on LINSTOR when detaching volumes.
- Reduced load on LINSTOR when checking node stats.
- Reduced load on LINSTOR when listing volumes with status.
- Reduced load on LINSTOR when fetching storage capacity.
1.2.2 - 2023-07-13
- Prevent shrinking of volumes. While this is enforced by the CSI Provisioner already, when restoring from backups (which do not have a reported size) these limits are not enforced.
1.2.1 - 2023-07-12
- Fix crashes when listing backups
1.2.0 - 2023-06-15
- Delete S3 backups in delete snapshot requests.
- Delete local snapshots when creating S3 backups when new "delete-local" parameter is true.
1.1.1 - 2023-06-05
- Removed unnecessary checks for read-only publishing by the controller.
1.1.0 - 2023-05-24
- When using another property namespace (other than
Aux/
), also use it to prefixreplicasOnSame
andreplicasOnDifferent
. Values already prefixed withAux/
will be left unchanged. - Starting with 0.13.1, the CSI driver tried to work around an issue in quorum calculation by forcing the creation of a diskful instead of the normal diskless resource. Since DRBD 9.1.12/9.2.0, this is no longer necessary, as quorum is now inherited from the diskful counterparts.
1.0.1 - 2023-04-24
- Ignore storage capacity from "unschedulable" nodes. Those are nodes that are either evicted/evacuated or have the
AutoplaceTarget
property set tofalse
.
1.0.0 - 2023-02-28
- Add
_netdev
mount option to all mounts. This ensures unmounting on system shutdown happens before the network is unconfigured, which might cause DRBD to lose quorum.
0.22.1 - 2022-12-27
- Use golinstor based initialization of LINSTOR client. This enables checking the server TLS without requiring a mutual TLS config, as well as using the new built-in User-Agent and Bearer Token configs.
0.22.0 - 2022-12-13
- Support for live-migration in kubevirt by setting the
allow-two-primaries
property on demand. This only affects RWX volumes in block mode. If used for anything other than kube-virt, results cannot be guaranteed.
- LINSTOR may return more backups than requested when searching for a specific snapshot ID. The results are now filtered, ensuring we really restore from the expected backup.
0.21.0 - 2022-10-21
- Add option to set property namespace used to determine a nodes topology.
- Add option to skip labelling nodes based on configured storage pools.
0.20.0 - 2022-07-20
- A new check ensures snapshots are only attempted when the resource is completely in sync. This prevents an issue with LINSTOR creating too many error reports in case a node is (temporarily) offline.
- Support CSI Volume Conditions
- Update CSI Spec to 1.6.0
0.19.1 - 2022-05-24
- Store access policy in volume context, enabling volume context parsing without access to the storage class. This improves the situation for LINSTOR Scheduler and Affinity Controller, which need to access this value.
- The attach logic was updated to take the quorum configuration into account. Previously, the CSI driver would create a diskful resource in the assumption that it is required to achieve quorum, even if the cluster was configured without quorum.
0.19.0 - 2022-05-09
- Snapshots from S3 are now restored by preferred topology, if possible. Previously, all admissible nodes based on the provided cluster topology were considered in random order. Now the order is fixed to be based on the preferred topology instead.
- An empty filesystem volume that was provisioned with 0.18.0, but never attached will not be attachable. It is missing the filesystem, since LINSTOR CSI no longer creates it on attach. You have to recreate these volumes (by definition, they hold no data).
- Use LINSTOR native properties to provision filesystem volumes. This might slightly alter the default options used
when running
mkfs
, LINSTOR choses defaults optimized for DRBD. Previously filesystem creation was part of the usual mount process. This could run into timeouts for very large volumes: as the process would be restarted from scratch on every timeout, it would never complete.
0.18.0 - 2022-02-24
- A new parameter
usePvcName
was added. When "true", the driver will (try to) use the PVC name + namespace instead of the generated PV name as ID. Because this might generate name conflicts in certain scenarios, it remains disabled by default. - Create backups of volumes, stored on S3 compatible storage. See
examples/k8s/volume-snapshot-class.yaml
for how backups can be configured. Note: restoring from such a backup to a new cluster requires some manual steps. Check the examples. - Include
linstor-wait-until
in the image, to make it easy to wait for the LINSTOR API before starting the driver.
- Snapshots are only restored on one node, then replicas are distributed using the usual scheduler logic. Previously a volume restored from a snapshot would be deployed on exactly the same nodes as the original.
- Require golang 1.17 for
go generate
, removing the binary dependencies from go.mod. - Update CSI Spec to 1.5.0
- ControllerUnpublishVolume could fail if LINSTOR node was deleted before the detach operation was executed.
- LINSTOR CSI now expands a restored or cloned volume (if required) before deploying to multiple nodes. A single resource should always be in sync, so it is always safe to expand them.
0.17.0 - 2021-12-09
allowRemoteVolumeAccess
supports new values, allowing a more fine-grained controlled on diskless access.
- ControllerPublishVolume will attach a new volume on the selected node, even if it violates the replicasOn...
parameters. This prevented
allowRemoteVolumeAccess
from working as expected.
0.16.1 - 2021-11-08
- When using a volume source (snapshot or other volume), LINSTOR CSI now correctly resizes the volume to the new requested size.
- Switch back to
resource definition(rd) -> volume definition(vd) -> autoplace(ap)
provisioning instead ofrd -> ap-> vd
as introduced in 0.16.0. This caused issues on non-thin storage pools and sometimes provisioning failed even on thin storage pools.
0.16.0 - 2021-10-15
- Previous versions of LINSTOR CSI passed parameters (as set in a storage class for example) via custom properties on the LINSTOR resources. If those properties were not found, the volume could not be mounted. This made is hard to use pre-provisioned volumes, for example those restored from off-site backups. Now the parameters are passed via the CSI native "Volume Context", which makes it possible to use pre-provisioned volumes.
0.15.1 - 2021-10-06
- A bug introduced in 0.14.0 meant that using the "FollowTopology" policy would not create the requested amount
of volume replicas. Instead, only a single replica was created. This bug is now fixed. Existing volumes can be
updated by using
linstor rg adjust <resource group>
.
0.15.0 - 2021-09-23
- New default volume scheduler
AutoPlaceTopology
. This new scheduler is a topology aware version of the oldAutoPlace
scheduler. Since it is topology aware, it can be used to optimize volume placement when usingWaitForFirstConsumer
volume binding or restricting placement viaallowedTopologies
, while still respecting user-defined placement options such asreplicasOnSame
orreplicasOnDifferent
.
0.14.1 - 2021-09-02
- Build image for arm64
0.14.0 - 2021-08-18
-
Option to send a bearer token for authentication. This can be used when the API is secured by a project like
kube-rbac-proxy
. -
Add explicit namespace
linstor.csi.linbit.com
to volume parameters in storage class. This makes it easier to track which parameter is handled by which component (for example:csi.storage.k8s.io/fstype
is handled by the CSI infrastructure, not the plugin itself).Un-namespaced parameters are still supported, while explicitly namespaced parameters that with a foreign namespace are now ignored. These would produce "unknown parameter" errors previously.
- Calls to
GetCapacity
now take topology information (if any) into account.
0.13.1 - 2021-06-10
- Try to detect cases where a diskless resource would not get quorum and deploy a diskfull replica instead. #121
- Add deactivate/active logic when using resources on shared storage.
0.13.0 - 2021-05-12
- Allow setting arbitrary properties using a parameter prefixed with the
property.linstor.csi.linbit.com
namespace.
- Generate a resource group name if non was provided. The name is generated based on the provided parameters. Since storage classes are immutable, volumes provisioned using the same storage class will always receive the same resource group name.
- Resource groups no longer update existing properties or remove additional properties if they not set in the storage class. A resource group is immutable from the linstor-csi's point of view.
- Failed snapshots are now cleaned up and retried properly. This mitigates an issue whereby the snapshot failed for one reason or other, but the snapshot controller contiously polls it for "completion".
0.12.1 - 2021-03-31
- Controller no longer treats LINSTOR resource(-definitions) as ready when the DELETE flag is set. Operations are now aborted early and tried again later when the LINSTOR resource is really gone.
0.12.0 - 2021-01-26
- PVCs can now be deleted independently of Snapshots. LINSTOR ResourceDefinitions for the PVC will exist until both Snapshots and Resources are deleted.
- Add
nouuid
to default XFS mount options. This enables mounting restored snapshots on the same node as the original. - Detach() operations no longer delete existing diskless resources (i.e. TieBreaker resources), only those created by Attach() operations.
0.11.0 - 2020-12-21
- Snapshot information is persisted using native LINSTOR Snapshots instead of storing it in properties of RDs.
- Snapshots are marked as ready only after LINSTOR reports success
- Generate fallback id for a snapshot based on the suggested name using UUIDv5
- Only create a single snapshot in volume-from-volume scenarios
- LayerList was ignored when not using the AutoPlace scheduler. All schedulers not pass this information to LINSTOR. #102
0.10.2 - 2020-12-04
- Crash when calling NodePublishVolume on non-existent volume (#96)
- Fix an issue where newly created volumes would not be placed on any nodes, leaving them unusable (#99)
0.10.1 - 2020-11-19
- ROX block volumes support requires DRBD v9.0.26 (#93)
0.10.0 - 2020-11-11
- Support for ROX filesystem and block volumes (#87 and #88)
- Support all currently available LINSTOR layers
- DRBD
- STORAGE
- LUKS
- NVME
- CACHE (new)
- OPENFLEX (new)
- WRITECACHE (new)
- Use storage pools for CSI topology support. (#83)
replicasOnSame
andreplicasOnDifferent
always use auxiliary properties
0.9.1 - 2020-07-28
- "layerlist" is respected when auto-placing volumes on older LINSTOR versions. (#77)
0.9.0 - 2020-06-15
- support
VolumeExpand
capabilities
- Updated CSI spec to v1.2.0
0.8.3 - 2020-06-08
- PVC from snapshots mount the restored volume instead of the original
0.8.2 - 2020-06-04
- Snapshot/restore via CSI external-snapshotter
0.8.1 - 2020-05-14
- allow empty/unset LINSTOR storage pools, LINSTOR will chose one. Do not set "", which breaks
0.8.0 - 2020-04-16
- moved upstream to piraeus
- Licence changed to Apache2 (from GPLv2)
- SCs without a
resourceGroup
parameter. For now we create a random LINSTOR RG for every PVC of a SC that does not specifyresourceGroup
. You should get rid of these SCs soon.
- TLS mutual auth support for LINSTOR API endpoint
- support for LINSTOR resource groups. Every storage class mapps now to a LINSTOR resource group.
- DRBD options can now be specified in the SC as "parameter". See the example in
class.yaml
. Keys as specified in the LINSTOR REST API.
0.7.4 - 2020-02-27
- disable host network
- do not cosider diskless storage pools for placement in
Balanced
placer
- implement NodeGetVolumeStats
- update to recent tool chain
0.7.3 - 2020-01-07
- postMountXfsOpts parameter in a storageclass spec can specify the parameter for an xfs_io called after mounting an XFS volume
- new
placementPolicy
:Balanced
provisions remote volumes in the samefailure-domain.beta.kubernetes.io/zone
, picks least utilizedStoragePool
, node andPrefNic
calculated as(total_capacity - free_capacity) / total_capacity
0.7.2 - 2019-08-09
linstor-skip-tls-verification
argument for csi-plugin. Set to"true"
to disable tls verification- csi-plugin will read
LS_USERNAME
andLS_PASSWORD
environment variables for https auth credentials
- Upgrade to golinstor v0.16.1 from v0.16.2
0.7.1 - 2019-08-08
- better logging for Mount calls.
- csi-plugin base imagine is now debian:buster was alpine
- filesystem options no longer ignored. Introduced in v0.6.0
0.7.0 - 2019-08-07
placementPolicy
parameter to control where volumes are physically placed on storage with the following (case sensitive!) options:AutoPlace
uses LINSTOR autoplaceManual
usesclientList
andnodeList
FollowTopology
attempts to provision volumes according to volume topology preferencesplacementCount
number of times.
allowRemoteVolumeAccess
parameter which allow volumes to be remotely attached to nodes (diskless). Defaults to"true"
placementCount
parameter to determine how many replicas to create. Alias to theautoPlace
parameter
- localStoragePolicy parameter
- Upgrade to golinstor v0.16.1 from v0.15.0
0.6.4 - 2019-06-25
- attach diskless resources, rather than diskful. introduced in 0.6.3
0.6.3 - 2019-06-24
localStoragePolicy
now acceptsprefer
andrequire
These are now the preferred (but not required) way to specify these options.
- multivolume resources were potentially broken, but this plugin only makes single volume resources, so this was a corner case.
- getting volume names was broken if there were non-csi-annotated resource definitions
0.6.2 - 2019-06-17
- disklessly attached volumes report volume topology based off of
disklessStoragePool
parameter. By default, they are available on all LINSTOR nodes. Creating new diskless storage pools on a subset of nodes can be used to control from where diskless volumes can be accessed. - support for raw block volumes
linstor-api-requests-per-second
plugin argumentlinstor-api-burst
plugin argument
- NodeStageVolume and NodeUnstageVolume, everything can be done via NodePublishVolume and NodeUnpublishVolume
- ListVolumes now working
- Updated dependency versions
0.6.1 - 2019-06-12
localStoragePolicy
parameter now case insensitive when reporting volume topology, previously needed to be lowercase
0.6.0 - 2019-06-11
- log-level argument for csi-plugin. it takes strings of levels: info, debug, error, etc. The help text lists all of them, but those are the only three you need. Defaults to info.
- support for diskless on remaining is added as a storage class parameter
example
disklessOnRemaining: true
defaults to false - minimal node health checking during relevant CSI calls
- ListVolumes call implemented
- GetCapacity call implemented
- publishing READONLY supported
- LINSTOR api calls are now subject to csi sidecar container timeouts. Timeout argument values of these containers may need to be lengthened, see example deployment
- CHANGELOG.md (so meta!)
- debug-logging argument for csi-plugin
- force and blocksize parameters: use fsOpts for these
- resource definitions should be cleaned up in all cases where CreateVolume calls fail
- mounting now checks for plugin's ability to do an exclusive open on the resources backing device, addresses #15
- controllers argument for csi-plugin is now linstor-endpoint and must be a url with a protocol (http://...) this now points to the linstor rest api work for LINSTOR controller 0.9.11 or better.
- endpoint argument for csi-plugin is now csi-endpoint
- examples/k8s/deploy/linstor-csi.yaml updated
- csi-plugin base imagine is now alpine: was linstor-client
- golinstor is bumped to version v0.15.0 and uses the rest api exclusively
- storagePool now defaults to "", rather than DfltStorPool allowing LINSTOR
to choose storage pools on pure autoPlace calls. This is not supported
in conjunction with localStoragePolicies
required
orpreferred
- encryption parameter takes boolean values, like
disklessOnRemaining
:- 1, t, T, TRUE, true, and True
- 0, f, F, FALSE, false, and False
- all storageClass parameters options are now case insenstive
- non-debug logging is less verbose in general