Skip to content

Commit

Permalink
Use a configmap generator for the spawner_ui_config.yaml (#1013)
Browse files Browse the repository at this point in the history
* Use a configmap generator for the spawner_ui_config.yaml

* Using a configmap generator is a bit cleaner because we can store
  the configuration file in a external file rather than inlining it in
  the config map.

* Using a configmap generator also has the advantage that kustomize will
  generate a unique name based on a hash of the content.

  * This has the advantage that if a user updates the config, the hash
    would change so deployments would automatically be redeployed in order
    to pick up the config changes.

* Also update the default image used in the configmap to fix #1010

* Rebase and regenerate the tests.

* * The deployment for the UI needs to use the original name of
  the jupyter web app config map without the prefix/suffix.

* Update expected tests.
  • Loading branch information
jlewi authored Mar 27, 2020
1 parent 044a4e1 commit bba06d9
Show file tree
Hide file tree
Showing 8 changed files with 142 additions and 144 deletions.
134 changes: 0 additions & 134 deletions jupyter/jupyter-web-app/base/config-map.yaml

This file was deleted.

128 changes: 128 additions & 0 deletions jupyter/jupyter-web-app/base/configs/spawner_ui_config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
# Configuration file for the Jupyter UI.
#
# Each Jupyter UI option is configured by two keys: 'value' and 'readOnly'
# - The 'value' key contains the default value
# - The 'readOnly' key determines if the option will be available to users
#
# If the 'readOnly' key is present and set to 'true', the respective option
# will be disabled for users and only set by the admin. Also when a
# Notebook is POSTED to the API if a necessary field is not present then
# the value from the config will be used.
#
# If the 'readOnly' key is missing (defaults to 'false'), the respective option
# will be available for users to edit.
#
# Note that some values can be templated. Such values are the names of the
# Volumes as well as their StorageClass
spawnerFormDefaults:
image:
# The container Image for the user's Jupyter Notebook
# If readonly, this value must be a member of the list below
value: gcr.io/kubeflow-images-public/tensorflow-1.15.2-notebook-cpu:1.0.0
# The list of available standard container Images
options:
- gcr.io/kubeflow-images-public/tensorflow-1.15.2-notebook-cpu:1.0.0
- gcr.io/kubeflow-images-public/tensorflow-1.15.2-notebook-gpu:1.0.0
- gcr.io/kubeflow-images-public/tensorflow-2.1.0-notebook-cpu:1.0.0
- gcr.io/kubeflow-images-public/tensorflow-2.1.0-notebook-gpu:1.0.0
# By default, custom container Images are allowed
# Uncomment the following line to only enable standard container Images
readOnly: false
cpu:
# CPU for user's Notebook
value: '0.5'
readOnly: false
memory:
# Memory for user's Notebook
value: 1.0Gi
readOnly: false
workspaceVolume:
# Workspace Volume to be attached to user's Notebook
# Each Workspace Volume is declared with the following attributes:
# Type, Name, Size, MountPath and Access Mode
value:
type:
# The Type of the Workspace Volume
# Supported values: 'New', 'Existing'
value: New
name:
# The Name of the Workspace Volume
# Note that this is a templated value. Special values:
# {notebook-name}: Replaced with the name of the Notebook. The frontend
# will replace this value as the user types the name
value: 'workspace-{notebook-name}'
size:
# The Size of the Workspace Volume (in Gi)
value: '10Gi'
mountPath:
# The Path that the Workspace Volume will be mounted
value: /home/jovyan
accessModes:
# The Access Mode of the Workspace Volume
# Supported values: 'ReadWriteOnce', 'ReadWriteMany', 'ReadOnlyMany'
value: ReadWriteOnce
class:
# The StrageClass the PVC will use if type is New. Special values are:
# {none}: default StorageClass
# {empty}: empty string ""
value: '{none}'
readOnly: false
dataVolumes:
# List of additional Data Volumes to be attached to the user's Notebook
value: []
# Each Data Volume is declared with the following attributes:
# Type, Name, Size, MountPath and Access Mode
#
# For example, a list with 2 Data Volumes:
# value:
# - value:
# type:
# value: New
# name:
# value: '{notebook-name}-vol-1'
# size:
# value: '10Gi'
# class:
# value: standard
# mountPath:
# value: /home/jovyan/vol-1
# accessModes:
# value: ReadWriteOnce
# class:
# value: {none}
# - value:
# type:
# value: New
# name:
# value: '{notebook-name}-vol-2'
# size:
# value: '10Gi'
# mountPath:
# value: /home/jovyan/vol-2
# accessModes:
# value: ReadWriteMany
# class:
# value: {none}
readOnly: false
gpus:
# Number of GPUs to be assigned to the Notebook Container
value:
# values: "none", "1", "2", "4", "8"
num: "none"
# Determines what the UI will show and send to the backend
vendors:
- limitsKey: "nvidia.com/gpu"
uiName: "NVIDIA"
# Values: "" or a `limits-key` from the vendors list
vendor: ""
readOnly: false
shm:
value: true
readOnly: false
configurations:
# List of labels to be selected, these are the labels from PodDefaults
# value:
# - add-gcp-secret
# - default-editor
value: []
readOnly: false
2 changes: 1 addition & 1 deletion jupyter/jupyter-web-app/base/deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -36,5 +36,5 @@ spec:
serviceAccountName: service-account
volumes:
- configMap:
name: config
name: jupyter-web-app-config
name: config-volume
6 changes: 5 additions & 1 deletion jupyter/jupyter-web-app/base/kustomization.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ kind: Kustomization
resources:
- cluster-role-binding.yaml
- cluster-role.yaml
- config-map.yaml
- deployment.yaml
- role-binding.yaml
- role.yaml
Expand All @@ -22,6 +21,11 @@ configMapGenerator:
- envs:
- params.env
name: parameters
# We need the name to be unique without the suffix because the original name is what
# gets used with patches
- name: jupyter-web-app-config
files:
- configs/spawner_ui_config.yaml
generatorOptions:
disableNameSuffixHash: true
vars:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,5 +47,5 @@ spec:
serviceAccountName: jupyter-web-app-service-account
volumes:
- configMap:
name: jupyter-web-app-config
name: jupyter-web-app-jupyter-web-app-config
name: config-volume
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
apiVersion: v1
data:
spawner_ui_config.yaml: |
spawner_ui_config.yaml: |-
# Configuration file for the Jupyter UI.
#
# Each Jupyter UI option is configured by two keys: 'value' and 'readOnly'
Expand All @@ -21,7 +21,7 @@ data:
image:
# The container Image for the user's Jupyter Notebook
# If readonly, this value must be a member of the list below
value: gcr.io/kubeflow-images-public/tensorflow-1.14.0-notebook-cpu:v-base-ef41372-1177829795472347138
value: gcr.io/kubeflow-images-public/tensorflow-1.15.2-notebook-cpu:1.0.0
# The list of available standard container Images
options:
- gcr.io/kubeflow-images-public/tensorflow-1.15.2-notebook-cpu:1.0.0
Expand Down Expand Up @@ -134,5 +134,5 @@ metadata:
labels:
app: jupyter-web-app
kustomize.component: jupyter-web-app
name: jupyter-web-app-config
name: jupyter-web-app-jupyter-web-app-config
namespace: kubeflow
Original file line number Diff line number Diff line change
Expand Up @@ -65,5 +65,5 @@ spec:
serviceAccountName: jupyter-web-app-service-account
volumes:
- configMap:
name: jupyter-web-app-config
name: jupyter-web-app-jupyter-web-app-config
name: config-volume
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
apiVersion: v1
data:
spawner_ui_config.yaml: |
spawner_ui_config.yaml: |-
# Configuration file for the Jupyter UI.
#
# Each Jupyter UI option is configured by two keys: 'value' and 'readOnly'
Expand All @@ -21,7 +21,7 @@ data:
image:
# The container Image for the user's Jupyter Notebook
# If readonly, this value must be a member of the list below
value: gcr.io/kubeflow-images-public/tensorflow-1.14.0-notebook-cpu:v-base-ef41372-1177829795472347138
value: gcr.io/kubeflow-images-public/tensorflow-1.15.2-notebook-cpu:1.0.0
# The list of available standard container Images
options:
- gcr.io/kubeflow-images-public/tensorflow-1.15.2-notebook-cpu:1.0.0
Expand Down Expand Up @@ -140,5 +140,5 @@ metadata:
app.kubernetes.io/part-of: kubeflow
app.kubernetes.io/version: v0.7.0
kustomize.component: jupyter-web-app
name: jupyter-web-app-config
name: jupyter-web-app-jupyter-web-app-config
namespace: kubeflow

0 comments on commit bba06d9

Please sign in to comment.