diff --git a/controllers/hbase_controller.go b/controllers/hbase_controller.go index 5cda1a5..27fbcba 100644 --- a/controllers/hbase_controller.go +++ b/controllers/hbase_controller.go @@ -640,10 +640,25 @@ const ( HBaseControllerRevisionKey = "hbase-controller-revision" ) +var ( + ignoreTemplateMetadataAnnotations = map[string]struct{}{ + "kubectl.kubernetes.io/last-applied-configuration": struct{}{}, + } +) + func (r *HBaseReconciler) statefulSet(hb *hbasev1.HBase, stsName, cmName types.NamespacedName, ss hbasev1.ServerSpec) (*appsv1.StatefulSet, string) { spec := (&ss.PodSpec).DeepCopy() spec.Volumes = append(spec.Volumes, configMapVolume(cmName)) + + templateMetadataAnnotations := cloneMap(ss.Metadata.Annotations, hb.Annotations) + filteredTemplateMetadataAnnotations := make(map[string]string) + for k, v := range templateMetadataAnnotations { + if _, ok := ignoreTemplateMetadataAnnotations[k]; !ok { + filteredTemplateMetadataAnnotations[k] = v + } + } + stsSpec := appsv1.StatefulSetSpec{ PodManagementPolicy: appsv1.ParallelPodManagement, // OnDelete because we managed the pod restarts ourselves @@ -660,7 +675,7 @@ func (r *HBaseReconciler) statefulSet(hb *hbasev1.HBase, Labels: cloneMap(ss.Metadata.Labels, hb.Labels, map[string]string{ HBaseControllerNameKey: stsName.Name, }), - Annotations: cloneMap(ss.Metadata.Annotations, hb.Annotations), + Annotations: filteredTemplateMetadataAnnotations, }, Spec: *spec, }, @@ -673,6 +688,9 @@ func (r *HBaseReconciler) statefulSet(hb *hbasev1.HBase, // After revision hash calculation, actually update replica count stsSpec.Replicas = pointer.Int32Ptr(ss.Count) + // Restore metadata annotations without filtering + stsSpec.Template.ObjectMeta.Annotations = templateMetadataAnnotations + return &appsv1.StatefulSet{ ObjectMeta: metav1.ObjectMeta{ Name: stsName.Name,