Added metadata to EndpointSlices

This commit is contained in:
mmontes11
2025-07-11 13:05:43 +02:00
committed by Martin Montes
parent 89791c51d0
commit 4d40bff155
4 changed files with 26 additions and 15 deletions

View File

@ -4,7 +4,8 @@ import (
"fmt" "fmt"
mariadbv1alpha1 "github.com/mariadb-operator/mariadb-operator/api/v1alpha1" mariadbv1alpha1 "github.com/mariadb-operator/mariadb-operator/api/v1alpha1"
metadata "github.com/mariadb-operator/mariadb-operator/pkg/builder/metadata" metadatabuilder "github.com/mariadb-operator/mariadb-operator/pkg/builder/metadata"
"github.com/mariadb-operator/mariadb-operator/pkg/metadata"
discoveryv1 "k8s.io/api/discovery/v1" discoveryv1 "k8s.io/api/discovery/v1"
"k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/types"
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
@ -14,10 +15,11 @@ func (b *Builder) BuildEndpointSlice(key types.NamespacedName, mariadb *mariadbv
addressType discoveryv1.AddressType, endpoints []discoveryv1.Endpoint, ports []discoveryv1.EndpointPort, addressType discoveryv1.AddressType, endpoints []discoveryv1.Endpoint, ports []discoveryv1.EndpointPort,
serviceName string) (*discoveryv1.EndpointSlice, error) { serviceName string) (*discoveryv1.EndpointSlice, error) {
objMeta := objMeta :=
metadata.NewMetadataBuilder(key). metadatabuilder.NewMetadataBuilder(key).
WithMetadata(mariadb.Spec.InheritMetadata). WithMetadata(mariadb.Spec.InheritMetadata).
WithLabels(map[string]string{ WithLabels(map[string]string{
"kubernetes.io/service-name": serviceName, metadata.KubernetesEndpointSliceManagedByLabel: metadata.KubernetesEndpointSliceManagedByValue,
metadata.KubernetesServiceLabel: serviceName,
}). }).
Build() Build()
endpointSlice := &discoveryv1.EndpointSlice{ endpointSlice := &discoveryv1.EndpointSlice{

View File

@ -8,6 +8,7 @@ import (
"sort" "sort"
"time" "time"
"github.com/go-logr/logr"
mariadbv1alpha1 "github.com/mariadb-operator/mariadb-operator/api/v1alpha1" mariadbv1alpha1 "github.com/mariadb-operator/mariadb-operator/api/v1alpha1"
"github.com/mariadb-operator/mariadb-operator/pkg/builder" "github.com/mariadb-operator/mariadb-operator/pkg/builder"
labels "github.com/mariadb-operator/mariadb-operator/pkg/builder/labels" labels "github.com/mariadb-operator/mariadb-operator/pkg/builder/labels"
@ -41,13 +42,16 @@ func NewEndpointsReconciler(client client.Client, builder *builder.Builder) *End
func (r *EndpointsReconciler) Reconcile(ctx context.Context, key types.NamespacedName, func (r *EndpointsReconciler) Reconcile(ctx context.Context, key types.NamespacedName,
mariadb *mariadbv1alpha1.MariaDB, serviceName string) (ctrl.Result, error) { mariadb *mariadbv1alpha1.MariaDB, serviceName string) (ctrl.Result, error) {
logger := log.FromContext(ctx).V(1).WithName("endpoints")
if mariadb.Status.CurrentPrimaryPodIndex == nil { if mariadb.Status.CurrentPrimaryPodIndex == nil {
log.FromContext(ctx).V(1).Info("'status.currentPrimaryPodIndex' must be set") logger.Info("'status.currentPrimaryPodIndex' must be set")
return ctrl.Result{RequeueAfter: 1 * time.Second}, nil return ctrl.Result{RequeueAfter: 1 * time.Second}, nil
} }
desiredEndpoints, err := r.endpointSlice(ctx, key, mariadb, serviceName) desiredEndpointSlice, err := r.endpointSlice(ctx, key, mariadb, serviceName, logger)
if err != nil { if err != nil {
if errors.Is(err, errNoEndpointsAvailable) { if errors.Is(err, errNoEndpointsAvailable) {
logger.Info("No endpoints available. Requeing...")
return ctrl.Result{RequeueAfter: 1 * time.Second}, nil return ctrl.Result{RequeueAfter: 1 * time.Second}, nil
} }
return ctrl.Result{}, fmt.Errorf("error building desired EndpointSlice: %v", err) return ctrl.Result{}, fmt.Errorf("error building desired EndpointSlice: %v", err)
@ -58,20 +62,20 @@ func (r *EndpointsReconciler) Reconcile(ctx context.Context, key types.Namespace
if !apierrors.IsNotFound(err) { if !apierrors.IsNotFound(err) {
return ctrl.Result{}, fmt.Errorf("error getting EndpointSlice: %v", err) return ctrl.Result{}, fmt.Errorf("error getting EndpointSlice: %v", err)
} }
if err := r.Create(ctx, desiredEndpoints); err != nil { if err := r.Create(ctx, desiredEndpointSlice); err != nil {
return ctrl.Result{}, fmt.Errorf("error creating EndpointSlice: %v", err) return ctrl.Result{}, fmt.Errorf("error creating EndpointSlice: %v", err)
} }
return ctrl.Result{}, nil return ctrl.Result{}, nil
} }
patch := client.MergeFrom(existingEndpointSlice.DeepCopy()) patch := client.MergeFrom(existingEndpointSlice.DeepCopy())
existingEndpointSlice.Endpoints = desiredEndpoints.Endpoints existingEndpointSlice.Endpoints = desiredEndpointSlice.Endpoints
existingEndpointSlice.Ports = desiredEndpoints.Ports existingEndpointSlice.Ports = desiredEndpointSlice.Ports
return ctrl.Result{}, r.Patch(ctx, &existingEndpointSlice, patch) return ctrl.Result{}, r.Patch(ctx, &existingEndpointSlice, patch)
} }
func (r *EndpointsReconciler) endpointSlice(ctx context.Context, key types.NamespacedName, func (r *EndpointsReconciler) endpointSlice(ctx context.Context, key types.NamespacedName,
mariadb *mariadbv1alpha1.MariaDB, serviceName string) (*discoveryv1.EndpointSlice, error) { mariadb *mariadbv1alpha1.MariaDB, serviceName string, logger logr.Logger) (*discoveryv1.EndpointSlice, error) {
podList := corev1.PodList{} podList := corev1.PodList{}
listOpts := &client.ListOptions{ listOpts := &client.ListOptions{
LabelSelector: klabels.SelectorFromSet( LabelSelector: klabels.SelectorFromSet(
@ -93,14 +97,15 @@ func (r *EndpointsReconciler) endpointSlice(ctx context.Context, key types.Names
addressType, err := getAddressType(&podList.Items[0]) addressType, err := getAddressType(&podList.Items[0])
if err != nil { if err != nil {
return nil, fmt.Errorf("error getting address type: %v", err) logger.Info("error getting address type", "err", err)
return nil, errNoEndpointsAvailable
} }
endpoints := []discoveryv1.Endpoint{} endpoints := []discoveryv1.Endpoint{}
for _, pod := range podList.Items { for _, pod := range podList.Items {
endpoint, err := buildEndpoint(&pod) endpoint, err := buildEndpoint(&pod)
if err != nil { if err != nil {
log.FromContext(ctx).V(1).Info("error building Endpoint", "err", err) logger.Info("error building Endpoint", "err", err)
continue continue
} }

View File

@ -8,6 +8,7 @@ import (
mariadbv1alpha1 "github.com/mariadb-operator/mariadb-operator/api/v1alpha1" mariadbv1alpha1 "github.com/mariadb-operator/mariadb-operator/api/v1alpha1"
labels "github.com/mariadb-operator/mariadb-operator/pkg/builder/labels" labels "github.com/mariadb-operator/mariadb-operator/pkg/builder/labels"
"github.com/mariadb-operator/mariadb-operator/pkg/metadata"
"github.com/mariadb-operator/mariadb-operator/pkg/pod" "github.com/mariadb-operator/mariadb-operator/pkg/pod"
"github.com/mariadb-operator/mariadb-operator/pkg/statefulset" "github.com/mariadb-operator/mariadb-operator/pkg/statefulset"
appsv1 "k8s.io/api/apps/v1" appsv1 "k8s.io/api/apps/v1"
@ -80,7 +81,7 @@ func IsStatefulSetHealthy(ctx context.Context, client ctrlclient.Client, service
listOpts := &ctrlclient.ListOptions{ listOpts := &ctrlclient.ListOptions{
LabelSelector: klabels.SelectorFromSet( LabelSelector: klabels.SelectorFromSet(
map[string]string{ map[string]string{
"kubernetes.io/service-name": serviceKey.Name, metadata.KubernetesServiceLabel: serviceKey.Name,
}, },
), ),
Namespace: serviceKey.Namespace, Namespace: serviceKey.Namespace,
@ -183,7 +184,7 @@ func IsServiceHealthy(ctx context.Context, client ctrlclient.Client, serviceKey
listOpts := &ctrlclient.ListOptions{ listOpts := &ctrlclient.ListOptions{
LabelSelector: klabels.SelectorFromSet( LabelSelector: klabels.SelectorFromSet(
map[string]string{ map[string]string{
"kubernetes.io/service-name": serviceKey.Name, metadata.KubernetesServiceLabel: serviceKey.Name,
}, },
), ),
Namespace: serviceKey.Namespace, Namespace: serviceKey.Namespace,

View File

@ -1,8 +1,11 @@
package metadata package metadata
var ( var (
WatchLabel = "k8s.mariadb.com/watch" WatchLabel = "k8s.mariadb.com/watch"
PhysicalBackupNameLabel = "physicalbackup.k8s.mariadb.com/name" PhysicalBackupNameLabel = "physicalbackup.k8s.mariadb.com/name"
KubernetesServiceLabel = "kubernetes.io/service-name"
KubernetesEndpointSliceManagedByLabel = "endpointslice.kubernetes.io/managed-by"
KubernetesEndpointSliceManagedByValue = "mariadb-operator.k8s.mariadb.com"
ReplicationAnnotation = "k8s.mariadb.com/replication" ReplicationAnnotation = "k8s.mariadb.com/replication"
GaleraAnnotation = "k8s.mariadb.com/galera" GaleraAnnotation = "k8s.mariadb.com/galera"