Package eviction is responsible for enforcing eviction thresholds to maintain node stability.



View Source
const (

	// Reason is the reason reported back in status.
	Reason = "Evicted"

	// OffendingContainersKey is the key in eviction event annotations for the list of container names which exceeded their requests
	OffendingContainersKey = "offending_containers"
	// OffendingContainersUsageKey is the key in eviction event annotations for the list of usage of containers which exceeded their requests
	OffendingContainersUsageKey = "offending_containers_usage"
	// StarvedResourceKey is the key for the starved resource in eviction event annotations
	StarvedResourceKey = "starved_resource"


This section is empty.


func ParseThresholdConfig

func ParseThresholdConfig(allocatableConfig []string, evictionHard, evictionSoft, evictionSoftGracePeriod, evictionMinimumReclaim map[string]string) ([]evictionapi.Threshold, error)

ParseThresholdConfig parses the flags for thresholds.

func PodIsEvicted

func PodIsEvicted(podStatus v1.PodStatus) bool

PodIsEvicted returns true if the reported pod status is due to an eviction.


type ActivePodsFunc

type ActivePodsFunc func() []*v1.Pod

ActivePodsFunc returns pods bound to the kubelet that are active (i.e. non-terminal state)

type CgroupNotifier

type CgroupNotifier interface {
	// Start causes the CgroupNotifier to begin notifying on the eventCh
	Start(eventCh chan<- struct{})
	// Stop stops all processes and cleans up file descriptors associated with the CgroupNotifier

CgroupNotifier generates events from cgroup events

func NewCgroupNotifier

func NewCgroupNotifier(path, attribute string, threshold int64) (CgroupNotifier, error)

NewCgroupNotifier returns a linuxCgroupNotifier, which performs cgroup control operations required to receive notifications from the cgroup when the threshold is crossed in either direction.

type CgroupNotifierFactory

type CgroupNotifierFactory struct{}

CgroupNotifierFactory knows how to make CgroupNotifiers which integrate with the kernel

func (*CgroupNotifierFactory) NewCgroupNotifier

func (n *CgroupNotifierFactory) NewCgroupNotifier(path, attribute string, threshold int64) (CgroupNotifier, error)

NewCgroupNotifier implements the NotifierFactory interface

type Config

type Config struct {
	// PressureTransitionPeriod is duration the kubelet has to wait before transitioning out of a pressure condition.
	PressureTransitionPeriod time.Duration
	// Maximum allowed grace period (in seconds) to use when terminating pods in response to a soft eviction threshold being met.
	MaxPodGracePeriodSeconds int64
	// Thresholds define the set of conditions monitored to trigger eviction.
	Thresholds []evictionapi.Threshold
	// KernelMemcgNotification if true will integrate with the kernel memcg notification to determine if memory thresholds are crossed.
	KernelMemcgNotification bool
	// PodCgroupRoot is the cgroup which contains all pods.
	PodCgroupRoot string

Config holds information about how eviction is configured.

type ContainerGC

type ContainerGC interface {
	// DeleteAllUnusedContainers deletes all unused containers, even those that belong to pods that are terminated, but not deleted.
	DeleteAllUnusedContainers() error

ContainerGC is responsible for performing garbage collection of unused containers.

type DiskInfoProvider

type DiskInfoProvider interface {
	// HasDedicatedImageFs returns true if the imagefs is on a separate device from the rootfs.
	HasDedicatedImageFs() (bool, error)

DiskInfoProvider is responsible for informing the manager how disk is configured.

type ImageGC

type ImageGC interface {
	// DeleteUnusedImages deletes unused images.
	DeleteUnusedImages() error

ImageGC is responsible for performing garbage collection of unused images.

type KillPodFunc

type KillPodFunc func(pod *v1.Pod, status v1.PodStatus, gracePeriodOverride *int64) error

KillPodFunc kills a pod. The pod status is updated, and then it is killed with the specified grace period. This function must block until either the pod is killed or an error is encountered. Arguments: pod - the pod to kill status - the desired status to associate with the pod (i.e. why its killed) gracePeriodOverride - the grace period override to use instead of what is on the pod spec

type Manager

type Manager interface {
	// Start starts the control loop to monitor eviction thresholds at specified interval.
	Start(diskInfoProvider DiskInfoProvider, podFunc ActivePodsFunc, podCleanedUpFunc PodCleanedUpFunc, monitoringInterval time.Duration)

	// IsUnderMemoryPressure returns true if the node is under memory pressure.
	IsUnderMemoryPressure() bool

	// IsUnderDiskPressure returns true if the node is under disk pressure.
	IsUnderDiskPressure() bool

	// IsUnderPIDPressure returns true if the node is under PID pressure.
	IsUnderPIDPressure() bool

Manager evaluates when an eviction threshold for node stability has been met on the node.

func NewManager

func NewManager(
	summaryProvider stats.SummaryProvider,
	config Config,
	killPodFunc KillPodFunc,
	mirrorPodFunc MirrorPodFunc,
	imageGC ImageGC,
	containerGC ContainerGC,
	recorder record.EventRecorder,
	nodeRef *v1.ObjectReference,
	clock clock.Clock,
	etcHostsPath func(types.UID) string,
) (Manager, lifecycle.PodAdmitHandler)

NewManager returns a configured Manager and an associated admission handler to enforce eviction configuration.

type MirrorPodFunc

type MirrorPodFunc func(*v1.Pod) (*v1.Pod, bool)

MirrorPodFunc returns the mirror pod for the given static pod and whether it was known to the pod manager.

type NotifierFactory

type NotifierFactory interface {
	// NewCgroupNotifier creates a CgroupNotifier that creates events when the threshold
	// on the attribute in the cgroup specified by the path is crossed.
	NewCgroupNotifier(path, attribute string, threshold int64) (CgroupNotifier, error)

NotifierFactory creates CgroupNotifer

type PodCleanedUpFunc

type PodCleanedUpFunc func(*v1.Pod) bool

PodCleanedUpFunc returns true if all resources associated with a pod have been reclaimed.

type ThresholdNotifier

type ThresholdNotifier interface {
	// Start calls the notifier function when the CgroupNotifier notifies the ThresholdNotifier that an event occurred
	// UpdateThreshold updates the memory cgroup threshold based on the metrics provided.
	// Calling UpdateThreshold with recent metrics allows the ThresholdNotifier to trigger at the
	// eviction threshold more accurately
	UpdateThreshold(summary *statsapi.Summary) error
	// Description produces a relevant string describing the Memory Threshold Notifier
	Description() string

ThresholdNotifier manages CgroupNotifiers based on memory eviction thresholds, and performs a function when memory eviction thresholds are crossed

func NewMemoryThresholdNotifier

func NewMemoryThresholdNotifier(threshold evictionapi.Threshold, cgroupRoot string, factory NotifierFactory, handler func(string)) (ThresholdNotifier, error)

NewMemoryThresholdNotifier creates a ThresholdNotifier which is designed to respond to the given threshold. UpdateThreshold must be called once before the threshold will be active.


Path Synopsis