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