NFS-Provisioner: Add support to back NFS with volume claims

This ps adds the ability for the NFS-provisioner to use a volume
claim for providing storage for other services. This provides the
ability to provide read-write-many access backed by a
read-write-once storage class, in situations where such a
requirement exists.

Change-Id: I7dcf79b871fd4fa699ee4e3a50151a654f27761f
This commit is contained in:
portdirect 2017-12-18 10:37:49 -05:00
parent 8d309f5cff
commit dae9b82918
4 changed files with 76 additions and 5 deletions

View File

@ -73,7 +73,11 @@ spec:
fieldRef:
fieldPath: metadata.namespace
args:
{{ if empty .Values.storageclass.provisioner -}}
- "-provisioner=nfs/{{ .Release.Name }}"
{{- else -}}
- "-provisioner={{ .Values.storageclass.provisioner }}"
{{- end }}
- "-grace-period=10"
volumeMounts:
- name: export-volume
@ -81,6 +85,15 @@ spec:
volumes:
{{ tuple . | include "helm-toolkit.snippets.kubernetes_entrypoint_secret_mount" | indent 8 }}
- name: export-volume
{{- if eq .Values.storage.type "persistentVolumeClaim" }}
persistentVolumeClaim:
{{ if empty .Values.storage.persistentVolumeClaim.name -}}
claimName: {{ .Release.Name }}
{{- else -}}
claimName: {{ .Values.storage.persistentVolumeClaim.name }}
{{- end }}
{{- else if eq .Values.storage.type "hostPath" }}
hostPath:
path: {{ .Values.storage.host.host_path }}
path: {{ .Values.storage.hostPath.path }}
{{- end }}
{{- end }}

View File

@ -20,8 +20,16 @@ limitations under the License.
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
{{ if empty .Values.storageclass.name -}}
name: {{ .Release.Name }}
{{- else -}}
name: {{ .Values.storageclass.name }}
{{- end }}
{{ if empty .Values.storageclass.provisioner -}}
provisioner: nfs/{{ .Release.Name }}
{{- else -}}
provisioner: {{ .Values.storageclass.provisioner }}
{{- end }}
parameters:
mountOptions: vers=4.1
{{- end }}

View File

@ -0,0 +1,37 @@
{{/*
Copyright 2017 The Openstack-Helm Authors.
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
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/}}
{{- if .Values.manifests.volume_claim }}
{{- if eq .Values.storage.type "persistentVolumeClaim" }}
{{- $envAll := . }}
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
{{ if empty .Values.storage.persistentVolumeClaim.name -}}
name: {{ .Release.Name }}
{{- else -}}
name: {{ .Values.storage.persistentVolumeClaim.name }}
{{- end }}
spec:
accessModes:
- {{ .Values.storage.persistentVolumeClaim.access_mode }}
resources:
requests:
storage: {{ .Values.storage.persistentVolumeClaim.size }}
storageClassName: {{ .Values.storage.persistentVolumeClaim.class_name }}
{{- end }}
{{- end }}

View File

@ -57,16 +57,28 @@ images:
- image_repo_sync
storage:
host:
host_path: /var/lib/openstack-helm/nfs
type: hostPath
hostPath:
path: /var/lib/openstack-helm/nfs
persistentVolumeClaim:
access_mode: ReadWriteOnce
class_name: general
#NOTE(portdirect): Unless explicity set the PV name will be populated to
# match "{{ .Release.Name }}".
name: null
size: 10Gi
labels:
node_selector_key: openstack-control-plane
node_selector_value: enabled
storageclass:
provisioner: example.com/nfs
name: general
#NOTE(portdirect): Unless explicity set the provisioner name will be generated
# with the format "nfs/{{ .Release.Name }}"
provisioner: null
#NOTE(portdirect): Unless explicity set the PV name will be populated to
# match "{{ .Release.Name }}".
name: null
dependencies:
nfs:
@ -119,3 +131,4 @@ manifests:
service: true
serviceaccount: true
storage_class: true
volume_claim: true