@@ -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 ,
@@ -228,54 +234,100 @@ func GenerateRedisPodDef(redisCluster *redisv1beta1.RedisCluster, port int32, ma
228234 ReadinessProbe : GenerateRedisProbe (port ),
229235 LivenessProbe : GenerateRedisProbe (port ),
230236 },
237+ },
238+ },
239+ }
240+
241+ // Add exporter container if enabled
242+ if redisCluster .Spec .Exporter != nil && redisCluster .Spec .Exporter .Enabled {
243+ exporterImage := "oliver006/redis_exporter:latest"
244+ if redisCluster .Spec .Exporter .Image != "" {
245+ exporterImage = redisCluster .Spec .Exporter .Image
246+ if redisCluster .Spec .Exporter .Tag != "" {
247+ exporterImage = fmt .Sprintf ("%s:%s" , redisCluster .Spec .Exporter .Image , redisCluster .Spec .Exporter .Tag )
248+ }
249+ }
250+
251+ exporterContainer := corev1.Container {
252+ Name : "redis-exporter" ,
253+ Image : exporterImage ,
254+ Ports : []corev1.ContainerPort {
231255 {
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- },
256+ ContainerPort : port + 5000 ,
257+ Name : "redis-exporter" ,
244258 },
245259 },
246- },
260+ Args : []string {
261+ "--web.listen-address" , fmt .Sprintf (":%d" , port + 5000 ),
262+ "--redis.addr" , fmt .Sprintf ("localhost:%d" , port ),
263+ },
264+ }
265+
266+ // Apply RedisExporter resource settings if provided
267+ if redisCluster .Spec .Exporter .Resources != nil {
268+ exporterContainer .Resources = * redisCluster .Spec .Exporter .Resources
269+ }
270+
271+ pod .Spec .Containers = append (pod .Spec .Containers , exporterContainer )
247272 }
248273
249274 // Apply Redis resource settings if provided
250275 if redisCluster .Spec .Resources != nil {
251276 pod .Spec .Containers [0 ].Resources = * redisCluster .Spec .Resources
252277 }
253278
254- // Apply RedisExporter resource settings if provided
255- if redisCluster .Spec .ExporterResources != nil {
256- pod .Spec .Containers [1 ].Resources = * redisCluster .Spec .ExporterResources
279+ // Add imagePullSecrets if specified
280+ if len (redisCluster .Spec .ImagePullSecrets ) > 0 {
281+ pod .Spec .ImagePullSecrets = redisCluster .Spec .ImagePullSecrets
282+ }
283+
284+ // Add securityContext if specified
285+ if redisCluster .Spec .SecurityContext != nil {
286+ pod .Spec .SecurityContext = redisCluster .Spec .SecurityContext
257287 }
258288
289+ // Add nodeSelector if specified
290+ if redisCluster .Spec .NodeSelector != nil {
291+ pod .Spec .NodeSelector = redisCluster .Spec .NodeSelector
292+ }
293+
294+ // Add tolerations if specified
295+ if len (redisCluster .Spec .Tolerations ) > 0 {
296+ pod .Spec .Tolerations = redisCluster .Spec .Tolerations
297+ }
298+
299+ // TODO: Implement volume mounts for persistence
300+ // Add persistence if enabled
301+ // if redisCluster.Spec.Persistence != nil && redisCluster.Spec.Persistence.Enabled {
302+ // fmt.Println("Persistence is enabled but not yet implemented")
303+ // }
304+
259305 // If matchMasterNodeID is provided, set PodAntiAffinity
260306 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 },
307+ if redisCluster .Spec .Affinity != nil {
308+ pod .Spec .Affinity = redisCluster .Spec .Affinity
309+ } else {
310+ pod .Spec .Affinity = & corev1.Affinity {
311+ PodAntiAffinity : & corev1.PodAntiAffinity {
312+ RequiredDuringSchedulingIgnoredDuringExecution : []corev1.PodAffinityTerm {
313+ {
314+ LabelSelector : & metav1.LabelSelector {
315+ MatchExpressions : []metav1.LabelSelectorRequirement {
316+ {
317+ Key : "redisNodeID" ,
318+ Operator : metav1 .LabelSelectorOpIn ,
319+ Values : []string {matchMasterNodeID },
320+ },
271321 },
272322 },
323+ TopologyKey : "kubernetes.io/hostname" ,
273324 },
274- TopologyKey : "kubernetes.io/hostname" ,
275325 },
276326 },
277- },
327+ }
278328 }
329+ } else if redisCluster .Spec .Affinity != nil {
330+ pod .Spec .Affinity = redisCluster .Spec .Affinity
279331 }
280332
281333 return pod
0 commit comments