@@ -191,6 +191,11 @@ func UpdatePodLabelWithRedisID(ctx context.Context, k8scl kubernetes.Interface,
191191func GenerateRedisPodDef (redisCluster * redisv1beta1.RedisCluster , port int32 , matchMasterNodeID string ) * corev1.Pod {
192192 podName := fmt .Sprintf ("rediscluster-%s-%d" , redisCluster .Name , port )
193193
194+ image := redisCluster .Spec .Image
195+ if redisCluster .Spec .Tag != "" {
196+ image = fmt .Sprintf ("%s:%s" , redisCluster .Spec .Image , redisCluster .Spec .Tag )
197+ }
198+
194199 pod := & corev1.Pod {
195200 ObjectMeta : metav1.ObjectMeta {
196201 Name : podName ,
@@ -205,8 +210,9 @@ func GenerateRedisPodDef(redisCluster *redisv1beta1.RedisCluster, port int32, ma
205210 HostNetwork : true , // Enable HostNetwork
206211 Containers : []corev1.Container {
207212 {
208- Name : "redis" ,
209- Image : redisCluster .Spec .Image ,
213+ Name : "redis" ,
214+ Image : image ,
215+ ImagePullPolicy : redisCluster .Spec .ImagePullPolicy ,
210216 Ports : []corev1.ContainerPort {
211217 {
212218 ContainerPort : port ,
@@ -224,58 +230,105 @@ func GenerateRedisPodDef(redisCluster *redisv1beta1.RedisCluster, port int32, ma
224230 "--cluster-port" , fmt .Sprintf ("%d" , port + 10000 ),
225231 "--cluster-node-timeout" , "5000" ,
226232 "--maxmemory" , redisCluster .Spec .Maxmemory ,
233+ "--protected-mode" , "no" ,
227234 },
228235 ReadinessProbe : GenerateRedisProbe (port ),
229236 LivenessProbe : GenerateRedisProbe (port ),
230237 },
238+ },
239+ },
240+ }
241+
242+ // Add exporter container if enabled
243+ if redisCluster .Spec .Exporter != nil && redisCluster .Spec .Exporter .Enabled {
244+ exporterImage := "oliver006/redis_exporter:latest"
245+ if redisCluster .Spec .Exporter .Image != "" {
246+ exporterImage = redisCluster .Spec .Exporter .Image
247+ if redisCluster .Spec .Exporter .Tag != "" {
248+ exporterImage = fmt .Sprintf ("%s:%s" , redisCluster .Spec .Exporter .Image , redisCluster .Spec .Exporter .Tag )
249+ }
250+ }
251+
252+ exporterContainer := corev1.Container {
253+ Name : "redis-exporter" ,
254+ Image : exporterImage ,
255+ Ports : []corev1.ContainerPort {
231256 {
232- Name : "redis-exporter" ,
233- Image : "oliver006/redis_exporter:latest" ,
234- Ports : []corev1.ContainerPort {
235- {
236- ContainerPort : port + 5000 ,
237- Name : "redis-exporter" ,
238- },
239- },
240- Args : []string {
241- "--web.listen-address" , fmt .Sprintf (":%d" , port + 5000 ),
242- "--redis.addr" , fmt .Sprintf ("localhost:%d" , port ),
243- },
257+ ContainerPort : port + 5000 ,
258+ Name : "redis-exporter" ,
244259 },
245260 },
246- },
261+ Args : []string {
262+ "--web.listen-address" , fmt .Sprintf (":%d" , port + 5000 ),
263+ "--redis.addr" , fmt .Sprintf ("localhost:%d" , port ),
264+ },
265+ }
266+
267+ // Apply RedisExporter resource settings if provided
268+ if redisCluster .Spec .Exporter .Resources != nil {
269+ exporterContainer .Resources = * redisCluster .Spec .Exporter .Resources
270+ }
271+
272+ pod .Spec .Containers = append (pod .Spec .Containers , exporterContainer )
247273 }
248274
249275 // Apply Redis resource settings if provided
250276 if redisCluster .Spec .Resources != nil {
251277 pod .Spec .Containers [0 ].Resources = * redisCluster .Spec .Resources
252278 }
253279
254- // Apply RedisExporter resource settings if provided
255- if redisCluster .Spec .ExporterResources != nil {
256- pod .Spec .Containers [1 ].Resources = * redisCluster .Spec .ExporterResources
280+ // Add imagePullSecrets if specified
281+ if len (redisCluster .Spec .ImagePullSecrets ) > 0 {
282+ pod .Spec .ImagePullSecrets = redisCluster .Spec .ImagePullSecrets
283+ }
284+
285+ // Add securityContext if specified
286+ if redisCluster .Spec .SecurityContext != nil {
287+ pod .Spec .SecurityContext = redisCluster .Spec .SecurityContext
257288 }
258289
290+ // Add nodeSelector if specified
291+ if redisCluster .Spec .NodeSelector != nil {
292+ pod .Spec .NodeSelector = redisCluster .Spec .NodeSelector
293+ }
294+
295+ // Add tolerations if specified
296+ if len (redisCluster .Spec .Tolerations ) > 0 {
297+ pod .Spec .Tolerations = redisCluster .Spec .Tolerations
298+ }
299+
300+ // TODO: Implement volume mounts for persistence
301+ // Add persistence if enabled
302+ // if redisCluster.Spec.Persistence != nil && redisCluster.Spec.Persistence.Enabled {
303+ // fmt.Println("Persistence is enabled but not yet implemented")
304+ // }
305+
259306 // If matchMasterNodeID is provided, set PodAntiAffinity
260307 if matchMasterNodeID != "" {
261- pod .Spec .Affinity = & corev1.Affinity {
262- PodAntiAffinity : & corev1.PodAntiAffinity {
263- RequiredDuringSchedulingIgnoredDuringExecution : []corev1.PodAffinityTerm {
264- {
265- LabelSelector : & metav1.LabelSelector {
266- MatchExpressions : []metav1.LabelSelectorRequirement {
267- {
268- Key : "redisNodeID" ,
269- Operator : metav1 .LabelSelectorOpIn ,
270- Values : []string {matchMasterNodeID },
308+ if redisCluster .Spec .Affinity != nil {
309+ pod .Spec .Affinity = redisCluster .Spec .Affinity
310+ } else {
311+ pod .Spec .Affinity = & corev1.Affinity {
312+ PodAntiAffinity : & corev1.PodAntiAffinity {
313+ RequiredDuringSchedulingIgnoredDuringExecution : []corev1.PodAffinityTerm {
314+ {
315+ LabelSelector : & metav1.LabelSelector {
316+ MatchExpressions : []metav1.LabelSelectorRequirement {
317+ {
318+ Key : "redisNodeID" ,
319+ Operator : metav1 .LabelSelectorOpIn ,
320+ Values : []string {matchMasterNodeID },
321+ },
271322 },
272323 },
324+ TopologyKey : "kubernetes.io/hostname" ,
273325 },
274- TopologyKey : "kubernetes.io/hostname" ,
275326 },
276327 },
277- },
328+ }
278329 }
330+ } else if redisCluster .Spec .Affinity != nil {
331+ pod .Spec .Affinity = redisCluster .Spec .Affinity
279332 }
280333
281334 return pod
0 commit comments