kubernetesk8s.io/kubernetes/pkg/controller Index | Files | Directories

package controller

import "k8s.io/kubernetes/pkg/controller"

Package controller contains code for controllers (like the replication controller).

Index

Constants

const (
	CreatedByAnnotation = "kubernetes.io/created-by"

	// If a watch drops a delete event for a pod, it'll take this long
	// before a dormant controller waiting for those packets is woken up anyway. It is
	// specifically targeted at the case where some problem prevents an update
	// of expectations, without it the controller could stay asleep forever. This should
	// be set based on the expected latency of watch events.
	//
	// Currently a controller can service (create *and* observe the watch events for said
	// creation) about 10-20 pods a second, so it takes about 1 min to service
	// 500 pods. Just creation is limited to 20qps, and watching happens with ~10-30s
	// latency/pod at the scale of 3000 pods over 100 nodes.
	ExpectationsTimeout = 3 * time.Minute
)

Variables

var ExpKeyFunc = func(obj interface{}) (string, error) {
	if e, ok := obj.(*PodExpectations); ok {
		return e.key, nil
	}
	return "", fmt.Errorf("Could not find key for obj %#v", obj)
}

ExpKeyFunc to parse out the key from a PodExpectation

Functions

func FilterActivePods

func FilterActivePods(pods []api.Pod) []*api.Pod

FilterActivePods returns pods that have not terminated.

func NoResyncPeriodFunc

func NoResyncPeriodFunc() time.Duration

Returns 0 for resyncPeriod in case resyncing is not needed.

Types

type ActivePods

type ActivePods []*api.Pod

ActivePods type allows custom sorting of pods so a controller can pick the best ones to delete.

func (ActivePods) Len

func (s ActivePods) Len() int

func (ActivePods) Less

func (s ActivePods) Less(i, j int) bool

func (ActivePods) Swap

func (s ActivePods) Swap(i, j int)

type ControllerExpectations

type ControllerExpectations struct {
	cache.Store
}

ControllerExpectations is a ttl cache mapping controllers to what they expect to see before being woken up for a sync.

func NewControllerExpectations

func NewControllerExpectations() *ControllerExpectations

NewControllerExpectations returns a store for PodExpectations.

func (*ControllerExpectations) CreationObserved

func (r *ControllerExpectations) CreationObserved(controllerKey string)

CreationObserved atomically decrements the `add` expecation count of the given controller.

func (*ControllerExpectations) DeleteExpectations

func (r *ControllerExpectations) DeleteExpectations(controllerKey string)

DeleteExpectations deletes the expectations of the given controller from the TTLStore.

func (*ControllerExpectations) DeletionObserved

func (r *ControllerExpectations) DeletionObserved(controllerKey string)

DeletionObserved atomically decrements the `del` expectation count of the given controller.

func (*ControllerExpectations) ExpectCreations

func (r *ControllerExpectations) ExpectCreations(controllerKey string, adds int) error

func (*ControllerExpectations) ExpectDeletions

func (r *ControllerExpectations) ExpectDeletions(controllerKey string, dels int) error

func (*ControllerExpectations) GetExpectations

func (r *ControllerExpectations) GetExpectations(controllerKey string) (*PodExpectations, bool, error)

GetExpectations returns the PodExpectations of the given controller.

func (*ControllerExpectations) SatisfiedExpectations

func (r *ControllerExpectations) SatisfiedExpectations(controllerKey string) bool

SatisfiedExpectations returns true if the required adds/dels for the given controller have been observed. Add/del counts are established by the controller at sync time, and updated as pods are observed by the controller manager.

func (*ControllerExpectations) SetExpectations

func (r *ControllerExpectations) SetExpectations(controllerKey string, add, del int) error

SetExpectations registers new expectations for the given controller. Forgets existing expectations.

type ControllerExpectationsInterface

type ControllerExpectationsInterface interface {
	GetExpectations(controllerKey string) (*PodExpectations, bool, error)
	SatisfiedExpectations(controllerKey string) bool
	DeleteExpectations(controllerKey string)
	SetExpectations(controllerKey string, add, del int) error
	ExpectCreations(controllerKey string, adds int) error
	ExpectDeletions(controllerKey string, dels int) error
	CreationObserved(controllerKey string)
	DeletionObserved(controllerKey string)
}

