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 <k889...@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 <k889...@gmail.com> Signed-off-by: Kevin <pings...@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-unsubscr...@submarine.apache.org For additional commands, e-mail: dev-h...@submarine.apache.org