cloudprovider

package
v0.37.0 Latest Latest
Warning

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

Go to latest
Published: May 28, 2024 License: Apache-2.0 Imports: 13 Imported by: 19

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func IgnoreInsufficientCapacityError

func IgnoreInsufficientCapacityError(err error) error

func IgnoreNodeClaimNotFoundError

func IgnoreNodeClaimNotFoundError(err error) error

func IgnoreNodeClassNotReadyError

func IgnoreNodeClassNotReadyError(err error) error

func IsInsufficientCapacityError

func IsInsufficientCapacityError(err error) bool

func IsNodeClaimNotFoundError

func IsNodeClaimNotFoundError(err error) bool

func IsNodeClassNotReadyError

func IsNodeClassNotReadyError(err error) bool

Types

type CloudProvider

type CloudProvider interface {
	// Create launches a NodeClaim with the given resource requests and requirements and returns a hydrated
	// NodeClaim back with resolved NodeClaim labels for the launched NodeClaim
	Create(context.Context, *v1beta1.NodeClaim) (*v1beta1.NodeClaim, error)
	// Delete removes a NodeClaim from the cloudprovider by its provider id
	Delete(context.Context, *v1beta1.NodeClaim) error
	// Get retrieves a NodeClaim from the cloudprovider by its provider id
	Get(context.Context, string) (*v1beta1.NodeClaim, error)
	// List retrieves all NodeClaims from the cloudprovider
	List(context.Context) ([]*v1beta1.NodeClaim, error)
	// GetInstanceTypes returns instance types supported by the cloudprovider.
	// Availability of types or zone may vary by nodepool or over time.  Regardless of
	// availability, the GetInstanceTypes method should always return all instance types,
	// even those with no offerings available.
	GetInstanceTypes(context.Context, *v1beta1.NodePool) ([]*InstanceType, error)
	// IsDrifted returns whether a NodeClaim has drifted from the provisioning requirements
	// it is tied to.
	IsDrifted(context.Context, *v1beta1.NodeClaim) (DriftReason, error)
	// Name returns the CloudProvider implementation name.
	Name() string
	// GetSupportedNodeClass returns the group, version, and kind of the CloudProvider NodeClass
	GetSupportedNodeClasses() []schema.GroupVersionKind
}

CloudProvider interface is implemented by cloud providers to support provisioning.

type DriftReason

type DriftReason string

type InstanceType

type InstanceType struct {
	// Name of the instance type, must correspond to v1.LabelInstanceTypeStable
	Name string
	// Requirements returns a flexible set of properties that may be selected
	// for scheduling. Must be defined for every well known label, even if empty.
	Requirements scheduling.Requirements
	// Note that though this is an array it is expected that all the Offerings are unique from one another
	Offerings Offerings
	// Resources are the full resource capacities for this instance type
	Capacity v1.ResourceList
	// Overhead is the amount of resource overhead expected to be used by kubelet and any other system daemons outside
	// of Kubernetes.
	Overhead *InstanceTypeOverhead
	// contains filtered or unexported fields
}

InstanceType describes the properties of a potential node (either concrete attributes of an instance of this type or supported options in the case of arrays)

func (*InstanceType) Allocatable

func (i *InstanceType) Allocatable() v1.ResourceList

type InstanceTypeOverhead

type InstanceTypeOverhead struct {
	// KubeReserved returns the default resources allocated to kubernetes system daemons by default
	KubeReserved v1.ResourceList
	// SystemReserved returns the default resources allocated to the OS system daemons by default
	SystemReserved v1.ResourceList
	// EvictionThreshold returns the resources used to maintain a hard eviction threshold
	EvictionThreshold v1.ResourceList
}

func (InstanceTypeOverhead) Total

type InstanceTypes

type InstanceTypes []*InstanceType

func (InstanceTypes) Compatible added in v0.34.0

func (its InstanceTypes) Compatible(requirements scheduling.Requirements) InstanceTypes

Compatible returns the list of instanceTypes based on the supported capacityType and zones in the requirements

func (InstanceTypes) OrderByPrice

func (its InstanceTypes) OrderByPrice(reqs scheduling.Requirements) InstanceTypes

func (InstanceTypes) SatisfiesMinValues added in v0.37.0

func (its InstanceTypes) SatisfiesMinValues(requirements scheduling.Requirements) (minNeededInstanceTypes int, err error)

