This repository provides a Container Storage Interface (CSI) plugin for Apache CloudStack.
-
Minimal Kubernetes version: v1.25
-
The Kubernetes cluster must run in CloudStack. Tested only in a KVM zone.
-
A disk offering with custom size must be available, with type "shared".
-
In order to match the Kubernetes node and the CloudStack instance, they should both have the same name. If not, it is also possible to use cloud-init instance metadata to get the instance name: if the node has cloud-init enabled, metadata will be available in
/run/cloud-init/instance-data.json
; you should then make sure that/run/cloud-init/
is mounted from the node. -
Kubernetes nodes must be in the Root domain, and be created by the CloudStack account whose credentials are used in configuration.
Create the CloudStack configuration file cloud-config
.
It should have the following format, defined for the CloudStack Kubernetes Provider:
[Global]
api-url = <CloudStack API URL>
api-key = <CloudStack API Key>
secret-key = <CloudStack API Secret>
ssl-no-verify = <Disable SSL certificate validation: true or false (optional)>
Create a secret named cloudstack-secret
in namespace kube-system
:
kubectl create secret generic \
--namespace kube-system \
--from-file ./cloud-config \
cloudstack-secret
If you have also deployed the CloudStack Kubernetes Provider, you may use the same secret for both tools.
kubectl apply -f https://github.com/shapeblue/cloudstack-csi-driver/releases/latest/download/manifest.yaml
A storage class can be created manually: see example.
The provisioner
value must be csi.cloudstack.apache.org
.
The volumeBindingMode
must be WaitForFirstConsumer
, in order to delay the
binding and provisioning of a PersistentVolume until a Pod using the
PersistentVolumeClaim is created. It enables the provisioning of volumes
in respect to topology constraints (e.g. volume in the right zone).
The storage class must also have a parameter named
csi.cloudstack.apache.org/disk-offering-id
whose value is the CloudStack disk
offering ID.
The tool cloudstack-csi-sc-syncer
may also be used to synchronize CloudStack
disk offerings to Kubernetes storage classes.
Example:
kubectl apply -f ./examples/k8s/pvc.yaml
kubectl apply -f ./examples/k8s/pod.yaml
To build the driver binary:
make build-cloudstack-csi-driver
To build the container images:
make container
- CloudStack Kubernetes Provider - Kubernetes Cloud Controller Manager for Apache CloudStack
- CloudStack documentation on storage
- CSI (Container Storage Interface) specification
Apalia SAS originally started the CloudStack CSI Driver project, which was later forked and progressed by several members of the CloudStack community, notably Leaseweb.
This repository attempts to widen the scope of the original project to make it work across hypervisors (KVM, VMware, XenServer/XCP-ng) and add support for domains, projects, CKS, CAPC, and advanced storage operations such as volume snapshots.
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