Skip to content

Commit 1d84f5e

Browse files
committed
fixup! MON-3304: Add option to specify resource limits for all components
1 parent ae4369d commit 1d84f5e

File tree

2 files changed

+53
-7
lines changed

2 files changed

+53
-7
lines changed

Diff for: pkg/manifests/manifests.go

+24-1
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ import (
4747
policyv1 "k8s.io/api/policy/v1"
4848
rbacv1 "k8s.io/api/rbac/v1"
4949
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
50+
"k8s.io/apimachinery/pkg/util/strategicpatch"
5051
"k8s.io/apimachinery/pkg/util/yaml"
5152
auditv1 "k8s.io/apiserver/pkg/apis/audit/v1"
5253
apiregistrationv1 "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1"
@@ -751,7 +752,10 @@ func (f *Factory) KubeStateMetricsDeployment() (*appsv1.Deployment, error) {
751752
case "kube-state-metrics":
752753
d.Spec.Template.Spec.Containers[i].Image = f.config.Images.KubeStateMetrics
753754
if f.config.ClusterMonitoringConfiguration.KubeStateMetricsConfig.Resources != nil {
754-
d.Spec.Template.Spec.Containers[i].Resources = *f.config.ClusterMonitoringConfiguration.KubeStateMetricsConfig.Resources
755+
err := mergePatchResources(&d.Spec.Template.Spec.Containers[i].Resources, f.config.ClusterMonitoringConfiguration.KubeStateMetricsConfig.Resources)
756+
if err != nil {
757+
return nil, err
758+
}
755759
}
756760
}
757761
}
@@ -3729,3 +3733,22 @@ func containerNameEquals(name string) func(corev1.Container) bool {
37293733
return c.Name == name
37303734
}
37313735
}
3736+
3737+
func mergePatchResources(base, patch *v1.ResourceRequirements) error {
3738+
baseBytes, err := json.Marshal(base)
3739+
if err != nil {
3740+
return err
3741+
}
3742+
patchBytes, err := json.Marshal(patch)
3743+
if err != nil {
3744+
return err
3745+
}
3746+
mergedBytes, err := strategicpatch.StrategicMergePatch(baseBytes, patchBytes, v1.ResourceRequirements{})
3747+
if err != nil {
3748+
return err
3749+
}
3750+
if err := json.Unmarshal(mergedBytes, base); err != nil {
3751+
return err
3752+
}
3753+
return nil
3754+
}

Diff for: pkg/manifests/manifests_test.go

+29-6
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ import (
2727
"time"
2828

2929
"github.com/openshift/library-go/pkg/crypto"
30-
3130
monv1 "github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring/v1"
3231

3332
configv1 "github.com/openshift/api/config/v1"
@@ -3365,12 +3364,33 @@ nodeExporter:
33653364

33663365
}
33673366

3367+
func compareResources(gotResources, configResources *v1.ResourceRequirements) error {
3368+
if _, ok := configResources.Limits[v1.ResourceCPU]; ok {
3369+
if gotResources.Limits[v1.ResourceCPU] != configResources.Limits[v1.ResourceCPU] {
3370+
return fmt.Errorf("CPU limit incorrectly configured")
3371+
}
3372+
}
3373+
if _, ok := configResources.Limits[v1.ResourceMemory]; ok {
3374+
if gotResources.Limits[v1.ResourceMemory] != configResources.Limits[v1.ResourceMemory] {
3375+
return fmt.Errorf("memory limit incorrectly configured")
3376+
}
3377+
}
3378+
if _, ok := configResources.Requests[v1.ResourceCPU]; ok {
3379+
if gotResources.Requests[v1.ResourceCPU] != configResources.Requests[v1.ResourceCPU] {
3380+
return fmt.Errorf("CPU request incorrectly configured")
3381+
}
3382+
}
3383+
if _, ok := configResources.Requests[v1.ResourceMemory]; ok {
3384+
if gotResources.Requests[v1.ResourceMemory] != configResources.Requests[v1.ResourceMemory] {
3385+
return fmt.Errorf("memory request incorrectly configured")
3386+
}
3387+
}
3388+
return nil
3389+
}
3390+
33683391
func TestKubeStateMetrics(t *testing.T) {
33693392
config := `kubeStateMetrics:
33703393
resources:
3371-
requests:
3372-
cpu: 100m
3373-
memory: 100Mi
33743394
limits:
33753395
cpu: 200m
33763396
memory: 200Mi
@@ -3406,8 +3426,11 @@ func TestKubeStateMetrics(t *testing.T) {
34063426
if container.Image != "docker.io/openshift/origin-kube-state-metrics:latest" {
34073427
t.Fatal("kube-state-metrics image incorrectly configured")
34083428
}
3409-
if !reflect.DeepEqual(container.Resources, *f.config.ClusterMonitoringConfiguration.KubeStateMetricsConfig.Resources) {
3410-
t.Fatal("kube-state-metrics resources incorrectly configured")
3429+
gotResources := container.Resources // these resources will be based on the defaults, and overridden by the config
3430+
configResources := *f.config.ClusterMonitoringConfiguration.KubeStateMetricsConfig.Resources
3431+
err := compareResources(&gotResources, &configResources)
3432+
if err != nil {
3433+
t.Fatalf("kube-state-metrics resources incorrectly configured: %v", err)
34113434
}
34123435
case "kube-rbac-proxy-self", "kube-rbac-proxy-main":
34133436
if container.Image != "docker.io/openshift/origin-kube-rbac-proxy:latest" {

0 commit comments

Comments
 (0)