You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@submarine.apache.org by pi...@apache.org on 2021/08/26 02:55:04 UTC

[submarine] branch master updated: SUBMARINE-990. Add helm templates to support storage class configurations

This is an automated email from the ASF dual-hosted git repository.

pingsutw pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/submarine.git


The following commit(s) were added to refs/heads/master by this push:
     new b73e60b  SUBMARINE-990. Add helm templates to support storage class configurations
b73e60b is described below

commit b73e60bfdd00c6ec4ddca39240b55e82b34d28d6
Author: Kenchu123 <k8...@gmail.com>
AuthorDate: Thu Aug 19 17:01:54 2021 +0800

    SUBMARINE-990. Add helm templates to support storage class configurations
    
    ### What is this PR for?
    <!-- A few sentences describing the overall goals of the pull request's commits.
    First time? Check out the contributing guide - https://submarine.apache.org/contribution/contributions.html
    -->
    
    From SUBMARINE-975, we can find out that the storage class configurations (provisioner, reclaim policy, etc) is unchangeable.
    
    By adding helm templates (`_helper.tpl`) and adding more values (`values.yaml`), we can use `helm install --set storageClass.provisioner=...` to change the default configurations of the storage class. Therefore, we can easily set up different configurations on different clusters such as kind.
    
    Docs for storage class: https://kubernetes.io/docs/concepts/storage/storage-classes/
    
    ### What type of PR is it?
    [Improvement]
    
    ### Todos
    * [x] - Add `_helpers.tpl` and storageClass fields values
    * [x] - Change pvc access mode to `ReadWriteOnce` since local provisioner only support this
    * [x] - Modify `README.md`
    
    ### What is the Jira issue?
    <!-- * Open an issue on Jira https://issues.apache.org/jira/browse/SUBMARINE/
    * Put link here, and add [SUBMARINE-*Jira number*] in PR title, eg. `SUBMARINE-23. PR title`
    -->
    https://issues.apache.org/jira/browse/SUBMARINE-990
    
    ### How should this be tested?
    <!--
    * First time? Setup Travis CI as described on https://submarine.apache.org/contribution/contributions.html#continuous-integration
    * Strongly recommended: add automated unit tests for any new or changed behavior
    * Outline any manual steps to test the PR here.
    -->
    
    For one using minikube, you don't need to make any changes since minikube provisioner is the default.
    
    For one using kind, you need to add `--set storageClass.provisioner=rancher.io/local-path --set storageClass.volumeBindingMode=WaitForFirstConsumer` in `helm install` command.
    
    For one using other storage class provisioners, you can simply set values in `values.yaml` or set with `--set` as above.
    
    ps. This only supports the submarine controlled by the submarine operator.
    
    ### Screenshots (if appropriate)
    
    `helm install submarine-operator ./helm-charts/submarine-operator --dry-run`
    
    ![Screen Shot 2021-08-19 at 5 26 15 PM](https://user-images.githubusercontent.com/17617373/130044532-35261e0f-ac4e-4206-a15c-e335f651a564.png)
    
    `helm install submarine-operator ./helm-charts/submarine-operator --set storageClass.provisioner=rancher.io/local-path --set storageClass.volumeBindingMode=WaitForFirstConsumer --dry-run`
    
    ![Screen Shot 2021-08-19 at 5 25 24 PM](https://user-images.githubusercontent.com/17617373/130044391-030eb1f7-bcf4-44c8-987f-0ef25cedb6d6.png)
    
    ### Questions:
    * Do the license files need updating? No
    * Are there breaking changes for older versions? No
    * Does this need new documentation? No
    
    Author: Kenchu123 <k8...@gmail.com>
    
    Signed-off-by: Kevin <pi...@apache.org>
    
    Closes #717 from Kenchu123/SUBMARINE-990 and squashes the following commits:
    
    f12570a6 [Kenchu123] SUBMARINE-990. Make submarine pvc accessMode to be ReadWriteOnce for local provisioner
    02d6b70d [Kenchu123] SUBMARINE-990. Add volumeBindingMode. Add templates to submarine helm install storageclass. Modify README.md.
    817ef59a [Kenchu123] SUBMARINE-990. Add helm templates to set up storage class configurations
---
 .../templates/storageclass.yaml                      |  0
 submarine-cloud-v2/README.md                         | 12 +++++++++++-
 .../{values.yaml => templates/_helpers.tpl}          | 20 ++++++++++++++++----
 .../submarine-operator/templates/storageclass.yaml   | 18 ++++++++++--------
 .../helm-charts/submarine-operator/values.yaml       | 11 +++++++++++
 .../pkg/controller/submarine_database.go             |  2 +-
 submarine-cloud-v2/pkg/controller/submarine_minio.go |  2 +-
 .../pkg/controller/submarine_mlflow.go               |  2 +-
 .../pkg/controller/submarine_tensorboard.go          |  2 +-
 9 files changed, 52 insertions(+), 17 deletions(-)

diff --git a/helm-charts/submarine/charts/notebook-controller/templates/storageclass.yaml b/helm-charts/submarine/templates/storageclass.yaml
similarity index 100%
rename from helm-charts/submarine/charts/notebook-controller/templates/storageclass.yaml
rename to helm-charts/submarine/templates/storageclass.yaml
diff --git a/submarine-cloud-v2/README.md b/submarine-cloud-v2/README.md
index 5c8e78e..4b7fbbc 100644
--- a/submarine-cloud-v2/README.md
+++ b/submarine-cloud-v2/README.md
@@ -16,10 +16,12 @@
 -->
 
 # submarine-cloud-v2 (submarine operator)
+
 `submarine-cloud-v2`, i.e. **submarine-operator**, implements the operator for Submarine application. The operator provides a new option for users to deploy the Submarine service to their Kubernetes clusters. The **submarine-operator** can fix some errors automatically. However, if the Submarine service is deployed with Helm, the errors need to be fixed by human operators.
 
 # Getting Started
-* In this section, we provide two methods, including **out-of-cluter** method and **in-cluster** method, for you to deploy your **submarine-operator**. In addition, the out-of-cluster method is convenient for operator developers. On the other hand, the in-cluster method is suitable for production.
+
+- In this section, we provide two methods, including **out-of-cluter** method and **in-cluster** method, for you to deploy your **submarine-operator**. In addition, the out-of-cluster method is convenient for operator developers. On the other hand, the in-cluster method is suitable for production.
 
 ## Initialization
 
@@ -32,6 +34,14 @@ go mod vendor
 minikube start --vm-driver=docker  --kubernetes-version v1.15.11
 ```
 
+## Set up storage class fields
+
+One can set up storage class fields in `values.yaml` or using helm with `--set`. We've set up minikube's provisioner for storage class as default.
+
+For example, if you are using kind in local, please add `--set storageClass.provisioner=rancher.io/local-path --set storageClass.volumeBindingMode=WaitForFirstConsumer` to helm install command.
+
+Documentation for storage class: https://kubernetes.io/docs/concepts/storage/storage-classes/
+
 ## Run operator out-of-cluster
 
 ```bash
diff --git a/submarine-cloud-v2/helm-charts/submarine-operator/values.yaml b/submarine-cloud-v2/helm-charts/submarine-operator/templates/_helpers.tpl
similarity index 63%
copy from submarine-cloud-v2/helm-charts/submarine-operator/values.yaml
copy to submarine-cloud-v2/helm-charts/submarine-operator/templates/_helpers.tpl
index 3b2d4e6..8f67df5 100644
--- a/submarine-cloud-v2/helm-charts/submarine-operator/values.yaml
+++ b/submarine-cloud-v2/helm-charts/submarine-operator/templates/_helpers.tpl
@@ -15,7 +15,19 @@
 # limitations under the License.
 #
 
-name: submarine-operator-demo
-replicas: 1
-image: apache/submarine:operator-0.6.0-SNAPSHOT
-dev: false
+{{/*
+Set up storage class fields
+*/}}
+{{ define "storageClass.fields" }}
+{{ with .Values.storageClass }}
+reclaimPolicy: {{ .reclaimPolicy | default "Delete" }}
+volumeBindingMode: {{ .volumeBindingMode | default "Immediate" }}
+provisioner: {{ .provisioner | default "k8s.io/minikube-hostpath" }}
+{{ if .parameters }}
+parameters:
+  {{ range $key, $val := .parameters }}
+  {{ $key }}: {{ $val | quote }}
+  {{ end }}
+{{ end }}
+{{ end }}
+{{ end }}
diff --git a/submarine-cloud-v2/helm-charts/submarine-operator/templates/storageclass.yaml b/submarine-cloud-v2/helm-charts/submarine-operator/templates/storageclass.yaml
index 6e29357..081f258 100644
--- a/submarine-cloud-v2/helm-charts/submarine-operator/templates/storageclass.yaml
+++ b/submarine-cloud-v2/helm-charts/submarine-operator/templates/storageclass.yaml
@@ -19,27 +19,29 @@ apiVersion: storage.k8s.io/v1
 kind: StorageClass
 metadata:
   name: submarine-database-sc
-provisioner: k8s.io/minikube-hostpath
-reclaimPolicy: Delete
+{{- template "storageClass.fields" . }}
 ---
 apiVersion: storage.k8s.io/v1
 kind: StorageClass
 metadata:
   name: submarine-tensorboard-sc
-provisioner: k8s.io/minikube-hostpath
-reclaimPolicy: Delete
+{{- template "storageClass.fields" . }}
 ---
 apiVersion: storage.k8s.io/v1
 kind: StorageClass
 metadata:
   name: submarine-mlflow-sc
-provisioner: k8s.io/minikube-hostpath
-reclaimPolicy: Delete
+{{- template "storageClass.fields" . }}
 ---
 apiVersion: storage.k8s.io/v1
 kind: StorageClass
 metadata:
   name: submarine-minio-sc
-provisioner: k8s.io/minikube-hostpath
-reclaimPolicy: Delete
+{{- template "storageClass.fields" . }}
+---
+apiVersion: storage.k8s.io/v1
+kind: StorageClass
+metadata:
+  name: notebook-storageclass
+{{- template "storageClass.fields" . }}
 
diff --git a/submarine-cloud-v2/helm-charts/submarine-operator/values.yaml b/submarine-cloud-v2/helm-charts/submarine-operator/values.yaml
index 3b2d4e6..373b685 100644
--- a/submarine-cloud-v2/helm-charts/submarine-operator/values.yaml
+++ b/submarine-cloud-v2/helm-charts/submarine-operator/values.yaml
@@ -18,4 +18,15 @@
 name: submarine-operator-demo
 replicas: 1
 image: apache/submarine:operator-0.6.0-SNAPSHOT
+# dev is to tell helm to install submarine-operator or not
 dev: false
+# storageClass is for dynamically creating persistent volumes
+storageClass:
+  # reclaimPolicy is to determine the action after the persistent volume is released
+  reclaimPolicy: Delete
+  # volumeBindingMode controls when volume binding and dynamically provisioning should occur
+  volumeBindingMode: Immediate
+  # provisioner is to determine what volume plugin is used for provisioning PVs
+  provisioner: k8s.io/minikube-hostpath
+  # parameters describe volumes belonging to the storage class
+  parameters:
diff --git a/submarine-cloud-v2/pkg/controller/submarine_database.go b/submarine-cloud-v2/pkg/controller/submarine_database.go
index d92a804..867179a 100644
--- a/submarine-cloud-v2/pkg/controller/submarine_database.go
+++ b/submarine-cloud-v2/pkg/controller/submarine_database.go
@@ -43,7 +43,7 @@ func newSubmarineDatabasePersistentVolumeClaim(submarine *v1alpha1.Submarine) *c
 		},
 		Spec: corev1.PersistentVolumeClaimSpec{
 			AccessModes: []corev1.PersistentVolumeAccessMode{
-				corev1.ReadWriteMany,
+				corev1.ReadWriteOnce,
 			},
 			Resources: corev1.ResourceRequirements{
 				Requests: corev1.ResourceList{
diff --git a/submarine-cloud-v2/pkg/controller/submarine_minio.go b/submarine-cloud-v2/pkg/controller/submarine_minio.go
index 7c0873c..0fb0121 100644
--- a/submarine-cloud-v2/pkg/controller/submarine_minio.go
+++ b/submarine-cloud-v2/pkg/controller/submarine_minio.go
@@ -45,7 +45,7 @@ func newSubmarineMinioPersistentVolumeClaim(submarine *v1alpha1.Submarine) *core
 		},
 		Spec: corev1.PersistentVolumeClaimSpec{
 			AccessModes: []corev1.PersistentVolumeAccessMode{
-				corev1.ReadWriteMany,
+				corev1.ReadWriteOnce,
 			},
 			Resources: corev1.ResourceRequirements{
 				Requests: corev1.ResourceList{
diff --git a/submarine-cloud-v2/pkg/controller/submarine_mlflow.go b/submarine-cloud-v2/pkg/controller/submarine_mlflow.go
index 1e5e8d5..33e6061 100644
--- a/submarine-cloud-v2/pkg/controller/submarine_mlflow.go
+++ b/submarine-cloud-v2/pkg/controller/submarine_mlflow.go
@@ -43,7 +43,7 @@ func newSubmarineMlflowPersistentVolumeClaim(submarine *v1alpha1.Submarine) *cor
 		},
 		Spec: corev1.PersistentVolumeClaimSpec{
 			AccessModes: []corev1.PersistentVolumeAccessMode{
-				corev1.ReadWriteMany,
+				corev1.ReadWriteOnce,
 			},
 			Resources: corev1.ResourceRequirements{
 				Requests: corev1.ResourceList{
diff --git a/submarine-cloud-v2/pkg/controller/submarine_tensorboard.go b/submarine-cloud-v2/pkg/controller/submarine_tensorboard.go
index cc71b25..e2a584e 100644
--- a/submarine-cloud-v2/pkg/controller/submarine_tensorboard.go
+++ b/submarine-cloud-v2/pkg/controller/submarine_tensorboard.go
@@ -45,7 +45,7 @@ func newSubmarineTensorboardPersistentVolumeClaim(submarine *v1alpha1.Submarine)
 		},
 		Spec: corev1.PersistentVolumeClaimSpec{
 			AccessModes: []corev1.PersistentVolumeAccessMode{
-				corev1.ReadWriteMany,
+				corev1.ReadWriteOnce,
 			},
 			Resources: corev1.ResourceRequirements{
 				Requests: corev1.ResourceList{

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@submarine.apache.org
For additional commands, e-mail: dev-help@submarine.apache.org