mirror of
https://github.com/prometheus-operator/prometheus-operator.git
synced 2025-04-21 11:48:53 +00:00
*: Allow disabling limits on sidecars
This commit is contained in:
parent
a61cd4c8b3
commit
0e403effb0
5 changed files with 133 additions and 20 deletions
cmd/operator
pkg
|
@ -123,8 +123,8 @@ func init() {
|
|||
// specified.
|
||||
flagset.StringVar(&cfg.PrometheusConfigReloaderImage, "prometheus-config-reloader", fmt.Sprintf("quay.io/coreos/prometheus-config-reloader:v%v", version.Version), "Prometheus config reloader image")
|
||||
flagset.StringVar(&cfg.ConfigReloaderImage, "config-reloader-image", "quay.io/coreos/configmap-reload:v0.0.1", "Reload Image")
|
||||
flagset.StringVar(&cfg.ConfigReloaderCPU, "config-reloader-cpu", "100m", "Config Reloader CPU")
|
||||
flagset.StringVar(&cfg.ConfigReloaderMemory, "config-reloader-memory", "25Mi", "Config Reloader Memory")
|
||||
flagset.StringVar(&cfg.ConfigReloaderCPU, "config-reloader-cpu", "100m", "Config Reloader CPU. Value \"0\" disables it and causes no limit to be configured.")
|
||||
flagset.StringVar(&cfg.ConfigReloaderMemory, "config-reloader-memory", "25Mi", "Config Reloader Memory. Value \"0\" disables it and causes no limit to be configured.")
|
||||
flagset.StringVar(&cfg.AlertmanagerDefaultBaseImage, "alertmanager-default-base-image", "quay.io/prometheus/alertmanager", "Alertmanager default base image")
|
||||
flagset.StringVar(&cfg.PrometheusDefaultBaseImage, "prometheus-default-base-image", "quay.io/prometheus/prometheus", "Prometheus default base image")
|
||||
flagset.StringVar(&cfg.ThanosDefaultBaseImage, "thanos-default-base-image", "improbable/thanos", "Thanos default base image")
|
||||
|
|
|
@ -407,6 +407,14 @@ func makeStatefulSetSpec(a *monitoringv1.Alertmanager, config Config) (*appsv1.S
|
|||
})
|
||||
}
|
||||
|
||||
resources := v1.ResourceRequirements{Limits: v1.ResourceList{}}
|
||||
if config.ConfigReloaderCPU != "0" {
|
||||
resources.Limits[v1.ResourceCPU] = resource.MustParse(config.ConfigReloaderCPU)
|
||||
}
|
||||
if config.ConfigReloaderMemory != "0" {
|
||||
resources.Limits[v1.ResourceMemory] = resource.MustParse(config.ConfigReloaderMemory)
|
||||
}
|
||||
|
||||
terminationGracePeriod := int64(0)
|
||||
finalLabels := config.Labels.Merge(podLabels)
|
||||
return &appsv1.StatefulSetSpec{
|
||||
|
@ -462,12 +470,7 @@ func makeStatefulSetSpec(a *monitoringv1.Alertmanager, config Config) (*appsv1.S
|
|||
MountPath: alertmanagerConfDir,
|
||||
},
|
||||
},
|
||||
Resources: v1.ResourceRequirements{
|
||||
Limits: v1.ResourceList{
|
||||
v1.ResourceCPU: resource.MustParse(config.ConfigReloaderCPU),
|
||||
v1.ResourceMemory: resource.MustParse(config.ConfigReloaderMemory),
|
||||
},
|
||||
},
|
||||
Resources: resources,
|
||||
},
|
||||
}, a.Spec.Containers...),
|
||||
Volumes: volumes,
|
||||
|
|
|
@ -23,6 +23,7 @@ import (
|
|||
monitoringv1 "github.com/coreos/prometheus-operator/pkg/apis/monitoring/v1"
|
||||
"github.com/stretchr/testify/require"
|
||||
"k8s.io/api/core/v1"
|
||||
"k8s.io/apimachinery/pkg/api/resource"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
)
|
||||
|
||||
|
@ -555,3 +556,55 @@ func sliceContains(slice []string, match string) bool {
|
|||
}
|
||||
return contains
|
||||
}
|
||||
|
||||
func TestSidecarsNoCPULimits(t *testing.T) {
|
||||
testConfig := Config{
|
||||
ConfigReloaderImage: "quay.io/coreos/configmap-reload:latest",
|
||||
ConfigReloaderCPU: "0",
|
||||
ConfigReloaderMemory: "25Mi",
|
||||
AlertmanagerDefaultBaseImage: "quay.io/prometheus/alertmanager",
|
||||
}
|
||||
sset, err := makeStatefulSet(&monitoringv1.Alertmanager{
|
||||
Spec: monitoringv1.AlertmanagerSpec{},
|
||||
}, nil, testConfig)
|
||||
if err != nil {
|
||||
t.Fatalf("Unexpected error while making StatefulSet: %v", err)
|
||||
}
|
||||
|
||||
expectedResources := v1.ResourceRequirements{
|
||||
Limits: v1.ResourceList{
|
||||
v1.ResourceMemory: resource.MustParse("25Mi"),
|
||||
},
|
||||
}
|
||||
for _, c := range sset.Spec.Template.Spec.Containers {
|
||||
if c.Name == "config-reloader" && !reflect.DeepEqual(c.Resources, expectedResources) {
|
||||
t.Fatal("Unexpected resource requests/limits set, when none should be set.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestSidecarsNoMemoryLimits(t *testing.T) {
|
||||
testConfig := Config{
|
||||
ConfigReloaderImage: "quay.io/coreos/configmap-reload:latest",
|
||||
ConfigReloaderCPU: "100m",
|
||||
ConfigReloaderMemory: "0",
|
||||
AlertmanagerDefaultBaseImage: "quay.io/prometheus/alertmanager",
|
||||
}
|
||||
sset, err := makeStatefulSet(&monitoringv1.Alertmanager{
|
||||
Spec: monitoringv1.AlertmanagerSpec{},
|
||||
}, nil, testConfig)
|
||||
if err != nil {
|
||||
t.Fatalf("Unexpected error while making StatefulSet: %v", err)
|
||||
}
|
||||
|
||||
expectedResources := v1.ResourceRequirements{
|
||||
Limits: v1.ResourceList{
|
||||
v1.ResourceCPU: resource.MustParse("100m"),
|
||||
},
|
||||
}
|
||||
for _, c := range sset.Spec.Template.Spec.Containers {
|
||||
if c.Name == "config-reloader" && !reflect.DeepEqual(c.Resources, expectedResources) {
|
||||
t.Fatal("Unexpected resource requests/limits set, when none should be set.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -628,12 +628,14 @@ func makeStatefulSetSpec(p monitoringv1.Prometheus, c *Config, ruleConfigMapName
|
|||
fmt.Sprintf("--webhook-url=%s", localReloadURL),
|
||||
},
|
||||
VolumeMounts: []v1.VolumeMount{},
|
||||
Resources: v1.ResourceRequirements{
|
||||
Limits: v1.ResourceList{
|
||||
v1.ResourceCPU: resource.MustParse(c.ConfigReloaderCPU),
|
||||
v1.ResourceMemory: resource.MustParse(c.ConfigReloaderMemory),
|
||||
},
|
||||
},
|
||||
Resources: v1.ResourceRequirements{Limits: v1.ResourceList{}},
|
||||
}
|
||||
|
||||
if c.ConfigReloaderCPU != "0" {
|
||||
container.Resources.Limits[v1.ResourceCPU] = resource.MustParse(c.ConfigReloaderCPU)
|
||||
}
|
||||
if c.ConfigReloaderMemory != "0" {
|
||||
container.Resources.Limits[v1.ResourceMemory] = resource.MustParse(c.ConfigReloaderMemory)
|
||||
}
|
||||
|
||||
for _, name := range ruleConfigMapNames {
|
||||
|
@ -841,6 +843,14 @@ func makeStatefulSetSpec(p monitoringv1.Prometheus, c *Config, ruleConfigMapName
|
|||
prometheusImage = *p.Spec.Image
|
||||
}
|
||||
|
||||
prometheusConfigReloaderResources := v1.ResourceRequirements{Limits: v1.ResourceList{}}
|
||||
if c.ConfigReloaderCPU != "0" {
|
||||
prometheusConfigReloaderResources.Limits[v1.ResourceCPU] = resource.MustParse(c.ConfigReloaderCPU)
|
||||
}
|
||||
if c.ConfigReloaderMemory != "0" {
|
||||
prometheusConfigReloaderResources.Limits[v1.ResourceMemory] = resource.MustParse(c.ConfigReloaderMemory)
|
||||
}
|
||||
|
||||
return &appsv1.StatefulSetSpec{
|
||||
ServiceName: governingServiceName,
|
||||
Replicas: p.Spec.Replicas,
|
||||
|
@ -881,12 +891,7 @@ func makeStatefulSetSpec(p monitoringv1.Prometheus, c *Config, ruleConfigMapName
|
|||
Command: []string{"/bin/prometheus-config-reloader"},
|
||||
Args: configReloadArgs,
|
||||
VolumeMounts: configReloadVolumeMounts,
|
||||
Resources: v1.ResourceRequirements{
|
||||
Limits: v1.ResourceList{
|
||||
v1.ResourceCPU: resource.MustParse(c.ConfigReloaderCPU),
|
||||
v1.ResourceMemory: resource.MustParse(c.ConfigReloaderMemory),
|
||||
},
|
||||
},
|
||||
Resources: prometheusConfigReloaderResources,
|
||||
},
|
||||
}, additionalContainers...),
|
||||
SecurityContext: securityContext,
|
||||
|
|
|
@ -646,3 +646,55 @@ func TestRetention(t *testing.T) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestSidecarsNoCPULimits(t *testing.T) {
|
||||
testConfig := &Config{
|
||||
ConfigReloaderImage: "quay.io/coreos/configmap-reload:latest",
|
||||
ConfigReloaderCPU: "0",
|
||||
ConfigReloaderMemory: "50Mi",
|
||||
PrometheusConfigReloaderImage: "quay.io/coreos/prometheus-config-reloader:latest",
|
||||
PrometheusDefaultBaseImage: "quay.io/prometheus/prometheus",
|
||||
ThanosDefaultBaseImage: "improbable/thanos",
|
||||
}
|
||||
sset, err := makeStatefulSet(monitoringv1.Prometheus{
|
||||
Spec: monitoringv1.PrometheusSpec{},
|
||||
}, testConfig, nil, "")
|
||||
if err != nil {
|
||||
t.Fatalf("Unexpected error while making StatefulSet: %v", err)
|
||||
}
|
||||
|
||||
expectedResources := v1.ResourceRequirements{Limits: v1.ResourceList{
|
||||
v1.ResourceMemory: resource.MustParse("50Mi"),
|
||||
}}
|
||||
for _, c := range sset.Spec.Template.Spec.Containers {
|
||||
if (c.Name == "prometheus-config-reloader" || c.Name == "rules-configmap-reloader") && !reflect.DeepEqual(c.Resources, expectedResources) {
|
||||
t.Fatal("Unexpected resource requests/limits set, when none should be set.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestSidecarsNoMemoryLimits(t *testing.T) {
|
||||
testConfig := &Config{
|
||||
ConfigReloaderImage: "quay.io/coreos/configmap-reload:latest",
|
||||
ConfigReloaderCPU: "100m",
|
||||
ConfigReloaderMemory: "0",
|
||||
PrometheusConfigReloaderImage: "quay.io/coreos/prometheus-config-reloader:latest",
|
||||
PrometheusDefaultBaseImage: "quay.io/prometheus/prometheus",
|
||||
ThanosDefaultBaseImage: "improbable/thanos",
|
||||
}
|
||||
sset, err := makeStatefulSet(monitoringv1.Prometheus{
|
||||
Spec: monitoringv1.PrometheusSpec{},
|
||||
}, testConfig, nil, "")
|
||||
if err != nil {
|
||||
t.Fatalf("Unexpected error while making StatefulSet: %v", err)
|
||||
}
|
||||
|
||||
expectedResources := v1.ResourceRequirements{Limits: v1.ResourceList{
|
||||
v1.ResourceCPU: resource.MustParse("100m"),
|
||||
}}
|
||||
for _, c := range sset.Spec.Template.Spec.Containers {
|
||||
if (c.Name == "prometheus-config-reloader" || c.Name == "rules-configmap-reloader") && !reflect.DeepEqual(c.Resources, expectedResources) {
|
||||
t.Fatal("Unexpected resource requests/limits set, when none should be set.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue