github.com/gocrane/crane@v0.11.0/pkg/recommendation/recommender/replicas/registry.go (about) 1 package replicas 2 3 import ( 4 analysisv1alph1 "github.com/gocrane/api/analysis/v1alpha1" 5 "github.com/gocrane/crane/pkg/recommendation/config" 6 "github.com/gocrane/crane/pkg/recommendation/recommender" 7 "github.com/gocrane/crane/pkg/recommendation/recommender/apis" 8 "github.com/gocrane/crane/pkg/recommendation/recommender/base" 9 ) 10 11 var _ recommender.Recommender = &ReplicasRecommender{} 12 13 type ReplicasRecommender struct { 14 base.BaseRecommender 15 WorkloadMinReplicas int64 16 PodMinReadySeconds int64 17 PodAvailableRatio float64 18 CpuPercentile float64 19 MemPercentile float64 20 DefaultMinReplicas int64 21 CPUTargetUtilization float64 22 MemTargetUtilization float64 23 } 24 25 func init() { 26 recommender.RegisterRecommenderProvider(recommender.ReplicasRecommender, NewReplicasRecommender) 27 } 28 29 func (rr *ReplicasRecommender) Name() string { 30 return recommender.ReplicasRecommender 31 } 32 33 // NewReplicasRecommender create a new replicas recommender. 34 func NewReplicasRecommender(recommender apis.Recommender, recommendationRule analysisv1alph1.RecommendationRule) (recommender.Recommender, error) { 35 recommender = config.MergeRecommenderConfigFromRule(recommender, recommendationRule) 36 37 workloadMinReplicasInt, err := recommender.GetConfigInt("workload-min-replicas", 1) 38 if err != nil { 39 return nil, err 40 } 41 42 podMinReadySeconds, err := recommender.GetConfigInt("pod-min-ready-seconds", 30) 43 if err != nil { 44 return nil, err 45 } 46 47 podAvailableRatio, err := recommender.GetConfigFloat("pod-available-ratio", 0.5) 48 if err != nil { 49 return nil, err 50 } 51 52 cpuPercentileFloat, err := recommender.GetConfigFloat("cpu-percentile", 0.95) 53 if err != nil { 54 return nil, err 55 } 56 cpuPercentileFloat = cpuPercentileFloat * 100 57 58 memPercentileFloat, err := recommender.GetConfigFloat("mem-percentile", 0.95) 59 if err != nil { 60 return nil, err 61 } 62 memPercentileFloat = memPercentileFloat * 100 63 64 defaultMinReplicasInt, err := recommender.GetConfigInt("default-min-replicas", 1) 65 if err != nil { 66 return nil, err 67 } 68 69 cpuTargetUtilizationFloat, err := recommender.GetConfigFloat("cpu-target-utilization", 0.5) 70 if err != nil { 71 return nil, err 72 } 73 74 memTargetUtilizationFloat, err := recommender.GetConfigFloat("mem-target-utilization", 0.5) 75 if err != nil { 76 return nil, err 77 } 78 79 return &ReplicasRecommender{ 80 *base.NewBaseRecommender(recommender), 81 workloadMinReplicasInt, 82 podMinReadySeconds, 83 podAvailableRatio, 84 cpuPercentileFloat, 85 memPercentileFloat, 86 defaultMinReplicasInt, 87 cpuTargetUtilizationFloat, 88 memTargetUtilizationFloat, 89 }, nil 90 }