kubernetesk8s.io/kubernetes/pkg/kubelet/cm/topologymanager Index | Files | Directories

package topologymanager

import "k8s.io/kubernetes/pkg/kubelet/cm/topologymanager"

Index

Constants

const PolicyBestEffort string = "best-effort"

PolicyBestEffort policy name.

const PolicyNone string = "none"

PolicyNone policy name.

const PolicyRestricted string = "restricted"

PolicyRestricted policy name.

const PolicySingleNumaNode string = "single-numa-node"

PolicySingleNumaNode policy name.

Types

type HintProvider

type HintProvider interface {
	// GetTopologyHints returns a map of resource names to a list of possible
	// concrete resource allocations in terms of NUMA locality hints. Each hint
	// is optionally marked "preferred" and indicates the set of NUMA nodes
	// involved in the hypothetical allocation. The topology manager calls
	// this function for each hint provider, and merges the hints to produce
	// a consensus "best" hint. The hint providers may subsequently query the
	// topology manager to influence actual resource assignment.
	GetTopologyHints(pod *v1.Pod, container *v1.Container) map[string][]TopologyHint
	// Allocate triggers resource allocation to occur on the HintProvider after
	// all hints have been gathered and the aggregated Hint is available via a
	// call to Store.GetAffinity().
	Allocate(pod *v1.Pod, container *v1.Container) error
}

HintProvider is an interface for components that want to collaborate to achieve globally optimal concrete resource alignment with respect to NUMA locality.

type Manager

type Manager interface {
	//Manager implements pod admit handler interface
	lifecycle.PodAdmitHandler
	//Adds a hint provider to manager to indicate the hint provider
	//wants to be consoluted when making topology hints
	AddHintProvider(HintProvider)
	//Adds pod to Manager for tracking
	AddContainer(pod *v1.Pod, containerID string) error
	//Removes pod from Manager tracking
	RemoveContainer(containerID string) error
	//Interface for storing pod topology hints
	Store
}

Manager interface provides methods for Kubelet to manage pod topology hints

func NewFakeManager

func NewFakeManager() Manager

NewFakeManager returns an instance of FakeManager

func NewManager

func NewManager(topology []cadvisorapi.Node, topologyPolicyName string) (Manager, error)

NewManager creates a new TopologyManager based on provided policy

type Policy

type Policy interface {
	// Returns Policy Name
	Name() string
	// Returns a merged TopologyHint based on input from hint providers
	// and a Pod Admit Handler Response based on hints and policy type
	Merge(providersHints []map[string][]TopologyHint) (TopologyHint, bool)
}

Policy interface for Topology Manager Pod Admit Result

func NewBestEffortPolicy

func NewBestEffortPolicy(numaNodes []int) Policy

NewBestEffortPolicy returns best-effort policy.

func NewNonePolicy

func NewNonePolicy() Policy

NewNonePolicy returns none policy.

func NewRestrictedPolicy

func NewRestrictedPolicy(numaNodes []int) Policy

NewRestrictedPolicy returns restricted policy.

func NewSingleNumaNodePolicy

func NewSingleNumaNodePolicy(numaNodes []int) Policy

NewSingleNumaNodePolicy returns single-numa-node policy.

type Store

type Store interface {
	GetAffinity(podUID string, containerName string) TopologyHint
}

Store interface is to allow Hint Providers to retrieve pod affinity

type TopologyHint

type TopologyHint struct {
	NUMANodeAffinity bitmask.BitMask
	// Preferred is set to true when the NUMANodeAffinity encodes a preferred
	// allocation for the Container. It is set to false otherwise.
	Preferred bool
}

TopologyHint is a struct containing the NUMANodeAffinity for a Container

func (*TopologyHint) IsEqual

func (th *TopologyHint) IsEqual(topologyHint TopologyHint) bool

IsEqual checks if TopologyHint are equal

func (*TopologyHint) LessThan

func (th *TopologyHint) LessThan(other TopologyHint) bool

LessThan checks if TopologyHint `a` is less than TopologyHint `b` this means that either `a` is a preferred hint and `b` is not or `a` NUMANodeAffinity attribute is narrower than `b` NUMANodeAffinity attribute.

Source Files

fake_topology_manager.go policy.go policy_best_effort.go policy_none.go policy_restricted.go policy_single_numa_node.go topology_manager.go

Directories

PathSynopsis
pkg/kubelet/cm/topologymanager/bitmask
Version
v1.19.16
Published
Oct 27, 2021
Platform
js/wasm
Imports
7 packages
Last checked
15 seconds ago

Tools for package owners.