Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

♻️ refactor: some chart improvments and optimizations #28

Open
wants to merge 8 commits into
base: develop
Choose a base branch
from
28 changes: 10 additions & 18 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,27 +31,19 @@ To use a Filesystem based 'extent file' as the emulated block device (i.e. a sof

### Prerequisites
---

- Kubernetes: 1.21+

## Installation

`helm install -n kube-system rawfile-csi ./deploy/charts/rawfile-csi/`

> Refer to chart's [README](./deploy/charts/rawfile-csi/README.md) to see the [values](./deploy/charts/rawfile-csi/values.yaml) documentation if you need to customize it

Usage
---

Create a `StorageClass` with your desired options:

```
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: my-sc
provisioner: rawfile.csi.openebs.io
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
```
You can create one or more storage classes using chart, by default we have a storage class named `rawfile-localpv`, but you can change the name or other options by changing chart values

Features
---
Expand All @@ -60,12 +52,12 @@ Features
- [x] Dynamic provisioning
- [x] Enforced volume size limit
- [x] Access Modes
- [x] ReadWriteOnce
- ~~ReadOnlyMany~~
- ~~ReadWriteMany~~
- [x] ReadWriteOnce
- ~~ReadOnlyMany~~
- ~~ReadWriteMany~~
- [ ] Volume modes
- [x] `Filesystem` mode
- [ ] `Block` mode
- [x] `Filesystem` mode
- [ ] `Block` mode
- [x] Volume metrics
- [x] Supports fsTypes: `ext4`, `btrfs`, `xfs`
- [x] Online expansion: If fs supports it (e.g. ext4, btrfs, xfs)
Expand All @@ -74,6 +66,6 @@ Features
- [ ] Ephemeral inline volume
- [x] Filesystem-level snapshots: `btrfs` supported


## License

[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fopenebs%2Frawfile-localpv.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fopenebs%2Frawfile-localpv?ref=badge_large)
1 change: 1 addition & 0 deletions deploy/charts/rawfile-csi/Chart.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,4 @@ description: RawFile Driver Container Storage Interface
type: application
version: 0.8.0
appVersion: 0.8.0
kubeVersion: ">= 1.21"
55 changes: 55 additions & 0 deletions deploy/charts/rawfile-csi/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
# rawfile-csi

![Version: 0.8.0](https://img.shields.io/badge/Version-0.8.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 0.8.0](https://img.shields.io/badge/AppVersion-0.8.0-informational?style=flat-square)

RawFile Driver Container Storage Interface

## Requirements

Kubernetes: `>= 1.21`

## Values

| Key | Type | Default | Description |
|-----|------|---------|-------------|
| controller.externalResizer.image.repository | string | `"registry.k8s.io/sig-storage/csi-resizer"` | Image Repository for `csi-resizer` |
| controller.externalResizer.image.tag | string | `"v1.2.0"` | Image tag for `csi-resizer` |
| controller.image.pullPolicy | string | `""` | Overrides default image pull policy for controller component |
| controller.image.repository | string | `""` | Overrides default image repository for controller component |
| controller.image.tag | string | `""` | Overrides default image tag for controller component |
| controller.priorityClassName | string | `"system-cluster-critical"` | priorityClassName for controller component since this part is critical for cluster `system-cluster-critical` is default |
| controller.resources | object | `{}` | Overrides default resources for controller component |
| controller.tolerations | list | `[{"effect":"NoSchedule","key":"node-role.kubernetes.io/master","operator":"Equal","value":"true"}]` | Tolerations for controller component |
| global.image.pullPolicy | string | `"IfNotPresent"` | Default image pull policy for node and controller components |
| global.image.repository | string | `"docker.io/openebs/rawfile-localpv"` | Default image repository for node and controller components |
| global.image.tag | string | `""` | Default image tag for node and controller components (uses AppVersion if empty) |
| global.resources.limits.cpu | int | `1` | Default CPU Limit for node and controller components |
| global.resources.limits.memory | string | `"100Mi"` | Default Memory Limit for node and controller components |
| global.resources.requests.cpu | string | `"10m"` | Default CPU Request (Guaranty) for node and controller components |
| global.resources.requests.memory | string | `"100Mi"` | Default Memory Request (Guaranty) for node and controller components |
| imagePullSecrets | list | `[]` | Sets image pull secret while pulling images from a private registry |
| metrics.enabled | bool | `true` | Completely enable or disable metrics |
| metrics.port | int | `9100` | Sets metrics port |
| metrics.serviceMonitor.enabled | bool | `false` | Enables prometheus service monitor |
| metrics.serviceMonitor.interval | string | `"1m"` | Sets prometheus target interval |
| node.dataDirPath | string | `"/var/csi/rawfile"` | Data dir path for provisioner to be used by provisioner |
| node.driverRegistrar.image.repository | string | `"registry.k8s.io/sig-storage/csi-node-driver-registrar"` | Image Repository for `csi-node-driver-registrar` |
| node.driverRegistrar.image.tag | string | `"v2.2.0"` | Image Tag for `csi-node-driver-registrar` |
| node.externalProvisioner.image.repository | string | `"registry.k8s.io/sig-storage/csi-provisioner"` | Image Repository for `csi-provisioner` |
| node.externalProvisioner.image.tag | string | `"v2.2.2"` | Image Tag for `csi-provisioner` |
| node.externalSnapshotter.image.repository | string | `"registry.k8s.io/sig-storage/csi-snapshotter"` | Image Repository for `csi-snapshotter` |
| node.externalSnapshotter.image.tag | string | `"v5.0.1"` | Image Tag for `csi-snapshotter` |
| node.image.pullPolicy | string | `""` | Overrides default image pull policy for node component |
| node.image.repository | string | `""` | Overrides default image repository for node component |
| node.image.tag | string | `""` | Overrides default image tag for node component |
| node.metrics.enabled | bool | `false` | |
| node.priorityClassName | string | `"system-node-critical"` | priorityClassName for node component since this part is critical for node `system-node-critical` is default |
| node.resources | object | `{}` | Overrides default resources for node component |
| node.tolerations | list | `[{"operator":"Exist"}]` | Tolerations for node component |
| provisionerName | string | `"rawfile.csi.openebs.io"` | Name of the registered CSI Driver in cluster |
| storageClasses[0].allowVolumeExpansion | bool | `true` | volumes are able to expand/resize or not? |
| storageClasses[0].enabled | bool | `true` | Enable or disable StorageClass |
| storageClasses[0].name | string | `"rawfile-localpv"` | Name of the StorageClass |
| storageClasses[0].reclaimPolicy | string | `"Delete"` | Sets default reclaimPolicy for StorageClass volumes |
| storageClasses[0].volumeBindingMode | string | `"WaitForFirstConsumer"` | Sets volumeBindingMode for StorageClass |

23 changes: 11 additions & 12 deletions deploy/charts/rawfile-csi/templates/01-controller-plugin.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -28,19 +28,16 @@ spec:
labels: *selectorLabels
spec:
serviceAccount: {{ include "rawfile-csi.fullname" . }}-driver
priorityClassName: system-cluster-critical
priorityClassName: {{ .Values.controller.priorityClassName }}
tolerations:
- key: "node-role.kubernetes.io/master"
operator: Equal
value: "true"
effect: NoSchedule
{{- .Values.controller.tolerations | toYaml | nindent 8 }}
volumes:
- name: socket-dir
emptyDir: {}
containers:
- name: csi-driver
image: "{{ .Values.controller.image.repository }}:{{ .Values.controller.image.tag }}"
imagePullPolicy: {{ .Values.controller.image.pullPolicy }}
image: "{{ include "rawfile-csi.controller-image" . }}"
imagePullPolicy: "{{ include "rawfile-csi.controller-pull-policy" . }}"
args:
- csi-driver
- --disable-metrics
Expand All @@ -49,11 +46,13 @@ spec:
value: "{{ .Values.provisionerName }}"
- name: CSI_ENDPOINT
value: unix:///csi/csi.sock
- name: NODE_DATADIR
value: "{{ .Values.node.dataDirPath }}"
- name: IMAGE_REPOSITORY
value: "{{ .Values.controller.image.repository }}"
{{- if regexMatch "^.*-ci$" .Values.controller.image.tag }}
value: "{{ include "rawfile-csi.controller-image-repository" . }}"
{{- if regexMatch "^.*-ci$" (include "rawfile-csi.controller-image-tag" .) }}
- name: IMAGE_TAG
value: "{{ .Values.controller.image.tag }}"
value: "{{ include "rawfile-csi.controller-image-tag" . }}"
{{- end }}
volumeMounts:
- name: socket-dir
Expand All @@ -62,9 +61,9 @@ spec:
- name: csi-probe
containerPort: 9808
resources:
{{- toYaml .Values.controller.resources | nindent 12 }}
{{- include "rawfile-csi.controller-resources" . | nindent 12 }}
- name: external-resizer
image: k8s.gcr.io/sig-storage/csi-resizer:v1.2.0
image: {{ printf "%s:%s" .Values.controller.externalResizer.image.repository .Values.controller.externalResizer.image.tag }}
imagePullPolicy: IfNotPresent
args:
- "--csi-address=$(ADDRESS)"
Expand Down
34 changes: 20 additions & 14 deletions deploy/charts/rawfile-csi/templates/01-node-plugin.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ spec:
type: ClusterIP
ports:
- name: metrics
port: 9100
port: {{ .Values.metrics.port }}
targetPort: metrics
protocol: TCP
selector:
Expand All @@ -33,9 +33,9 @@ spec:
labels: *selectorLabels
spec:
serviceAccount: {{ include "rawfile-csi.fullname" . }}-driver
priorityClassName: system-node-critical
priorityClassName: {{ .Values.node.priorityClassName }}
tolerations:
- operator: "Exists"
{{- .Values.node.tolerations | toYaml | nindent 8 }}
volumes:
- name: registration-dir
hostPath:
Expand All @@ -51,33 +51,39 @@ spec:
type: DirectoryOrCreate
- name: data-dir
hostPath:
path: /var/csi/rawfile
path: {{ .Values.node.dataDirPath }}
type: DirectoryOrCreate
containers:
- name: csi-driver
image: "{{ .Values.node.image.repository }}:{{ .Values.node.image.tag }}"
imagePullPolicy: {{ .Values.node.image.pullPolicy }}
image: "{{ include "rawfile-csi.node-image" . }}"
imagePullPolicy: "{{ include "rawfile-csi.node-pull-policy" . }}"
securityContext:
privileged: true
env:
- name: PROVISIONER_NAME
value: "{{ .Values.provisionerName }}"
- name: NODE_DATADIR
value: "{{ .Values.node.dataDirPath }}"
- name: CSI_ENDPOINT
value: unix:///csi/csi.sock
- name: IMAGE_REPOSITORY
value: "{{ .Values.node.image.repository }}"
{{- if regexMatch "^.*-ci$" .Values.node.image.tag }}
value: "{{ include "rawfile-csi.node-image-repository" . }}"
{{- if regexMatch "^.*-ci$" (include "rawfile-csi.node-image-tag" .) }}
- name: IMAGE_TAG
value: "{{ .Values.node.image.tag }}"
value: "{{ include "rawfile-csi.node-image-tag" . }}"
{{- end }}
- name: NODE_ID
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: spec.nodeName
- name: ENABLE_METRICS
value: {{ .Values.metrics.enabled | toString | quote }}
- name: METRICS_PORT
value: {{ .Values.metrics.port | toString | quote }}
ports:
- name: metrics
containerPort: 9100
containerPort: {{ .Values.metrics.port }}
- name: csi-probe
containerPort: 9808
volumeMounts:
Expand All @@ -89,9 +95,9 @@ spec:
- name: data-dir
mountPath: /data
resources:
{{- toYaml .Values.node.resources | nindent 12 }}
{{- include "rawfile-csi.controller-resources" . | nindent 12 }}
- name: node-driver-registrar
image: k8s.gcr.io/sig-storage/csi-node-driver-registrar:v2.2.0
image: {{ printf "%s:%s" .Values.node.driverRegistrar.image.repository .Values.node.driverRegistrar.image.tag }}
imagePullPolicy: IfNotPresent
args:
- --csi-address=$(ADDRESS)
Expand Down Expand Up @@ -124,7 +130,7 @@ spec:
cpu: 10m
memory: 100Mi
- name: external-provisioner
image: k8s.gcr.io/sig-storage/csi-provisioner:v2.2.2
image: {{ printf "%s:%s" .Values.node.externalProvisioner.image.repository .Values.node.externalProvisioner.image.tag }}
imagePullPolicy: IfNotPresent
args:
- "--csi-address=$(ADDRESS)"
Expand Down Expand Up @@ -154,7 +160,7 @@ spec:
- name: socket-dir
mountPath: /csi
- name: external-snapshotter
image: gcr.io/k8s-staging-sig-storage/csi-snapshotter:v5.0.1
image: {{ printf "%s:%s" .Values.node.externalSnapshotter.image.repository .Values.node.externalSnapshotter.image.tag }}
imagePullPolicy: IfNotPresent
args:
- "--csi-address=$(ADDRESS)"
Expand Down
4 changes: 3 additions & 1 deletion deploy/charts/rawfile-csi/templates/01-servicemonitor.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
{{- if .Values.serviceMonitor.enabled }}
{{- if .Values.metrics.enabled }}
{{- if .Values.metrics.serviceMonitor.enabled }}
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
Expand All @@ -19,3 +20,4 @@ spec:
{{- include "rawfile-csi.selectorLabels" . | nindent 6 }}
component: node
{{- end }}
{{- end }}
14 changes: 14 additions & 0 deletions deploy/charts/rawfile-csi/templates/01-storage-class.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{{- $vals := .Values }}
{{- range $class := .Values.storageClasses }}
{{- if $class.enabled }}
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: {{ $class.name }}
provisioner: {{ $vals.provisionerName }}
reclaimPolicy: {{ $class.reclaimPolicy }}
volumeBindingMode: {{ $class.volumeBindingMode }}
allowVolumeExpansion: {{ $class.allowVolumeExpansion }}
---
{{- end }}
{{- end }}
49 changes: 49 additions & 0 deletions deploy/charts/rawfile-csi/templates/_helpers.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -61,3 +61,52 @@ Create the name of the service account to use
{{- default "default" .Values.serviceAccount.name }}
{{- end }}
{{- end }}

{{/*
Some helpers to handle image global information
*/}}
{{- define "rawfile-csi.controller-image-tag" -}}
{{- $imageTag := .Values.controller.image.tag | default (.Values.global.image.tag | default .Chart.AppVersion) }}
{{- printf "%s" $imageTag }}
{{- end }}

{{- define "rawfile-csi.controller-image-repository" -}}
{{- $imageRepo := (.Values.controller.image.repository | default .Values.global.image.repository) }}
{{- printf "%s" $imageRepo }}
{{- end }}

{{- define "rawfile-csi.controller-image" -}}
{{- $imageTag := .Values.controller.image.tag | default (.Values.global.image.tag | default .Chart.AppVersion) }}
{{- printf "%s:%s" (include "rawfile-csi.controller-image-repository" .) (include "rawfile-csi.controller-image-tag" .) }}
{{- end }}

{{- define "rawfile-csi.controller-pull-policy" -}}
{{- printf "%s" (.Values.controller.image.pullPolicy | default .Values.global.image.pullPolicy) }}
{{- end }}

{{- define "rawfile-csi.controller-resources" -}}
{{- toYaml (.Values.controller.resources | default .Values.global.resources) }}
{{- end }}

{{- define "rawfile-csi.node-image-tag" -}}
{{- $imageTag := .Values.node.image.tag | default (.Values.global.image.tag | default .Chart.AppVersion) }}
{{- printf "%s" $imageTag }}
{{- end }}

{{- define "rawfile-csi.node-image-repository" -}}
{{- $imageRepo := (.Values.node.image.repository | default .Values.global.image.repository) }}
{{- printf "%s" $imageRepo }}
{{- end }}

{{- define "rawfile-csi.node-image" -}}
{{- $imageTag := .Values.node.image.tag | default (.Values.global.image.tag | default .Chart.AppVersion) }}
{{- printf "%s:%s" (include "rawfile-csi.node-image-repository" .) (include "rawfile-csi.node-image-tag" .) }}
{{- end }}

{{- define "rawfile-csi.node-pull-policy" -}}
{{- printf "%s" (.Values.node.image.pullPolicy | default .Values.global.image.pullPolicy) }}
{{- end }}

{{- define "rawfile-csi.node-resources" -}}
{{- toYaml (.Values.node.resources | default .Values.global.resources) }}
{{- end }}
Loading