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"
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"
"k8s.io/apimachinery/pkg/types"
"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,
serviceName string) (*discoveryv1.EndpointSlice, error) {
objMeta :=
metadata.NewMetadataBuilder(key).
metadatabuilder.NewMetadataBuilder(key).
WithMetadata(mariadb.Spec.InheritMetadata).
WithLabels(map[string]string{
"kubernetes.io/service-name": serviceName,
metadata.KubernetesEndpointSliceManagedByLabel: metadata.KubernetesEndpointSliceManagedByValue,
metadata.KubernetesServiceLabel: serviceName,
}).
Build()
endpointSlice := &discoveryv1.EndpointSlice{

View File

@ -8,6 +8,7 @@ import (
"sort"
"time"
"github.com/go-logr/logr"
mariadbv1alpha1 "github.com/mariadb-operator/mariadb-operator/api/v1alpha1"
"github.com/mariadb-operator/mariadb-operator/pkg/builder"
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,
mariadb *mariadbv1alpha1.MariaDB, serviceName string) (ctrl.Result, error) {
logger := log.FromContext(ctx).V(1).WithName("endpoints")
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
}
desiredEndpoints, err := r.endpointSlice(ctx, key, mariadb, serviceName)
desiredEndpointSlice, err := r.endpointSlice(ctx, key, mariadb, serviceName, logger)
if err != nil {
if errors.Is(err, errNoEndpointsAvailable) {
logger.Info("No endpoints available. Requeing...")
return ctrl.Result{RequeueAfter: 1 * time.Second}, nil
}
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) {
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{}, nil
}
patch := client.MergeFrom(existingEndpointSlice.DeepCopy())
existingEndpointSlice.Endpoints = desiredEndpoints.Endpoints
existingEndpointSlice.Ports = desiredEndpoints.Ports
existingEndpointSlice.Endpoints = desiredEndpointSlice.Endpoints
existingEndpointSlice.Ports = desiredEndpointSlice.Ports
return ctrl.Result{}, r.Patch(ctx, &existingEndpointSlice, patch)
}
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{}
listOpts := &client.ListOptions{
LabelSelector: klabels.SelectorFromSet(
@ -93,14 +97,15 @@ func (r *EndpointsReconciler) endpointSlice(ctx context.Context, key types.Names
addressType, err := getAddressType(&podList.Items[0])
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{}
for _, pod := range podList.Items {
endpoint, err := buildEndpoint(&pod)
if err != nil {
log.FromContext(ctx).V(1).Info("error building Endpoint", "err", err)
logger.Info("error building Endpoint", "err", err)
continue
}

View File

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

View File

@ -1,8 +1,11 @@
package metadata
var (
WatchLabel = "k8s.mariadb.com/watch"
PhysicalBackupNameLabel = "physicalbackup.k8s.mariadb.com/name"
WatchLabel = "k8s.mariadb.com/watch"
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"
GaleraAnnotation = "k8s.mariadb.com/galera"