kube

package
v0.44.0 Latest Latest
Warning

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

Go to latest
Published: Feb 7, 2022 License: Apache-2.0 Imports: 19 Imported by: 0

Documentation

Index

Constants

View Source
const (

	// MetadataFromPod is used to specify to extract metadata/labels/annotations from pod
	MetadataFromPod = "pod"
	// MetadataFromNamespace is used to specify to extract metadata/labels/annotations from namespace
	MetadataFromNamespace = "namespace"
)

Variables

This section is empty.

Functions

func NewFakeInformer

func NewFakeInformer(
	_ kubernetes.Interface,
	namespace string,
	labelSelector labels.Selector,
	fieldSelector fields.Selector,
) cache.SharedInformer

func NewFakeNamespaceInformer

func NewFakeNamespaceInformer(
	_ kubernetes.Interface,
) cache.SharedInformer

func NewNoOpInformer

func NewNoOpInformer(
	_ kubernetes.Interface,
) cache.SharedInformer

Types

type APIClientsetProvider

type APIClientsetProvider func(config k8sconfig.APIConfig) (kubernetes.Interface, error)

APIClientsetProvider defines a func type that initializes and return a new kubernetes Clientset object.

type Association

type Association struct {
	From string
	Name string
}

Association represents one association rule

type Associations

type Associations struct {
	Associations []Association
}

Associations represent a list of rules for Pod metadata associations with resources

type Client

type Client interface {
	GetPod(PodIdentifier) (*Pod, bool)
	GetNamespace(string) (*Namespace, bool)
	Start()
	Stop()
}

Client defines the main interface that allows querying pods by metadata.

func New

func New(logger *zap.Logger, apiCfg k8sconfig.APIConfig, rules ExtractionRules, filters Filters, associations []Association, exclude Excludes, newClientSet APIClientsetProvider, newInformer InformerProvider, newNamespaceInformer InformerProviderNamespace) (Client, error)

New initializes a new k8s Client.

type ClientProvider

ClientProvider defines a func type that returns a new Client.

type Container

type Container struct {
	ImageName string
	ImageTag  string

	// Statuses is a map of container k8s.container.restart_count attribute to ContainerStatus struct.
	Statuses map[int]ContainerStatus
}

Container stores resource attributes for a specific container defined by k8s pod spec.

type ContainerStatus

type ContainerStatus struct {
	ContainerID string
}

ContainerStatus stores resource attributes for a particular container run defined by k8s pod status.

type ExcludePods

type ExcludePods struct {
	Name *regexp.Regexp
}

ExcludePods represent a Pod name to ignore

type Excludes

type Excludes struct {
	Pods []ExcludePods
}

Excludes represent a list of Pods to ignore

type ExtractionRules

type ExtractionRules struct {
	Deployment         bool
	Namespace          bool
	PodName            bool
	PodUID             bool
	Node               bool
	Cluster            bool
	StartTime          bool
	ContainerID        bool
	ContainerImageName bool
	ContainerImageTag  bool

	Annotations []FieldExtractionRule
	Labels      []FieldExtractionRule
}

ExtractionRules is used to specify the information that needs to be extracted from pods and added to the spans as tags.

type FakeController

type FakeController struct {
	sync.Mutex
	// contains filtered or unexported fields
}

func (*FakeController) HasStopped

func (c *FakeController) HasStopped() bool

func (*FakeController) HasSynced

func (c *FakeController) HasSynced() bool

func (*FakeController) LastSyncResourceVersion

func (c *FakeController) LastSyncResourceVersion() string

func (*FakeController) Run

func (c *FakeController) Run(stopCh <-chan struct{})

type FakeInformer

type FakeInformer struct {
	*FakeController
	// contains filtered or unexported fields
}

func (*FakeInformer) AddEventHandler

func (f *FakeInformer) AddEventHandler(handler cache.ResourceEventHandler)

func (*FakeInformer) AddEventHandlerWithResyncPeriod

func (f *FakeInformer) AddEventHandlerWithResyncPeriod(handler cache.ResourceEventHandler, period time.Duration)

func (*FakeInformer) GetController

func (f *FakeInformer) GetController() cache.Controller

func (*FakeInformer) GetStore

func (f *FakeInformer) GetStore() cache.Store

func (*FakeInformer) SetWatchErrorHandler

func (f *FakeInformer) SetWatchErrorHandler(cache.WatchErrorHandler) error

type FakeNamespaceInformer

type FakeNamespaceInformer struct {
	*FakeController
}

func (*FakeNamespaceInformer) AddEventHandler

func (f *FakeNamespaceInformer) AddEventHandler(handler cache.ResourceEventHandler)

func (*FakeNamespaceInformer) AddEventHandlerWithResyncPeriod

func (f *FakeNamespaceInformer) AddEventHandlerWithResyncPeriod(handler cache.ResourceEventHandler, period time.Duration)

func (*FakeNamespaceInformer) GetController

func (f *FakeNamespaceInformer) GetController() cache.Controller

func (*FakeNamespaceInformer) GetStore

