From dae9b829181249552980de090ec3043d5969b849 Mon Sep 17 00:00:00 2001 From: portdirect Date: Mon, 18 Dec 2017 10:37:49 -0500 Subject: [PATCH] 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 --- nfs-provisioner/templates/deployment.yaml | 15 +++++++- nfs-provisioner/templates/storage_class.yaml | 8 +++++ nfs-provisioner/templates/volume_claim.yaml | 37 ++++++++++++++++++++ nfs-provisioner/values.yaml | 21 ++++++++--- 4 files changed, 76 insertions(+), 5 deletions(-) create mode 100644 nfs-provisioner/templates/volume_claim.yaml diff --git a/nfs-provisioner/templates/deployment.yaml b/nfs-provisioner/templates/deployment.yaml index 3293d03e2..8c2670a27 100644 --- a/nfs-provisioner/templates/deployment.yaml +++ b/nfs-provisioner/templates/deployment.yaml @@ -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 }} diff --git a/nfs-provisioner/templates/storage_class.yaml b/nfs-provisioner/templates/storage_class.yaml index 1fa0c8946..038374891 100644 --- a/nfs-provisioner/templates/storage_class.yaml +++ b/nfs-provisioner/templates/storage_class.yaml @@ -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 }} diff --git a/nfs-provisioner/templates/volume_claim.yaml b/nfs-provisioner/templates/volume_claim.yaml new file mode 100644 index 000000000..a94170813 --- /dev/null +++ b/nfs-provisioner/templates/volume_claim.yaml @@ -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 }} diff --git a/nfs-provisioner/values.yaml b/nfs-provisioner/values.yaml index f3cc1cf80..cc72b60b1 100644 --- a/nfs-provisioner/values.yaml +++ b/nfs-provisioner/values.yaml @@ -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