- helm: option to specify service account name for node driver (#1420)
- helm: drop unused secrets get/list permission from controller
- device needs to be ready on node publish (#1381)
- chart: prefix local templates to avoid bitnami common collision (#1360)
- support Kubernetes v1.36
- drop support for Kubernetes v1.32
The label value truncation introduced in v2.20.1 could produce values starting with a non-alphanumeric character (e.g. -), which is invalid per the https://docs.hetzner.cloud/reference/cloud#description/labels. Truncated values are now stripped of leading non-alphanumeric characters to ensure they remain valid.
- strip leading non-alphanumeric characters after truncating volume label (#1328)
With this release, volume labels are validated against Hetzner Cloud API requirements before a volume is created.
To avoid breaking existing setups, label values that exceed the maximum length of 63 characters are automatically truncated from the left, keeping the last 63 characters. This is especially relevant for automatically set labels like pvc-name, pvc-namespace, and pv-name, which may contain long Kubernetes resource names.
- validate hcloud volume labels (#1304)
The hcloud-csi-controller Pod contains multiple containers: one developed by us and several
Kubernetes sidecars. In this release, we reordered the containers so that the hcloud-csi-driver
container now comes first. As a result, it starts first and is selected by default when running
kubectl logs. Previously, the default was the csi-attacher container. If your tooling relies
on this default behavior, please update it accordingly. We made this change to improve
debuggability, especially for newcomers to the ecosystem.
The hcloud-csi-driver container in the hcloud-csi-controller Pod now logs info messages on
startup, including when the default location is selected. Previously, no output was emitted
until the first volume operation was processed. Since location evaluation may involve calls to the
Hetzner Cloud API, these logs should help with debugging networking issues.
- move container startup order and add init log messages (#1266)
- add api client timeout (#1262)
- support Kubernetes v1.35 (#1245)
- missing volumeattributesclasses permissions for csi-resizer (#1193)
- drop Kubernetes v1.31 support
- missing location config via node name and server id (#1158)
- support Kubernetes v1.34 and drop v1.30 (#1105)
- helm: add extra annotations for StorageClass (#1042)
We’ve merged our two separate binaries into a single, unified binary. This change reduces the overall container image size. Additionally, the new binary is now published as a release artifact.
The Docker image includes two compatibility scripts to support seamless image tag upgrades. However, it is still recommended to update your manifests or Helm chart to reflect the changes.
- single binary (#996)
- publish binary (#1003)
In release v2.14.0, we introduced default labels that are automatically applied to every newly created volume. However, we have identified a bug in the Hetzner Cloud API that allowed invalid label keys during Volume creation. This issue affects the following labels:
- Labels with the key prefix
csi.hetzner.cloud/are not permitted. - Labels using the pattern
csi.storage.k8s.io/*/*are invalid due to the use of double slashes in the key.
These labels are informational only and not used by the CSI driver itself. Volumes with incorrect or broken label values will still function as expected; however, editing or updating the labels may not work correctly. To comply with API requirements, Hetzner Cloud will edit the labels for every Volume and replace them with the new labels:
csi.hetzner.cloud/created-by-managed-bycsi.storage.k8s.io/pvc/name-pvc-namecsi.storage.k8s.io/pvc/namespace-pvc-namespacecsi.storage.k8s.io/pv/name-pv-name
- rename default labels on Volumes (#988)
Caution
Please do not install the version v2.14.0 of the csi-driver, install the version v2.15.0 or later instead.
With this release, you can now assign Hetzner Cloud labels to all newly created volumes. For a brief guide, visit this page.
By default, all volumes are labeled as follows:
csi.storage.k8s.io/pvc/namecsi.storage.k8s.io/pvc/namespacecsi.storage.k8s.io/pv/namecsi.hetzner.cloud/created-by=csi-driver
- allow to set labels for all volumes (#932)
- add Kubernetes v1.33 and remove EOL version v1.29 (#971)
- helm: node extraVolumeMounts are added to wrong container (#957)
- helm-chart: add extraParam for StorageClass (#865)
We are pleased to announce improvements to our Nomad support. While official support is not available, we have developed end-to-end tests that cover the core features of a CSI driver. These tests are integrated into our CI pipeline and validate compatibility with the latest Nomad version.
- nomad: improved nomad support (#798)
- support ReadWriteOncePod (#857)
- add support and tests for Kubernetes 1.32 (#844)
- use extraVolumeMounts for node in daemonset (#843)
- Added new option enableProvidedByTopology (#780)
- drop tests for kubernetes v1.28 (#796)
- prefer scheduling the csi controller on cloud nodes (#786)
This version was tested with Kubernetes 1.29 - 1.31. Furthermore, we dropped v1.28 support.
We have reverted a workaround for an upstream issue in the Kubernetes scheduler where nodes without the CSI Plugin (e.g. Robot servers) would still be considered for scheduling, but then creating and attaching the volume fails with no automatic reconciliation of the this error.
Due to variations in the CSI specification implementation, these changes disrupted Nomad clusters, requiring us to revert them. We are actively working on placing this workaround behind a feature flag, allowing Kubernetes users to bypass the upstream issue.
This affects you, if you have set the Helm value allowedTopologyCloudServer in v2.10.0. If you are affected by the Kubernetes upstream issue, we will provide a fix in the next minor version v2.11.0.
Learn more about this in #400 and #771.
- reverted NodeGetInfo response as it breaks Nomad clusters (#776)
2.10.0 (2024-10-29)
- add support & tests for Kubernetes 1.31 (#721) (85035b9)
- allow arbitrary length API tokens (#724) (61c3a0e)
- allow passing mkfs format options via storage class parameters (#747) (4b9aa4e)
- change XFS default options to support older kernels (#747) (4b9aa4e)
- drop tests for Kubernetes 1.27 (#722) (d46a54b)
- force pods with volumes to be scheduled on Cloud servers (#743) (702fe01)
- fstype is directly passed to mkfs: mkfs.<fstype> (#749) (173bf2f)
- support for SELinux mount (#756) (719247e), closes #582
- Support SINGLE_NODE_MULTI_WRITER capability (#725) (cd53c23), closes #327
- swarm: removed workaround support for mock staging/unstaging (#746) (465ec21)
2.9.0 (2024-08-08)
2.8.0 (2024-06-24)
- chart: separate image name and tag (#616) (0300b14)
- k8s: drop Kubernetes 1.26 from tests (93fe229)
- k8s: test against Kubernetes 1.30 (93fe229)
- read HCLOUD_TOKEN from file (#617) (4e1cd9d)
2.7.1 (2024-06-13)
2.7.0 (2024-05-10)
- add support & tests for Kubernetes 1.29 (#560) (b620486)
- drop tests for kubernetes v1.25 (#559) (5d19ae8)
2.6.0 (2023-11-08)
2.5.1 (2023-09-29)
2.5.0 (2023-09-29)
- build with Go 1.21 (#503) (2a82c3b)
- k8s: add Helm Chart (#500) (c39b138)
- test against Kubernetes 1.28 and drop 1.24 (#491) (b331348)
2.4.0 (2023-08-25)
- add nomad installation docs (#467) (631b117)
- docker-swarm: configure builds for arm64 (#471) (2b9c067)
- upgrade to hcloud-go v2 (3622bcc)
- btrfs volumes can not be formatted (#421) (#424) (be3fbc9)
- improve handling of metadata service connectivity (#466) (8ffa5fe)
Affordable, sustainable & powerful! 🚀You can now get one of our Arm64 CAX servers to optimize your operations while minimizing your costs! Discover Ampere’s efficient and robust Arm64 architecture and be ready to get blown away with its performance. 😎
Learn more: https://www.hetzner.com/news/arm64-cloud/
- fix(ci): correct image tag in generated k8s manifests by @samcday in #407
Full Changelog: https://github.com/hetznercloud/csi-driver/compare/v2.3.1...v2.3.2
Affordable, sustainable & powerful! 🚀You can now get one of our Arm64 CAX servers to optimize your operations while minimizing your costs! Discover Ampere’s efficient and robust Arm64 architecture and be ready to get blown away with its performance. 😎
Learn more: https://www.hetzner.com/news/arm64-cloud/
- fix(ci): qemu binfmt wrappers during release by @samcday in #406
Full Changelog: https://github.com/hetznercloud/csi-driver/compare/v2.3.0...v2.3.1
Affordable, sustainable & powerful! 🚀You can now get one of our Arm64 CAX servers to optimize your operations while minimizing your costs! Discover Ampere’s efficient and robust Arm64 architecture and be ready to get blown away with its performance. 😎
Learn more: https://www.hetzner.com/news/arm64-cloud/
- docs: Update README for v2.2.0 by @apricote in #388
- chore(ci): run e2e workflow on public workers by @samcday in #393
- Fix typo in Script: Remove quotes. by @guettli in #394
- Add volumeattachment script macos compatibility by @laurigates in #396
- Update README.md by @laurigates in #395
- Fix volumeattachment array by @laurigates in #397
- feat: new dev/test environment by @apricote in #401
- feat(goreleaser): produce OCI manifest images by @apricote in #402
- ci: fix goreleaser arguments by @apricote in #403
- feat: publish ARM container images by @apricote in #405
- @laurigates made their first contribution in #396
Full Changelog: https://github.com/hetznercloud/csi-driver/compare/v2.2.0...v2.3.0
- docs: Update README for v2.2.0 by @apricote in #388
- chore(ci): run e2e workflow on public workers by @samcday in #393
- Fix typo in Script: Remove quotes. by @guettli in #394
- Add volumeattachment script macos compatibility by @laurigates in #396
- Update README.md by @laurigates in #395
- Fix volumeattachment array by @laurigates in #397
- feat: new dev/test environment by @apricote in #401
- feat(goreleaser): produce OCI manifest images by @apricote in #402
- ci: fix goreleaser arguments by @apricote in #403
- @laurigates made their first contribution in #396
Full Changelog: https://github.com/hetznercloud/csi-driver/compare/v2.2.0...v2.3.0-rc.0
- feat(k8s): pull CSI sidecar images from registry.k8s.io #368 by @apricote in #371
- feat: add experimental Docker Swarm support by @s4ke in #376
- feat: use exponential backoff for action polling by @apricote in #380
- feat: add Grafana dashboard and ServiceMonitors by @apricote in #378
- feat: Separate server ID from location for controller by @NotTheEvilOne in #385
- docs: update README for v2.1.1 by @apricote in #367
- Relax volume integration test by @choffmeister in #366
- feat: set allow discards on luksOpen by @apricote in #370
- docs(v2): describe process to prepare VolumeAttachments by @apricote in #375
- deps: bump hcloud-go to 1.40.0 by @apricote in #379
- chore(deps): bump golang.org/x/net from 0.5.0 to 0.7.0 by @dependabot in #383
- ci(e2e): improve behaviour in spite of flakiness by @apricote in #386
- ci(e2e): fail fast on worker setup errors by @apricote in #387
Full Changelog: https://github.com/hetznercloud/csi-driver/compare/v2.1.1...v2.2.0
- Build the Docker image on any platform by @hakman in #309
- test: fix e2e suite for NixOS by @apricote in #338
- docs: document procedure to fix PVs broken with v2.0.0 by @apricote in #340
- docs: add missing link to script by @apricote in #341
- encrypted storageclass had the wrong names. reference to cryptsetup by @JustinGuese in #342
- fix(node): check for empty devicePath by @apricote in #344
- docs: describe how to activate debug logs by @apricote in #345
- refactor(skaffold): update manifests to match v2+ resources by @apricote in #348
- feat: test against Kubernetes v1.26 by @apricote in #350
- chore(deps): upgrade kubernetes-csi sidecars by @apricote in #351
- Update k8s sig-storage containers by @choffmeister in #354
- fix: Block volumes are formatted #349 by @apricote in #353
- Verify hcloud-csi.yml is up-to-date by @choffmeister in #356
- chore(e2e): update testdriver definition by @apricote in #360
- chore(deps): update golang.org/x/ dependencies by @apricote in #364
- chore(deps): upgrade go dependencies by @apricote in #365
Full Changelog: https://github.com/hetznercloud/csi-driver/compare/v2.1.0...v2.1.1
- fix: revert invalid topology changes #333 by @apricote in #335
Full Changelog: https://github.com/hetznercloud/csi-driver/compare/v2.0.1...v2.1.0
⚠️ This is a bugfix for #333, only update to this release if you are currently on v2.0.0. Otherwise check out the issue to learn which version you should install/upgrade to.
- fix: invalid topology label on new volumes #333 by @apricote in #334
Full Changelog: https://github.com/hetznercloud/csi-driver/compare/v2.0.0...v2.0.1
🛑 Version v2.0.0 contains a known bug that affects newly created volumes. Please upgrade directly to v2.1.0. Details are available in the issue #333.
1.6.0. Please see the Upgrading section in the README for details on the required steps.
- Include more information in request logging by @samcday in #237
- e2e test workflow improvements by @samcday in #234
- driver: fix panic when server is not found. by @jrasell in #249
- Use our own runners in E2E tests by @LKaemmerling in #252
- Remove unneeded privileges from CSI sidecars by @samcday in #235
- Use hcloud API for volume filesystem formatting by @samcday in #238
- Kustomization support and manifest simplification by @samcday in #223
- fix docs: taints vs label by @jleni in #257
- Update hcloud-csi.yml by @sui77 in #242
- [1/???] Split deployment manifests by @samcday in #261
- [2/???] Rework RBAC to only apply to CSI Controller by @samcday in #262
- [3/???] Switch Controller to Deployment, plus other tweaks by @samcday in #263
- [4/???] Remove hcloud API calls from most Node code paths by @samcday in #264
- [5/???] Split the driver into controller + node binaries by @samcday in #266
- [6/???] Simplify node resize by @samcday in #267
- Rename secret for hcloud api token to
hcloudby @LKaemmerling in #275 - [7/???] Remove HCLOUD_TOKEN from node DaemonSet by @samcday in #269
- [8/???] Remove Node Stage/Unstage capability by @samcday in #270
- Allow to configure the HCLOUD API Endpoint via Environment Variables. by @LKaemmerling in #277
- Add support for volume encryption with cryptsetup and LUKS by @choffmeister in #279
- Implement ListVolumes Call by @LKaemmerling in #292
- Add FSGroup to mount capabilities + update dependencies by @4ND3R50N in #296
- Updates Version Constraint by @mvhirsch in #291
- Update k8s support by @4ND3R50N in #298
- Add skaffold for local debugging + add "Local test setup" section to README.md by @4ND3R50N in #301
- ci: publish unstable docker image from main by @EternalDeiwos in #305
- Explicit docs: read+write API token is needed. by @guettli in #313
- StorageClass has cluster scope by @jlgeering in #317
- test: fix integration tests relying on specific byte amounts by @apricote in #322
- feat: test against Kubernetes v1.25 by @apricote in #321
- chore: upgrade all dependencies to latest version by @apricote in #326
- [enhancement] Use native kubernetes topology region label for volumes nodeAffinity by @maksim-paskal in #302
- fix: driver version not updated on tagged release by @apricote in #328
- docs: update README for v2.0.0 by @apricote in #329
- @jrasell made their first contribution in #249
- @jleni made their first contribution in #257
- @sui77 made their first contribution in #242
- @choffmeister made their first contribution in #279
- @4ND3R50N made their first contribution in #296
- @mvhirsch made their first contribution in #291
- @EternalDeiwos made their first contribution in #305
- @guettli made their first contribution in #311
- @jlgeering made their first contribution in #317
- @maksim-paskal made their first contribution in #302
Full Changelog: https://github.com/hetznercloud/csi-driver/compare/v1.6.0...v2.0.0
2ea4803 Add btrfs support 7719e45 Add exclude for blockstorage during resize (#211) 4a69641 Add k8s 1.22 to tests (#225) beb3783 Adjust stale bot to be more userfriendly (#217) 0de9bd9 CI improvements for speed and fork-friendliness. (#221) e07b392 Fix changelog generation 8cb0bfe Implement Instrumentation from hcloud-go (#227) c89c462 Increase default polling interval to 3 seconds. (#230) 11c9940 Make e2e workflow friendly to running on forks. (#214) 29893db Migrate Testsuite Setup to be in line with our CCM Testsuite (#219) 4ad4d69 Prepare release v1.6.0 (#231) cf4e7e4 Recognition of root servers (#195) c213244 Reduce default log verbosity to info level (#224) c74a95b Remove testing for k8s 1.18 as written in our Versioning policy. (#199) 8d1f531 Run e2e tests in parallel. (#215) da859e8 Simplify CSI socket handling (#222) 6164eaf Update README.md (#196) 140dad9 Update hcloud-go to v1.29.1 (#218) fb90575 Upgrade csi sidecars to latest versions. (#216) 54f573e Use Go 1.17 (#228) 5d2ac90 Use Goreleaser to publish changelog (#229)
- Update Go to 1.16
- Update csi driver container to alpine linux v3.13
- Update hcloud-go to 1.24.0
- Fix mounting idempotency issues
- Add correct deployment file for latest version
- Allow using the node name as node indicator instead of using the metadata service
- Allow to tune the log level using the
LOG_LEVELenvironment variable - Update k8s dependencies to v1.17.12
- Update Go to 1.15
- Update hcloud-go to 1.22.0
- Update csi driver container to alpine linux v3.12
- Note: As of this release all versions are end-to-end tested against the official Kubernetes testsuite, as a result a few smaller issues where fixed
- Allow mounting of Hetzner Cloud Volumes as raw block volumes.
- Add label (
app: hcloud-csi) tohcloud-csi-controller-metricsandhcloud-csi-node-metrics - Update to hcloud-go 1.18.0
- Fix stuck volume terminating when the volume was already deleted
- Add correct deployment file for latest version
- Update
csi-attachersidecar to v2.2.0 - Update
csi-provisionersidecar to v1.6.0 - Update
csi-node-driver-registrarsidecar to v1.3.0 - Add livenessProbe support
- Update Go to 1.14
- Reduce the amount of API calls from CSI driver
- Add option to configure the Action polling interval via
HCLOUD_POLLING_INTERVAL_SECONDS - Add option to enable the debug mode via
HCLOUD_DEBUG
- Add missing RBAC rules required for newer k8s version
- Install
e2fsprogs-extrafor resizing - Add better error handling and validation for certain errors related to wrong API tokens
- Fix usage of
Abortederror code, which leads to an increasing CPU usage
- Add missing RBAC rules required for newer k8s version
- Implement volume resizing
- Implement volume statistics
- Revert fix from v1.1.2 to retry attach/detach when server is locked
- Respect minimum volume size of 10 GB
- Detach volumes before deleting them
- Fix error handling for attaching/detaching volumes in case server is locked
- Improve logging
- Implement topology awareness (supporting nodes and volumes in different locations)
- Initial release