func (f *FakeNamespaceInformer) GetStore() cache.Store

type FieldExtractionRule

type FieldExtractionRule struct {
	// Name is used to as the Span tag name.
	Name string
	// Key is used to lookup k8s pod fields.
	Key string
	// KeyRegex is a regular expression used to extract a Key that matches the regex.
	KeyRegex *regexp.Regexp
	// Regex is a regular expression used to extract a sub-part of a field value.
	// Full value is extracted when no regexp is provided.
	Regex *regexp.Regexp
	// From determines the kubernetes object the field should be retrieved from.
	// Currently only two values are supported,
	//  - pod
	//  - namespace
	From string
}

FieldExtractionRule is used to specify which fields to extract from pod fields and inject into spans as attributes.

type FieldFilter

type FieldFilter struct {
	// Key matches the field name.
	Key string
	// Value matches the field value.
	Value string
	// Op determines the matching operation.
	// Currently only two operations are supported,
	//  - Equals
	//  - NotEquals
	Op selection.Operator
}

FieldFilter represents exactly one filter by field rule.

type Filters

type Filters struct {
	Node      string
	Namespace string
	Fields    []FieldFilter
	Labels    []FieldFilter
}

Filters is used to instruct the client on how to filter out k8s pods. Right now only filters supported are the ones supported by k8s API itself for performance reasons. We can support adding additional custom filters in future if there is a real need.

type InformerProvider

type InformerProvider func(
	client kubernetes.Interface,
	namespace string,
	labelSelector labels.Selector,
	fieldSelector fields.Selector,
) cache.SharedInformer

InformerProvider defines a function type that returns a new SharedInformer. It is used to allow passing custom shared informers to the watch client.

type InformerProviderNamespace

type InformerProviderNamespace func(
	client kubernetes.Interface,
) cache.SharedInformer

InformerProviderNamespace defines a function type that returns a new SharedInformer. It is used to allow passing custom shared informers to the watch client for fetching namespace objects.

type Namespace

type Namespace struct {
	Name         string
	NamespaceUID string
	Attributes   map[string]string
	StartTime    metav1.Time
	DeletedAt    time.Time
}

Namespace represents a kubernetes namespace.

type NoOpController

type NoOpController struct {
	// contains filtered or unexported fields
}

func (*NoOpController) HasStopped

func (c *NoOpController) HasStopped() bool

func (*NoOpController) HasSynced

func (c *NoOpController) HasSynced() bool

func (*NoOpController) LastSyncResourceVersion

func (c *NoOpController) LastSyncResourceVersion() string

func (*NoOpController) Run

func (c *NoOpController) Run(stopCh <-chan struct{})

func (*NoOpController) SetWatchErrorHandler

func (c *NoOpController) SetWatchErrorHandler(cache.WatchErrorHandler) error

type NoOpInformer

type NoOpInformer struct {
	*NoOpController
}

func (*NoOpInformer) AddEventHandler

func (f *NoOpInformer) AddEventHandler(handler cache.ResourceEventHandler)

func (*NoOpInformer) AddEventHandlerWithResyncPeriod

func (f *NoOpInformer) AddEventHandlerWithResyncPeriod(handler cache.ResourceEventHandler, period time.Duration)

func (*NoOpInformer) GetController

func (f *NoOpInformer) GetController() cache.Controller

func (*NoOpInformer) GetStore

func (f *NoOpInformer) GetStore() cache.Store

type Pod

type Pod struct {
	Name       string
	Address    string
	PodUID     string
	Attributes map[string]string
	StartTime  *metav1.Time
	Ignore     bool
	Namespace  string

	// Containers is a map of container name to Container struct.
	Containers map[string]*Container

	DeletedAt time.Time
}

Pod represents a kubernetes pod.

type PodIdentifier

type PodIdentifier string

PodIdentifier is a custom type to represent IP Address or Pod UID

type WatchClient

type WatchClient struct {

	// A map containing Pod related data, used to associate them with resources.
	// Key can be either an IP address or Pod UID
	Pods         map[PodIdentifier]*Pod
	Rules        ExtractionRules
	Filters      Filters
	Associations []Association
	Exclude      Excludes

	// A map containing Namespace related data, used to associate them with resources.
	// Key is namespace name
	Namespaces map[string]*Namespace
	// contains filtered or unexported fields
}

WatchClient is the main interface provided by this package to a kubernetes cluster.

func (*WatchClient) GetNamespace

func (c *WatchClient) GetNamespace(namespace string) (*Namespace, bool)

GetNamespace takes a namespace and returns the namespace object the namespace is associated with.

func (*WatchClient) GetPod

func (c *WatchClient) GetPod(identifier PodIdentifier) (*Pod, bool)

GetPod takes an IP address or Pod UID and returns the pod the identifier is associated with.

func (*WatchClient) Start

func (c *WatchClient) Start()

Start registers pod event handlers and starts watching the kubernetes cluster for pod changes.

func (*WatchClient) Stop

func (c *WatchClient) Stop()

Stop signals the the k8s watcher/informer to stop watching for new events.

Jump to

Keyboard shortcuts

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