55import time
66import traceback
77import uuid
8- from typing import Dict , List , Optional , Union
8+ from typing import Dict , List , Literal , Optional , Union
99
1010import certifi
1111import typer
@@ -61,13 +61,66 @@ def add_custom_certificate(custom_ca: str):
6161app .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+
64116class GlobalConfig (BaseModel ):
65117 signing_key : str = ""
66118 account_id : str = ""
67119
68120
69121class HolmesConfig (BaseModel ):
70122 additional_env_vars : List [Dict [str , str ]]
123+ resources : Optional [Dict ] = None
71124
72125
73126class 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