Skip to content

Commit 6147bdc

Browse files
authored
ROB-3611: added sizes configuration (#21)
* added sizes configuration * fixed linter error
1 parent 22b7044 commit 6147bdc

1 file changed

Lines changed: 81 additions & 10 deletions

File tree

robusta_cli/main.py

Lines changed: 81 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import time
66
import traceback
77
import uuid
8+
from enum import Enum
89
from typing import Dict, List, Optional, Union
910

1011
import certifi
@@ -61,13 +62,69 @@ def add_custom_certificate(custom_ca: str):
6162
app.add_typer(self_host_commands, name="self-host", help="Self-host commands menu")
6263

6364

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

68124

69125
class HolmesConfig(BaseModel):
70126
additional_env_vars: List[Dict[str, str]]
127+
resources: Optional[Dict] = None
71128

72129

73130
class HelmValues(BaseModel, extra=Extra.allow):
@@ -82,7 +139,7 @@ class HelmValues(BaseModel, extra=Extra.allow):
82139
kubewatch: Dict = None
83140
grafanaRenderer: Dict = None
84141
runner: Dict = None
85-
enableHolmesGPT: Optional[bool] = None
142+
enableHolmesGPT: Optional[bool] = None
86143
holmes: Optional[HolmesConfig] = None
87144

88145

@@ -114,7 +171,11 @@ def gen_config(
114171
),
115172
is_small_cluster: bool = typer.Option(
116173
None,
117-
help="Local/Small cluster",
174+
help="[Deprecated: use --cluster-size] Local/Small cluster",
175+
),
176+
cluster_size: Optional[ClusterSize] = typer.Option(
177+
None,
178+
help="Cluster size: small (< 16 CPUs), medium (16-128 CPUs), large (> 128 CPUs)",
118179
),
119180
slack_api_key: str = typer.Option(
120181
"",
@@ -248,7 +309,6 @@ def gen_config(
248309

249310
values = HelmValues(
250311
clusterName=cluster_name,
251-
isSmallCluster=is_small_cluster,
252312
globalConfig=GlobalConfig(signing_key=signing_key, account_id=account_id),
253313
sinksConfig=sinks_config,
254314
enablePrometheusStack=enable_prometheus_stack,
@@ -280,13 +340,6 @@ def gen_config(
280340
},
281341
]
282342

283-
if is_small_cluster:
284-
setattr(values, "kube-prometheus-stack", {})
285-
kube_stack = getattr(values, "kube-prometheus-stack")
286-
kube_stack["prometheus"] = {
287-
"prometheusSpec": {"resources": {"requests": {"memory": "300Mi"}, "limits": {"memory": "300Mi"}}},
288-
}
289-
290343
if robusta_api_key:
291344
values.enableHolmesGPT = True
292345
values.holmes = HolmesConfig(additional_env_vars=[
@@ -296,6 +349,24 @@ def gen_config(
296349
}
297350
])
298351

352+
# cluster_size (new) and is_small_cluster (legacy) are mutually exclusive
353+
if cluster_size:
354+
size_resources = CLUSTER_SIZE_RESOURCES.get(cluster_size.value)
355+
if size_resources:
356+
if "kubewatch" in size_resources:
357+
values.kubewatch = {"resources": size_resources["kubewatch"]}
358+
if "runner" in size_resources:
359+
values.runner["resources"] = size_resources["runner"]
360+
if "holmes" in size_resources and values.holmes:
361+
values.holmes.resources = size_resources["holmes"]
362+
elif is_small_cluster:
363+
values.isSmallCluster = is_small_cluster
364+
setattr(values, "kube-prometheus-stack", {})
365+
kube_stack = getattr(values, "kube-prometheus-stack")
366+
kube_stack["prometheus"] = {
367+
"prometheusSpec": {"resources": {"requests": {"memory": "300Mi"}, "limits": {"memory": "300Mi"}}},
368+
}
369+
299370
write_values_file(output_path, values)
300371

301372
if robusta_api_key:

0 commit comments

Comments
 (0)