Skip to content

Commit e6ed45a

Browse files
authored
Merge pull request 2i2c-org#3566 from yuvipanda/resource-alloc
Use generated resource allocation options for veda hub
2 parents 9a16b57 + c822e4d commit e6ed45a

File tree

3 files changed

+152
-227
lines changed

3 files changed

+152
-227
lines changed

config/clusters/nasa-veda/common.values.yaml

Lines changed: 141 additions & 216 deletions
Original file line numberDiff line numberDiff line change
@@ -59,31 +59,147 @@ basehub:
5959
- wildintellect
6060
singleuser:
6161
defaultUrl: /lab
62-
image:
63-
name: public.ecr.aws/nasa-veda/nasa-veda-singleuser
64-
# Based off pangeo/pangeo-notebook:2023.07.05 which uses JupyterLab <4, so jupyterlab-git and dask-dashboard work
65-
# If updating this tag, also update it in the `profile_options.image.options.pangeo.kubespawner_override.image`below
66-
tag: "5068290376e8c3151d97a36ae6485bb7ff79650b94aecc93ffb2ea1b42d76460"
6762
profileList:
68-
# NOTE: About node sharing
69-
#
70-
# CPU/Memory requests/limits are actively considered still. This
71-
# profile list is setup to involve node sharing as considered in
72-
# https://github.com/2i2c-org/infrastructure/issues/2121.
73-
#
74-
# - Memory requests are different from the description, based on:
75-
# whats found to remain allocate in k8s, subtracting 1GiB
76-
# overhead for misc system pods, and transitioning from GB in
77-
# description to GiB in mem_guarantee.
78-
# - CPU requests are lower than the description, with a factor of
79-
# 10%.
80-
#
81-
- display_name: "Small: up to 4 CPU / 32 GB RAM"
82-
description: &profile_list_description "Start a container with at least a chosen share of capacity on a node of this type"
83-
slug: small
63+
- display_name: "Modified Pangeo Notebook"
64+
slug: modified-pangeo
65+
description: Pangeo based notebook with a Python environment
8466
default: true
67+
kubespawner_override:
68+
image: public.ecr.aws/nasa-veda/nasa-veda-singleuser:5068290376e8c3151d97a36ae6485bb7ff79650b94aecc93ffb2ea1b42d76460
69+
init_containers:
70+
# Need to explicitly fix ownership here, as otherwise these directories will be owned
71+
# by root on most NFS filesystems - neither EFS nor Google Filestore support anonuid
72+
- name: volume-mount-ownership-fix
73+
image: busybox:1.36.1
74+
command:
75+
- sh
76+
- -c
77+
- id && chown 1000:1000 /home/jovyan /home/jovyan/shared && ls -lhd /home/jovyan
78+
securityContext:
79+
runAsUser: 0
80+
volumeMounts:
81+
- name: home
82+
mountPath: /home/jovyan
83+
subPath: "{username}"
84+
# mounted without readonly attribute here,
85+
# so we can chown it appropriately
86+
- name: home
87+
mountPath: /home/jovyan/shared
88+
subPath: _shared
89+
# this container uses nbgitpuller to mount https://github.com/NASA-IMPACT/veda-docs/ for user pods
90+
# image source: https://github.com/NASA-IMPACT/veda-jh-environments/tree/main/docker-images/base/nasa-veda-singleuser-init
91+
- name: nasa-veda-singleuser-init
92+
image: public.ecr.aws/nasa-veda/nasa-veda-singleuser-init:38e8998f9be64b0a59ac6c4d6d152d3403121dfc4be6d49bdf52ddc92827af8a
93+
command:
94+
- "python3"
95+
- "/opt/k8s-init-container-nb-docs.py"
96+
- "/home/jovyan"
97+
volumeMounts:
98+
- name: home
99+
mountPath: /home/jovyan
100+
subPath: "{username}"
101+
securityContext:
102+
runAsUser: 1000
103+
runAsGroup: 1000
104+
profile_options: &profile_options
105+
resource_allocation: &profile_options_resource_allocation
106+
display_name: Resource Allocation
107+
choices:
108+
mem_1_9:
109+
display_name: 1.9 GB RAM, upto 3.75 CPUs
110+
kubespawner_override:
111+
mem_guarantee: 1991341312
112+
mem_limit: 1991341312
113+
cpu_guarantee: 0.234375
114+
cpu_limit: 3.75
115+
node_selector:
116+
node.kubernetes.io/instance-type: r5.xlarge
117+
default: true
118+
mem_3_7:
119+
display_name: 3.7 GB RAM, upto 3.75 CPUs
120+
kubespawner_override:
121+
mem_guarantee: 3982682624
122+
mem_limit: 3982682624
123+
cpu_guarantee: 0.46875
124+
cpu_limit: 3.75
125+
node_selector:
126+
node.kubernetes.io/instance-type: r5.xlarge
127+
mem_7_4:
128+
display_name: 7.4 GB RAM, upto 3.75 CPUs
129+
kubespawner_override:
130+
mem_guarantee: 7965365248
131+
mem_limit: 7965365248
132+
cpu_guarantee: 0.9375
133+
cpu_limit: 3.75
134+
node_selector:
135+
node.kubernetes.io/instance-type: r5.xlarge
136+
mem_14_8:
137+
display_name: 14.8 GB RAM, upto 3.75 CPUs
138+
kubespawner_override:
139+
mem_guarantee: 15930730496
140+
mem_limit: 15930730496
141+
cpu_guarantee: 1.875
142+
cpu_limit: 3.75
143+
node_selector:
144+
node.kubernetes.io/instance-type: r5.xlarge
145+
mem_29_7:
146+
display_name: 29.7 GB RAM, upto 3.75 CPUs
147+
kubespawner_override:
148+
mem_guarantee: 31861460992
149+
mem_limit: 31861460992
150+
cpu_guarantee: 3.75
151+
cpu_limit: 3.75
152+
node_selector:
153+
node.kubernetes.io/instance-type: r5.xlarge
154+
155+
mem_60_7:
156+
display_name: 60.7 GB RAM, upto 15.725 CPUs
157+
kubespawner_override:
158+
mem_guarantee: 65147242496
159+
mem_limit: 65147242496
160+
cpu_guarantee: 7.8625
161+
cpu_limit: 15.725
162+
node_selector:
163+
node.kubernetes.io/instance-type: r5.4xlarge
164+
mem_121_3:
165+
display_name: 121.3 GB RAM, upto 15.725 CPUs
166+
kubespawner_override:
167+
mem_guarantee: 130294484992
168+
mem_limit: 130294484992
169+
cpu_guarantee: 15.725
170+
cpu_limit: 15.725
171+
node_selector:
172+
node.kubernetes.io/instance-type: r5.4xlarge
173+
- display_name: "Rocker Geospatial with RStudio"
174+
slug: rocker
175+
description: R environment with many geospatial libraries pre-installed
176+
kubespawner_override:
177+
image: rocker/binder:4.3
178+
# Launch RStudio after the user logs in
179+
default_url: /rstudio
180+
# Ensures container working dir is homedir
181+
# https://github.com/2i2c-org/infrastructure/issues/2559
182+
working_dir: /home/rstudio
183+
profile_options: *profile_options
184+
- display_name: "QGIS on Linux Desktop"
185+
slug: qgis
186+
description: Linux desktop in the browser, with qgis installed
187+
kubespawner_override:
188+
# Explicitly unset this - we set this to 'jupyterhub-singleuser'
189+
# in basehub/values.yaml. We instead want to leave this unset,
190+
# so the default command for the docker image is used instead.
191+
# This is required for .desktop files to show up correctly.
192+
cmd: null
193+
# Launch people directly into the Linux desktop when they start
194+
default_url: /desktop
195+
# Built from https://github.com/jupyterhub/jupyter-remote-desktop-proxy/pull/51
196+
image: "quay.io/jupyter-remote-desktop-proxy/qgis:2023-09-27"
197+
profile_options: *profile_options
198+
- display_name: "Bring your own image"
199+
description: Specify your own docker image (must have python and jupyterhub installed in it)
200+
slug: custom
85201
profile_options:
86-
image: &image_options
202+
image:
87203
display_name: Image
88204
unlisted_choice:
89205
enabled: True
@@ -92,200 +208,9 @@ basehub:
92208
validation_message: "Must be a publicly available docker image, of form <image-name>:<tag>"
93209
kubespawner_override:
94210
image: "{value}"
95-
choices:
96-
pangeo:
97-
display_name: Modified Pangeo Notebook
98-
default: true
99-
slug: pangeo
100-
kubespawner_override:
101-
image: public.ecr.aws/nasa-veda/nasa-veda-singleuser:5068290376e8c3151d97a36ae6485bb7ff79650b94aecc93ffb2ea1b42d76460
102-
init_containers:
103-
# Need to explicitly fix ownership here, as otherwise these directories will be owned
104-
# by root on most NFS filesystems - neither EFS nor Google Filestore support anonuid
105-
- name: volume-mount-ownership-fix
106-
image: busybox:1.36.1
107-
command:
108-
- sh
109-
- -c
110-
- id && chown 1000:1000 /home/jovyan /home/jovyan/shared && ls -lhd /home/jovyan
111-
securityContext:
112-
runAsUser: 0
113-
volumeMounts:
114-
- name: home
115-
mountPath: /home/jovyan
116-
subPath: "{username}"
117-
# mounted without readonly attribute here,
118-
# so we can chown it appropriately
119-
- name: home
120-
mountPath: /home/jovyan/shared
121-
subPath: _shared
122-
# this container uses nbgitpuller to mount https://github.com/NASA-IMPACT/veda-docs/ for user pods
123-
# image source: https://github.com/NASA-IMPACT/veda-jh-environments/tree/main/docker-images/base/nasa-veda-singleuser-init
124-
- name: nasa-veda-singleuser-init
125-
image: public.ecr.aws/nasa-veda/nasa-veda-singleuser-init:38e8998f9be64b0a59ac6c4d6d152d3403121dfc4be6d49bdf52ddc92827af8a
126-
command:
127-
- "python3"
128-
- "/opt/k8s-init-container-nb-docs.py"
129-
- "/home/jovyan"
130-
volumeMounts:
131-
- name: home
132-
mountPath: /home/jovyan
133-
subPath: "{username}"
134-
securityContext:
135-
runAsUser: 1000
136-
runAsGroup: 1000
137-
qgis:
138-
display_name: QGIS on Linux Desktop
139-
slug: qgis
140-
kubespawner_override:
141-
# Explicitly unset this - we set this to 'jupyterhub-singleuser'
142-
# in basehub/values.yaml. We instead want to leave this unset,
143-
# so the default command for the docker image is used instead.
144-
# This is required for .desktop files to show up correctly.
145-
cmd: null
146-
# Launch people directly into the Linux desktop when they start
147-
default_url: /desktop
148-
# Built from https://github.com/jupyterhub/jupyter-remote-desktop-proxy/pull/51
149-
image: "quay.io/jupyter-remote-desktop-proxy/qgis:2023-09-27"
150-
rocker:
151-
display_name: Rocker Geospatial with RStudio
152-
slug: rocker
153-
kubespawner_override:
154-
image: rocker/binder:4.3
155-
# Launch RStudio after the user logs in
156-
default_url: /rstudio
157-
# Ensures container working dir is homedir
158-
# https://github.com/2i2c-org/infrastructure/issues/2559
159-
working_dir: /home/rstudio
160-
init_containers:
161-
# Need to explicitly fix ownership here, as otherwise these directories will be owned
162-
# by root on most NFS filesystems - neither EFS nor Google Filestore support anonuid
163-
- name: volume-mount-ownership-fix
164-
image: busybox:1.36.1
165-
command:
166-
[
167-
"sh",
168-
"-c",
169-
"id && chown 1000:1000 /home/rstudio && ls -lhd /home/rstudio ",
170-
]
171-
securityContext:
172-
runAsUser: 0
173-
volumeMounts:
174-
- name: home
175-
mountPath: /home/rstudio
176-
subPath: "{username}"
177-
# this container uses nbgitpuller to mount https://github.com/NASA-IMPACT/veda-docs/ for user pods
178-
# image source: https://github.com/NASA-IMPACT/veda-jh-environments/tree/main/docker-images/base/nasa-veda-singleuser-init
179-
- name: nasa-veda-singleuser-init
180-
image: public.ecr.aws/nasa-veda/nasa-veda-singleuser-init:38e8998f9be64b0a59ac6c4d6d152d3403121dfc4be6d49bdf52ddc92827af8a
181-
command:
182-
- "python3"
183-
- "/opt/k8s-init-container-nb-docs.py"
184-
- "/home/rstudio"
185-
volumeMounts:
186-
- name: home
187-
mountPath: /home/rstudio
188-
subPath: "{username}"
189-
securityContext:
190-
runAsUser: 1000
191-
runAsGroup: 1000
192-
requests:
193-
# NOTE: Node share choices are in active development, see comment
194-
# next to profileList: above.
195-
display_name: Node share
196-
choices:
197-
mem_1:
198-
default: true
199-
display_name: ~1 GB, ~0.125 CPU
200-
kubespawner_override:
201-
mem_guarantee: 0.904G
202-
cpu_guarantee: 0.013
203-
mem_2:
204-
display_name: ~2 GB, ~0.25 CPU
205-
kubespawner_override:
206-
mem_guarantee: 1.809G
207-
cpu_guarantee: 0.025
208-
mem_4:
209-
display_name: ~4 GB, ~0.5 CPU
210-
kubespawner_override:
211-
mem_guarantee: 3.617G
212-
cpu_guarantee: 0.05
213-
mem_8:
214-
display_name: ~8 GB, ~1.0 CPU
215-
kubespawner_override:
216-
mem_guarantee: 7.234G
217-
cpu_guarantee: 0.1
218-
mem_16:
219-
display_name: ~16 GB, ~2.0 CPU
220-
kubespawner_override:
221-
mem_guarantee: 14.469G
222-
cpu_guarantee: 0.2
223-
mem_32:
224-
display_name: ~32 GB, ~4.0 CPU
225-
kubespawner_override:
226-
mem_guarantee: 28.937G
227-
cpu_guarantee: 0.4
228-
kubespawner_override:
229-
cpu_limit: null
230-
mem_limit: null
231-
node_selector:
232-
node.kubernetes.io/instance-type: r5.xlarge
233-
- display_name: "Medium: up to 16 CPU / 128 GB RAM"
234-
description: *profile_list_description
235-
slug: medium
236-
profile_options:
237-
image: *image_options
238-
requests:
239-
# NOTE: Node share choices are in active development, see comment
240-
# next to profileList: above.
241-
display_name: Node share
242-
choices:
243-
mem_1:
244-
display_name: ~1 GB, ~0.125 CPU
245-
kubespawner_override:
246-
mem_guarantee: 0.942G
247-
cpu_guarantee: 0.013
248-
mem_2:
249-
display_name: ~2 GB, ~0.25 CPU
250-
kubespawner_override:
251-
mem_guarantee: 1.883G
252-
cpu_guarantee: 0.025
253-
mem_4:
254-
default: true
255-
display_name: ~4 GB, ~0.5 CPU
256-
kubespawner_override:
257-
mem_guarantee: 3.766G
258-
cpu_guarantee: 0.05
259-
mem_8:
260-
display_name: ~8 GB, ~1.0 CPU
261-
kubespawner_override:
262-
mem_guarantee: 7.532G
263-
cpu_guarantee: 0.1
264-
mem_16:
265-
display_name: ~16 GB, ~2.0 CPU
266-
kubespawner_override:
267-
mem_guarantee: 15.064G
268-
cpu_guarantee: 0.2
269-
mem_32:
270-
display_name: ~32 GB, ~4.0 CPU
271-
kubespawner_override:
272-
mem_guarantee: 30.128G
273-
cpu_guarantee: 0.4
274-
mem_64:
275-
display_name: ~64 GB, ~8.0 CPU
276-
kubespawner_override:
277-
mem_guarantee: 60.257G
278-
cpu_guarantee: 0.8
279-
mem_128:
280-
display_name: ~128 GB, ~16.0 CPU
281-
kubespawner_override:
282-
mem_guarantee: 120.513G
283-
cpu_guarantee: 1.6
284-
kubespawner_override:
285-
cpu_limit: null
286-
mem_limit: null
287-
node_selector:
288-
node.kubernetes.io/instance-type: r5.4xlarge
211+
choices: {}
212+
resource_allocation: *profile_options_resource_allocation
213+
289214
scheduling:
290215
userScheduler:
291216
enabled: true

deployer/commands/generate/resource_allocation/instance_capacities.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,9 +131,9 @@ r5.4xlarge:
131131
cpu_capacity_high: 16.0
132132
cpu_allocatable_low: 15.89
133133
cpu_allocatable_high: 15.89
134-
mem_capacity_low: 124.364Gi
134+
mem_capacity_low: 124.353Gi
135135
mem_capacity_high: 124.364Gi
136-
mem_allocatable_low: 121.504Gi
136+
mem_allocatable_low: 121.492Gi
137137
mem_allocatable_high: 121.504Gi
138138
m5.large:
139139
cpu_capacity_low: 2.0

0 commit comments

Comments
 (0)