ControllerExpectationsInterface is an interface that allows users to set and wait on expectations. Only abstracted out for testing. Warning: if using KeyFunc it is not safe to use a single ControllerExpectationsInterface with different types of controllers, because the keys might conflict across types.

type Expectations

type Expectations interface {
	Fulfilled() bool
}

Expectations are either fulfilled, or expire naturally.

type FakePodControl

type FakePodControl struct {
	sync.Mutex
	Templates     []api.PodTemplateSpec
	DeletePodName []string
	Err           error
}

func (*FakePodControl) Clear

func (f *FakePodControl) Clear()

func (*FakePodControl) CreatePods

func (f *FakePodControl) CreatePods(namespace string, spec *api.PodTemplateSpec, object runtime.Object) error

func (*FakePodControl) CreatePodsOnNode

func (f *FakePodControl) CreatePodsOnNode(nodeName, namespace string, template *api.PodTemplateSpec, object runtime.Object) error

func (*FakePodControl) DeletePod

func (f *FakePodControl) DeletePod(namespace string, podName string) error

type PodControlInterface

type PodControlInterface interface {
	// CreatePods creates new pods according to the spec.
	CreatePods(namespace string, template *api.PodTemplateSpec, object runtime.Object) error
	// CreatePodsOnNode creates a new pod accorting to the spec on the specified node.
	CreatePodsOnNode(nodeName, namespace string, template *api.PodTemplateSpec, object runtime.Object) error
	// DeletePod deletes the pod identified by podID.
	DeletePod(namespace string, podID string) error
}

PodControlInterface is an interface that knows how to add or delete pods created as an interface to allow testing.

type PodExpectations

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

PodExpectations track pod creates/deletes.

func (*PodExpectations) Fulfilled

func (e *PodExpectations) Fulfilled() bool

Fulfilled returns true if this expectation has been fulfilled.

func (*PodExpectations) GetExpectations

func (e *PodExpectations) GetExpectations() (int64, int64)

GetExpectations returns the add and del expectations of the pod.

func (*PodExpectations) Seen

func (e *PodExpectations) Seen(add, del int64)

Seen decrements the add and del counters.

type RealPodControl

type RealPodControl struct {
	KubeClient client.Interface
	Recorder   record.EventRecorder
}

RealPodControl is the default implementation of PodControllerInterface.

func (RealPodControl) CreatePods

func (r RealPodControl) CreatePods(namespace string, template *api.PodTemplateSpec, object runtime.Object) error

func (RealPodControl) CreatePodsOnNode

func (r RealPodControl) CreatePodsOnNode(nodeName, namespace string, template *api.PodTemplateSpec, object runtime.Object) error

func (RealPodControl) DeletePod

func (r RealPodControl) DeletePod(namespace, podID string) error

type ResyncPeriodFunc

type ResyncPeriodFunc func() time.Duration

Source Files

controller_utils.go doc.go

Directories

PathSynopsis
pkg/controller/daemonPackage daemon contains logic for watching and synchronizing daemons.
pkg/controller/deployment
pkg/controller/endpointPackage service provides EndpointController implementation to manage and sync service endpoints.
pkg/controller/frameworkPackage framework implements all the grunt work involved in running a simple controller.
pkg/controller/gcPackage gc contains a very simple pod "garbage collector" implementation, GCController, that runs in the controller manager.
pkg/controller/jobPackage job contains logic for watching and synchronizing jobs.
pkg/controller/namespacenamespace contains a controller that handles namespace lifecycle
pkg/controller/nodePackage nodecontroller contains code for syncing cloud instances with node registry
pkg/controller/persistentvolume
pkg/controller/podautoscaler
pkg/controller/podautoscaler/metrics
pkg/controller/replicationPackage replication contains logic for watching and synchronizing replication controllers.
pkg/controller/resourcequotaresourcequota contains a controller that makes resource quota usage observations
pkg/controller/routePackage routecontroller contains code for syncing cloud routing rules with the list of registered nodes.
pkg/controller/servicePackage servicecontroller contains code for syncing cloud load balancers with the service registry.
pkg/controller/serviceaccountPackage serviceaccount provides implementations to manage service accounts and service account tokens
Version
v1.1.4
Published
Jan 8, 2016
Platform
windows/amd64
Imports
14 packages
Last checked
9 seconds ago

Tools for package owners.