mirror of
https://github.com/mariadb-operator/mariadb-operator.git
synced 2025-07-25 01:28:31 +00:00
Added metadata to EndpointSlices
This commit is contained in:
@ -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{
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
|
@ -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,
|
||||
|
@ -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"
|
||||
|
Reference in New Issue
Block a user