-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: add chart nfs-subdir-external-provisioner
- Loading branch information
1 parent
36ccd19
commit 33fc769
Showing
17 changed files
with
639 additions
and
0 deletions.
There are no files selected for viewing
Binary file added
BIN
+41.9 KB
assets/stacks/nfs-subdir-external-provisioner/nfs-subdir-external-provisioner.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
apiVersion: v1 | ||
appVersion: 4.0.2 | ||
annotations: | ||
artifacthub.io/images: | | ||
- name: nfs-subdir-external-provisioner | ||
image: registry.k8s.io/sig-storage/nfs-subdir-external-provisioner:v4.0.2 | ||
artifacthub.io/links: | | ||
- name: Chart Source | ||
url: https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner/tree/master/charts/nfs-subdir-external-provisioner | ||
description: nfs-subdir-external-provisioner is an automatic provisioner that used your *already configured* NFS server, automatically creating Persistent Volumes. | ||
name: nfs-subdir-external-provisioner | ||
home: https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner | ||
version: 4.0.18 | ||
kubeVersion: ">=1.9.0-0" | ||
icon: https://raw.githubusercontent.com/dellnoantechnp/helm-chart-xxl-job-admin/master/assets/stacks/nfs-subdir-external-provisioner/nfs-subdir-external-provisioner.png | ||
sources: | ||
- https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner | ||
keywords: | ||
- nfs | ||
- storage | ||
- provisioner |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,101 @@ | ||
# NFS Subdirectory External Provisioner Helm Chart | ||
|
||
The [NFS subdir external provisioner](https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner) is an automatic provisioner for Kubernetes that uses your *already configured* NFS server, automatically creating Persistent Volumes. | ||
|
||
## TL;DR; | ||
|
||
```console | ||
$ helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/ | ||
$ helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \ | ||
--set nfs.server=x.x.x.x \ | ||
--set nfs.path=/exported/path | ||
``` | ||
|
||
## Introduction | ||
|
||
This charts installs custom [storage class](https://kubernetes.io/docs/concepts/storage/storage-classes/) into a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager. It also installs a [NFS client provisioner](https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner) into the cluster which dynamically creates persistent volumes from single NFS share. | ||
|
||
## Prerequisites | ||
|
||
- Kubernetes >=1.9 | ||
- Existing NFS Share | ||
|
||
## Installing the Chart | ||
|
||
To install the chart with the release name `my-release`: | ||
|
||
```console | ||
$ helm install my-release nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \ | ||
--set nfs.server=x.x.x.x \ | ||
--set nfs.path=/exported/path | ||
``` | ||
|
||
The command deploys the given storage class in the default configuration. It can be used afterwards to provision persistent volumes. The [configuration](#configuration) section lists the parameters that can be configured during installation. | ||
|
||
> **Tip**: List all releases using `helm list` | ||
## Uninstalling the Chart | ||
|
||
To uninstall/delete the `my-release` deployment: | ||
|
||
```console | ||
$ helm delete my-release | ||
``` | ||
|
||
The command removes all the Kubernetes components associated with the chart and deletes the release. | ||
|
||
## Configuration | ||
|
||
The following tables lists the configurable parameters of this chart and their default values. | ||
|
||
| Parameter | Description | Default | | ||
| ------------------------------------ | ----------------------------------------------------------------------------------------------------- | ------------------------------------------------------------- | | ||
| `replicaCount` | Number of provisioner instances to deployed | `1` | | ||
| `strategyType` | Specifies the strategy used to replace old Pods by new ones | `Recreate` | | ||
| `image.repository` | Provisioner image | `registry.k8s.io/sig-storage/nfs-subdir-external-provisioner` | | ||
| `image.tag` | Version of provisioner image | `v4.0.2` | | ||
| `image.pullPolicy` | Image pull policy | `IfNotPresent` | | ||
| `imagePullSecrets` | Image pull secrets | `[]` | | ||
| `storageClass.name` | Name of the storageClass | `nfs-client` | | ||
| `storageClass.defaultClass` | Set as the default StorageClass | `false` | | ||
| `storageClass.allowVolumeExpansion` | Allow expanding the volume | `true` | | ||
| `storageClass.reclaimPolicy` | Method used to reclaim an obsoleted volume | `Delete` | | ||
| `storageClass.provisionerName` | Name of the provisionerName | null | | ||
| `storageClass.archiveOnDelete` | Archive PVC when deleting | `true` | | ||
| `storageClass.onDelete` | Strategy on PVC deletion. Overrides archiveOnDelete when set to lowercase values 'delete' or 'retain' | null | | ||
| `storageClass.pathPattern` | Specifies a template for the directory name | null | | ||
| `storageClass.accessModes` | Set access mode for PV | `ReadWriteOnce` | | ||
| `storageClass.volumeBindingMode` | Set volume binding mode for Storage Class | `Immediate` | | ||
| `storageClass.annotations` | Set additional annotations for the StorageClass | `{}` | | ||
| `leaderElection.enabled` | Enables or disables leader election | `true` | | ||
| `nfs.server` | Hostname of the NFS server (required) | null (ip or hostname) | | ||
| `nfs.path` | Basepath of the mount point to be used | `/nfs-storage` | | ||
| `nfs.mountOptions` | Mount options (e.g. 'nfsvers=3') | null | | ||
| `nfs.volumeName` | Volume name used inside the pods | `nfs-subdir-external-provisioner-root` | | ||
| `nfs.reclaimPolicy` | Reclaim policy for the main nfs volume used for subdir provisioning | `Retain` | | ||
| `resources` | Resources required (e.g. CPU, memory) | `{}` | | ||
| `rbac.create` | Use Role-based Access Control | `true` | | ||
| `podSecurityPolicy.enabled` | Create & use Pod Security Policy resources | `false` | | ||
| `podAnnotations` | Additional annotations for the Pods | `{}` | | ||
| `priorityClassName` | Set pod priorityClassName | null | | ||
| `serviceAccount.create` | Should we create a ServiceAccount | `true` | | ||
| `serviceAccount.name` | Name of the ServiceAccount to use | null | | ||
| `serviceAccount.annotations` | Additional annotations for the ServiceAccount | `{}` | | ||
| `nodeSelector` | Node labels for pod assignment | `{}` | | ||
| `affinity` | Affinity settings | `{}` | | ||
| `tolerations` | List of node taints to tolerate | `[]` | | ||
| `labels` | Additional labels for any resource created | `{}` | | ||
| `podDisruptionBudget.enabled` | Create and use Pod Disruption Budget | `false` | | ||
| `podDisruptionBudget.maxUnavailable` | Set maximum unavailable pods in the Pod Disruption Budget | `1` | | ||
|
||
## Install Multiple Provisioners | ||
|
||
It is possible to install more than one provisioner in your cluster to have access to multiple nfs servers and/or multiple exports from a single nfs server. Each provisioner must have a different `storageClass.provisionerName` and a different `storageClass.name`. For example: | ||
|
||
```console | ||
helm install second-nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \ | ||
--set nfs.server=y.y.y.y \ | ||
--set nfs.path=/other/exported/path \ | ||
--set storageClass.name=second-nfs-client \ | ||
--set storageClass.provisionerName=k8s-sigs.io/second-nfs-subdir-external-provisioner | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
nfs: | ||
server: 127.0.0.1 | ||
podSecurityPolicy: | ||
enabled: true | ||
buildMode: true |
103 changes: 103 additions & 0 deletions
103
charts/nfs-subdir-external-provisioner/templates/_helpers.tpl
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,103 @@ | ||
{{/* vim: set filetype=mustache: */}} | ||
{{/* | ||
Expand the name of the chart. | ||
*/}} | ||
{{- define "nfs-subdir-external-provisioner.name" -}} | ||
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} | ||
{{- end -}} | ||
|
||
{{/* | ||
Create a default fully qualified app name. | ||
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). | ||
If release name contains chart name it will be used as a full name. | ||
*/}} | ||
{{- define "nfs-subdir-external-provisioner.fullname" -}} | ||
{{- if .Values.fullnameOverride -}} | ||
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} | ||
{{- else -}} | ||
{{- $name := default .Chart.Name .Values.nameOverride -}} | ||
{{- if contains $name .Release.Name -}} | ||
{{- .Release.Name | trunc 63 | trimSuffix "-" -}} | ||
{{- else -}} | ||
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} | ||
{{- end -}} | ||
{{- end -}} | ||
{{- end -}} | ||
|
||
{{/* | ||
Create chart name and version as used by the chart label. | ||
*/}} | ||
{{- define "nfs-subdir-external-provisioner.chart" -}} | ||
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} | ||
{{- end -}} | ||
|
||
{{- define "nfs-subdir-external-provisioner.provisionerName" -}} | ||
{{- if .Values.storageClass.provisionerName -}} | ||
{{- printf .Values.storageClass.provisionerName -}} | ||
{{- else -}} | ||
cluster.local/{{ template "nfs-subdir-external-provisioner.fullname" . -}} | ||
{{- end -}} | ||
{{- end -}} | ||
|
||
{{/* | ||
Create the name of the service account to use | ||
*/}} | ||
{{- define "nfs-subdir-external-provisioner.serviceAccountName" -}} | ||
{{- if .Values.serviceAccount.create -}} | ||
{{ default (include "nfs-subdir-external-provisioner.fullname" .) .Values.serviceAccount.name }} | ||
{{- else -}} | ||
{{ default "default" .Values.serviceAccount.name }} | ||
{{- end -}} | ||
{{- end -}} | ||
|
||
{{/* | ||
Return the appropriate apiVersion for podSecurityPolicy. | ||
*/}} | ||
{{- define "podSecurityPolicy.apiVersion" -}} | ||
{{- if semverCompare ">=1.10-0" .Capabilities.KubeVersion.GitVersion -}} | ||
{{- print "policy/v1beta1" -}} | ||
{{- else -}} | ||
{{- print "extensions/v1beta1" -}} | ||
{{- end -}} | ||
{{- end -}} | ||
|
||
{{/* | ||
Return the appropriate apiVersion for podDisruptionBudget. | ||
*/}} | ||
{{- define "podDisruptionBudget.apiVersion" -}} | ||
{{- if semverCompare ">=1.21-0" .Capabilities.KubeVersion.GitVersion -}} | ||
{{- print "policy/v1" -}} | ||
{{- else -}} | ||
{{- print "policy/v1beta1" -}} | ||
{{- end -}} | ||
{{- end -}} | ||
|
||
{{/* | ||
Common labels | ||
*/}} | ||
{{- define "nfs-subdir-external-provisioner.labels" -}} | ||
chart: {{ template "nfs-subdir-external-provisioner.chart" . }} | ||
heritage: {{ .Release.Service }} | ||
{{ include "nfs-subdir-external-provisioner.selectorLabels" . }} | ||
{{- with .Values.labels }} | ||
{{- toYaml . | nindent 0 }} | ||
{{- end }} | ||
{{- end }} | ||
|
||
{{/* | ||
Pod template labels | ||
*/}} | ||
{{- define "nfs-subdir-external-provisioner.podLabels" -}} | ||
{{ include "nfs-subdir-external-provisioner.selectorLabels" . }} | ||
{{- with .Values.labels }} | ||
{{- toYaml . | nindent 0 }} | ||
{{- end }} | ||
{{- end }} | ||
|
||
{{/* | ||
Selector labels | ||
*/}} | ||
{{- define "nfs-subdir-external-provisioner.selectorLabels" -}} | ||
app: {{ template "nfs-subdir-external-provisioner.name" . }} | ||
release: {{ .Release.Name }} | ||
{{- end }} |
30 changes: 30 additions & 0 deletions
30
charts/nfs-subdir-external-provisioner/templates/clusterrole.yaml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
{{- if .Values.rbac.create }} | ||
kind: ClusterRole | ||
apiVersion: rbac.authorization.k8s.io/v1 | ||
metadata: | ||
labels: | ||
{{- include "nfs-subdir-external-provisioner.labels" . | nindent 4 }} | ||
name: {{ template "nfs-subdir-external-provisioner.fullname" . }}-runner | ||
rules: | ||
- apiGroups: [""] | ||
resources: ["nodes"] | ||
verbs: ["get", "list", "watch"] | ||
- apiGroups: [""] | ||
resources: ["persistentvolumes"] | ||
verbs: ["get", "list", "watch", "create", "delete"] | ||
- apiGroups: [""] | ||
resources: ["persistentvolumeclaims"] | ||
verbs: ["get", "list", "watch", "update"] | ||
- apiGroups: ["storage.k8s.io"] | ||
resources: ["storageclasses"] | ||
verbs: ["get", "list", "watch"] | ||
- apiGroups: [""] | ||
resources: ["events"] | ||
verbs: ["create", "update", "patch"] | ||
{{- if .Values.podSecurityPolicy.enabled }} | ||
- apiGroups: ['extensions'] | ||
resources: ['podsecuritypolicies'] | ||
verbs: ['use'] | ||
resourceNames: [{{ template "nfs-subdir-external-provisioner.fullname" . }}] | ||
{{- end }} | ||
{{- end }} |
16 changes: 16 additions & 0 deletions
16
charts/nfs-subdir-external-provisioner/templates/clusterrolebinding.yaml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
{{- if .Values.rbac.create }} | ||
kind: ClusterRoleBinding | ||
apiVersion: rbac.authorization.k8s.io/v1 | ||
metadata: | ||
labels: | ||
{{- include "nfs-subdir-external-provisioner.labels" . | nindent 4 }} | ||
name: run-{{ template "nfs-subdir-external-provisioner.fullname" . }} | ||
subjects: | ||
- kind: ServiceAccount | ||
name: {{ template "nfs-subdir-external-provisioner.serviceAccountName" . }} | ||
namespace: {{ .Release.Namespace }} | ||
roleRef: | ||
kind: ClusterRole | ||
name: {{ template "nfs-subdir-external-provisioner.fullname" . }}-runner | ||
apiGroup: rbac.authorization.k8s.io | ||
{{- end }} |
83 changes: 83 additions & 0 deletions
83
charts/nfs-subdir-external-provisioner/templates/deployment.yaml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,83 @@ | ||
apiVersion: apps/v1 | ||
kind: Deployment | ||
metadata: | ||
name: {{ template "nfs-subdir-external-provisioner.fullname" . }} | ||
labels: | ||
{{- include "nfs-subdir-external-provisioner.labels" . | nindent 4 }} | ||
spec: | ||
replicas: {{ .Values.replicaCount }} | ||
strategy: | ||
type: {{ .Values.strategyType }} | ||
selector: | ||
matchLabels: | ||
{{- include "nfs-subdir-external-provisioner.selectorLabels" . | nindent 6 }} | ||
template: | ||
metadata: | ||
annotations: | ||
{{- with .Values.podAnnotations }} | ||
{{- toYaml . | nindent 8 }} | ||
{{- end }} | ||
{{- if and (.Values.tolerations) (semverCompare "<1.6-0" .Capabilities.KubeVersion.GitVersion) }} | ||
scheduler.alpha.kubernetes.io/tolerations: '{{ toJson .Values.tolerations }}' | ||
{{- end }} | ||
labels: | ||
{{- include "nfs-subdir-external-provisioner.podLabels" . | nindent 8 }} | ||
spec: | ||
serviceAccountName: {{ template "nfs-subdir-external-provisioner.serviceAccountName" . }} | ||
securityContext: | ||
{{- toYaml .Values.podSecurityContext | nindent 8 }} | ||
{{- if .Values.nodeSelector }} | ||
nodeSelector: | ||
{{ toYaml .Values.nodeSelector | indent 8 }} | ||
{{- end }} | ||
{{- if .Values.affinity }} | ||
affinity: | ||
{{ toYaml .Values.affinity | indent 8 }} | ||
{{- end }} | ||
{{- if .Values.priorityClassName }} | ||
priorityClassName: {{ .Values.priorityClassName | quote }} | ||
{{- end }} | ||
{{- with .Values.imagePullSecrets }} | ||
imagePullSecrets: | ||
{{- toYaml . | nindent 8 }} | ||
{{- end }} | ||
containers: | ||
- name: {{ .Chart.Name }} | ||
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" | ||
imagePullPolicy: {{ .Values.image.pullPolicy }} | ||
securityContext: | ||
{{- toYaml .Values.securityContext | nindent 12 }} | ||
volumeMounts: | ||
- name: {{ .Values.nfs.volumeName }} | ||
mountPath: /persistentvolumes | ||
env: | ||
- name: PROVISIONER_NAME | ||
value: {{ template "nfs-subdir-external-provisioner.provisionerName" . }} | ||
- name: NFS_SERVER | ||
value: {{ .Values.nfs.server }} | ||
- name: NFS_PATH | ||
value: {{ .Values.nfs.path }} | ||
{{- if eq .Values.leaderElection.enabled false }} | ||
- name: ENABLE_LEADER_ELECTION | ||
value: "false" | ||
{{- end }} | ||
{{- with .Values.resources }} | ||
resources: | ||
{{ toYaml . | indent 12 }} | ||
{{- end }} | ||
volumes: | ||
- name: {{ .Values.nfs.volumeName }} | ||
{{- if .Values.buildMode }} | ||
emptyDir: {} | ||
{{- else if .Values.nfs.mountOptions }} | ||
persistentVolumeClaim: | ||
claimName: pvc-{{ template "nfs-subdir-external-provisioner.fullname" . }} | ||
{{- else }} | ||
nfs: | ||
server: {{ .Values.nfs.server }} | ||
path: {{ .Values.nfs.path }} | ||
{{- end }} | ||
{{- if and (.Values.tolerations) (semverCompare "^1.6-0" .Capabilities.KubeVersion.GitVersion) }} | ||
tolerations: | ||
{{ toYaml .Values.tolerations | indent 6 }} | ||
{{- end }} |
Oops, something went wrong.