k8s

package
v0.5.17 Latest Latest
Warning

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

Go to latest
Published: Jan 29, 2021 License: Apache-2.0 Imports: 34 Imported by: 0

Documentation

Index

Examples

Constants

View Source
const KindKey contextutils.Key = "kind"

Variables

This section is empty.

Functions

func IsK8sObjectNotExists

func IsK8sObjectNotExists(err error) bool

Types

type PluginManager

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

A generic Plugin for managing k8s-resources. Plugin writers wishing to use K8s resource can use the simplified api specified in pluginmachinery.core

func NewPluginManager

func NewPluginManager(ctx context.Context, iCtx pluginsCore.SetupContext, entry k8s.PluginEntry, monitorIndex *ResourceMonitorIndex) (*PluginManager, error)

Creates a K8s generic task executor. This provides an easier way to build task executors that create K8s resources.

Example
sCtx := &pluginsCoreMock.SetupContext{}
fakeKubeClient := mocks.NewFakeKubeClient()
sCtx.On("KubeClient").Return(fakeKubeClient)
sCtx.On("OwnerKind").Return("test")
sCtx.On("EnqueueOwner").Return(pluginsCore.EnqueueOwner(func(name k8stypes.NamespacedName) error { return nil }))
sCtx.On("MetricsScope").Return(promutils.NewTestScope())
ctx := context.TODO()
exec, err := NewPluginManager(ctx, sCtx, k8s.PluginEntry{
	ID:                  "SampleHandler",
	RegisteredTaskTypes: []pluginsCore.TaskType{"container"},
	ResourceToWatch:     &v1.Pod{},
	Plugin:              k8sSampleHandler{},
}, NewResourceMonitorIndex())
if err == nil {
	fmt.Printf("Created executor: %v\n", exec.GetID())
} else {
	fmt.Printf("Error in creating executor: %s\n", err.Error())
}
Output:

Created executor: SampleHandler

func NewPluginManagerWithBackOff added in v0.1.21

func NewPluginManagerWithBackOff(ctx context.Context, iCtx pluginsCore.SetupContext, entry k8s.PluginEntry, backOffController *backoff.Controller,
	monitorIndex *ResourceMonitorIndex) (*PluginManager, error)

func (PluginManager) Abort

func (*PluginManager) CheckResourcePhase

func (*PluginManager) ClearFinalizers

func (e *PluginManager) ClearFinalizers(ctx context.Context, o k8s.Resource) error

func (*PluginManager) Finalize

func (*PluginManager) GetID

func (e *PluginManager) GetID() string

func (*PluginManager) GetProperties

func (e *PluginManager) GetProperties() pluginsCore.PluginProperties

func (PluginManager) Handle

func (*PluginManager) LaunchResource

type PluginMetrics

type PluginMetrics struct {
	Scope           promutils.Scope
	GetCacheMiss    labeled.StopWatch
	GetCacheHit     labeled.StopWatch
	GetAPILatency   labeled.StopWatch
	ResourceDeleted labeled.Counter
}

type PluginPhase

type PluginPhase uint8
const (
	PluginPhaseNotStarted PluginPhase = iota
	PluginPhaseAllocationTokenAcquired
	PluginPhaseStarted
)

type PluginState

type PluginState struct {
	Phase PluginPhase
}

type ResourceLevelMonitor added in v0.2.65

type ResourceLevelMonitor struct {
	Scope promutils.Scope

	// Meta timer - this times each collection cycle to measure how long it takes to collect the levels GaugeVec below
	CollectorTimer *labeled.StopWatch

	// System Observability: This is a labeled gauge that emits the current number of objects in the informer. It is used
	// to monitor current levels.
	Levels *labeled.Gauge
	// contains filtered or unexported fields
}

This object is responsible for emitting metrics that show the current number of a given K8s resource kind, cut by namespace. It needs to be kicked off. The periodicity is not currently configurable because it seems unnecessary. It will also a timer measuring how long it takes to run each measurement cycle.

func (*ResourceLevelMonitor) RunCollector added in v0.2.65

func (r *ResourceLevelMonitor) RunCollector(ctx context.Context)

func (*ResourceLevelMonitor) RunCollectorOnce added in v0.2.65

func (r *ResourceLevelMonitor) RunCollectorOnce(ctx context.Context)

type ResourceMonitorIndex added in v0.2.65

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

This struct is here to ensure that we do not create more than one of these monitors for a given GVK. It wouldn't necessarily break anything, but it's a waste of compute cycles to compute counts multiple times. This can happen if multiple plugins create the same underlying K8s resource type. If two plugins both created Pods (ie sidecar and container), without this we would launch two ResourceLevelMonitor's, have two goroutines spinning, etc.

func NewResourceMonitorIndex added in v0.2.65

func NewResourceMonitorIndex() *ResourceMonitorIndex

func (*ResourceMonitorIndex) GetOrCreateResourceLevelMonitor added in v0.2.65

Jump to

Keyboard shortcuts

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