in pkg/operator/scaling.go [101:254]
func applyVPA(ctx context.Context, c client.Client, namespace string) error {
alertmanagerVPA := autoscalingv1.VerticalPodAutoscaler{
ObjectMeta: metav1.ObjectMeta{
Namespace: namespace,
Name: alertmanagerVPAName,
},
}
if _, err := controllerutil.CreateOrUpdate(ctx, c, &alertmanagerVPA, func() error {
alertmanagerVPA.Spec = autoscalingv1.VerticalPodAutoscalerSpec{
TargetRef: &autoscaling.CrossVersionObjectReference{
APIVersion: "apps/v1",
Kind: "StatefulSet",
Name: alertmanagerVPAName,
},
UpdatePolicy: &autoscalingv1.PodUpdatePolicy{
MinReplicas: ptr.To(int32(1)),
UpdateMode: ptr.To(autoscalingv1.UpdateModeAuto),
},
ResourcePolicy: &autoscalingv1.PodResourcePolicy{
ContainerPolicies: []autoscalingv1.ContainerResourcePolicy{
{
ContainerName: "alertmanager",
Mode: ptr.To(autoscalingv1.ContainerScalingModeAuto),
MinAllowed: corev1.ResourceList{
corev1.ResourceCPU: resource.MustParse("1m"),
corev1.ResourceMemory: resource.MustParse("16Mi"),
},
},
{
ContainerName: "config-reloader",
Mode: ptr.To(autoscalingv1.ContainerScalingModeOff),
},
},
},
}
return nil
}); err != nil {
return err
}
collectorVPA := autoscalingv1.VerticalPodAutoscaler{
ObjectMeta: metav1.ObjectMeta{
Namespace: namespace,
Name: collectorVPAName,
},
}
if _, err := controllerutil.CreateOrUpdate(ctx, c, &collectorVPA, func() error {
collectorVPA.Spec = autoscalingv1.VerticalPodAutoscalerSpec{
TargetRef: &autoscaling.CrossVersionObjectReference{
APIVersion: "apps/v1",
Kind: "DaemonSet",
Name: collectorVPAName,
},
UpdatePolicy: &autoscalingv1.PodUpdatePolicy{
UpdateMode: ptr.To(autoscalingv1.UpdateModeAuto),
},
ResourcePolicy: &autoscalingv1.PodResourcePolicy{
ContainerPolicies: []autoscalingv1.ContainerResourcePolicy{
{
ContainerName: "prometheus",
Mode: ptr.To(autoscalingv1.ContainerScalingModeAuto),
MinAllowed: corev1.ResourceList{
corev1.ResourceCPU: resource.MustParse("4m"),
corev1.ResourceMemory: resource.MustParse("32Mi"),
},
},
{
ContainerName: "config-reloader",
Mode: ptr.To(autoscalingv1.ContainerScalingModeOff),
},
},
},
}
return nil
}); err != nil {
return err
}
operatorVPA := autoscalingv1.VerticalPodAutoscaler{
ObjectMeta: metav1.ObjectMeta{
Namespace: namespace,
Name: operatorVPAName,
},
}
if _, err := controllerutil.CreateOrUpdate(ctx, c, &operatorVPA, func() error {
collectorVPA.Spec = autoscalingv1.VerticalPodAutoscalerSpec{
TargetRef: &autoscaling.CrossVersionObjectReference{
APIVersion: "apps/v1",
Kind: "Deployment",
Name: operatorVPAName,
},
UpdatePolicy: &autoscalingv1.PodUpdatePolicy{
MinReplicas: ptr.To(int32(1)),
UpdateMode: ptr.To(autoscalingv1.UpdateModeAuto),
},
ResourcePolicy: &autoscalingv1.PodResourcePolicy{
ContainerPolicies: []autoscalingv1.ContainerResourcePolicy{
{
ContainerName: "operator",
Mode: ptr.To(autoscalingv1.ContainerScalingModeAuto),
MinAllowed: corev1.ResourceList{
corev1.ResourceCPU: resource.MustParse("1m"),
corev1.ResourceMemory: resource.MustParse("16Mi"),
},
},
},
},
}
return nil
}); err != nil {
return err
}
ruleEvaluatorVPA := autoscalingv1.VerticalPodAutoscaler{
ObjectMeta: metav1.ObjectMeta{
Namespace: namespace,
Name: ruleEvaluatorVPAName,
},
}
if _, err := controllerutil.CreateOrUpdate(ctx, c, &ruleEvaluatorVPA, func() error {
collectorVPA.Spec = autoscalingv1.VerticalPodAutoscalerSpec{
TargetRef: &autoscaling.CrossVersionObjectReference{
APIVersion: "apps/v1",
Kind: "Deployment",
Name: ruleEvaluatorVPAName,
},
UpdatePolicy: &autoscalingv1.PodUpdatePolicy{
MinReplicas: ptr.To(int32(1)),
UpdateMode: ptr.To(autoscalingv1.UpdateModeAuto),
},
ResourcePolicy: &autoscalingv1.PodResourcePolicy{
ContainerPolicies: []autoscalingv1.ContainerResourcePolicy{
{
ContainerName: "evaluator",
Mode: ptr.To(autoscalingv1.ContainerScalingModeAuto),
MinAllowed: corev1.ResourceList{
corev1.ResourceCPU: resource.MustParse("1m"),
corev1.ResourceMemory: resource.MustParse("16Mi"),
},
},
{
ContainerName: "config-reloader",
Mode: ptr.To(autoscalingv1.ContainerScalingModeOff),
},
},
},
}
return nil
}); err != nil {
return err
}
return nil
}