v0.0.0-...-d88c8b5 Latest Latest

This package is not in the latest version of its module.

Go to latest
Published: Feb 9, 2021 License: Apache-2.0 Imports: 21 Imported by: 0



Package reconcilers provides objects for managing the list of active masters. NOTE: The Lease reconciler is not the intended way for any apiserver other than kube-apiserver to accomplish the task of Endpoint registration. This is a special case for the time being.

Package reconcilers master count based reconciler

Package reconcilers a noop based reconciler

Package reconcilers Endpoint Reconcilers for the apiserver



View Source
const (
	// MasterCountReconcilerType will select the original reconciler
	MasterCountReconcilerType Type = "master-count"
	// LeaseEndpointReconcilerType will select a storage based reconciler
	LeaseEndpointReconcilerType = "lease"
	// NoneEndpointReconcilerType will turn off the endpoint reconciler
	NoneEndpointReconcilerType = "none"


AllTypes export all reconcilers


func GetMasterServiceUpdateIfNeeded

func GetMasterServiceUpdateIfNeeded(svc *corev1.Service, servicePorts []corev1.ServicePort, serviceType corev1.ServiceType) (s *corev1.Service, updated bool)

GetMasterServiceUpdateIfNeeded sets service attributes for the

given apiserver service.
  • GetMasterServiceUpdateIfNeeded expects that the service object it manages will be managed only by GetMasterServiceUpdateIfNeeded; therefore, to understand this, you need only understand the requirements and the body of this function.
  • GetMasterServiceUpdateIfNeeded ensures that the correct ports are are set.


  • All apiservers MUST use GetMasterServiceUpdateIfNeeded and only GetMasterServiceUpdateIfNeeded to manage service attributes
  • updateMasterService is called periodically from all apiservers.


type EndpointReconciler

type EndpointReconciler interface {
	// ReconcileEndpoints sets the endpoints for the given apiserver service (ro or rw).
	// ReconcileEndpoints expects that the endpoints objects it manages will all be
	// managed only by ReconcileEndpoints; therefore, to understand this, you need only
	// understand the requirements.
	// Requirements:
	//  * All apiservers MUST use the same ports for their {rw, ro} services.
	//  * All apiservers MUST use ReconcileEndpoints and only ReconcileEndpoints to manage the
	//      endpoints for their {rw, ro} services.
	//  * ReconcileEndpoints is called periodically from all apiservers.
	ReconcileEndpoints(serviceName string, ip net.IP, endpointPorts []corev1.EndpointPort, reconcilePorts bool) error
	// RemoveEndpoints removes this apiserver's lease.
	RemoveEndpoints(serviceName string, ip net.IP, endpointPorts []corev1.EndpointPort) error
	// StopReconciling turns any later ReconcileEndpoints call into a noop.

EndpointReconciler knows how to reconcile the endpoints for the apiserver service.

func NewLeaseEndpointReconciler

func NewLeaseEndpointReconciler(epAdapter EndpointsAdapter, masterLeases Leases) EndpointReconciler

NewLeaseEndpointReconciler creates a new LeaseEndpoint reconciler

func NewMasterCountEndpointReconciler

func NewMasterCountEndpointReconciler(masterCount int, epAdapter EndpointsAdapter) EndpointReconciler

NewMasterCountEndpointReconciler creates a new EndpointReconciler that reconciles based on a specified expected number of masters.

func NewNoneEndpointReconciler

func NewNoneEndpointReconciler() EndpointReconciler

NewNoneEndpointReconciler creates a new EndpointReconciler that reconciles based on a nothing. It is a no-op.

type EndpointsAdapter

type EndpointsAdapter struct {
	// contains filtered or unexported fields

EndpointsAdapter provides a simple interface for reading and writing both Endpoints and Endpoint Slices. NOTE: This is an incomplete adapter implementation that is only suitable for use in this package. This takes advantage of the Endpoints used in this package always having a consistent set of ports, a single subset, and a small set of addresses. Any more complex Endpoints resource would likely translate into multiple Endpoint Slices creating significantly more complexity instead of the 1:1 mapping this allows.

func NewEndpointsAdapter

func NewEndpointsAdapter(endpointClient corev1client.EndpointsGetter, endpointSliceClient discoveryclient.EndpointSlicesGetter) EndpointsAdapter

NewEndpointsAdapter returns a new EndpointsAdapter.

func (*EndpointsAdapter) Create

func (adapter *EndpointsAdapter) Create(namespace string, endpoints *corev1.Endpoints) (*corev1.Endpoints, error)

Create accepts a namespace and Endpoints object and creates the Endpoints object. If an endpointSliceClient exists, a matching EndpointSlice will also be created or updated. The created Endpoints object or an error will be returned.

func (*EndpointsAdapter) EnsureEndpointSliceFromEndpoints

func (adapter *EndpointsAdapter) EnsureEndpointSliceFromEndpoints(namespace string, endpoints *corev1.Endpoints) error

EnsureEndpointSliceFromEndpoints accepts a namespace and Endpoints resource and creates or updates a corresponding EndpointSlice if an endpointSliceClient exists. An error will be returned if it fails to sync the EndpointSlice.

func (*EndpointsAdapter) Get

func (adapter *EndpointsAdapter) Get(namespace, name string, getOpts metav1.GetOptions) (*corev1.Endpoints, error)

Get takes the name and namespace of the Endpoints resource, and returns a corresponding Endpoints object if it exists, and an error if there is any.

func (*EndpointsAdapter) Update

func (adapter *EndpointsAdapter) Update(namespace string, endpoints *corev1.Endpoints) (*corev1.Endpoints, error)

Update accepts a namespace and Endpoints object and updates it. If an endpointSliceClient exists, a matching EndpointSlice will also be created or updated. The updated Endpoints object or an error will be returned.

type Leases

type Leases interface {
	// ListLeases retrieves a list of the current master IPs
	ListLeases() ([]string, error)

	// UpdateLease adds or refreshes a master's lease
	UpdateLease(ip string) error

	// RemoveLease removes a master's lease
	RemoveLease(ip string) error

Leases is an interface which assists in managing the set of active masters

func NewLeases

func NewLeases(storage storage.Interface, baseKey string, leaseTime time.Duration) Leases

NewLeases creates a new etcd-based Leases implementation.

type Type

type Type string

Type the reconciler type

type Types

type Types []Type

Types an array of reconciler types

func (Types) Names

func (t Types) Names() []string

Names returns a slice of all the reconciler names

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL