func applyVPA()

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
}