Skip to content

Commit 34d10a7

Browse files
Use same requests/limits for init containers as for main container
1 parent d7a9722 commit 34d10a7

File tree

6 files changed

+42
-27
lines changed

6 files changed

+42
-27
lines changed

CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
- (Maintenance) Expose Context in OperatorV2 Item Handler
2121
- (Feature) Improve K8S Mock for UT
2222
- (Feature) (ML) Introduce basic Conditions
23-
- (Improvement) Raise memory requests for init containers to 50mi
23+
- (Improvement) Use same requests/limits for init containers as for main container
2424
- (Feature) (ML) Metadata Service Implementation
2525
- (Feature) License Manager for ML Deployment
2626
- (Feature) (ML) Storage S3 sidecar implementation

pkg/deployment/deployment_suite_test.go

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import (
3434
"github.com/stretchr/testify/require"
3535
core "k8s.io/api/core/v1"
3636
extfake "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/fake"
37+
"k8s.io/apimachinery/pkg/api/resource"
3738
meta "k8s.io/apimachinery/pkg/apis/meta/v1"
3839
"k8s.io/client-go/kubernetes/fake"
3940
recordfake "k8s.io/client-go/tools/record"
@@ -683,7 +684,8 @@ func createTestLifecycleContainer(resources core.ResourceRequirements) core.Cont
683684
func createTestAlpineContainer(name string, requireUUID bool) core.Container {
684685
binaryPath, _ := os.Executable()
685686
var securityContext api.ServerGroupSpecSecurityContext
686-
return k8sutil.ArangodInitContainer("uuid", name, "rocksdb", binaryPath, testImageOperator, requireUUID, securityContext.NewSecurityContext())
687+
resources := emptyResources
688+
return k8sutil.ArangodInitContainer("uuid", name, "rocksdb", binaryPath, testImageOperator, requireUUID, resources, securityContext.NewSecurityContext())
687689
}
688690

689691
func (testCase *testCaseStruct) createTestPodData(deployment *Deployment, group api.ServerGroup,
@@ -887,6 +889,17 @@ func addLifecycle(name string, uuidRequired bool, license string, group api.Serv
887889
p.Spec.Containers[0].Lifecycle = createTestLifecycle(api.ServerGroupAgents)
888890
}
889891

892+
initContainerResources := core.ResourceRequirements{
893+
Requests: core.ResourceList{
894+
core.ResourceCPU: resource.MustParse("100m"),
895+
core.ResourceMemory: resource.MustParse("50Mi"),
896+
},
897+
Limits: core.ResourceList{
898+
core.ResourceCPU: resource.MustParse("100m"),
899+
core.ResourceMemory: resource.MustParse("50Mi"),
900+
},
901+
}
902+
890903
if len(p.Spec.Containers) > 0 {
891904
if _, ok := k8sutil.GetAnyVolumeMountByName(p.Spec.Containers[0].VolumeMounts, "lifecycle"); !ok {
892905
p.Spec.Containers[0].VolumeMounts = append(p.Spec.Containers[0].VolumeMounts, k8sutil.LifecycleVolumeMount())
@@ -898,13 +911,15 @@ func addLifecycle(name string, uuidRequired bool, license string, group api.Serv
898911
p.Spec.InitContainers...,
899912
)
900913
}
914+
915+
initContainerResources = *(p.Spec.Containers[0].Resources.DeepCopy())
901916
}
902917

903918
if _, ok := k8sutil.GetAnyContainerByName(p.Spec.InitContainers, "uuid"); !ok {
904919
binaryPath, _ := os.Executable()
905920
p.Spec.InitContainers = append(
906921
[]core.Container{
907-
k8sutil.ArangodInitContainer("uuid", name, "rocksdb", binaryPath, testImageOperator, uuidRequired, securityContext.NewSecurityContext()),
922+
k8sutil.ArangodInitContainer("uuid", name, "rocksdb", binaryPath, testImageOperator, uuidRequired, initContainerResources, securityContext.NewSecurityContext()),
908923
},
909924
p.Spec.InitContainers...,
910925
)

pkg/deployment/resources/pod_creator_arangod.go

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -469,8 +469,9 @@ func (m *MemberArangoDPod) GetInitContainers(cachedStatus interfaces.Inspector)
469469
requireUUID := m.group == api.ServerGroupDBServers && m.status.IsInitialized
470470

471471
sc := k8sutil.CreateSecurityContext(m.groupSpec.SecurityContext)
472+
resources := m.GetContainerCreator().GetResourceRequirements()
472473
c := k8sutil.ArangodInitContainer(api.ServerGroupReservedInitContainerNameUUID, m.status.ID, engine, executable,
473-
m.resources.context.GetOperatorImage(), requireUUID, sc)
474+
m.resources.context.GetOperatorImage(), requireUUID, resources, sc)
474475
initContainers = append(initContainers, c)
475476
}
476477

@@ -495,8 +496,11 @@ func (m *MemberArangoDPod) GetInitContainers(cachedStatus interfaces.Inspector)
495496
switch m.group {
496497
case api.ServerGroupAgents, api.ServerGroupDBServers, api.ServerGroupSingle:
497498
if features.UpgradeVersionCheckV2().Enabled() {
498-
c := k8sutil.ArangodVersionCheckInitContainer(api.ServerGroupReservedInitContainerNameVersionCheck, executable, m.resources.context.GetOperatorImage(),
499-
m.imageInfo.ArangoDBVersion, m.groupSpec.SecurityContext.NewSecurityContext())
499+
c := k8sutil.ArangodVersionCheckInitContainer(api.ServerGroupReservedInitContainerNameVersionCheck, executable,
500+
m.resources.context.GetOperatorImage(),
501+
m.imageInfo.ArangoDBVersion,
502+
m.GetContainerCreator().GetResourceRequirements(),
503+
m.groupSpec.SecurityContext.NewSecurityContext())
500504
initContainers = append(initContainers, c)
501505
} else if features.UpgradeVersionCheck().Enabled() {
502506
upgradeContainer := &ArangoVersionCheckContainer{

pkg/handlers/job/handler.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,8 +163,13 @@ func (h *handler) prepareK8sJob(job *appsApi.ArangoJob) (*batch.Job, error) {
163163
return &k8sJob, err
164164
}
165165

166+
resources := core.ResourceRequirements{}
167+
if len(job.Spec.JobTemplate.Template.Spec.Containers) > 0 {
168+
resources = job.Spec.JobTemplate.Template.Spec.Containers[0].Resources
169+
}
170+
166171
initContainer := k8sutil.ArangodWaiterInitContainer(api.ServerGroupReservedInitContainerNameWait, deployment.Name, executable,
167-
h.operator.Image(), spec.TLS.IsSecure(), &core.SecurityContext{})
172+
h.operator.Image(), spec.TLS.IsSecure(), resources, &core.SecurityContext{})
168173

169174
k8sJob.Spec.Template.Spec.InitContainers = append(k8sJob.Spec.Template.Spec.InitContainers, initContainer)
170175

pkg/util/k8sutil/pods.go

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -464,7 +464,7 @@ func RocksdbEncryptionReadOnlyVolumeMount() core.VolumeMount {
464464
}
465465

466466
// ArangodInitContainer creates a container configured to initialize a UUID file.
467-
func ArangodInitContainer(name, id, engine, executable, operatorImage string, requireUUID bool, securityContext *core.SecurityContext) core.Container {
467+
func ArangodInitContainer(name, id, engine, executable, operatorImage string, requireUUID bool, resources core.ResourceRequirements, securityContext *core.SecurityContext) core.Container {
468468
uuidFile := filepath.Join(shared.ArangodVolumeMountDir, "UUID")
469469
engineFile := filepath.Join(shared.ArangodVolumeMountDir, "ENGINE")
470470
var command = []string{
@@ -486,11 +486,11 @@ func ArangodInitContainer(name, id, engine, executable, operatorImage string, re
486486
volumes := []core.VolumeMount{
487487
ArangodVolumeMount(),
488488
}
489-
return operatorInitContainer(name, operatorImage, command, securityContext, volumes)
489+
return operatorInitContainer(name, operatorImage, command, resources, securityContext, volumes)
490490
}
491491

492492
// ArangodWaiterInitContainer creates a container configured to wait for specific ArangoDeployment to be ready
493-
func ArangodWaiterInitContainer(name, deploymentName, executable, operatorImage string, isSecured bool, securityContext *core.SecurityContext) core.Container {
493+
func ArangodWaiterInitContainer(name, deploymentName, executable, operatorImage string, isSecured bool, resources core.ResourceRequirements, securityContext *core.SecurityContext) core.Container {
494494
var command = []string{
495495
executable,
496496
"lifecycle",
@@ -503,25 +503,16 @@ func ArangodWaiterInitContainer(name, deploymentName, executable, operatorImage
503503
if isSecured {
504504
volumes = append(volumes, TlsKeyfileVolumeMount())
505505
}
506-
return operatorInitContainer(name, operatorImage, command, securityContext, volumes)
506+
return operatorInitContainer(name, operatorImage, command, resources, securityContext, volumes)
507507
}
508508

509509
// createInitContainer creates operator-specific init container
510-
func operatorInitContainer(name, operatorImage string, command []string, securityContext *core.SecurityContext, volumes []core.VolumeMount) core.Container {
510+
func operatorInitContainer(name, operatorImage string, command []string, resources core.ResourceRequirements, securityContext *core.SecurityContext, volumes []core.VolumeMount) core.Container {
511511
c := core.Container{
512-
Name: name,
513-
Image: operatorImage,
514-
Command: command,
515-
Resources: core.ResourceRequirements{
516-
Requests: core.ResourceList{
517-
core.ResourceCPU: resource.MustParse("100m"),
518-
core.ResourceMemory: resource.MustParse("50Mi"),
519-
},
520-
Limits: core.ResourceList{
521-
core.ResourceCPU: resource.MustParse("100m"),
522-
core.ResourceMemory: resource.MustParse("50Mi"),
523-
},
524-
},
512+
Name: name,
513+
Image: operatorImage,
514+
Command: command,
515+
Resources: resources,
525516
Env: []core.EnvVar{
526517
{
527518
Name: "MY_POD_NAMESPACE",

pkg/util/k8sutil/version_check.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ import (
3232
)
3333

3434
// ArangodVersionCheckInitContainer creates a container configured to check version.
35-
func ArangodVersionCheckInitContainer(name, executable, operatorImage string, version driver.Version, securityContext *core.SecurityContext) core.Container {
35+
func ArangodVersionCheckInitContainer(name, executable, operatorImage string, version driver.Version, resources core.ResourceRequirements, securityContext *core.SecurityContext) core.Container {
3636
versionFile := filepath.Join(shared.ArangodVolumeMountDir, "VERSION-1")
3737
var command = []string{
3838
executable,
@@ -57,5 +57,5 @@ func ArangodVersionCheckInitContainer(name, executable, operatorImage string, ve
5757
volumes := []core.VolumeMount{
5858
ArangodVolumeMount(),
5959
}
60-
return operatorInitContainer(name, operatorImage, command, securityContext, volumes)
60+
return operatorInitContainer(name, operatorImage, command, resources, securityContext, volumes)
6161
}

0 commit comments

Comments
 (0)