Skip to content

Commit 50a672c

Browse files
authored
[Bugfix] Fix resource propagation to InitContainers (#1418)
1 parent fdc6608 commit 50a672c

14 files changed

+267
-134
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
- (Feature) Add --deployment.feature.init-containers-copy-resources (default enabled)
2424
- (Feature) Add maxBackups option to ArangoBackupPolicy
2525
- (Improvement) Better detection for AllInSync condition for DC2DC sync status
26+
- (Bugfix) Fix resource propagation to InitContainers
2627

2728
## [1.2.32](https://github.com/arangodb/kube-arangodb/tree/1.2.32) (2023-08-07)
2829
- (Feature) Backup lifetime - remove Backup once its lifetime has been reached

pkg/deployment/deployment_core_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -358,7 +358,7 @@ func TestEnsurePod_ArangoDB_Core(t *testing.T) {
358358
Image: testImage,
359359
Command: createTestCommandForDBServer(firstDBServerStatus.ID, false, false, false),
360360
Ports: createTestPorts(api.ServerGroupDBServers),
361-
Resources: k8sutil.ExtractPodResourceRequirement(resourcesUnfiltered),
361+
Resources: k8sutil.ExtractPodAcceptedResourceRequirement(resourcesUnfiltered),
362362
VolumeMounts: []core.VolumeMount{
363363
k8sutil.ArangodVolumeMount(),
364364
},
@@ -415,7 +415,7 @@ func TestEnsurePod_ArangoDB_Core(t *testing.T) {
415415
Image: testImage,
416416
Command: createTestCommandForDBServer(firstDBServerStatus.ID, false, false, false),
417417
Ports: createTestPorts(api.ServerGroupDBServers),
418-
Resources: k8sutil.ExtractPodResourceRequirement(resourcesUnfiltered),
418+
Resources: k8sutil.ExtractPodAcceptedResourceRequirement(resourcesUnfiltered),
419419
VolumeMounts: []core.VolumeMount{
420420
k8sutil.ArangodVolumeMount(),
421421
},
@@ -475,7 +475,7 @@ func TestEnsurePod_ArangoDB_Core(t *testing.T) {
475475
Image: testImage,
476476
Command: createTestCommandForDBServer(firstDBServerStatus.ID, false, false, false),
477477
Ports: createTestPorts(api.ServerGroupDBServers),
478-
Resources: k8sutil.ExtractPodResourceRequirement(resourcesUnfiltered),
478+
Resources: k8sutil.ExtractPodAcceptedResourceRequirement(resourcesUnfiltered),
479479
VolumeMounts: []core.VolumeMount{
480480
k8sutil.ArangodVolumeMount(),
481481
},
@@ -1009,7 +1009,7 @@ func TestEnsurePod_ArangoDB_Core(t *testing.T) {
10091009
ImagePullPolicy: core.PullIfNotPresent,
10101010
SecurityContext: securityContext.NewSecurityContext(),
10111011
},
1012-
testArangodbInternalExporterContainer(false, true, k8sutil.ExtractPodResourceRequirement(resourcesUnfiltered)),
1012+
testArangodbInternalExporterContainer(false, true, k8sutil.ExtractPodAcceptedResourceRequirement(resourcesUnfiltered)),
10131013
},
10141014
RestartPolicy: core.RestartPolicyNever,
10151015
TerminationGracePeriodSeconds: &defaultDBServerTerminationTimeout,
@@ -1064,7 +1064,7 @@ func TestEnsurePod_ArangoDB_Core(t *testing.T) {
10641064
k8sutil.LifecycleVolume(),
10651065
},
10661066
InitContainers: []core.Container{
1067-
createTestLifecycleContainer(k8sutil.ExtractPodResourceRequirement(resourcesUnfiltered)),
1067+
createTestLifecycleContainer(k8sutil.ExtractPodAcceptedResourceRequirement(resourcesUnfiltered)),
10681068
},
10691069
Containers: []core.Container{
10701070
{

pkg/deployment/deployment_pod_resources_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ func TestEnsurePod_ArangoDB_Resources(t *testing.T) {
134134
Image: testImage,
135135
Command: createTestCommandForDBServer(firstDBServerStatus.ID, false, false, false),
136136
Ports: createTestPorts(api.ServerGroupAgents),
137-
Resources: k8sutil.ExtractPodResourceRequirement(resourcesUnfiltered),
137+
Resources: k8sutil.ExtractPodAcceptedResourceRequirement(resourcesUnfiltered),
138138
VolumeMounts: []core.VolumeMount{
139139
k8sutil.ArangodVolumeMount(),
140140
},
@@ -194,7 +194,7 @@ func TestEnsurePod_ArangoDB_Resources(t *testing.T) {
194194
Image: testImage,
195195
Command: createTestCommandForDBServer(firstDBServerStatus.ID, false, false, false),
196196
Ports: createTestPorts(api.ServerGroupAgents),
197-
Resources: k8sutil.ExtractPodResourceRequirement(resourcesUnfiltered),
197+
Resources: k8sutil.ExtractPodAcceptedResourceRequirement(resourcesUnfiltered),
198198
VolumeMounts: []core.VolumeMount{
199199
k8sutil.ArangodVolumeMount(),
200200
},
@@ -252,7 +252,7 @@ func TestEnsurePod_ArangoDB_Resources(t *testing.T) {
252252
Image: testImage,
253253
Command: createTestCommandForDBServer(firstDBServerStatus.ID, false, false, false),
254254
Ports: createTestPorts(api.ServerGroupAgents),
255-
Resources: k8sutil.ExtractPodResourceRequirement(resourcesUnfiltered),
255+
Resources: k8sutil.ExtractPodAcceptedResourceRequirement(resourcesUnfiltered),
256256
VolumeMounts: []core.VolumeMount{
257257
k8sutil.ArangodVolumeMount(),
258258
},

pkg/deployment/deployment_pod_sync_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1304,7 +1304,7 @@ func TestEnsurePod_Sync_Worker(t *testing.T) {
13041304
},
13051305
ImagePullPolicy: core.PullIfNotPresent,
13061306
Lifecycle: createTestLifecycle(api.ServerGroupSyncMasters),
1307-
Resources: k8sutil.ExtractPodResourceRequirement(resourcesUnfiltered),
1307+
Resources: k8sutil.ExtractPodAcceptedResourceRequirement(resourcesUnfiltered),
13081308
SecurityContext: securityContext.NewSecurityContext(),
13091309
VolumeMounts: []core.VolumeMount{
13101310
k8sutil.LifecycleVolumeMount(),
@@ -1399,7 +1399,7 @@ func TestEnsurePod_Sync_Worker(t *testing.T) {
13991399
},
14001400
ImagePullPolicy: core.PullIfNotPresent,
14011401
Lifecycle: createTestLifecycle(api.ServerGroupSyncMasters),
1402-
Resources: k8sutil.ExtractPodResourceRequirement(resourcesUnfiltered),
1402+
Resources: k8sutil.ExtractPodAcceptedResourceRequirement(resourcesUnfiltered),
14031403
SecurityContext: securityContext.NewSecurityContext(),
14041404
VolumeMounts: []core.VolumeMount{
14051405
k8sutil.LifecycleVolumeMount(),

pkg/deployment/resources/internal_exporter.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ func ArangodbInternalExporterContainer(image string, args []string, livenessProb
5454
Protocol: core.ProtocolTCP,
5555
},
5656
},
57-
Resources: k8sutil.ExtractPodResourceRequirement(resources),
57+
Resources: k8sutil.ExtractPodAcceptedResourceRequirement(resources),
5858
SecurityContext: k8sutil.CreateSecurityContext(groupSpec.SecurityContext),
5959
ImagePullPolicy: core.PullIfNotPresent,
6060
VolumeMounts: []core.VolumeMount{k8sutil.LifecycleVolumeMount()},

pkg/deployment/resources/pod_creator_arangod.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,7 @@ func (a *ArangoDContainer) GetEnvs() ([]core.EnvVar, []core.EnvFromSource) {
281281
}
282282

283283
func (a *ArangoDContainer) GetResourceRequirements() core.ResourceRequirements {
284-
return k8sutil.ExtractPodResourceRequirement(a.arangoMember.Spec.Overrides.GetResources(&a.groupSpec))
284+
return k8sutil.ExtractPodAcceptedResourceRequirement(a.arangoMember.Spec.Overrides.GetResources(&a.groupSpec))
285285
}
286286

287287
func (a *ArangoDContainer) GetLifecycle() (*core.Lifecycle, error) {
@@ -513,7 +513,7 @@ func (m *MemberArangoDPod) GetInitContainers(cachedStatus interfaces.Inspector)
513513
}
514514
}
515515

516-
return applyInitContainersResourceResources(initContainers, &m.groupSpec.Resources), nil
516+
return applyInitContainersResourceResources(initContainers, k8sutil.ExtractPodInitContainerAcceptedResourceRequirement(m.GetContainerCreator().GetResourceRequirements())), nil
517517
}
518518

519519
func (m *MemberArangoDPod) GetFinalizers() []string {

pkg/deployment/resources/pod_creator_sync.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ func (a *ArangoSyncContainer) GetProbes() (*core.Probe, *core.Probe, *core.Probe
148148
}
149149

150150
func (a *ArangoSyncContainer) GetResourceRequirements() core.ResourceRequirements {
151-
return k8sutil.ExtractPodResourceRequirement(a.arangoMember.Spec.Overrides.GetResources(&a.groupSpec))
151+
return k8sutil.ExtractPodAcceptedResourceRequirement(a.arangoMember.Spec.Overrides.GetResources(&a.groupSpec))
152152
}
153153

154154
func (a *ArangoSyncContainer) GetLifecycle() (*core.Lifecycle, error) {
@@ -300,7 +300,7 @@ func (m *MemberSyncPod) GetInitContainers(cachedStatus interfaces.Inspector) ([]
300300
initContainers = append(initContainers, c)
301301
}
302302

303-
return applyInitContainersResourceResources(initContainers, &m.groupSpec.Resources), nil
303+
return applyInitContainersResourceResources(initContainers, k8sutil.ExtractPodInitContainerAcceptedResourceRequirement(m.GetContainerCreator().GetResourceRequirements())), nil
304304
}
305305

306306
func (m *MemberSyncPod) GetFinalizers() []string {

pkg/deployment/resources/pod_init_containers.go

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,18 +30,17 @@ import (
3030

3131
// applyInitContainersResourceResources updates passed init containers to ensure that all resources are set (if such feature is enabled)
3232
// This is applied only to containers added by operator itself
33-
func applyInitContainersResourceResources(initContainers []core.Container, mainContainerResources *core.ResourceRequirements) []core.Container {
34-
if !features.InitContainerCopyResources().Enabled() || mainContainerResources == nil {
33+
func applyInitContainersResourceResources(initContainers []core.Container, mainContainerResources core.ResourceRequirements) []core.Container {
34+
if !features.InitContainerCopyResources().Enabled() {
3535
return initContainers
3636
}
3737

38-
for i, c := range initContainers {
39-
if !api.IsReservedServerGroupInitContainerName(c.Name) {
38+
for i := range initContainers {
39+
if !api.IsReservedServerGroupInitContainerName(initContainers[i].Name) {
4040
continue
4141
}
4242

43-
k8sutil.EnsureAllResourcesNotEmpty(mainContainerResources.Limits, &initContainers[i].Resources.Limits)
44-
k8sutil.EnsureAllResourcesNotEmpty(mainContainerResources.Requests, &initContainers[i].Resources.Requests)
43+
k8sutil.ApplyContainerResourceRequirements(&initContainers[i], mainContainerResources)
4544
}
4645
return initContainers
4746
}

pkg/util/k8sutil/lifecycle.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ func InitLifecycleContainer(image string, resources *core.ResourceRequirements,
7474
}
7575

7676
if resources != nil {
77-
c.Resources = ExtractPodResourceRequirement(*resources)
77+
c.Resources = ExtractPodAcceptedResourceRequirement(*resources)
7878
}
7979
return c, nil
8080
}

pkg/util/k8sutil/pods.go

Lines changed: 0 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -532,38 +532,6 @@ func operatorInitContainer(name, operatorImage string, command []string, securit
532532
return c
533533
}
534534

535-
// ExtractPodResourceRequirement filters resource requirements for Pods.
536-
func ExtractPodResourceRequirement(resources core.ResourceRequirements) core.ResourceRequirements {
537-
filter := PodResourceRequirementsFilter(core.ResourceCPU, core.ResourceMemory, core.ResourceEphemeralStorage)
538-
539-
return core.ResourceRequirements{
540-
Limits: filter(resources.Limits),
541-
Requests: filter(resources.Requests),
542-
}
543-
}
544-
545-
func PodResourceRequirementsFilter(filters ...core.ResourceName) func(in core.ResourceList) core.ResourceList {
546-
return func(in core.ResourceList) core.ResourceList {
547-
filtered := map[core.ResourceName]bool{}
548-
549-
for _, k := range filters {
550-
filtered[k] = true
551-
}
552-
553-
n := core.ResourceList{}
554-
555-
for k, v := range in {
556-
if _, ok := filtered[k]; !ok {
557-
continue
558-
}
559-
560-
n[k] = v
561-
}
562-
563-
return n
564-
}
565-
}
566-
567535
// NewContainer creates a container for specified creator
568536
func NewContainer(containerCreator interfaces.ContainerCreator) (core.Container, error) {
569537

0 commit comments

Comments
 (0)