Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/f41gh7/vcd-csi
virtual cloud director Container Storage Interface for kubernetes
https://github.com/f41gh7/vcd-csi
csi kubernetes kubernetes-csi vcd-csi vcloud-csi vcloud-director vcloud-director-csi
Last synced: 8 days ago
JSON representation
virtual cloud director Container Storage Interface for kubernetes
- Host: GitHub
- URL: https://github.com/f41gh7/vcd-csi
- Owner: f41gh7
- Created: 2020-04-19T18:28:14.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2023-02-25T04:13:49.000Z (over 1 year ago)
- Last Synced: 2024-06-19T23:14:23.609Z (5 months ago)
- Topics: csi, kubernetes, kubernetes-csi, vcd-csi, vcloud-csi, vcloud-director, vcloud-director-csi
- Language: Go
- Size: 70.3 KB
- Stars: 6
- Watchers: 3
- Forks: 1
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# vCloud director CSI controller
CSI for vCloud director, it uses independent disks for volume and attach/detach it.
inspired by https://github.com/flant/yandex-csi-driver
## quick start
- ensure that kubectl get nodes and vm name at VDC is the same
- label node for each vdc
```bash
kubectl label node nod1 failure-domain.beta.kubernetes.io/zone=some-vdc
```
- create secret for access cloud - you can find example at deploy/secret.yaml
```yaml
apiVersion: v1
kind: Secret
metadata:
name: vcd-csi-credentials
namespace: kube-system
stringData:
USER: some-user
PASSWOR: some-password
ORG: Org-Name
VDCS: some-vdc
HREF: https://vcd.cloud/api```
- create rbac
```bash
kubectl apply -f deploy/rbac.yaml
```
- create controller
```bash
kubectl apply -f deploy/controller.yaml
```
- create storage class
```yaml
---
apiVersion: storage.k8s.io/v1beta1
kind: StorageClass
metadata:
name: base-hdd
annotations:
storageclass.kubernetes.io/is-default-class: "true"
provisioner: vcd.csi.fght.net
parameters:
vcd: some-vdc
storageProfile: hdd
allowVolumeExpansion: true
volumeBindingMode: WaitForFirstConsumer
```
- edit node daemon set deploy/ds.yaml
```bash
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: "topology.kubernetes.io/zone"
operator: In
values:
- "some-vdc"
```
and for csi-node
```yaml
- name: VCSI_NODEVDC
value: some-vdc```
## settings
- csi controller uses env vars for config, you can find it at vars.MD
- parameter for storage profile must be definened at storage class creation
## limitations
- for disk resize you must edit pvc, then delete pod from node, disk will be detached and resized
- vm disk controllers cannot containt attached disk for units 8-15, it reserved for CSI
- so maximum attached disk per vm is 8
- tested at ubuntu 16 with Paravirtual SCSI only
- computer name at vdc vapp MUST match k8s node name
- permissions - csi wants admin permissions at vdc
- for multiple vdcs you have to provide it as list ```VCSI_VDCS=vcd-1,vcd-2``` at secret
and tag node + vdc name topology tag
- zone-aware - VDC name
so common practice to run different daemonsets
for each VDC with node affinity## requirements
- Docker mount propagtion = shared
- kubernetes 14+, --allow-privileged
- feature gate ```KubeletPluginsWatcher=true,CSINodeInfo=true,CSIDriverRegistry=true```# known problems
Its hard to link attacheted to VM disk, currently there is filter:
- list matched by unit number for PCI: bus, it must contain unit number
from vm setting
so unit numbers from 8 to 15 reserved for all controllers.
But there can be collisions, so whats the solution? use different vm for disk or change disk size..
Unfortunately Bus number at VM settings isnt reliable. Looking for best solution.## developing
- you need go1.13+
- vcd connections for integration tests## todo
- leader election and clustering for controller
- volume expand (seems like we need distributed lock)
- more test## testing
make test
https://github.com/kubernetes-csi/csi-test/blob/master/pkg/sanity/README.md