github.com/gocrane/crane@v0.11.0/pkg/recommendation/recommender/hpa/filter.go (about) 1 package hpa 2 3 import ( 4 "context" 5 6 autoscalingv2 "k8s.io/api/autoscaling/v2beta2" 7 "sigs.k8s.io/controller-runtime/pkg/client" 8 9 autoscalingapi "github.com/gocrane/api/autoscaling/v1alpha1" 10 11 "github.com/gocrane/crane/pkg/known" 12 "github.com/gocrane/crane/pkg/recommendation/framework" 13 ) 14 15 // Filter out k8s resources that are not supported by the recommender. 16 func (rr *HPARecommender) Filter(ctx *framework.RecommendationContext) error { 17 if err := rr.ReplicasRecommender.Filter(ctx); err != nil { 18 return err 19 } 20 21 hpaList := &autoscalingv2.HorizontalPodAutoscalerList{} 22 opts := []client.ListOption{ 23 client.InNamespace(ctx.Recommendation.Spec.TargetRef.Namespace), 24 } 25 err := ctx.Client.List(context.TODO(), hpaList, opts...) 26 if err != nil { 27 return err 28 } 29 30 for _, hpa := range hpaList.Items { 31 // bypass hpa that controller by ehpa 32 if hpa.Labels != nil && hpa.Labels["app.kubernetes.io/managed-by"] == known.EffectiveHorizontalPodAutoscalerManagedBy { 33 continue 34 } 35 36 if hpa.Spec.ScaleTargetRef.Name == ctx.Recommendation.Spec.TargetRef.Name && 37 hpa.Spec.ScaleTargetRef.Kind == ctx.Recommendation.Spec.TargetRef.Kind && 38 hpa.Spec.ScaleTargetRef.APIVersion == ctx.Recommendation.Spec.TargetRef.APIVersion { 39 ctx.HPA = &hpa 40 break 41 } 42 } 43 44 ehpaList := &autoscalingapi.EffectiveHorizontalPodAutoscalerList{} 45 opts = []client.ListOption{ 46 client.InNamespace(ctx.Recommendation.Spec.TargetRef.Namespace), 47 } 48 err = ctx.Client.List(context.TODO(), ehpaList, opts...) 49 if err != nil { 50 return err 51 } 52 53 for _, ehpa := range ehpaList.Items { 54 if ehpa.Spec.ScaleTargetRef.Name == ctx.Recommendation.Spec.TargetRef.Name && 55 ehpa.Spec.ScaleTargetRef.Kind == ctx.Recommendation.Spec.TargetRef.Kind && 56 ehpa.Spec.ScaleTargetRef.APIVersion == ctx.Recommendation.Spec.TargetRef.APIVersion { 57 ctx.EHPA = &ehpa 58 break 59 } 60 } 61 62 return nil 63 }