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"
|
"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{
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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,
|
||||||
|
@ -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"
|
||||||
|
Reference in New Issue
Block a user