Skip to content

Commit 7d79972

Browse files
barkhachoithaniPeng Zhou
authored andcommitted
MLE-11463: Enhance deployment management for MarkLogic Group (#7)
* added changes resource configurations for MarkLogic group * tests for group config params
1 parent 1ad4710 commit 7d79972

File tree

2 files changed

+45
-4
lines changed

2 files changed

+45
-4
lines changed

internal/controller/marklogicgroup_controller_test.go

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import (
2525
. "github.com/onsi/gomega"
2626
appsv1 "k8s.io/api/apps/v1"
2727
corev1 "k8s.io/api/core/v1"
28+
"k8s.io/apimachinery/pkg/api/resource"
2829
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2930
"k8s.io/apimachinery/pkg/types"
3031
"k8s.io/apimachinery/pkg/util/intstr"
@@ -33,13 +34,16 @@ import (
3334
const (
3435
Name = "dnode"
3536
Namespace = "testns"
37+
maxSkew = int32(2)
3638

3739
timeout = time.Second * 60
3840
duration = time.Second * 30
3941
interval = time.Millisecond * 250
4042
)
4143

4244
var replicas = int32(2)
45+
var cpu = int64(1)
46+
var memory = int64(268435456)
4347
var typeNamespaceName = types.NamespacedName{Name: Name, Namespace: Namespace}
4448

4549
const imageName = "marklogicdb/marklogic-db:11.1.0-centos-1.1.1"
@@ -70,10 +74,17 @@ var _ = Describe("MarkLogicGroup controller", func() {
7074
Namespace: Namespace,
7175
},
7276
Spec: databasev1alpha1.MarklogicGroupSpec{
73-
Replicas: &replicas,
74-
Name: Name,
75-
Image: imageName,
76-
GroupConfig: groupConfig,
77+
Replicas: &replicas,
78+
Name: Name,
79+
Image: imageName,
80+
GroupConfig: groupConfig,
81+
EnableConverters: true,
82+
UpdateStrategy: "OnDelete",
83+
Resources: &corev1.ResourceRequirements{Requests: corev1.ResourceList{"cpu": resource.MustParse("100m"), "memory": resource.MustParse("256Mi")}, Limits: corev1.ResourceList{"cpu": resource.MustParse("100m"), "memory": resource.MustParse("256Mi")}},
84+
PriorityClassName: "high-priority",
85+
ClusterDomain: "cluster.local",
86+
TopologySpreadConstraints: []corev1.TopologySpreadConstraint{{MaxSkew: 2, TopologyKey: "kubernetes.io/hostname", WhenUnsatisfiable: corev1.ScheduleAnyway}},
87+
Affinity: &corev1.Affinity{PodAffinity: &corev1.PodAffinity{PreferredDuringSchedulingIgnoredDuringExecution: []corev1.WeightedPodAffinityTerm{{PodAffinityTerm: corev1.PodAffinityTerm{TopologyKey: "kubernetes.io/hostname"}, Weight: 100}}}},
7788
},
7889
}
7990
Expect(k8sClient.Create(ctx, mlGroup)).Should(Succeed())
@@ -88,6 +99,18 @@ var _ = Describe("MarkLogicGroup controller", func() {
8899
Expect(createdCR.Spec.Replicas).Should(Equal(&replicas))
89100
Expect(createdCR.Name).Should(Equal(Name))
90101
Expect(createdCR.Spec.GroupConfig).Should(Equal(groupConfig))
102+
Expect(createdCR.Spec.EnableConverters).Should(Equal(true))
103+
Expect(createdCR.Spec.Resources.Limits.Cpu().Value()).Should(Equal(cpu))
104+
Expect(createdCR.Spec.Resources.Limits.Memory().Value()).Should(Equal(memory))
105+
Expect(createdCR.Spec.Resources.Requests.Cpu().Value()).Should(Equal(cpu))
106+
Expect(createdCR.Spec.Resources.Requests.Memory().Value()).Should(Equal(memory))
107+
Expect(createdCR.Spec.UpdateStrategy).Should(Equal(appsv1.OnDeleteStatefulSetStrategyType))
108+
Expect(createdCR.Spec.PriorityClassName).Should(Equal("high-priority"))
109+
Expect(createdCR.Spec.ClusterDomain).Should(Equal("cluster.local"))
110+
Expect(createdCR.Spec.TopologySpreadConstraints[0].MaxSkew).Should(Equal(int32(2)))
111+
Expect(createdCR.Spec.TopologySpreadConstraints[0].TopologyKey).Should(Equal("kubernetes.io/hostname"))
112+
Expect(createdCR.Spec.TopologySpreadConstraints[0].WhenUnsatisfiable).Should(Equal(corev1.ScheduleAnyway))
113+
Expect(createdCR.Spec.Affinity.PodAffinity.PreferredDuringSchedulingIgnoredDuringExecution[0].Weight).Should(Equal(int32(100)))
91114

92115
// Validating if StatefulSet is created successfully
93116
sts := &appsv1.StatefulSet{}

pkg/k8sutil/marklogicServer.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package k8sutil
33
import (
44
"github.com/go-logr/logr"
55
databasev1alpha1 "github.com/marklogic/marklogic-kubernetes-operator/api/v1alpha1"
6+
appsv1 "k8s.io/api/apps/v1"
7+
corev1 "k8s.io/api/core/v1"
68
"sigs.k8s.io/controller-runtime/pkg/log"
79
)
810

@@ -12,6 +14,14 @@ type markLogicServerParameters struct {
1214
Image string
1315
// PersistentVolumeClaim corev1.PersistentVolumeClaim
1416
TerminationGracePeriodSeconds *int64
17+
Resources *corev1.ResourceRequirements
18+
EnableConverters bool
19+
PriorityClassName string
20+
ClusterDomain string
21+
UpdateStrategy appsv1.StatefulSetUpdateStrategyType
22+
Affinity *corev1.Affinity
23+
NodeSelector map[string]string
24+
TopologySpreadConstraints []corev1.TopologySpreadConstraint
1525
}
1626

1727
func MarkLogicServerLogger(namespace string, name string) logr.Logger {
@@ -58,6 +68,14 @@ func generateMarkLogicServerParams(cr *databasev1alpha1.MarklogicCluster, index
5868
Name: cr.Spec.MarkLogicGroups[index].Name,
5969
Image: cr.Spec.MarkLogicGroups[index].Image,
6070
TerminationGracePeriodSeconds: cr.Spec.MarkLogicGroups[index].TerminationGracePeriodSeconds,
71+
Resources: cr.Spec.MarkLogicGroups[index].Resources,
72+
EnableConverters: cr.Spec.MarkLogicGroups[index].EnableConverters,
73+
PriorityClassName: cr.Spec.MarkLogicGroups[index].PriorityClassName,
74+
ClusterDomain: cr.Spec.MarkLogicGroups[index].ClusterDomain,
75+
UpdateStrategy: cr.Spec.MarkLogicGroups[index].UpdateStrategy,
76+
Affinity: cr.Spec.MarkLogicGroups[index].Affinity,
77+
NodeSelector: cr.Spec.MarkLogicGroups[index].NodeSelector,
78+
TopologySpreadConstraints: cr.Spec.MarkLogicGroups[index].TopologySpreadConstraints,
6179
}
6280
// if cr.Spec.Storage != nil {
6381
// params.PersistentVolumeClaim = generatePVCTemplate(cr.Spec.Storage.Size)

0 commit comments

Comments
 (0)