Skip to content

Commit c4f6848

Browse files
committed
added sizes configuration
1 parent d11c630 commit c4f6848

1 file changed

Lines changed: 78 additions & 11 deletions

File tree

‎robusta_cli/main.py‎

Lines changed: 78 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import time
66
import traceback
77
import uuid
8-
from typing import Dict, List, Optional, Union
8+
from typing import Dict, List, Literal, Optional, Union
99

1010
import certifi
1111
import typer
@@ -61,13 +61,66 @@ def add_custom_certificate(custom_ca: str):
6161
app.add_typer(self_host_commands, name="self-host", help="Self-host commands menu")
6262

6363

64+
ClusterSize = Literal["small", "medium", "large"]
65+
66+
# Resource configurations per cluster size (by CPU count):
67+
# small: < 16 CPUs
68+
# medium: 16-128 CPUs
69+
# large: > 128 CPUs
70+
CLUSTER_SIZE_RESOURCES = {
71+
"small": {
72+
"kubewatch": {
73+
"requests": {"memory": "128Mi", "cpu": "50m"},
74+
"limits": {"memory": "128Mi"},
75+
},
76+
"runner": {
77+
"requests": {"memory": "1Gi", "cpu": "100m"},
78+
"limits": {"memory": "1536Mi"},
79+
},
80+
"holmes": {
81+
"requests": {"memory": "1Gi", "cpu": "100m"},
82+
"limits": {"memory": "1Gi"},
83+
},
84+
},
85+
"medium": {
86+
"kubewatch": {
87+
"requests": {"memory": "256Mi", "cpu": "100m"},
88+
"limits": {"memory": "256Mi"},
89+
},
90+
"runner": {
91+
"requests": {"memory": "2Gi", "cpu": "500m"},
92+
"limits": {"memory": "4Gi"},
93+
},
94+
"holmes": {
95+
"requests": {"memory": "2Gi", "cpu": "250m"},
96+
"limits": {"memory": "4Gi"},
97+
},
98+
},
99+
"large": {
100+
"kubewatch": {
101+
"requests": {"memory": "1Gi", "cpu": "200m"},
102+
"limits": {"memory": "1Gi"},
103+
},
104+
"runner": {
105+
"requests": {"memory": "4Gi", "cpu": "1000m"},
106+
"limits": {"memory": "6Gi"},
107+
},
108+
"holmes": {
109+
"requests": {"memory": "2Gi", "cpu": "500m"},
110+
"limits": {"memory": "4Gi"},
111+
},
112+
},
113+
}
114+
115+
64116
class GlobalConfig(BaseModel):
65117
signing_key: str = ""
66118
account_id: str = ""
67119

68120

69121
class HolmesConfig(BaseModel):
70122
additional_env_vars: List[Dict[str, str]]
123+
resources: Optional[Dict] = None
71124

72125

73126
class HelmValues(BaseModel, extra=Extra.allow):
@@ -82,7 +135,7 @@ class HelmValues(BaseModel, extra=Extra.allow):
82135
kubewatch: Dict = None
83136
grafanaRenderer: Dict = None
84137
runner: Dict = None
85-
enableHolmesGPT: Optional[bool] = None
138+
enableHolmesGPT: Optional[bool] = None
86139
holmes: Optional[HolmesConfig] = None
87140

88141

@@ -114,7 +167,11 @@ def gen_config(
114167
),
115168
is_small_cluster: bool = typer.Option(
116169
None,
117-
help="Local/Small cluster",
170+
help="[Deprecated: use --cluster-size] Local/Small cluster",
171+
),
172+
cluster_size: Optional[ClusterSize] = typer.Option(
173+
None,
174+
help="Cluster size: small (< 16 CPUs), medium (16-128 CPUs), large (> 128 CPUs)",
118175
),
119176
slack_api_key: str = typer.Option(
120177
"",
@@ -248,7 +305,6 @@ def gen_config(
248305

249306
values = HelmValues(
250307
clusterName=cluster_name,
251-
isSmallCluster=is_small_cluster,
252308
globalConfig=GlobalConfig(signing_key=signing_key, account_id=account_id),
253309
sinksConfig=sinks_config,
254310
enablePrometheusStack=enable_prometheus_stack,
@@ -276,13 +332,6 @@ def gen_config(
276332
},
277333
]
278334

279-
if is_small_cluster:
280-
setattr(values, "kube-prometheus-stack", {})
281-
kube_stack = getattr(values, "kube-prometheus-stack")
282-
kube_stack["prometheus"] = {
283-
"prometheusSpec": {"resources": {"requests": {"memory": "300Mi"}, "limits": {"memory": "300Mi"}}},
284-
}
285-
286335
if robusta_api_key:
287336
values.enableHolmesGPT = True
288337
values.holmes = HolmesConfig(additional_env_vars=[
@@ -292,6 +341,24 @@ def gen_config(
292341
}
293342
])
294343

344+
# cluster_size (new) and is_small_cluster (legacy) are mutually exclusive
345+
if cluster_size:
346+
size_resources = CLUSTER_SIZE_RESOURCES.get(cluster_size)
347+
if size_resources:
348+
if "kubewatch" in size_resources:
349+
values.kubewatch = {"resources": size_resources["kubewatch"]}
350+
if "runner" in size_resources:
351+
values.runner["resources"] = size_resources["runner"]
352+
if "holmes" in size_resources and values.holmes:
353+
values.holmes.resources = size_resources["holmes"]
354+
elif is_small_cluster:
355+
values.isSmallCluster = is_small_cluster
356+
setattr(values, "kube-prometheus-stack", {})
357+
kube_stack = getattr(values, "kube-prometheus-stack")
358+
kube_stack["prometheus"] = {
359+
"prometheusSpec": {"resources": {"requests": {"memory": "300Mi"}, "limits": {"memory": "300Mi"}}},
360+
}
361+
295362
write_values_file(output_path, values)
296363

297364
if robusta_api_key:

0 commit comments

Comments
 (0)