From 1040bbf6b93e4a11da9fb50f7e6b404b5d043a84 Mon Sep 17 00:00:00 2001 From: jnywong Date: Thu, 9 Jan 2025 11:37:04 +0000 Subject: [PATCH 01/13] Update cluster-wide config --- config/clusters/nmfs-openscapes/cluster.yaml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/config/clusters/nmfs-openscapes/cluster.yaml b/config/clusters/nmfs-openscapes/cluster.yaml index 9a8a6cf8df..05e086fc8b 100644 --- a/config/clusters/nmfs-openscapes/cluster.yaml +++ b/config/clusters/nmfs-openscapes/cluster.yaml @@ -28,3 +28,11 @@ hubs: - common.values.yaml - prod.values.yaml - enc-prod.secret.values.yaml + - name: workshop + display_name: "NOAA Fisheries Openscapes Workshop" + domain: workshop.nmfs-openscapes.2i2c.cloud + helm_chart: daskhub + helm_chart_values_files: + - common.values.yaml + - workshop.values.yaml + - enc-workshop.secret.values.yaml From 592cc6f6fa921535787aa45b91b3445c0fdc1fc1 Mon Sep 17 00:00:00 2001 From: jnywong Date: Thu, 9 Jan 2025 12:12:27 +0000 Subject: [PATCH 02/13] Add workshop config --- .../nmfs-openscapes/workshop.values.yaml | 197 ++++++++++++++++++ 1 file changed, 197 insertions(+) create mode 100644 config/clusters/nmfs-openscapes/workshop.values.yaml diff --git a/config/clusters/nmfs-openscapes/workshop.values.yaml b/config/clusters/nmfs-openscapes/workshop.values.yaml new file mode 100644 index 0000000000..8bdb0506b3 --- /dev/null +++ b/config/clusters/nmfs-openscapes/workshop.values.yaml @@ -0,0 +1,197 @@ +basehub: + jupyterhub: + custom: + 2i2c: + add_staff_user_ids_to_admin_users: false + jupyterhubConfigurator: + enabled: false + homepage: + gitRepoBranch: "no-homepage-customizations" + templateVars: + org: + name: "" + logo_url: "" + url: "" + designed_by: + name: "" + url: "" + operated_by: + name: "" + url: "" + funded_by: + name: "" + url: "" + ingress: + hosts: [workshop.nmfs-openscapes.2i2c.cloud] + tls: + - hosts: [workshop.nmfs-openscapes.2i2c.cloud] + secretName: https-auto-tls + hub: + allowNamedServers: true + config: + JupyterHub: + authenticator_class: dummy + Authenticator: + enable_auth_state: false + admin_users: [] + singleuser: + defaultUrl: /lab + extraEnv: + SCRATCH_BUCKET: s3://nmfs-openscapes-scratch-workshop/$(JUPYTERHUB_USER) + PERSISTENT_BUCKET: s3://nmfs-openscapes-persistent-workshop/$(JUPYTERHUB_USER) + profileList: + - display_name: Default + description: Choose image and resource allocation + default: true + profile_options: &profile_options + image: &profile_options_image + display_name: Image + choices: + python: + display_name: Py - NASA Openscapes Python 39dffde + slug: python + kubespawner_override: + image: openscapes/python:39dffde + pyrbase: + display_name: Py-R - base image 4.4-3.10 + slug: pyrbase + kubespawner_override: + image: ghcr.io/nmfs-opensci/container-images/py-rocket-base:latest + pyrgeo: + display_name: Py-R - Geospatial - py-rocket-geospatial latest + slug: pyrgeo + default: true + kubespawner_override: + image: ghcr.io/nmfs-opensci/container-images/py-rocket-geospatial:latest + pyrgeo2: + display_name: Py-R - Geospatial + QGIS, Panoply, CWUtils - py-rocket-geospatial-2 latest + slug: pyrgeo2 + kubespawner_override: + image: ghcr.io/nmfs-opensci/container-images/py-rocket-geospatial-2:latest + coastwatch: + display_name: Py-R - CoastWatch - coastwatch latest + slug: coastwatch + kubespawner_override: + image: ghcr.io/nmfs-opensci/container-images/coastwatch:latest + aomlomics: + display_name: Py - Tourmaline Snakemake workflow for QIIME 2 v.2023.5 + slug: aomlomics + kubespawner_override: + image: ghcr.io/nmfs-opensci/container-images/aomlomics-jh:latest + iorocker: + display_name: R - Geospatial w sdmTMB - r-geospatial-sdm latest + slug: rgeospatialsdm + kubespawner_override: + image: ghcr.io/nmfs-opensci/container-images/r-geospatial-sdm:latest + echopype: + display_name: Py - Echopype with pangeo - image-acoustics latest + slug: echopype + kubespawner_override: + image: ghcr.io/nmfs-opensci/image-acoustics:latest + arcgis: + display_name: Py - ArcGIS Python 3.9 + slug: arcgis + kubespawner_override: + image: ghcr.io/nmfs-opensci/container-images/arcgis:latest + cboettig: + display_name: Py-R - NASA TOPS - boettiger-lab nasa-tops latest + slug: cboettig + kubespawner_override: + image: ghcr.io/boettiger-lab/nasa-tops:latest + vast: + display_name: R - VAST with TMB - vast latest + kubespawner_override: + image: ghcr.io/nmfs-opensci/container-images/vast:latest + pace: + display_name: Py - PACE image with OCSSW tools + slug: pace + kubespawner_override: + image: quay.io/pacehackweek/pace-2024:latest + unlisted_choice: + enabled: True + display_name: "Custom image" + validation_regex: "^.+:.+$" + validation_message: "Must be a publicly available docker image, of form :" + kubespawner_override: + image: "{value}" + requests: &profile_options_resource_allocation + display_name: Resource Allocation + choices: + # choices generated by combining: + # - deployer generate resource-allocation choices r7i.xlarge + # - deployer generate resource-allocation choices r7i.4xlarge --num-allocations=2 + mem_1_9: + display_name: 1.9 GB RAM, upto 3.7 CPUs + kubespawner_override: + mem_guarantee: 1991244775 + mem_limit: 1991244775 + cpu_guarantee: 0.2328125 + cpu_limit: 3.725 + node_selector: + node.kubernetes.io/instance-type: r5.xlarge + default: true + mem_3_7: + display_name: 3.7 GB RAM, upto 3.7 CPUs + kubespawner_override: + mem_guarantee: 3982489550 + mem_limit: 3982489550 + cpu_guarantee: 0.465625 + cpu_limit: 3.725 + node_selector: + node.kubernetes.io/instance-type: r5.xlarge + mem_7_4: + display_name: 7.4 GB RAM, upto 3.7 CPUs + kubespawner_override: + mem_guarantee: 7964979101 + mem_limit: 7964979101 + cpu_guarantee: 0.93125 + cpu_limit: 3.725 + node_selector: + node.kubernetes.io/instance-type: r5.xlarge + mem_14_8: + display_name: 14.8 GB RAM, upto 3.7 CPUs + kubespawner_override: + mem_guarantee: 15929958203 + mem_limit: 15929958203 + cpu_guarantee: 1.8625 + cpu_limit: 3.725 + node_selector: + node.kubernetes.io/instance-type: r5.xlarge + mem_29_7: + display_name: 29.7 GB RAM, upto 3.7 CPUs + kubespawner_override: + mem_guarantee: 31859916406 + mem_limit: 31859916406 + cpu_guarantee: 3.725 + cpu_limit: 3.725 + node_selector: + node.kubernetes.io/instance-type: r5.xlarge + mem_60_6: + display_name: 60.6 GB RAM, upto 15.6 CPUs + kubespawner_override: + mem_guarantee: 65094448840 + mem_limit: 65094448840 + cpu_guarantee: 7.8475 + cpu_limit: 15.695 + node_selector: + node.kubernetes.io/instance-type: r5.4xlarge + mem_121_2: + display_name: 121.2 GB RAM, upto 15.6 CPUs + kubespawner_override: + mem_guarantee: 130188897681 + mem_limit: 130188897681 + cpu_guarantee: 15.695 + cpu_limit: 15.695 + node_selector: + node.kubernetes.io/instance-type: r5.4xlarge + dask-gateway: + gateway: + backend: + scheduler: + extraPodConfig: + nodeSelector: + 2i2c/hub-name: workshop + worker: + extraPodConfig: + nodeSelector: + 2i2c/hub-name: workshop From 33cb7d0dc0664a986a908649c2dfa5dbb90b0e1a Mon Sep 17 00:00:00 2001 From: jnywong Date: Thu, 9 Jan 2025 12:26:35 +0000 Subject: [PATCH 03/13] Set up storage buckets --- terraform/aws/projects/nmfs-openscapes.tfvars | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/terraform/aws/projects/nmfs-openscapes.tfvars b/terraform/aws/projects/nmfs-openscapes.tfvars index 9187c4d269..42bb2ba708 100644 --- a/terraform/aws/projects/nmfs-openscapes.tfvars +++ b/terraform/aws/projects/nmfs-openscapes.tfvars @@ -33,12 +33,20 @@ user_buckets = { "delete_after" : 7, "tags" : { "2i2c:hub-name" : "prod" }, }, + "scratch-workshop" : { + "delete_after" : 7, + "tags" : { "2i2c:hub-name" : "workshop" }, + }, "persistent-staging" : { "tags" : { "2i2c:hub-name" : "staging" }, }, "persistent" : { "tags" : { "2i2c:hub-name" : "prod" }, }, + "persistent-workshop" : { + "delete_after" : null, + "tags" : { "2i2c:hub-name" : "workshop" }, + }, } hub_cloud_permissions = { @@ -48,6 +56,12 @@ hub_cloud_permissions = { "prod" : { bucket_admin_access : ["scratch", "persistent"], }, + "workshop" : { + bucket_admin_access : [ + "scratch-workshop", + "persistent-workshop", + ], + }, } active_cost_allocation_tags = [ From 343692a1924cfa5eaa8692b1b0d1c2b640c8bae2 Mon Sep 17 00:00:00 2001 From: jnywong Date: Thu, 9 Jan 2025 13:39:38 +0000 Subject: [PATCH 04/13] Add workshop password --- .../enc-workshop.secret.values.yaml | 20 +++++++++++++++++++ .../nmfs-openscapes/workshop.values.yaml | 2 +- 2 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 config/clusters/nmfs-openscapes/enc-workshop.secret.values.yaml diff --git a/config/clusters/nmfs-openscapes/enc-workshop.secret.values.yaml b/config/clusters/nmfs-openscapes/enc-workshop.secret.values.yaml new file mode 100644 index 0000000000..a60bf89475 --- /dev/null +++ b/config/clusters/nmfs-openscapes/enc-workshop.secret.values.yaml @@ -0,0 +1,20 @@ +basehub: + jupyterhub: + hub: + config: + DummyAuthenticator: + password: ENC[AES256_GCM,data:wRndqW/f9ibQ8JlW,iv:R3GYdbFi3gYmm97Wer1+2PFa0RPj7Drd3BbvBb7EJBc=,tag:wsmNKRgiulhoSiLVdiDMog==,type:str] +sops: + kms: [] + gcp_kms: + - resource_id: projects/two-eye-two-see/locations/global/keyRings/sops-keys/cryptoKeys/similar-hubs + created_at: "2025-01-09T12:40:41Z" + enc: CiUA4OM7eAKd+RcV3LRnoEhHM0DyRKyGzxh//EKw9uHxQAcwvFSmEkkAnGhyNl3nxpwmL4XMSu0LDVl8qbzcjwuGcihPtkGHhr6osKPjGSHlK15h+tcSaydkq3QFxZVx2GUiz/PtEi3z9R2CxdgkUabe + azure_kv: [] + hc_vault: [] + age: [] + lastmodified: "2025-01-09T12:40:41Z" + mac: ENC[AES256_GCM,data:NDSImiTbDThtM7ztImZeH9j6BaQeQ8ncr/sAWaZqk1ZSXG1j5M43Rj48tDJx9/feQfF0RSLzAhM0F7ipIwUpbxLbP3uGP5Jl3I89fiCIAB6zJcuxyaIxn/bGZeYkWBzDF4//JOo9pU4AYwo+8FgDU3+eLg/GkGJEQRmN/yGCYM0=,iv:LlxcnhmtiksvMfIv22DT9pwwRTBuhm98jqOYB7x/3WA=,tag:KuIwj6il2TDxZKqk2cwIKw==,type:str] + pgp: [] + unencrypted_suffix: _unencrypted + version: 3.9.1 diff --git a/config/clusters/nmfs-openscapes/workshop.values.yaml b/config/clusters/nmfs-openscapes/workshop.values.yaml index 8bdb0506b3..471c0e3097 100644 --- a/config/clusters/nmfs-openscapes/workshop.values.yaml +++ b/config/clusters/nmfs-openscapes/workshop.values.yaml @@ -6,7 +6,7 @@ basehub: jupyterhubConfigurator: enabled: false homepage: - gitRepoBranch: "no-homepage-customizations" + gitRepoBranch: "username-and-password-homepage" templateVars: org: name: "" From fd352573ca80fa78e47dff1adc23421bf2db0f36 Mon Sep 17 00:00:00 2001 From: jnywong Date: Thu, 9 Jan 2025 13:41:56 +0000 Subject: [PATCH 05/13] Add hub-name tag --- config/clusters/nmfs-openscapes/workshop.values.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/config/clusters/nmfs-openscapes/workshop.values.yaml b/config/clusters/nmfs-openscapes/workshop.values.yaml index 471c0e3097..5748c13b5e 100644 --- a/config/clusters/nmfs-openscapes/workshop.values.yaml +++ b/config/clusters/nmfs-openscapes/workshop.values.yaml @@ -36,6 +36,8 @@ basehub: admin_users: [] singleuser: defaultUrl: /lab + nodeSelector: + 2i2c/hub-name: workshop extraEnv: SCRATCH_BUCKET: s3://nmfs-openscapes-scratch-workshop/$(JUPYTERHUB_USER) PERSISTENT_BUCKET: s3://nmfs-openscapes-persistent-workshop/$(JUPYTERHUB_USER) From bbb6dbed4a441b987686fa2b1720f899c0d5e2e7 Mon Sep 17 00:00:00 2001 From: jnywong Date: Thu, 9 Jan 2025 13:47:55 +0000 Subject: [PATCH 06/13] Use basehub instead --- config/clusters/nmfs-openscapes/cluster.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/clusters/nmfs-openscapes/cluster.yaml b/config/clusters/nmfs-openscapes/cluster.yaml index 05e086fc8b..bb34b80b44 100644 --- a/config/clusters/nmfs-openscapes/cluster.yaml +++ b/config/clusters/nmfs-openscapes/cluster.yaml @@ -31,7 +31,7 @@ hubs: - name: workshop display_name: "NOAA Fisheries Openscapes Workshop" domain: workshop.nmfs-openscapes.2i2c.cloud - helm_chart: daskhub + helm_chart: basehub helm_chart_values_files: - common.values.yaml - workshop.values.yaml From 0bc6804d42f35bab72c4e24579971736d16194da Mon Sep 17 00:00:00 2001 From: jnywong Date: Thu, 9 Jan 2025 13:48:07 +0000 Subject: [PATCH 07/13] Use basehub instead --- config/clusters/nmfs-openscapes/workshop.values.yaml | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/config/clusters/nmfs-openscapes/workshop.values.yaml b/config/clusters/nmfs-openscapes/workshop.values.yaml index 5748c13b5e..9193240c71 100644 --- a/config/clusters/nmfs-openscapes/workshop.values.yaml +++ b/config/clusters/nmfs-openscapes/workshop.values.yaml @@ -186,14 +186,3 @@ basehub: cpu_limit: 15.695 node_selector: node.kubernetes.io/instance-type: r5.4xlarge - dask-gateway: - gateway: - backend: - scheduler: - extraPodConfig: - nodeSelector: - 2i2c/hub-name: workshop - worker: - extraPodConfig: - nodeSelector: - 2i2c/hub-name: workshop From 396e67fa3e5141e2e5ea6e11d355fbd37370f7a8 Mon Sep 17 00:00:00 2001 From: jnywong Date: Thu, 9 Jan 2025 13:50:56 +0000 Subject: [PATCH 08/13] Remove templatevars --- .../clusters/nmfs-openscapes/workshop.values.yaml | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/config/clusters/nmfs-openscapes/workshop.values.yaml b/config/clusters/nmfs-openscapes/workshop.values.yaml index 9193240c71..d5bc80d38b 100644 --- a/config/clusters/nmfs-openscapes/workshop.values.yaml +++ b/config/clusters/nmfs-openscapes/workshop.values.yaml @@ -7,20 +7,6 @@ basehub: enabled: false homepage: gitRepoBranch: "username-and-password-homepage" - templateVars: - org: - name: "" - logo_url: "" - url: "" - designed_by: - name: "" - url: "" - operated_by: - name: "" - url: "" - funded_by: - name: "" - url: "" ingress: hosts: [workshop.nmfs-openscapes.2i2c.cloud] tls: From 630ac7f4303de72b699523b6b71f76cbfbac4827 Mon Sep 17 00:00:00 2001 From: jnywong Date: Thu, 9 Jan 2025 15:20:35 +0000 Subject: [PATCH 09/13] Remove extra basehub key --- .../enc-workshop.secret.values.yaml | 19 +- .../nmfs-openscapes/workshop.values.yaml | 347 +++++++++--------- 2 files changed, 182 insertions(+), 184 deletions(-) diff --git a/config/clusters/nmfs-openscapes/enc-workshop.secret.values.yaml b/config/clusters/nmfs-openscapes/enc-workshop.secret.values.yaml index a60bf89475..13b22eed0c 100644 --- a/config/clusters/nmfs-openscapes/enc-workshop.secret.values.yaml +++ b/config/clusters/nmfs-openscapes/enc-workshop.secret.values.yaml @@ -1,20 +1,19 @@ -basehub: - jupyterhub: - hub: - config: - DummyAuthenticator: - password: ENC[AES256_GCM,data:wRndqW/f9ibQ8JlW,iv:R3GYdbFi3gYmm97Wer1+2PFa0RPj7Drd3BbvBb7EJBc=,tag:wsmNKRgiulhoSiLVdiDMog==,type:str] +jupyterhub: + hub: + config: + DummyAuthenticator: + password: ENC[AES256_GCM,data:3fSTbTvq8yXs2YET,iv:dU4LtV1RhpOZuUQaJHzqS8P1+HGD+R+cJ4oQ1tnpYXE=,tag:pAdFNCegRhiD0xf7Mry23A==,type:str] sops: kms: [] gcp_kms: - resource_id: projects/two-eye-two-see/locations/global/keyRings/sops-keys/cryptoKeys/similar-hubs - created_at: "2025-01-09T12:40:41Z" - enc: CiUA4OM7eAKd+RcV3LRnoEhHM0DyRKyGzxh//EKw9uHxQAcwvFSmEkkAnGhyNl3nxpwmL4XMSu0LDVl8qbzcjwuGcihPtkGHhr6osKPjGSHlK15h+tcSaydkq3QFxZVx2GUiz/PtEi3z9R2CxdgkUabe + created_at: "2025-01-09T15:19:55Z" + enc: CiUA4OM7eGez8KDuQZXma3aE2ZS9b3HenoeE9zJDAt9k+DMfqFVMEkkAnGhyNvSoFbF+zxcX/4id6Slvrld7haauv8LWoKhnKNroAKcT7U9aEqy80YJrXAMKJeuaWBgcTZUtpulxNqhb5FltsbNX8eY1 azure_kv: [] hc_vault: [] age: [] - lastmodified: "2025-01-09T12:40:41Z" - mac: ENC[AES256_GCM,data:NDSImiTbDThtM7ztImZeH9j6BaQeQ8ncr/sAWaZqk1ZSXG1j5M43Rj48tDJx9/feQfF0RSLzAhM0F7ipIwUpbxLbP3uGP5Jl3I89fiCIAB6zJcuxyaIxn/bGZeYkWBzDF4//JOo9pU4AYwo+8FgDU3+eLg/GkGJEQRmN/yGCYM0=,iv:LlxcnhmtiksvMfIv22DT9pwwRTBuhm98jqOYB7x/3WA=,tag:KuIwj6il2TDxZKqk2cwIKw==,type:str] + lastmodified: "2025-01-09T15:19:56Z" + mac: ENC[AES256_GCM,data:09FmkRMmYDcnX4fJTVhCLkUqjDsYI11kX9iU5Ys8d839Dyk5Ff0KkXDWtQ3B7f98O+8dyarh4dxDMdwzB8NgacHfOgWpEQtofsPv3vW9hgKxOnBA1tNSYLoD3BNBQkJrQjx3gJ5sQE4W5PC6+lN4T0Dy66x/NF1A2lef7yrAODY=,iv:wozq2/LMLvr9gYCQO4BV0Z6urJL+c+HYKuRAKnRmMx8=,tag:Wglf2mmx/jO+JfT4fEb9Iw==,type:str] pgp: [] unencrypted_suffix: _unencrypted version: 3.9.1 diff --git a/config/clusters/nmfs-openscapes/workshop.values.yaml b/config/clusters/nmfs-openscapes/workshop.values.yaml index d5bc80d38b..923e593a48 100644 --- a/config/clusters/nmfs-openscapes/workshop.values.yaml +++ b/config/clusters/nmfs-openscapes/workshop.values.yaml @@ -1,174 +1,173 @@ -basehub: - jupyterhub: - custom: - 2i2c: - add_staff_user_ids_to_admin_users: false - jupyterhubConfigurator: - enabled: false - homepage: - gitRepoBranch: "username-and-password-homepage" - ingress: - hosts: [workshop.nmfs-openscapes.2i2c.cloud] - tls: - - hosts: [workshop.nmfs-openscapes.2i2c.cloud] - secretName: https-auto-tls - hub: - allowNamedServers: true - config: - JupyterHub: - authenticator_class: dummy - Authenticator: - enable_auth_state: false - admin_users: [] - singleuser: - defaultUrl: /lab - nodeSelector: - 2i2c/hub-name: workshop - extraEnv: - SCRATCH_BUCKET: s3://nmfs-openscapes-scratch-workshop/$(JUPYTERHUB_USER) - PERSISTENT_BUCKET: s3://nmfs-openscapes-persistent-workshop/$(JUPYTERHUB_USER) - profileList: - - display_name: Default - description: Choose image and resource allocation - default: true - profile_options: &profile_options - image: &profile_options_image - display_name: Image - choices: - python: - display_name: Py - NASA Openscapes Python 39dffde - slug: python - kubespawner_override: - image: openscapes/python:39dffde - pyrbase: - display_name: Py-R - base image 4.4-3.10 - slug: pyrbase - kubespawner_override: - image: ghcr.io/nmfs-opensci/container-images/py-rocket-base:latest - pyrgeo: - display_name: Py-R - Geospatial - py-rocket-geospatial latest - slug: pyrgeo - default: true - kubespawner_override: - image: ghcr.io/nmfs-opensci/container-images/py-rocket-geospatial:latest - pyrgeo2: - display_name: Py-R - Geospatial + QGIS, Panoply, CWUtils - py-rocket-geospatial-2 latest - slug: pyrgeo2 - kubespawner_override: - image: ghcr.io/nmfs-opensci/container-images/py-rocket-geospatial-2:latest - coastwatch: - display_name: Py-R - CoastWatch - coastwatch latest - slug: coastwatch - kubespawner_override: - image: ghcr.io/nmfs-opensci/container-images/coastwatch:latest - aomlomics: - display_name: Py - Tourmaline Snakemake workflow for QIIME 2 v.2023.5 - slug: aomlomics - kubespawner_override: - image: ghcr.io/nmfs-opensci/container-images/aomlomics-jh:latest - iorocker: - display_name: R - Geospatial w sdmTMB - r-geospatial-sdm latest - slug: rgeospatialsdm - kubespawner_override: - image: ghcr.io/nmfs-opensci/container-images/r-geospatial-sdm:latest - echopype: - display_name: Py - Echopype with pangeo - image-acoustics latest - slug: echopype - kubespawner_override: - image: ghcr.io/nmfs-opensci/image-acoustics:latest - arcgis: - display_name: Py - ArcGIS Python 3.9 - slug: arcgis - kubespawner_override: - image: ghcr.io/nmfs-opensci/container-images/arcgis:latest - cboettig: - display_name: Py-R - NASA TOPS - boettiger-lab nasa-tops latest - slug: cboettig - kubespawner_override: - image: ghcr.io/boettiger-lab/nasa-tops:latest - vast: - display_name: R - VAST with TMB - vast latest - kubespawner_override: - image: ghcr.io/nmfs-opensci/container-images/vast:latest - pace: - display_name: Py - PACE image with OCSSW tools - slug: pace - kubespawner_override: - image: quay.io/pacehackweek/pace-2024:latest - unlisted_choice: - enabled: True - display_name: "Custom image" - validation_regex: "^.+:.+$" - validation_message: "Must be a publicly available docker image, of form :" - kubespawner_override: - image: "{value}" - requests: &profile_options_resource_allocation - display_name: Resource Allocation - choices: - # choices generated by combining: - # - deployer generate resource-allocation choices r7i.xlarge - # - deployer generate resource-allocation choices r7i.4xlarge --num-allocations=2 - mem_1_9: - display_name: 1.9 GB RAM, upto 3.7 CPUs - kubespawner_override: - mem_guarantee: 1991244775 - mem_limit: 1991244775 - cpu_guarantee: 0.2328125 - cpu_limit: 3.725 - node_selector: - node.kubernetes.io/instance-type: r5.xlarge - default: true - mem_3_7: - display_name: 3.7 GB RAM, upto 3.7 CPUs - kubespawner_override: - mem_guarantee: 3982489550 - mem_limit: 3982489550 - cpu_guarantee: 0.465625 - cpu_limit: 3.725 - node_selector: - node.kubernetes.io/instance-type: r5.xlarge - mem_7_4: - display_name: 7.4 GB RAM, upto 3.7 CPUs - kubespawner_override: - mem_guarantee: 7964979101 - mem_limit: 7964979101 - cpu_guarantee: 0.93125 - cpu_limit: 3.725 - node_selector: - node.kubernetes.io/instance-type: r5.xlarge - mem_14_8: - display_name: 14.8 GB RAM, upto 3.7 CPUs - kubespawner_override: - mem_guarantee: 15929958203 - mem_limit: 15929958203 - cpu_guarantee: 1.8625 - cpu_limit: 3.725 - node_selector: - node.kubernetes.io/instance-type: r5.xlarge - mem_29_7: - display_name: 29.7 GB RAM, upto 3.7 CPUs - kubespawner_override: - mem_guarantee: 31859916406 - mem_limit: 31859916406 - cpu_guarantee: 3.725 - cpu_limit: 3.725 - node_selector: - node.kubernetes.io/instance-type: r5.xlarge - mem_60_6: - display_name: 60.6 GB RAM, upto 15.6 CPUs - kubespawner_override: - mem_guarantee: 65094448840 - mem_limit: 65094448840 - cpu_guarantee: 7.8475 - cpu_limit: 15.695 - node_selector: - node.kubernetes.io/instance-type: r5.4xlarge - mem_121_2: - display_name: 121.2 GB RAM, upto 15.6 CPUs - kubespawner_override: - mem_guarantee: 130188897681 - mem_limit: 130188897681 - cpu_guarantee: 15.695 - cpu_limit: 15.695 - node_selector: - node.kubernetes.io/instance-type: r5.4xlarge +jupyterhub: + custom: + 2i2c: + add_staff_user_ids_to_admin_users: false + jupyterhubConfigurator: + enabled: false + homepage: + gitRepoBranch: "username-and-password-homepage" + ingress: + hosts: [workshop.nmfs-openscapes.2i2c.cloud] + tls: + - hosts: [workshop.nmfs-openscapes.2i2c.cloud] + secretName: https-auto-tls + hub: + allowNamedServers: true + config: + JupyterHub: + authenticator_class: dummy + Authenticator: + enable_auth_state: false + admin_users: [] + singleuser: + defaultUrl: /lab + nodeSelector: + 2i2c/hub-name: workshop + extraEnv: + SCRATCH_BUCKET: s3://nmfs-openscapes-scratch-workshop/$(JUPYTERHUB_USER) + PERSISTENT_BUCKET: s3://nmfs-openscapes-persistent-workshop/$(JUPYTERHUB_USER) + profileList: + - display_name: Default + description: Choose image and resource allocation + default: true + profile_options: &profile_options + image: &profile_options_image + display_name: Image + choices: + python: + display_name: Py - NASA Openscapes Python 39dffde + slug: python + kubespawner_override: + image: openscapes/python:39dffde + pyrbase: + display_name: Py-R - base image 4.4-3.10 + slug: pyrbase + kubespawner_override: + image: ghcr.io/nmfs-opensci/container-images/py-rocket-base:latest + pyrgeo: + display_name: Py-R - Geospatial - py-rocket-geospatial latest + slug: pyrgeo + default: true + kubespawner_override: + image: ghcr.io/nmfs-opensci/container-images/py-rocket-geospatial:latest + pyrgeo2: + display_name: Py-R - Geospatial + QGIS, Panoply, CWUtils - py-rocket-geospatial-2 latest + slug: pyrgeo2 + kubespawner_override: + image: ghcr.io/nmfs-opensci/container-images/py-rocket-geospatial-2:latest + coastwatch: + display_name: Py-R - CoastWatch - coastwatch latest + slug: coastwatch + kubespawner_override: + image: ghcr.io/nmfs-opensci/container-images/coastwatch:latest + aomlomics: + display_name: Py - Tourmaline Snakemake workflow for QIIME 2 v.2023.5 + slug: aomlomics + kubespawner_override: + image: ghcr.io/nmfs-opensci/container-images/aomlomics-jh:latest + iorocker: + display_name: R - Geospatial w sdmTMB - r-geospatial-sdm latest + slug: rgeospatialsdm + kubespawner_override: + image: ghcr.io/nmfs-opensci/container-images/r-geospatial-sdm:latest + echopype: + display_name: Py - Echopype with pangeo - image-acoustics latest + slug: echopype + kubespawner_override: + image: ghcr.io/nmfs-opensci/image-acoustics:latest + arcgis: + display_name: Py - ArcGIS Python 3.9 + slug: arcgis + kubespawner_override: + image: ghcr.io/nmfs-opensci/container-images/arcgis:latest + cboettig: + display_name: Py-R - NASA TOPS - boettiger-lab nasa-tops latest + slug: cboettig + kubespawner_override: + image: ghcr.io/boettiger-lab/nasa-tops:latest + vast: + display_name: R - VAST with TMB - vast latest + kubespawner_override: + image: ghcr.io/nmfs-opensci/container-images/vast:latest + pace: + display_name: Py - PACE image with OCSSW tools + slug: pace + kubespawner_override: + image: quay.io/pacehackweek/pace-2024:latest + unlisted_choice: + enabled: True + display_name: "Custom image" + validation_regex: "^.+:.+$" + validation_message: "Must be a publicly available docker image, of form :" + kubespawner_override: + image: "{value}" + requests: &profile_options_resource_allocation + display_name: Resource Allocation + choices: + # choices generated by combining: + # - deployer generate resource-allocation choices r7i.xlarge + # - deployer generate resource-allocation choices r7i.4xlarge --num-allocations=2 + mem_1_9: + display_name: 1.9 GB RAM, upto 3.7 CPUs + kubespawner_override: + mem_guarantee: 1991244775 + mem_limit: 1991244775 + cpu_guarantee: 0.2328125 + cpu_limit: 3.725 + node_selector: + node.kubernetes.io/instance-type: r5.xlarge + default: true + mem_3_7: + display_name: 3.7 GB RAM, upto 3.7 CPUs + kubespawner_override: + mem_guarantee: 3982489550 + mem_limit: 3982489550 + cpu_guarantee: 0.465625 + cpu_limit: 3.725 + node_selector: + node.kubernetes.io/instance-type: r5.xlarge + mem_7_4: + display_name: 7.4 GB RAM, upto 3.7 CPUs + kubespawner_override: + mem_guarantee: 7964979101 + mem_limit: 7964979101 + cpu_guarantee: 0.93125 + cpu_limit: 3.725 + node_selector: + node.kubernetes.io/instance-type: r5.xlarge + mem_14_8: + display_name: 14.8 GB RAM, upto 3.7 CPUs + kubespawner_override: + mem_guarantee: 15929958203 + mem_limit: 15929958203 + cpu_guarantee: 1.8625 + cpu_limit: 3.725 + node_selector: + node.kubernetes.io/instance-type: r5.xlarge + mem_29_7: + display_name: 29.7 GB RAM, upto 3.7 CPUs + kubespawner_override: + mem_guarantee: 31859916406 + mem_limit: 31859916406 + cpu_guarantee: 3.725 + cpu_limit: 3.725 + node_selector: + node.kubernetes.io/instance-type: r5.xlarge + mem_60_6: + display_name: 60.6 GB RAM, upto 15.6 CPUs + kubespawner_override: + mem_guarantee: 65094448840 + mem_limit: 65094448840 + cpu_guarantee: 7.8475 + cpu_limit: 15.695 + node_selector: + node.kubernetes.io/instance-type: r5.4xlarge + mem_121_2: + display_name: 121.2 GB RAM, upto 15.6 CPUs + kubespawner_override: + mem_guarantee: 130188897681 + mem_limit: 130188897681 + cpu_guarantee: 15.695 + cpu_limit: 15.695 + node_selector: + node.kubernetes.io/instance-type: r5.4xlarge From 602680e2a420fcec87cc0197ae7ca2e42e52c637 Mon Sep 17 00:00:00 2001 From: Sarah Gibson Date: Thu, 9 Jan 2025 15:55:37 +0000 Subject: [PATCH 10/13] Add nodes for the workshop hub via eksctl --- eksctl/nmfs-openscapes.jsonnet | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/eksctl/nmfs-openscapes.jsonnet b/eksctl/nmfs-openscapes.jsonnet index 9a780d8fff..212260a2de 100644 --- a/eksctl/nmfs-openscapes.jsonnet +++ b/eksctl/nmfs-openscapes.jsonnet @@ -37,6 +37,12 @@ local notebookNodes = [ labels+: { "2i2c/hub-name": "prod" }, tags+: { "2i2c:hub-name": "prod" }, }, + { + instanceType: "r5.xlarge", + namePrefix: "nb-workshop", + labels+: { "2i2c/hub-name": "workshop" }, + tags+: { "2i2c:hub-name": "workshop" }, + }, { instanceType: "r5.4xlarge", namePrefix: "nb-staging", @@ -49,6 +55,12 @@ local notebookNodes = [ labels+: { "2i2c/hub-name": "prod" }, tags+: { "2i2c:hub-name": "prod" }, }, + { + instanceType: "r5.4xlarge", + namePrefix: "nb-workshop", + labels+: { "2i2c/hub-name": "workshop" }, + tags+: { "2i2c:hub-name": "workshop" }, + }, { instanceType: "r5.16xlarge", namePrefix: "nb-staging", @@ -61,6 +73,12 @@ local notebookNodes = [ labels+: { "2i2c/hub-name": "prod" }, tags+: { "2i2c:hub-name": "prod" }, }, + { + instanceType: "r5.16xlarge", + namePrefix: "nb-workshop", + labels+: { "2i2c/hub-name": "workshop" }, + tags+: { "2i2c:hub-name": "workshop" }, + }, ]; local daskNodes = []; From ff4f21b0d0f7b3ddf26a6ec1692a4c3a54956af6 Mon Sep 17 00:00:00 2001 From: Sarah Gibson Date: Thu, 9 Jan 2025 16:11:18 +0000 Subject: [PATCH 11/13] Setup a homedirs volume for the workshop hub and enable per-user quota limits --- config/clusters/nmfs-openscapes/workshop.values.yaml | 8 ++++++++ terraform/aws/projects/nmfs-openscapes.tfvars | 8 +++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/config/clusters/nmfs-openscapes/workshop.values.yaml b/config/clusters/nmfs-openscapes/workshop.values.yaml index 923e593a48..63e5217b32 100644 --- a/config/clusters/nmfs-openscapes/workshop.values.yaml +++ b/config/clusters/nmfs-openscapes/workshop.values.yaml @@ -171,3 +171,11 @@ jupyterhub: cpu_limit: 15.695 node_selector: node.kubernetes.io/instance-type: r5.4xlarge + +jupyterhub-home-nfs: + eks: + enabled: true + volumeId: vol-07154b7def3b80b96 + quotaEnforcer: + hardQuota: "4" # in GB + path: "/export/workshop" diff --git a/terraform/aws/projects/nmfs-openscapes.tfvars b/terraform/aws/projects/nmfs-openscapes.tfvars index 42bb2ba708..5b611f7fcd 100644 --- a/terraform/aws/projects/nmfs-openscapes.tfvars +++ b/terraform/aws/projects/nmfs-openscapes.tfvars @@ -21,7 +21,13 @@ ebs_volumes = { type = "gp3" name_suffix = "prod" tags = { "2i2c:hub-name" : "prod" } - } + }, + "workshop" = { + size = 128 + type = "gp3" + name_suffix = "workshop" + tags = { "2i2c:hub-name" : "workshop" } + }, } user_buckets = { From da1f027dd67be7f96701112c635f991e6210f1fe Mon Sep 17 00:00:00 2001 From: Sarah Gibson Date: Thu, 9 Jan 2025 16:23:00 +0000 Subject: [PATCH 12/13] Correct indentation for profileList --- .../nmfs-openscapes/workshop.values.yaml | 290 +++++++++--------- 1 file changed, 145 insertions(+), 145 deletions(-) diff --git a/config/clusters/nmfs-openscapes/workshop.values.yaml b/config/clusters/nmfs-openscapes/workshop.values.yaml index 63e5217b32..7c83eb503e 100644 --- a/config/clusters/nmfs-openscapes/workshop.values.yaml +++ b/config/clusters/nmfs-openscapes/workshop.values.yaml @@ -26,151 +26,151 @@ jupyterhub: extraEnv: SCRATCH_BUCKET: s3://nmfs-openscapes-scratch-workshop/$(JUPYTERHUB_USER) PERSISTENT_BUCKET: s3://nmfs-openscapes-persistent-workshop/$(JUPYTERHUB_USER) - profileList: - - display_name: Default - description: Choose image and resource allocation - default: true - profile_options: &profile_options - image: &profile_options_image - display_name: Image - choices: - python: - display_name: Py - NASA Openscapes Python 39dffde - slug: python - kubespawner_override: - image: openscapes/python:39dffde - pyrbase: - display_name: Py-R - base image 4.4-3.10 - slug: pyrbase - kubespawner_override: - image: ghcr.io/nmfs-opensci/container-images/py-rocket-base:latest - pyrgeo: - display_name: Py-R - Geospatial - py-rocket-geospatial latest - slug: pyrgeo - default: true - kubespawner_override: - image: ghcr.io/nmfs-opensci/container-images/py-rocket-geospatial:latest - pyrgeo2: - display_name: Py-R - Geospatial + QGIS, Panoply, CWUtils - py-rocket-geospatial-2 latest - slug: pyrgeo2 - kubespawner_override: - image: ghcr.io/nmfs-opensci/container-images/py-rocket-geospatial-2:latest - coastwatch: - display_name: Py-R - CoastWatch - coastwatch latest - slug: coastwatch - kubespawner_override: - image: ghcr.io/nmfs-opensci/container-images/coastwatch:latest - aomlomics: - display_name: Py - Tourmaline Snakemake workflow for QIIME 2 v.2023.5 - slug: aomlomics - kubespawner_override: - image: ghcr.io/nmfs-opensci/container-images/aomlomics-jh:latest - iorocker: - display_name: R - Geospatial w sdmTMB - r-geospatial-sdm latest - slug: rgeospatialsdm - kubespawner_override: - image: ghcr.io/nmfs-opensci/container-images/r-geospatial-sdm:latest - echopype: - display_name: Py - Echopype with pangeo - image-acoustics latest - slug: echopype - kubespawner_override: - image: ghcr.io/nmfs-opensci/image-acoustics:latest - arcgis: - display_name: Py - ArcGIS Python 3.9 - slug: arcgis - kubespawner_override: - image: ghcr.io/nmfs-opensci/container-images/arcgis:latest - cboettig: - display_name: Py-R - NASA TOPS - boettiger-lab nasa-tops latest - slug: cboettig - kubespawner_override: - image: ghcr.io/boettiger-lab/nasa-tops:latest - vast: - display_name: R - VAST with TMB - vast latest - kubespawner_override: - image: ghcr.io/nmfs-opensci/container-images/vast:latest - pace: - display_name: Py - PACE image with OCSSW tools - slug: pace - kubespawner_override: - image: quay.io/pacehackweek/pace-2024:latest - unlisted_choice: - enabled: True - display_name: "Custom image" - validation_regex: "^.+:.+$" - validation_message: "Must be a publicly available docker image, of form :" - kubespawner_override: - image: "{value}" - requests: &profile_options_resource_allocation - display_name: Resource Allocation - choices: - # choices generated by combining: - # - deployer generate resource-allocation choices r7i.xlarge - # - deployer generate resource-allocation choices r7i.4xlarge --num-allocations=2 - mem_1_9: - display_name: 1.9 GB RAM, upto 3.7 CPUs - kubespawner_override: - mem_guarantee: 1991244775 - mem_limit: 1991244775 - cpu_guarantee: 0.2328125 - cpu_limit: 3.725 - node_selector: - node.kubernetes.io/instance-type: r5.xlarge - default: true - mem_3_7: - display_name: 3.7 GB RAM, upto 3.7 CPUs - kubespawner_override: - mem_guarantee: 3982489550 - mem_limit: 3982489550 - cpu_guarantee: 0.465625 - cpu_limit: 3.725 - node_selector: - node.kubernetes.io/instance-type: r5.xlarge - mem_7_4: - display_name: 7.4 GB RAM, upto 3.7 CPUs - kubespawner_override: - mem_guarantee: 7964979101 - mem_limit: 7964979101 - cpu_guarantee: 0.93125 - cpu_limit: 3.725 - node_selector: - node.kubernetes.io/instance-type: r5.xlarge - mem_14_8: - display_name: 14.8 GB RAM, upto 3.7 CPUs - kubespawner_override: - mem_guarantee: 15929958203 - mem_limit: 15929958203 - cpu_guarantee: 1.8625 - cpu_limit: 3.725 - node_selector: - node.kubernetes.io/instance-type: r5.xlarge - mem_29_7: - display_name: 29.7 GB RAM, upto 3.7 CPUs - kubespawner_override: - mem_guarantee: 31859916406 - mem_limit: 31859916406 - cpu_guarantee: 3.725 - cpu_limit: 3.725 - node_selector: - node.kubernetes.io/instance-type: r5.xlarge - mem_60_6: - display_name: 60.6 GB RAM, upto 15.6 CPUs - kubespawner_override: - mem_guarantee: 65094448840 - mem_limit: 65094448840 - cpu_guarantee: 7.8475 - cpu_limit: 15.695 - node_selector: - node.kubernetes.io/instance-type: r5.4xlarge - mem_121_2: - display_name: 121.2 GB RAM, upto 15.6 CPUs - kubespawner_override: - mem_guarantee: 130188897681 - mem_limit: 130188897681 - cpu_guarantee: 15.695 - cpu_limit: 15.695 - node_selector: - node.kubernetes.io/instance-type: r5.4xlarge + profileList: + - display_name: Default + description: Choose image and resource allocation + default: true + profile_options: &profile_options + image: &profile_options_image + display_name: Image + choices: + python: + display_name: Py - NASA Openscapes Python 39dffde + slug: python + kubespawner_override: + image: openscapes/python:39dffde + pyrbase: + display_name: Py-R - base image 4.4-3.10 + slug: pyrbase + kubespawner_override: + image: ghcr.io/nmfs-opensci/container-images/py-rocket-base:latest + pyrgeo: + display_name: Py-R - Geospatial - py-rocket-geospatial latest + slug: pyrgeo + default: true + kubespawner_override: + image: ghcr.io/nmfs-opensci/container-images/py-rocket-geospatial:latest + pyrgeo2: + display_name: Py-R - Geospatial + QGIS, Panoply, CWUtils - py-rocket-geospatial-2 latest + slug: pyrgeo2 + kubespawner_override: + image: ghcr.io/nmfs-opensci/container-images/py-rocket-geospatial-2:latest + coastwatch: + display_name: Py-R - CoastWatch - coastwatch latest + slug: coastwatch + kubespawner_override: + image: ghcr.io/nmfs-opensci/container-images/coastwatch:latest + aomlomics: + display_name: Py - Tourmaline Snakemake workflow for QIIME 2 v.2023.5 + slug: aomlomics + kubespawner_override: + image: ghcr.io/nmfs-opensci/container-images/aomlomics-jh:latest + iorocker: + display_name: R - Geospatial w sdmTMB - r-geospatial-sdm latest + slug: rgeospatialsdm + kubespawner_override: + image: ghcr.io/nmfs-opensci/container-images/r-geospatial-sdm:latest + echopype: + display_name: Py - Echopype with pangeo - image-acoustics latest + slug: echopype + kubespawner_override: + image: ghcr.io/nmfs-opensci/image-acoustics:latest + arcgis: + display_name: Py - ArcGIS Python 3.9 + slug: arcgis + kubespawner_override: + image: ghcr.io/nmfs-opensci/container-images/arcgis:latest + cboettig: + display_name: Py-R - NASA TOPS - boettiger-lab nasa-tops latest + slug: cboettig + kubespawner_override: + image: ghcr.io/boettiger-lab/nasa-tops:latest + vast: + display_name: R - VAST with TMB - vast latest + kubespawner_override: + image: ghcr.io/nmfs-opensci/container-images/vast:latest + pace: + display_name: Py - PACE image with OCSSW tools + slug: pace + kubespawner_override: + image: quay.io/pacehackweek/pace-2024:latest + unlisted_choice: + enabled: True + display_name: "Custom image" + validation_regex: "^.+:.+$" + validation_message: "Must be a publicly available docker image, of form :" + kubespawner_override: + image: "{value}" + requests: &profile_options_resource_allocation + display_name: Resource Allocation + choices: + # choices generated by combining: + # - deployer generate resource-allocation choices r7i.xlarge + # - deployer generate resource-allocation choices r7i.4xlarge --num-allocations=2 + mem_1_9: + display_name: 1.9 GB RAM, upto 3.7 CPUs + kubespawner_override: + mem_guarantee: 1991244775 + mem_limit: 1991244775 + cpu_guarantee: 0.2328125 + cpu_limit: 3.725 + node_selector: + node.kubernetes.io/instance-type: r5.xlarge + default: true + mem_3_7: + display_name: 3.7 GB RAM, upto 3.7 CPUs + kubespawner_override: + mem_guarantee: 3982489550 + mem_limit: 3982489550 + cpu_guarantee: 0.465625 + cpu_limit: 3.725 + node_selector: + node.kubernetes.io/instance-type: r5.xlarge + mem_7_4: + display_name: 7.4 GB RAM, upto 3.7 CPUs + kubespawner_override: + mem_guarantee: 7964979101 + mem_limit: 7964979101 + cpu_guarantee: 0.93125 + cpu_limit: 3.725 + node_selector: + node.kubernetes.io/instance-type: r5.xlarge + mem_14_8: + display_name: 14.8 GB RAM, upto 3.7 CPUs + kubespawner_override: + mem_guarantee: 15929958203 + mem_limit: 15929958203 + cpu_guarantee: 1.8625 + cpu_limit: 3.725 + node_selector: + node.kubernetes.io/instance-type: r5.xlarge + mem_29_7: + display_name: 29.7 GB RAM, upto 3.7 CPUs + kubespawner_override: + mem_guarantee: 31859916406 + mem_limit: 31859916406 + cpu_guarantee: 3.725 + cpu_limit: 3.725 + node_selector: + node.kubernetes.io/instance-type: r5.xlarge + mem_60_6: + display_name: 60.6 GB RAM, upto 15.6 CPUs + kubespawner_override: + mem_guarantee: 65094448840 + mem_limit: 65094448840 + cpu_guarantee: 7.8475 + cpu_limit: 15.695 + node_selector: + node.kubernetes.io/instance-type: r5.4xlarge + mem_121_2: + display_name: 121.2 GB RAM, upto 15.6 CPUs + kubespawner_override: + mem_guarantee: 130188897681 + mem_limit: 130188897681 + cpu_guarantee: 15.695 + cpu_limit: 15.695 + node_selector: + node.kubernetes.io/instance-type: r5.4xlarge jupyterhub-home-nfs: eks: From e16a8bdcb8ed520178a52b75a1014fba88f0baa9 Mon Sep 17 00:00:00 2001 From: Sarah Gibson Date: Thu, 9 Jan 2025 16:37:29 +0000 Subject: [PATCH 13/13] Update NFS server IP --- config/clusters/nmfs-openscapes/workshop.values.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/config/clusters/nmfs-openscapes/workshop.values.yaml b/config/clusters/nmfs-openscapes/workshop.values.yaml index 7c83eb503e..e732580e10 100644 --- a/config/clusters/nmfs-openscapes/workshop.values.yaml +++ b/config/clusters/nmfs-openscapes/workshop.values.yaml @@ -1,3 +1,7 @@ +nfs: + pv: + serverIP: 10.100.92.26 + jupyterhub: custom: 2i2c: