55import time
66import traceback
77import uuid
8+ from enum import Enum
89from typing import Dict , List , Optional , Union
910
1011import certifi
@@ -61,13 +62,69 @@ def add_custom_certificate(custom_ca: str):
6162app .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+
64120class GlobalConfig (BaseModel ):
65121 signing_key : str = ""
66122 account_id : str = ""
67123
68124
69125class HolmesConfig (BaseModel ):
70126 additional_env_vars : List [Dict [str , str ]]
127+ resources : Optional [Dict ] = None
71128
72129
73130class 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