Skip to content

Commit ce569c6

Browse files
committed
update DistributedRedisClusterSpec: add RequiredAntiAffinity
1 parent ebb3756 commit ce569c6

File tree

3 files changed

+80
-13
lines changed

3 files changed

+80
-13
lines changed

pkg/apis/redis/v1alpha1/distributedrediscluster_types.go

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,16 +24,18 @@ type DistributedRedisClusterSpec struct {
2424
ClusterReplicas int32 `json:"clusterReplicas,omitempty"`
2525
ServiceName string `json:"serviceName,omitempty"`
2626
Config map[string]string `json:"config,omitempty"`
27-
Affinity *corev1.Affinity `json:"affinity,omitempty"`
28-
NodeSelector map[string]string `json:"nodeSelector,omitempty"`
29-
ToleRations []corev1.Toleration `json:"toleRations,omitempty"`
30-
SecurityContext *corev1.PodSecurityContext `json:"securityContext,omitempty"`
31-
Annotations map[string]string `json:"annotations,omitempty"`
32-
Storage *RedisStorage `json:"storage,omitempty"`
33-
Resources *corev1.ResourceRequirements `json:"resources,omitempty"`
34-
PasswordSecret *corev1.LocalObjectReference `json:"passwordSecret,omitempty"`
35-
Monitor *AgentSpec `json:"monitor,omitempty"`
36-
Init *InitSpec `json:"init,omitempty"`
27+
// Set RequiredAntiAffinity to force the master-slave node anti-affinity.
28+
RequiredAntiAffinity bool `json:"requiredAntiAffinity,omitempty"`
29+
Affinity *corev1.Affinity `json:"affinity,omitempty"`
30+
NodeSelector map[string]string `json:"nodeSelector,omitempty"`
31+
ToleRations []corev1.Toleration `json:"toleRations,omitempty"`
32+
SecurityContext *corev1.PodSecurityContext `json:"securityContext,omitempty"`
33+
Annotations map[string]string `json:"annotations,omitempty"`
34+
Storage *RedisStorage `json:"storage,omitempty"`
35+
Resources *corev1.ResourceRequirements `json:"resources,omitempty"`
36+
PasswordSecret *corev1.LocalObjectReference `json:"passwordSecret,omitempty"`
37+
Monitor *AgentSpec `json:"monitor,omitempty"`
38+
Init *InitSpec `json:"init,omitempty"`
3739
}
3840

3941
type AgentSpec struct {

pkg/apis/redis/v1alpha1/zz_generated.deepcopy.go

Lines changed: 39 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/resources/statefulsets/statefulset.go

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ func NewStatefulSetForCR(cluster *redisv1alpha1.DistributedRedisCluster, ssName,
6262
},
6363
Spec: corev1.PodSpec{
6464
ImagePullSecrets: cluster.Spec.ImagePullSecrets,
65-
Affinity: getAffinity(spec.Affinity, labels),
65+
Affinity: getAffinity(cluster, labels),
6666
Tolerations: spec.ToleRations,
6767
SecurityContext: spec.SecurityContext,
6868
NodeSelector: cluster.Spec.NodeSelector,
@@ -97,11 +97,37 @@ func NewStatefulSetForCR(cluster *redisv1alpha1.DistributedRedisCluster, ssName,
9797
return ss, nil
9898
}
9999

100-
func getAffinity(affinity *corev1.Affinity, labels map[string]string) *corev1.Affinity {
100+
func getAffinity(cluster *redisv1alpha1.DistributedRedisCluster, labels map[string]string) *corev1.Affinity {
101+
affinity := cluster.Spec.Affinity
101102
if affinity != nil {
102103
return affinity
103104
}
104105

106+
if cluster.Spec.RequiredAntiAffinity {
107+
return &corev1.Affinity{
108+
PodAntiAffinity: &corev1.PodAntiAffinity{
109+
PreferredDuringSchedulingIgnoredDuringExecution: []corev1.WeightedPodAffinityTerm{
110+
{
111+
Weight: 100,
112+
PodAffinityTerm: corev1.PodAffinityTerm{
113+
TopologyKey: hostnameTopologyKey,
114+
LabelSelector: &metav1.LabelSelector{
115+
MatchLabels: map[string]string{redisv1alpha1.LabelClusterName: cluster.Name},
116+
},
117+
},
118+
},
119+
},
120+
RequiredDuringSchedulingIgnoredDuringExecution: []corev1.PodAffinityTerm{
121+
{
122+
TopologyKey: hostnameTopologyKey,
123+
LabelSelector: &metav1.LabelSelector{
124+
MatchLabels: labels,
125+
},
126+
},
127+
},
128+
},
129+
}
130+
}
105131
// return a SOFT anti-affinity by default
106132
return &corev1.Affinity{
107133
PodAntiAffinity: &corev1.PodAntiAffinity{
@@ -111,7 +137,7 @@ func getAffinity(affinity *corev1.Affinity, labels map[string]string) *corev1.Af
111137
PodAffinityTerm: corev1.PodAffinityTerm{
112138
TopologyKey: hostnameTopologyKey,
113139
LabelSelector: &metav1.LabelSelector{
114-
MatchLabels: labels,
140+
MatchLabels: map[string]string{redisv1alpha1.LabelClusterName: cluster.Name},
115141
},
116142
},
117143
},

0 commit comments

Comments
 (0)