SatisfiesMinValues validates whether the InstanceTypes satisfies the minValues requirements It returns the minimum number of needed instance types to satisfy the minValues requirement and an error that indicates whether the InstanceTypes satisfy the passed-in requirements This minNeededInstanceTypes value is dependent on the ordering of instance types, so relying on this value in a deterministic way implies that the instance types are sorted ahead of using this method For example: Requirements:

  • key: node.kubernetes.io/instance-type operator: In values: ["c4.large","c4.xlarge","c5.large","c5.xlarge","m4.large","m4.xlarge"] minValues: 3
  • key: karpenter.kwok.sh/instance-family operator: In values: ["c4","c5","m4"] minValues: 3

InstanceTypes: ["c4.large","c5.xlarge","m4.2xlarge"], it PASSES the requirements

	we get the map as : {
		node.kubernetes.io/instance-type:  ["c4.large","c5.xlarge","m4.2xlarge"],
		karpenter.k8s.aws/instance-family: ["c4","c5","m4"]
	}
 so it returns 3 and a nil error to indicate a minimum of 3 instance types were required to fulfill the minValues requirements

And if InstanceTypes: ["c4.large","c4.xlarge","c5.2xlarge"], it FAILS the requirements

	we get the map as : {
		node.kubernetes.io/instance-type:  ["c4.large","c4.xlarge","c5.2xlarge"],
		karpenter.k8s.aws/instance-family: ["c4","c5"] // minimum requirement failed for this.
	}
  so it returns 3 and a non-nil error to indicate that the instance types weren't able to fulfill the minValues requirements

func (InstanceTypes) Truncate added in v0.37.0

func (its InstanceTypes) Truncate(requirements scheduling.Requirements, maxItems int) (InstanceTypes, error)

Truncate truncates the InstanceTypes based on the passed-in requirements It returns an error if it isn't possible to truncate the instance types on maxItems without violating minValues

type InsufficientCapacityError

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

InsufficientCapacityError is an error type returned by CloudProviders when a launch fails due to a lack of capacity from NodeClaim requirements

func NewInsufficientCapacityError

func NewInsufficientCapacityError(err error) *InsufficientCapacityError

func (*InsufficientCapacityError) Error

func (e *InsufficientCapacityError) Error() string

type NodeClaimNotFoundError

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

NodeClaimNotFoundError is an error type returned by CloudProviders when the reason for failure is NotFound

func NewNodeClaimNotFoundError

func NewNodeClaimNotFoundError(err error) *NodeClaimNotFoundError

func (*NodeClaimNotFoundError) Error

func (e *NodeClaimNotFoundError) Error() string

type NodeClassNotReadyError

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

NodeClassNotReadyError is an error type returned by CloudProviders when a NodeClass that is used by the launch process doesn't have all its resolved fields

func NewNodeClassNotReadyError

func NewNodeClassNotReadyError(err error) *NodeClassNotReadyError

func (*NodeClassNotReadyError) Error

func (e *NodeClassNotReadyError) Error() string

type Offering

type Offering struct {
	Requirements scheduling.Requirements
	Price        float64
	// Available is added so that Offerings can return all offerings that have ever existed for an instance type,
	// so we can get historical pricing data for calculating savings in consolidation
	Available bool
}

An Offering describes where an InstanceType is available to be used, with the expectation that its properties may be tightly coupled (e.g. the availability of an instance type in some zone is scoped to a capacity type) and these properties are captured with labels in Requirements. Requirements are required to contain the keys v1beta1.CapacityTypeLabelKey and v1.LabelTopologyZone

type Offerings

type Offerings []Offering

func (Offerings) Available

func (ofs Offerings) Available() Offerings

Available filters the available offerings from the returned offerings

func (Offerings) Cheapest

func (ofs Offerings) Cheapest() Offering

Cheapest returns the cheapest offering from the returned offerings

func (Offerings) Compatible added in v0.34.0

func (ofs Offerings) Compatible(reqs scheduling.Requirements) Offerings

Compatible returns the offerings based on the passed requirements

func (Offerings) Get

func (ofs Offerings) Get(reqs scheduling.Requirements) (Offering, bool)

Get gets the offering from an offering slice that matches the passed zone, capacityType, and other constraints

func (Offerings) MostExpensive added in v0.37.0

func (ofs Offerings) MostExpensive() Offering

MostExpensive returns the most expensive offering from the return offerings

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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