Skip to content

Commit bd3d24a

Browse files
committed
chore(master): merge maint-0.9 (#753)
ci(runners): upgrade CI runners to Ubuntu 22.04 (#726) feat(rest): add K8s resource requests & limits to info endpoint (#724) build(docker): pin setuptools 70 (#724)
2 parents e04d1fd + b5d4e54 commit bd3d24a

File tree

3 files changed

+237
-6
lines changed

3 files changed

+237
-6
lines changed

docs/openapi.json

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -492,14 +492,38 @@
492492
"title": "Whether users are allowed to spawn custom interactive session images",
493493
"value": "False"
494494
},
495+
"kubernetes_cpu_limit": {
496+
"title": "Default CPU limit for Kubernetes jobs",
497+
"value": "2"
498+
},
499+
"kubernetes_cpu_request": {
500+
"title": "Default CPU request for Kubernetes jobs",
501+
"value": "1"
502+
},
503+
"kubernetes_max_cpu_limit": {
504+
"title": "Maximum allowed CPU limit for Kubernetes jobs",
505+
"value": "4"
506+
},
507+
"kubernetes_max_cpu_request": {
508+
"title": "Maximum allowed CPU request for Kubernetes jobs",
509+
"value": "2"
510+
},
495511
"kubernetes_max_memory_limit": {
496512
"title": "Maximum allowed memory limit for Kubernetes jobs",
497513
"value": "10Gi"
498514
},
515+
"kubernetes_max_memory_request": {
516+
"title": "Maximum allowed memory request for Kubernetes jobs",
517+
"value": "5Gi"
518+
},
499519
"kubernetes_memory_limit": {
500520
"title": "Default memory limit for Kubernetes jobs",
501521
"value": "3Gi"
502522
},
523+
"kubernetes_memory_request": {
524+
"title": "Default memory request for Kubernetes jobs",
525+
"value": "1Gi"
526+
},
503527
"maximum_kubernetes_jobs_timeout": {
504528
"title": "Maximum timeout for Kubernetes jobs",
505529
"value": "1209600"
@@ -680,6 +704,30 @@
680704
},
681705
"type": "object"
682706
},
707+
"default_kubernetes_cpu_limit": {
708+
"properties": {
709+
"title": {
710+
"type": "string"
711+
},
712+
"value": {
713+
"type": "string",
714+
"x-nullable": true
715+
}
716+
},
717+
"type": "object"
718+
},
719+
"default_kubernetes_cpu_request": {
720+
"properties": {
721+
"title": {
722+
"type": "string"
723+
},
724+
"value": {
725+
"type": "string",
726+
"x-nullable": true
727+
}
728+
},
729+
"type": "object"
730+
},
683731
"default_kubernetes_jobs_timeout": {
684732
"properties": {
685733
"title": {
@@ -697,7 +745,20 @@
697745
"type": "string"
698746
},
699747
"value": {
748+
"type": "string",
749+
"x-nullable": true
750+
}
751+
},
752+
"type": "object"
753+
},
754+
"default_kubernetes_memory_request": {
755+
"properties": {
756+
"title": {
700757
"type": "string"
758+
},
759+
"value": {
760+
"type": "string",
761+
"x-nullable": true
701762
}
702763
},
703764
"type": "object"
@@ -738,6 +799,30 @@
738799
},
739800
"type": "object"
740801
},
802+
"kubernetes_max_cpu_limit": {
803+
"properties": {
804+
"title": {
805+
"type": "string"
806+
},
807+
"value": {
808+
"type": "string",
809+
"x-nullable": true
810+
}
811+
},
812+
"type": "object"
813+
},
814+
"kubernetes_max_cpu_request": {
815+
"properties": {
816+
"title": {
817+
"type": "string"
818+
},
819+
"value": {
820+
"type": "string",
821+
"x-nullable": true
822+
}
823+
},
824+
"type": "object"
825+
},
741826
"kubernetes_max_memory_limit": {
742827
"properties": {
743828
"title": {
@@ -750,6 +835,18 @@
750835
},
751836
"type": "object"
752837
},
838+
"kubernetes_max_memory_request": {
839+
"properties": {
840+
"title": {
841+
"type": "string"
842+
},
843+
"value": {
844+
"type": "string",
845+
"x-nullable": true
846+
}
847+
},
848+
"type": "object"
849+
},
753850
"maximum_interactive_session_inactivity_period": {
754851
"properties": {
755852
"title": {

reana_server/config.py

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -99,21 +99,46 @@
9999
)
100100
"""Maximum number of threads for one Dask worker."""
101101

102+
REANA_KUBERNETES_JOBS_CPU_REQUEST = os.getenv("REANA_KUBERNETES_JOBS_CPU_REQUEST")
103+
"""Default cpu request for user job containers."""
104+
105+
REANA_KUBERNETES_JOBS_CPU_LIMIT = os.getenv("REANA_KUBERNETES_JOBS_CPU_LIMIT")
106+
"""Default cpu limit for user job containers."""
107+
108+
REANA_KUBERNETES_JOBS_MEMORY_REQUEST = os.getenv("REANA_KUBERNETES_JOBS_MEMORY_REQUEST")
109+
"""Default memory request for user job containers."""
110+
102111
REANA_KUBERNETES_JOBS_MEMORY_LIMIT = os.getenv("REANA_KUBERNETES_JOBS_MEMORY_LIMIT")
103-
"""Maximum memory limit for user job containers for workflow complexity estimation."""
112+
"""Default memory limit for user job containers."""
104113

105-
REANA_KUBERNETES_JOBS_MEMORY_LIMIT_IN_BYTES = (
106-
kubernetes_memory_to_bytes(REANA_KUBERNETES_JOBS_MEMORY_LIMIT)
107-
if REANA_KUBERNETES_JOBS_MEMORY_LIMIT
108-
else 0
114+
REANA_KUBERNETES_JOBS_MAX_USER_CPU_REQUEST = os.getenv(
115+
"REANA_KUBERNETES_JOBS_MAX_USER_CPU_REQUEST"
109116
)
110-
"""Maximum memory limit for user job containers in bytes."""
117+
"""Maximum cpu request that users can assign to their job containers."""
118+
119+
REANA_KUBERNETES_JOBS_MAX_USER_CPU_LIMIT = os.getenv(
120+
"REANA_KUBERNETES_JOBS_MAX_USER_CPU_LIMIT"
121+
)
122+
"""Maximum cpu limit that users can assign to their job containers."""
123+
124+
REANA_KUBERNETES_JOBS_MAX_USER_MEMORY_REQUEST = os.getenv(
125+
"REANA_KUBERNETES_JOBS_MAX_USER_MEMORY_REQUEST"
126+
)
127+
"""Maximum memory request that users can assign to their job containers."""
111128

112129
REANA_KUBERNETES_JOBS_MAX_USER_MEMORY_LIMIT = os.getenv(
113130
"REANA_KUBERNETES_JOBS_MAX_USER_MEMORY_LIMIT"
114131
)
115132
"""Maximum memory limit that users can assign to their job containers."""
116133

134+
135+
REANA_KUBERNETES_JOBS_MEMORY_LIMIT_IN_BYTES = (
136+
kubernetes_memory_to_bytes(REANA_KUBERNETES_JOBS_MEMORY_LIMIT)
137+
if REANA_KUBERNETES_JOBS_MEMORY_LIMIT
138+
else 0
139+
)
140+
"""Maximum memory limit for user job containers in bytes."""
141+
117142
REANA_KUBERNETES_JOBS_MAX_USER_MEMORY_LIMIT_IN_BYTES = (
118143
kubernetes_memory_to_bytes(REANA_KUBERNETES_JOBS_MAX_USER_MEMORY_LIMIT)
119144
if REANA_KUBERNETES_JOBS_MAX_USER_MEMORY_LIMIT

reana_server/rest/info.py

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,13 @@
2020
from reana_server.config import (
2121
SUPPORTED_COMPUTE_BACKENDS,
2222
WORKSPACE_RETENTION_PERIOD,
23+
REANA_KUBERNETES_JOBS_MAX_USER_CPU_REQUEST,
24+
REANA_KUBERNETES_JOBS_MAX_USER_CPU_LIMIT,
25+
REANA_KUBERNETES_JOBS_MAX_USER_MEMORY_REQUEST,
2326
REANA_KUBERNETES_JOBS_MAX_USER_MEMORY_LIMIT,
27+
REANA_KUBERNETES_JOBS_CPU_REQUEST,
28+
REANA_KUBERNETES_JOBS_CPU_LIMIT,
29+
REANA_KUBERNETES_JOBS_MEMORY_REQUEST,
2430
REANA_KUBERNETES_JOBS_MEMORY_LIMIT,
2531
REANA_KUBERNETES_JOBS_TIMEOUT_LIMIT,
2632
REANA_KUBERNETES_JOBS_MAX_USER_TIMEOUT_LIMIT,
@@ -83,12 +89,37 @@ def info(user, **kwargs): # noqa
8389
value:
8490
type: string
8591
type: object
92+
default_kubernetes_cpu_request:
93+
properties:
94+
title:
95+
type: string
96+
value:
97+
type: string
98+
x-nullable: true
99+
type: object
100+
default_kubernetes_cpu_limit:
101+
properties:
102+
title:
103+
type: string
104+
value:
105+
type: string
106+
x-nullable: true
107+
type: object
108+
default_kubernetes_memory_request:
109+
properties:
110+
title:
111+
type: string
112+
value:
113+
type: string
114+
x-nullable: true
115+
type: object
86116
default_kubernetes_memory_limit:
87117
properties:
88118
title:
89119
type: string
90120
value:
91121
type: string
122+
x-nullable: true
92123
type: object
93124
default_workspace:
94125
properties:
@@ -97,6 +128,30 @@ def info(user, **kwargs): # noqa
97128
value:
98129
type: string
99130
type: object
131+
kubernetes_max_cpu_request:
132+
properties:
133+
title:
134+
type: string
135+
value:
136+
type: string
137+
x-nullable: true
138+
type: object
139+
kubernetes_max_cpu_limit:
140+
properties:
141+
title:
142+
type: string
143+
value:
144+
type: string
145+
x-nullable: true
146+
type: object
147+
kubernetes_max_memory_request:
148+
properties:
149+
title:
150+
type: string
151+
value:
152+
type: string
153+
x-nullable: true
154+
type: object
100155
kubernetes_max_memory_limit:
101156
properties:
102157
title:
@@ -287,10 +342,34 @@ def info(user, **kwargs): # noqa
287342
"slurmcern"
288343
]
289344
},
345+
"kubernetes_cpu_request": {
346+
"title": "Default CPU request for Kubernetes jobs",
347+
"value": "1"
348+
},
349+
"kubernetes_cpu_limit": {
350+
"title": "Default CPU limit for Kubernetes jobs",
351+
"value": "2"
352+
},
353+
"kubernetes_memory_request": {
354+
"title": "Default memory request for Kubernetes jobs",
355+
"value": "1Gi"
356+
},
290357
"kubernetes_memory_limit": {
291358
"title": "Default memory limit for Kubernetes jobs",
292359
"value": "3Gi"
293360
},
361+
"kubernetes_max_cpu_request": {
362+
"title": "Maximum allowed CPU request for Kubernetes jobs",
363+
"value": "2"
364+
},
365+
"kubernetes_max_cpu_limit": {
366+
"title": "Maximum allowed CPU limit for Kubernetes jobs",
367+
"value": "4"
368+
},
369+
"kubernetes_max_memory_request": {
370+
"title": "Maximum allowed memory request for Kubernetes jobs",
371+
"value": "5Gi"
372+
},
294373
"kubernetes_max_memory_limit": {
295374
"title": "Maximum allowed memory limit for Kubernetes jobs",
296375
"value": "10Gi"
@@ -415,10 +494,34 @@ def info(user, **kwargs): # noqa
415494
title="List of supported compute backends",
416495
value=SUPPORTED_COMPUTE_BACKENDS,
417496
),
497+
default_kubernetes_cpu_request=dict(
498+
title="Default CPU request for Kubernetes jobs",
499+
value=REANA_KUBERNETES_JOBS_CPU_REQUEST,
500+
),
501+
default_kubernetes_cpu_limit=dict(
502+
title="Default CPU limit for Kubernetes jobs",
503+
value=REANA_KUBERNETES_JOBS_CPU_LIMIT,
504+
),
505+
default_kubernetes_memory_request=dict(
506+
title="Default memory request for Kubernetes jobs",
507+
value=REANA_KUBERNETES_JOBS_MEMORY_REQUEST,
508+
),
418509
default_kubernetes_memory_limit=dict(
419510
title="Default memory limit for Kubernetes jobs",
420511
value=REANA_KUBERNETES_JOBS_MEMORY_LIMIT,
421512
),
513+
kubernetes_max_cpu_request=dict(
514+
title="Maximum allowed CPU request for Kubernetes jobs",
515+
value=REANA_KUBERNETES_JOBS_MAX_USER_CPU_REQUEST,
516+
),
517+
kubernetes_max_cpu_limit=dict(
518+
title="Maximum allowed CPU limit for Kubernetes jobs",
519+
value=REANA_KUBERNETES_JOBS_MAX_USER_CPU_LIMIT,
520+
),
521+
kubernetes_max_memory_request=dict(
522+
title="Maximum allowed memory request for Kubernetes jobs",
523+
value=REANA_KUBERNETES_JOBS_MAX_USER_MEMORY_REQUEST,
524+
),
422525
kubernetes_max_memory_limit=dict(
423526
title="Maximum allowed memory limit for Kubernetes jobs",
424527
value=REANA_KUBERNETES_JOBS_MAX_USER_MEMORY_LIMIT,
@@ -547,7 +650,13 @@ class InfoSchema(Schema):
547650
workspaces_available = fields.Nested(ListStringInfoValue)
548651
default_workspace = fields.Nested(StringInfoValue)
549652
compute_backends = fields.Nested(ListStringInfoValue)
653+
default_kubernetes_cpu_request = fields.Nested(StringNullableInfoValue)
654+
default_kubernetes_cpu_limit = fields.Nested(StringNullableInfoValue)
655+
default_kubernetes_memory_request = fields.Nested(StringNullableInfoValue)
550656
default_kubernetes_memory_limit = fields.Nested(StringInfoValue)
657+
kubernetes_max_cpu_request = fields.Nested(StringNullableInfoValue)
658+
kubernetes_max_cpu_limit = fields.Nested(StringNullableInfoValue)
659+
kubernetes_max_memory_request = fields.Nested(StringNullableInfoValue)
551660
kubernetes_max_memory_limit = fields.Nested(StringNullableInfoValue)
552661
maximum_workspace_retention_period = fields.Nested(StringNullableInfoValue)
553662
default_kubernetes_jobs_timeout = fields.Nested(StringInfoValue)

0 commit comments

Comments
 (0)