Skip to content

Commit c862fb4

Browse files
authored
Merge pull request #126 from disperate/release/4.0.0-beta1
Release 4.0.0-beta1
2 parents 089ce8e + 5eff886 commit c862fb4

31 files changed

Lines changed: 2869 additions & 121 deletions

CHANGELOG.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,18 @@
11
## unreleased
22

3+
## v4.0.0-beta1 - 2026.02.27
4+
⚠️ See the [update instructions](https://github.com/cloudscale-ch/csi-cloudscale#from-csi-cloudscale-v3x-to-v4x).
5+
6+
**Breaking change:** This release **requires** Kubernetes VolumeSnapshot CRDs and the external snapshot controller to be installed **before** installing or upgrading this driver. Clusters without these components must install them first. Otherwise, snapshot-related operations and the snapshot resource in the Helm chart will fail to work.
7+
8+
* Add CSI snapshot support, including create, delete, list, and creating volumes from snapshots.
9+
* Add `VolumeSnapshotClass` and other snapshot-related resources to the Helm chart and examples. When using Helm, snapshot classes are now created from the `csi.snapshotClasses` configuration.
10+
* Cleaned up RBAC rules in Helm chart.
11+
* Update `github.com/cloudscale-ch/cloudscale-go-sdk` fron `v6.0.1` to `v7.0.0`.
12+
* Bump `google.golang.org/grpc` from `v1.77.0` to `v1.79.1`.
13+
* Bump `github.com/sirupsen/logrus` from `v1.9.3` to `v1.9.4`.
14+
* Bump `golang.org/x/sys` from `v0.39.0` to `v0.41.0`.
15+
316
## v3.6.0 - 2026.01.15
417

518
⚠️ **Update 2026.02.04: Breaking Change**

README.md

Lines changed: 42 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ Cloud Foundry. Feel free to test it on other COs and give us feedback.
1313
```shell
1414
# Add a cloudscale.ch API token as secret, replace the placeholder string starting with `a05...` with your own secret
1515
$ kubectl -n kube-system create secret generic cloudscale --from-literal=access-token=a05dd2f26b9b9ac2asdas__REPLACE_ME____123cb5d1ec17513e06da
16+
# If your cluster does not already provide them, install VolumeSnapshot CRDs and snapshot controller
17+
kubectl apply -k https://github.com/kubernetes-csi/external-snapshotter/client/config/crd?ref=v8.4.0
18+
kubectl apply -k https://github.com/kubernetes-csi/external-snapshotter/deploy/kubernetes/snapshot-controller?ref=v8.4.0
1619
# Add repository
1720
$ helm repo add csi-cloudscale https://cloudscale-ch.github.io/csi-cloudscale
1821
# Install driver
@@ -61,7 +64,7 @@ secret `my-pvc-luks-key`.
6164
## Releases
6265

6366
The cloudscale.ch CSI plugin follows [semantic versioning](https://semver.org/).
64-
The current version is: **`v3.6.0`**.
67+
The current version is: **`v4.0.0-beta1`**.
6568

6669
* Bug fixes will be released as a `PATCH` update.
6770
* New features (such as CSI spec bumps) will be released as a `MINOR` update.
@@ -89,14 +92,14 @@ We recommend using the latest cloudscale.ch CSI driver compatible with your Kube
8992
| 1.25 | v3.3.0 | v3.5.6 |
9093
| 1.26 | v3.3.0 | v3.5.6 |
9194
| 1.27 | v3.3.0 | v3.5.6 |
92-
| 1.28 | v3.3.0 | v3.6.0 |
93-
| 1.29 | v3.3.0 | v3.6.0 |
94-
| 1.30 | v3.3.0 | v3.6.0 |
95-
| 1.31 | v3.3.0 | v3.6.0 |
96-
| 1.32 | v3.3.0 | v3.6.0 |
97-
| 1.33 | v3.3.0 | v3.6.0 |
98-
| 1.34 [1] | v3.3.0 | v3.6.0 |
99-
| 1.35 | v3.4.1 | v3.6.0 |
95+
| 1.28 | v3.3.0 | v4.0.0-beta1 |
96+
| 1.29 | v3.3.0 | v4.0.0-beta1 |
97+
| 1.30 | v3.3.0 | v4.0.0-beta1 |
98+
| 1.31 | v3.3.0 | v4.0.0-beta1 |
99+
| 1.32 | v3.3.0 | v4.0.0-beta1 |
100+
| 1.33 | v3.3.0 | v4.0.0-beta1 |
101+
| 1.34 [1] | v3.3.0 | v4.0.0-beta1 |
102+
| 1.35 | v3.4.1 | v4.0.0-beta1 |
100103

101104
[1] Prometheus `kubelet_volume_stats_*` metrics not available in 1.34.0 and 1.34.1 due to a
102105
[bug in Kubelet](https://github.com/kubernetes/kubernetes/issues/133847). Fixed in `1.34.2`.
@@ -113,8 +116,22 @@ on `quay.io` and `k8s.gcr.io` container registries. Use `registry.k8s.io` instea
113116
* If you want to use LUKS encrypted volumes, the kernel on your nodes must have support for
114117
`device mapper` infrastructure with the `crypt target` and the appropriate cryptographic APIs
115118

119+
#### 1. Required Kubernetes Snapshot Components
116120

117-
#### 1. Create a secret with your cloudscale.ch API Access Token:
121+
Clusters running this driver version must have the VolumeSnapshot CRDs and snapshot controller installed.
122+
Some Kubernetes distributions already include these CRDs and controllers.
123+
You only need to apply them manually if your cluster does not provide them.
124+
125+
Install the snapshot resources using kustomize (recommended):
126+
```
127+
kubectl apply -k https://github.com/kubernetes-csi/external-snapshotter/client/config/crd?ref=v8.4.0
128+
kubectl apply -k https://github.com/kubernetes-csi/external-snapshotter/deploy/kubernetes/snapshot-controller?ref=v8.4.0
129+
```
130+
131+
When installing using the Helm chart, the `VolumeSnapshotClass` resources are created by the chart based on the `csi.snapshotClasses`
132+
configuration in `values.yaml`.
133+
134+
#### 2. Create a secret with your cloudscale.ch API Access Token:
118135

119136
Replace the placeholder string starting with `a05...` with your own secret and
120137
save it as `secret.yml`:
@@ -145,14 +162,14 @@ default-token-jskxx kubernetes.io/service-account-token 3 18h
145162
cloudscale Opaque 1 18h
146163
```
147164

148-
#### 2. Deploy the CSI plugin and sidecars:
165+
#### 3. Deploy the CSI plugin and sidecars:
149166

150167
You can install the CSI plugin and sidecars using one of the following methods:
151168
* Helm (requires a Helm installation)
152169
* YAML Manifests (only kubectl required)
153170

154171

155-
#### 2a. Using Helm:
172+
#### 3a. Using Helm:
156173

157174
Before you can install the csi-cloudscale chart, you need to add the helm repository:
158175

@@ -193,23 +210,23 @@ Note: if you want to test a debug/dev release, you can use the following command
193210
$ helm install -g -n kube-system --set controller.image.tag=dev --set node.image.tag=dev --set controller.image.pullPolicy=Always --set node.image.pullPolicy=Always ./charts/csi-cloudscale
194211
```
195212

196-
#### 2b. Using YAML Manifests:
213+
#### 3b. Using YAML Manifests:
197214

198215
Before you continue, be sure to checkout to a [tagged
199216
release](https://github.com/cloudscale-ch/csi-cloudscale/releases).
200217
Always use the [latest stable version](https://github.com/cloudscale-ch/csi-cloudscale/releases/latest)
201-
For example, to use the latest stable version (`v3.6.0`) you can execute the following command:
218+
For example, to use the latest stable version (`v4.0.0-beta1`) you can execute the following command:
202219

203220
```
204-
$ kubectl apply -f https://raw.githubusercontent.com/cloudscale-ch/csi-cloudscale/master/deploy/kubernetes/releases/csi-cloudscale-v3.6.0.yaml
221+
$ kubectl apply -f https://raw.githubusercontent.com/cloudscale-ch/csi-cloudscale/master/deploy/kubernetes/releases/csi-cloudscale-v4.0.0-beta1.yaml
205222
```
206223

207224
The storage classes `cloudscale-volume-ssd` and `cloudscale-volume-bulk` will be created. The
208225
storage class `cloudscale-volume-ssd` is set to **"default"** for dynamic provisioning. If you're
209226
using multiple storage classes you might want to remove the annotation and re-deploy it. This is
210227
based on the [recommended mechanism](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/storage/container-storage-interface.md#recommended-mechanism-for-deploying-csi-drivers-on-kubernetes) of deploying CSI drivers on Kubernetes
211228

212-
#### 3. Test and verify:
229+
#### 4. Test and verify:
213230

214231
Create a PersistentVolumeClaim. This makes sure a volume is created and provisioned on your behalf:
215232

@@ -307,6 +324,12 @@ When updating from csi-cloudscale v2.x to v3.x please note the following:
307324
* The `region` label will stay in place for existing nodes and not be added to new nodes. It
308325
can be safely removed from all nodes from a `csi-cloudscale` driver perspective.
309326

327+
### From csi-cloudscale v3.x to v4.x
328+
329+
Before upgrading, ensure that the Kubernetes VolumeSnapshot
330+
CRDs and snapshot controller are installed in the cluster.
331+
See [Required Kubernetes Snapshot Components](#1-required-kubernetes-snapshot-components).
332+
310333
## Advanced Configuration
311334

312335
Please use the following options with care.
@@ -422,15 +445,15 @@ $ git push origin
422445

423446
After it's merged to master, [create a new Github
424447
release](https://github.com/cloudscale-ch/csi-cloudscale/releases/new) from
425-
master with the version `v3.6.0` and then publish a new docker build:
448+
master with the version `v4.0.0-beta1` and then publish a new docker build:
426449

427450
```
428451
$ git checkout master
429452
$ make publish
430453
```
431454

432-
This will create a binary with version `v3.6.0` and docker image pushed to
433-
`cloudscalech/cloudscale-csi-plugin:v3.6.0`
455+
This will create a binary with version `v4.0.0-beta1` and docker image pushed to
456+
`cloudscalech/cloudscale-csi-plugin:v4.0.0-beta1`
434457

435458
### Release a pre-release version
436459

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
v3.6.0
1+
v4.0.0-beta1

charts/csi-cloudscale/Chart.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ apiVersion: v2
22
name: csi-cloudscale
33
description: A Container Storage Interface Driver for cloudscale.ch volumes.
44
type: application
5-
version: 1.4.0
6-
appVersion: "3.6.0"
5+
version: 1.5.0-beta1
6+
appVersion: "4.0.0-beta1"
77
home: https://github.com/cloudscale-ch/csi-cloudscale
88
sources:
99
- https://github.com/cloudscale-ch/csi-cloudscale.git

charts/csi-cloudscale/templates/rbac.yaml

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ metadata:
66
rules:
77
- apiGroups: [""]
88
resources: ["persistentvolumes"]
9-
verbs: ["get", "list", "watch", "create", "delete"]
9+
verbs: ["get", "list", "watch", "create", "patch", "delete"]
1010
- apiGroups: [""]
1111
resources: ["persistentvolumeclaims"]
1212
verbs: ["get", "list", "watch", "update"]
@@ -18,10 +18,13 @@ rules:
1818
verbs: ["list", "watch", "create", "update", "patch"]
1919
- apiGroups: ["snapshot.storage.k8s.io"]
2020
resources: ["volumesnapshots"]
21-
verbs: [ "get", "list", "watch", "update" ]
21+
verbs: ["get", "list", "watch", "update"]
2222
- apiGroups: ["snapshot.storage.k8s.io"]
2323
resources: ["volumesnapshotcontents"]
2424
verbs: ["get", "list"]
25+
- apiGroups: [ "coordination.k8s.io" ]
26+
resources: [ "leases" ]
27+
verbs: [ "get", "list", "watch", "create", "update", "patch", "delete" ]
2528
- apiGroups: [ "storage.k8s.io" ]
2629
resources: [ "csinodes" ]
2730
verbs: [ "get", "list", "watch" ]
@@ -52,6 +55,27 @@ rules:
5255
---
5356
kind: ClusterRole
5457
apiVersion: rbac.authorization.k8s.io/v1
58+
metadata:
59+
name: {{ include "csi-cloudscale.driver-name" . }}-snapshotter-role
60+
rules:
61+
- apiGroups: ["snapshot.storage.k8s.io"]
62+
resources: ["volumesnapshots"]
63+
verbs: [ "get", "list", "watch", "update" ]
64+
- apiGroups: ["snapshot.storage.k8s.io"]
65+
resources: ["volumesnapshotcontents"]
66+
verbs: [ "get", "list", "watch", "update", "patch" ]
67+
- apiGroups: [ "snapshot.storage.k8s.io" ]
68+
resources: [ "volumesnapshotcontents/status" ]
69+
verbs: [ "update", "patch" ]
70+
- apiGroups: [ "snapshot.storage.k8s.io" ]
71+
resources: [ "volumesnapshotclasses" ]
72+
verbs: [ "get", "list", "watch" ]
73+
- apiGroups: [""]
74+
resources: ["events"]
75+
verbs: ["list", "watch", "create", "update", "patch"]
76+
---
77+
kind: ClusterRole
78+
apiVersion: rbac.authorization.k8s.io/v1
5579
metadata:
5680
name: {{ include "csi-cloudscale.driver-name" . }}-resizer-role
5781
rules:
@@ -99,6 +123,19 @@ roleRef:
99123
---
100124
kind: ClusterRoleBinding
101125
apiVersion: rbac.authorization.k8s.io/v1
126+
metadata:
127+
name: {{ include "csi-cloudscale.driver-name" . }}-snapshotter-binding
128+
subjects:
129+
- kind: ServiceAccount
130+
name: {{ include "csi-cloudscale.controller-service-account-name" . }}
131+
namespace: {{ .Release.Namespace }}
132+
roleRef:
133+
kind: ClusterRole
134+
name: {{ include "csi-cloudscale.driver-name" . }}-snapshotter-role
135+
apiGroup: rbac.authorization.k8s.io
136+
---
137+
kind: ClusterRoleBinding
138+
apiVersion: rbac.authorization.k8s.io/v1
102139
metadata:
103140
name: {{ include "csi-cloudscale.driver-name" . }}-resizer-binding
104141
subjects:

charts/csi-cloudscale/templates/statefulset.yaml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,21 @@ spec:
7272
volumeMounts:
7373
- name: socket-dir
7474
mountPath: /var/lib/csi/sockets/pluginproxy/
75+
- name: csi-snapshotter
76+
image: "{{ .Values.snapshotter.image.registry }}/{{ .Values.snapshotter.image.repository }}:{{ .Values.snapshotter.image.tag }}"
77+
args:
78+
- "--csi-address=$(CSI_ENDPOINT)"
79+
- "--v={{ .Values.snapshotter.logLevelVerbosity }}"
80+
{{- with .Values.controller.resources }}
81+
resources:
82+
{{ toYaml . | indent 12 }}
83+
{{- end }}
84+
env:
85+
- name: CSI_ENDPOINT
86+
value: unix:///var/lib/csi/sockets/pluginproxy/csi.sock
87+
volumeMounts:
88+
- name: socket-dir
89+
mountPath: /var/lib/csi/sockets/pluginproxy/
7590
- name: csi-cloudscale-plugin
7691
image: "{{ .Values.controller.image.registry }}/{{ .Values.controller.image.repository }}:{{ .Values.controller.image.tag }}"
7792
args :
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{{- $csi := .Values.csi }}
2+
{{- $provisioner := .Values.provisioner }}
3+
{{- range $snapshotClass := $csi.snapshotClasses }}
4+
---
5+
apiVersion: snapshot.storage.k8s.io/v1
6+
kind: VolumeSnapshotClass
7+
metadata:
8+
name: {{ $snapshotClass.name }}
9+
{{- if $snapshotClass.isDefault }}
10+
annotations:
11+
snapshot.storage.kubernetes.io/is-default-class: "true"
12+
{{- end }}
13+
driver: {{ $provisioner.name }}
14+
deletionPolicy: {{ $snapshotClass.deletionPolicy | default "Delete" }}
15+
{{- if $snapshotClass.parameters }}
16+
parameters:
17+
{{- toYaml $snapshotClass.parameters | nindent 2 }}
18+
{{- end }}
19+
{{- end }}
20+

charts/csi-cloudscale/values.yaml

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,12 @@ csi:
3333
cipher: aes-xts-plain64
3434
keySize: 512
3535

36+
snapshotClasses:
37+
- name: cloudscale-snapshots
38+
deletionPolicy: Delete
39+
isDefault: false
40+
parameters: {}
41+
3642
provisioner:
3743
name: csi.cloudscale.ch
3844
image:
@@ -79,12 +85,29 @@ resizer:
7985
# cpu: 100m
8086
# memory: 128Mi
8187

88+
89+
90+
snapshotter:
91+
image:
92+
registry: registry.k8s.io
93+
repository: sig-storage/csi-snapshotter
94+
tag: v8.4.0
95+
pullPolicy: IfNotPresent
96+
logLevelVerbosity: "5"
97+
resources: {}
98+
# limits:
99+
# cpu: 100m
100+
# memory: 128Mi
101+
# requests:
102+
# cpu: 100m
103+
# memory: 128Mi
104+
82105
controller:
83106
replicas: 1
84107
image:
85108
registry: quay.io
86109
repository: cloudscalech/cloudscale-csi-plugin
87-
tag: v3.6.0
110+
tag: v4.0.0-beta1
88111
pullPolicy: IfNotPresent
89112
serviceAccountName:
90113
logLevel: info
@@ -100,7 +123,7 @@ node:
100123
image:
101124
registry: quay.io
102125
repository: cloudscalech/cloudscale-csi-plugin
103-
tag: v3.6.0
126+
tag: v4.0.0-beta1
104127
pullPolicy: IfNotPresent
105128
nodeSelector: {}
106129
tolerations: []

0 commit comments

Comments
 (0)