Documentation ¶
Overview ¶
Package object holds functions that convert the objects from the k8s API in to a more memory efficient structures.
Adding new fields to any of the structures defined in pod.go, endpoint.go and service.go should not be done lightly as this increases the memory use and will leads to OOMs in the k8s scale test.
We can do some optimizations here as well. We store IP addresses as strings, this might be moved to uint32 (for v4) for instance, but then we need to convert those again.
Also the msg.Service use in this plugin may be deprecated at some point, as we don't use most of those features anyway and would free us from the *etcd* dependency, where msg.Service is defined. And should save some mem/cpu as we convert to and from msg.Services.
Index ¶
- Variables
- func EndpointSliceToEndpoints(obj meta.Object) (meta.Object, error)
- func EndpointsKey(name, namespace string) string
- func NewIndexerInformer(lw cache.ListerWatcher, objType runtime.Object, h cache.ResourceEventHandler, ...) (cache.Indexer, cache.Controller)
- func ServiceKey(name, namespace string) string
- func ToEndpoints(obj meta.Object) (meta.Object, error)
- func ToPod(obj meta.Object) (meta.Object, error)
- func ToService(obj meta.Object) (meta.Object, error)
- type Empty
- func (e *Empty) GetAnnotations() map[string]string
- func (e *Empty) GetClusterName() string
- func (e *Empty) GetCreationTimestamp() v1.Time
- func (e *Empty) GetDeletionGracePeriodSeconds() *int64
- func (e *Empty) GetDeletionTimestamp() *v1.Time
- func (e *Empty) GetFinalizers() []string
- func (e *Empty) GetGenerateName() string
- func (e *Empty) GetGeneration() int64
- func (e *Empty) GetLabels() map[string]string
- func (e *Empty) GetManagedFields() []v1.ManagedFieldsEntry
- func (e *Empty) GetObjectKind() schema.ObjectKind
- func (e *Empty) GetOwnerReferences() []v1.OwnerReference
- func (e *Empty) GetSelfLink() string
- func (e *Empty) GetUID() types.UID
- func (e *Empty) SetAnnotations(annotations map[string]string)
- func (e *Empty) SetClusterName(clusterName string)
- func (e *Empty) SetCreationTimestamp(timestamp v1.Time)
- func (e *Empty) SetDeletionGracePeriodSeconds(*int64)
- func (e *Empty) SetDeletionTimestamp(timestamp *v1.Time)
- func (e *Empty) SetFinalizers(finalizers []string)
- func (e *Empty) SetGenerateName(name string)
- func (e *Empty) SetGeneration(generation int64)
- func (e *Empty) SetLabels(labels map[string]string)
- func (e *Empty) SetManagedFields(managedFields []v1.ManagedFieldsEntry)
- func (e *Empty) SetOwnerReferences([]v1.OwnerReference)
- func (e *Empty) SetSelfLink(selfLink string)
- func (e *Empty) SetUID(uid types.UID)
- type EndpointAddress
- type EndpointLatencyRecorder
- type EndpointPort
- type EndpointSubset
- type Endpoints
- func (e *Endpoints) CopyWithoutSubsets() *Endpoints
- func (e *Endpoints) DeepCopyObject() runtime.Object
- func (e *Endpoints) GetName() string
- func (e *Endpoints) GetNamespace() string
- func (e *Endpoints) GetResourceVersion() string
- func (e *Endpoints) SetName(name string)
- func (e *Endpoints) SetNamespace(namespace string)
- func (e *Endpoints) SetResourceVersion(version string)
- type Pod
- type ProcessorBuilder
- type RecordLatencyFunc
- type Service
- func (s *Service) DeepCopyObject() runtime.Object
- func (s *Service) GetName() string
- func (s *Service) GetNamespace() string
- func (s *Service) GetResourceVersion() string
- func (s *Service) SetName(name string)
- func (s *Service) SetNamespace(namespace string)
- func (s *Service) SetResourceVersion(version string)
- type ToFunc
Constants ¶
This section is empty.
Variables ¶
var ( // DNSProgrammingLatency is defined as the time it took to program a DNS instance - from the time // a service or pod has changed to the time the change was propagated and was available to be // served by a DNS server. // The definition of this SLI can be found at https://github.com/kubernetes/community/blob/master/sig-scalability/slos/dns_programming_latency.md // Note that the metrics is partially based on the time exported by the endpoints controller on // the master machine. The measurement may be inaccurate if there is a clock drift between the // node and master machine. // The service_kind label can be one of: // * cluster_ip // * headless_with_selector // * headless_without_selector DNSProgrammingLatency = promauto.NewHistogramVec(prometheus.HistogramOpts{ Namespace: plugin.Namespace, Subsystem: "kubernetes", Name: "dns_programming_duration_seconds", Buckets: prometheus.ExponentialBuckets(0.001, 2, 20), Help: "Histogram of the time (in seconds) it took to program a dns instance.", }, []string{"service_kind"}) // DurationSinceFunc returns the duration elapsed since the given time. // Added as a global variable to allow injection for testing. DurationSinceFunc = time.Since )
Functions ¶
func EndpointSliceToEndpoints ¶
EndpointSliceToEndpoints converts a *discovery.EndpointSlice to a *Endpoints.
func EndpointsKey ¶
EndpointsKey returns a string using for the index.
func NewIndexerInformer ¶
func NewIndexerInformer(lw cache.ListerWatcher, objType runtime.Object, h cache.ResourceEventHandler, indexers cache.Indexers, builder ProcessorBuilder) (cache.Indexer, cache.Controller)
NewIndexerInformer is a copy of the cache.NewIndexerInformer function, but allows custom process function
func ServiceKey ¶
ServiceKey returns a string using for the index.
func ToEndpoints ¶
toEndpoints converts an *api.Endpoints to a *Endpoints.
Types ¶
type Empty ¶
type Empty struct{}
Empty is an empty struct.
func (*Empty) GetAnnotations ¶
GetAnnotations implements the metav1.Object interface.
func (*Empty) GetClusterName ¶
GetClusterName implements the metav1.Object interface.
func (*Empty) GetCreationTimestamp ¶
GetCreationTimestamp implements the metav1.Object interface.
func (*Empty) GetDeletionGracePeriodSeconds ¶
GetDeletionGracePeriodSeconds implements the metav1.Object interface.
func (*Empty) GetDeletionTimestamp ¶
GetDeletionTimestamp implements the metav1.Object interface.
func (*Empty) GetFinalizers ¶
GetFinalizers implements the metav1.Object interface.
func (*Empty) GetGenerateName ¶
GetGenerateName implements the metav1.Object interface.
func (*Empty) GetGeneration ¶
GetGeneration implements the metav1.Object interface.
func (*Empty) GetManagedFields ¶
func (e *Empty) GetManagedFields() []v1.ManagedFieldsEntry
GetManagedFields implements the metav1.Object interface.
func (*Empty) GetObjectKind ¶
func (e *Empty) GetObjectKind() schema.ObjectKind
GetObjectKind implements the ObjectKind interface as a noop.
func (*Empty) GetOwnerReferences ¶
func (e *Empty) GetOwnerReferences() []v1.OwnerReference
GetOwnerReferences implements the metav1.Object interface.
func (*Empty) GetSelfLink ¶
GetSelfLink implements the metav1.Object interface.
func (*Empty) SetAnnotations ¶
SetAnnotations implements the metav1.Object interface.
func (*Empty) SetClusterName ¶
SetClusterName implements the metav1.Object interface.
func (*Empty) SetCreationTimestamp ¶
SetCreationTimestamp implements the metav1.Object interface.
func (*Empty) SetDeletionGracePeriodSeconds ¶
SetDeletionGracePeriodSeconds implements the metav1.Object interface.
func (*Empty) SetDeletionTimestamp ¶
SetDeletionTimestamp implements the metav1.Object interface.
func (*Empty) SetFinalizers ¶
SetFinalizers implements the metav1.Object interface.
func (*Empty) SetGenerateName ¶
SetGenerateName implements the metav1.Object interface.
func (*Empty) SetGeneration ¶
SetGeneration implements the metav1.Object interface.
func (*Empty) SetManagedFields ¶
func (e *Empty) SetManagedFields(managedFields []v1.ManagedFieldsEntry)
SetManagedFields implements the metav1.Object interface.
func (*Empty) SetOwnerReferences ¶
func (e *Empty) SetOwnerReferences([]v1.OwnerReference)
SetOwnerReferences implements the metav1.Object interface.
func (*Empty) SetSelfLink ¶
SetSelfLink implements the metav1.Object interface.
type EndpointAddress ¶
EndpointAddress is a tuple that describes single IP address.
type EndpointLatencyRecorder ¶
type EndpointLatencyRecorder struct { TT time.Time ServiceFunc func(meta.Object) []*Service Services []*Service }
EndpointLatencyRecorder records latency metric for endpoint objects
type EndpointPort ¶
EndpointPort is a tuple that describes a single port.
type EndpointSubset ¶
type EndpointSubset struct { Addresses []EndpointAddress Ports []EndpointPort }
EndpointSubset is a group of addresses with a common set of ports. The expanded set of endpoints is the Cartesian product of Addresses x Ports.
type Endpoints ¶
type Endpoints struct { // Don't add new fields to this struct without talking to the CoreDNS maintainers. Version string Name string Namespace string Index string IndexIP []string Subsets []EndpointSubset *Empty }
Endpoints is a stripped down api.Endpoints with only the items we need for CoreDNS.
func (*Endpoints) CopyWithoutSubsets ¶
CopyWithoutSubsets copies e, without the subsets.
func (*Endpoints) DeepCopyObject ¶
DeepCopyObject implements the ObjectKind interface.
func (*Endpoints) GetNamespace ¶
GetNamespace implements the metav1.Object interface.
func (*Endpoints) GetResourceVersion ¶
GetResourceVersion implements the metav1.Object interface.
func (*Endpoints) SetNamespace ¶
SetNamespace implements the metav1.Object interface.
func (*Endpoints) SetResourceVersion ¶
SetResourceVersion implements the metav1.Object interface.
type Pod ¶
type Pod struct { // Don't add new fields to this struct without talking to the CoreDNS maintainers. Version string PodIP string Name string Namespace string *Empty }
Pod is a stripped down api.Pod with only the items we need for CoreDNS.
func (*Pod) DeepCopyObject ¶
DeepCopyObject implements the ObjectKind interface.
func (*Pod) GetNamespace ¶
GetNamespace implements the metav1.Object interface.
func (*Pod) GetResourceVersion ¶
GetResourceVersion implements the metav1.Object interface.
func (*Pod) SetNamespace ¶
SetNamespace implements the metav1.Object interface.
func (*Pod) SetResourceVersion ¶
SetResourceVersion implements the metav1.Object interface.
type ProcessorBuilder ¶
type ProcessorBuilder func(cache.Indexer, cache.ResourceEventHandler) cache.ProcessFunc
ProcessorBuilder returns function to process cache events.
func DefaultProcessor ¶
func DefaultProcessor(convert ToFunc, recordLatency *EndpointLatencyRecorder) ProcessorBuilder
DefaultProcessor is based on the Process function from cache.NewIndexerInformer except it does a conversion.
type RecordLatencyFunc ¶
RecordLatencyFunc is a function for recording api object delta latency
type Service ¶
type Service struct { // Don't add new fields to this struct without talking to the CoreDNS maintainers. Version string Name string Namespace string Index string ClusterIP string Type api.ServiceType ExternalName string Ports []api.ServicePort // ExternalIPs we may want to export. ExternalIPs []string *Empty }
Service is a stripped down api.Service with only the items we need for CoreDNS.
func (*Service) DeepCopyObject ¶
DeepCopyObject implements the ObjectKind interface.
func (*Service) GetNamespace ¶
GetNamespace implements the metav1.Object interface.
func (*Service) GetResourceVersion ¶
GetResourceVersion implements the metav1.Object interface.
func (*Service) SetNamespace ¶
SetNamespace implements the metav1.Object interface.
func (*Service) SetResourceVersion ¶
SetResourceVersion implements the metav1.Object interface.