v1alpha1

package
v0.30.0 Latest Latest
Warning

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

Go to latest
Published: Aug 31, 2023 License: Apache-2.0 Imports: 17 Imported by: 0

Documentation

Overview

+k8s:openapi-gen=true +k8s:deepcopy-gen=package,register +k8s:defaulter-gen=TypeMeta +groupName=karpenter.k8s.aws

Index

Constants

This section is empty.

Variables

View Source
var (
	LabelDomain = "karpenter.k8s.aws"

	CapacityTypeSpot       = ec2.DefaultTargetCapacityTypeSpot
	CapacityTypeOnDemand   = ec2.DefaultTargetCapacityTypeOnDemand
	AWSToKubeArchitectures = map[string]string{
		"x86_64":                   v1alpha5.ArchitectureAmd64,
		v1alpha5.ArchitectureArm64: v1alpha5.ArchitectureArm64,
	}
	WellKnownArchitectures = sets.NewString(
		v1alpha5.ArchitectureAmd64,
		v1alpha5.ArchitectureArm64,
	)
	RestrictedLabelDomains = []string{
		LabelDomain,
	}
	RestrictedTagPatterns = []*regexp.Regexp{

		regexp.MustCompile(`^kubernetes\.io/cluster/[0-9A-Za-z][A-Za-z0-9\-_]*$`),
		regexp.MustCompile(fmt.Sprintf("^%s$", regexp.QuoteMeta(v1alpha5.ProvisionerNameLabelKey))),
		regexp.MustCompile(fmt.Sprintf("^%s$", regexp.QuoteMeta(v1alpha5.MachineManagedByAnnotationKey))),
	}
	AMIFamilyBottlerocket = "Bottlerocket"
	AMIFamilyAL2          = "AL2"
	AMIFamilyUbuntu       = "Ubuntu"
	AMIFamilyWindows2019  = "Windows2019"
	AMIFamilyWindows2022  = "Windows2022"
	AMIFamilyCustom       = "Custom"
	SupportedAMIFamilies  = []string{
		AMIFamilyBottlerocket,
		AMIFamilyAL2,
		AMIFamilyUbuntu,
		AMIFamilyWindows2019,
		AMIFamilyWindows2022,
		AMIFamilyCustom,
	}
	SupportedContainerRuntimesByAMIFamily = map[string]sets.Set[string]{
		AMIFamilyBottlerocket: sets.New("containerd"),
		AMIFamilyAL2:          sets.New("dockerd", "containerd"),
		AMIFamilyUbuntu:       sets.New("dockerd", "containerd"),
		AMIFamilyWindows2019:  sets.New("dockerd", "containerd"),
		AMIFamilyWindows2022:  sets.New("dockerd", "containerd"),
	}

	Windows2019                                           = "2019"
	Windows2022                                           = "2022"
	WindowsCore                                           = "Core"
	Windows2019Build                                      = "10.0.17763"
	Windows2022Build                                      = "10.0.20348"
	ResourceNVIDIAGPU             v1.ResourceName         = "nvidia.com/gpu"
	ResourceAMDGPU                v1.ResourceName         = "amd.com/gpu"
	ResourceAWSNeuron             v1.ResourceName         = "aws.amazon.com/neuron"
	ResourceHabanaGaudi           v1.ResourceName         = "habana.ai/gaudi"
	ResourceAWSPodENI             v1.ResourceName         = "vpc.amazonaws.com/pod-eni"
	ResourcePrivateIPv4Address    v1.ResourceName         = "vpc.amazonaws.com/PrivateIPv4Address"
	NVIDIAacceleratorManufacturer AcceleratorManufacturer = "nvidia"
	AWSAcceleratorManufacturer    AcceleratorManufacturer = "aws"

	LabelInstanceHypervisor                   = LabelDomain + "/instance-hypervisor"
	LabelInstanceEncryptionInTransitSupported = LabelDomain + "/instance-encryption-in-transit-supported"
	LabelInstanceCategory                     = LabelDomain + "/instance-category"
	LabelInstanceFamily                       = LabelDomain + "/instance-family"
	LabelInstanceGeneration                   = LabelDomain + "/instance-generation"
	LabelInstanceLocalNVME                    = LabelDomain + "/instance-local-nvme"
	LabelInstanceSize                         = LabelDomain + "/instance-size"
	LabelInstanceCPU                          = LabelDomain + "/instance-cpu"
	LabelInstanceMemory                       = LabelDomain + "/instance-memory"
	LabelInstanceNetworkBandwidth             = LabelDomain + "/instance-network-bandwidth"
	LabelInstancePods                         = LabelDomain + "/instance-pods"
	LabelInstanceGPUName                      = LabelDomain + "/instance-gpu-name"
	LabelInstanceGPUManufacturer              = LabelDomain + "/instance-gpu-manufacturer"
	LabelInstanceGPUCount                     = LabelDomain + "/instance-gpu-count"
	LabelInstanceGPUMemory                    = LabelDomain + "/instance-gpu-memory"
	LabelInstanceAMIID                        = LabelDomain + "/instance-ami-id"
	LabelInstanceAcceleratorName              = LabelDomain + "/instance-accelerator-name"
	LabelInstanceAcceleratorManufacturer      = LabelDomain + "/instance-accelerator-manufacturer"
	LabelInstanceAcceleratorCount             = LabelDomain + "/instance-accelerator-count"
	AnnotationNodeTemplateHash                = LabelDomain + "/nodetemplate-hash"
)
View Source
var (
	Scheme = runtime.NewScheme()

	Group              = "karpenter.k8s.aws"
	SchemeGroupVersion = schema.GroupVersion{Group: Group, Version: "v1alpha1"}
	SchemeBuilder      = runtime.NewSchemeBuilder(func(scheme *runtime.Scheme) error {
		scheme.AddKnownTypes(SchemeGroupVersion,
			&AWSNodeTemplate{},
			&AWSNodeTemplateList{},
		)
		metav1.AddToGroupVersion(scheme, SchemeGroupVersion)
		return nil
	})
)

Functions

This section is empty.

Types

type AMI added in v0.28.0

type AMI struct {
	// ID of the AMI
	// +required
	ID string `json:"id"`
	// Name of the AMI
	// +optional
	Name string `json:"name,omitempty"`
	// Requirements of the AMI to be utilized on an instance type
	// +required
	Requirements []v1.NodeSelectorRequirement `json:"requirements"`
}

AMI contains resolved AMI selector values utilized for node launch

func (*AMI) DeepCopy added in v0.28.0

func (in *AMI) DeepCopy() *AMI

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AMI.

func (*AMI) DeepCopyInto added in v0.28.0

func (in *AMI) DeepCopyInto(out *AMI)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type AWS

type AWS struct {
	// TypeMeta includes version and kind of the extensions, inferred if not provided.
	// +optional
	metav1.TypeMeta `json:",inline" hash:"ignore"`
	// AMIFamily is the AMI family that instances use.
	// +optional
	AMIFamily *string `json:"amiFamily,omitempty"`
	// Context is a Reserved field in EC2 APIs
	// https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet.html
	// +optional
	Context *string `json:"context,omitempty"`
	// InstanceProfile is the AWS identity that instances use.
	// +optional
	InstanceProfile *string `json:"instanceProfile,omitempty"`
	// SubnetSelector discovers subnets by tags. A value of "" is a wildcard.
	// +optional
	SubnetSelector map[string]string `json:"subnetSelector,omitempty" hash:"ignore"`
	// SecurityGroups specify the names of the security groups.
	// +optional
	SecurityGroupSelector map[string]string `json:"securityGroupSelector,omitempty" hash:"ignore"`
	// Tags to be applied on ec2 resources like instances and launch templates.
	// +optional
	Tags map[string]string `json:"tags,omitempty"`
	// LaunchTemplate parameters to use when generating an LT
	LaunchTemplate `json:",inline,omitempty"`
}

AWS contains parameters specific to this cloud provider +kubebuilder:object:root=true

func DeserializeProvider added in v0.21.0

func DeserializeProvider(raw []byte) (*AWS, error)

func (*AWS) DeepCopy

func (in *AWS) DeepCopy() *AWS

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWS.

func (*AWS) DeepCopyInto

func (in *AWS) DeepCopyInto(out *AWS)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*AWS) DeepCopyObject

func (in *AWS) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

func (*AWS) Validate

func (a *AWS) Validate() (errs *apis.FieldError)

type AWSNodeTemplate

type AWSNodeTemplate struct {
	metav1.TypeMeta   `json:",inline"`
	metav1.ObjectMeta `json:"metadata,omitempty"`

	Spec   AWSNodeTemplateSpec   `json:"spec,omitempty"`
	Status AWSNodeTemplateStatus `json:"status,omitempty"`
}

AWSNodeTemplate is the Schema for the AWSNodeTemplate API +kubebuilder:object:root=true +kubebuilder:resource:path=awsnodetemplates,scope=Cluster,categories=karpenter +kubebuilder:subresource:status

func (*AWSNodeTemplate) DeepCopy

func (in *AWSNodeTemplate) DeepCopy() *AWSNodeTemplate

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSNodeTemplate.

func (*AWSNodeTemplate) DeepCopyInto

func (in *AWSNodeTemplate) DeepCopyInto(out *AWSNodeTemplate)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*AWSNodeTemplate) DeepCopyObject

func (in *AWSNodeTemplate) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

func (*AWSNodeTemplate) Hash added in v0.30.0

func (a *AWSNodeTemplate) Hash() string

func (*AWSNodeTemplate) SetDefaults

func (a *AWSNodeTemplate) SetDefaults(_ context.Context)

SetDefaults for the AWSNodeTemplate

func (*AWSNodeTemplate) SupportedVerbs added in v0.25.0

func (*AWSNodeTemplate) Validate

func (a *AWSNodeTemplate) Validate(ctx context.Context) (errs *apis.FieldError)

type AWSNodeTemplateList

type AWSNodeTemplateList struct {
	metav1.TypeMeta `json:",inline"`
	metav1.ListMeta `json:"metadata,omitempty"`
	Items           []AWSNodeTemplate `json:"items"`
}

AWSNodeTemplateList contains a list of AWSNodeTemplate +kubebuilder:object:root=true

func (*AWSNodeTemplateList) DeepCopy

func (in *AWSNodeTemplateList) DeepCopy() *AWSNodeTemplateList

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSNodeTemplateList.

func (*AWSNodeTemplateList) DeepCopyInto

func (in *AWSNodeTemplateList) DeepCopyInto(out *AWSNodeTemplateList)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*AWSNodeTemplateList) DeepCopyObject

func (in *AWSNodeTemplateList) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type AWSNodeTemplateSpec

type AWSNodeTemplateSpec struct {
	// UserData to be applied to the provisioned nodes.
	// It must be in the appropriate format based on the AMIFamily in use. Karpenter will merge certain fields into
	// this UserData to ensure nodes are being provisioned with the correct configuration.
	// +optional
	UserData *string `json:"userData,omitempty"`
	AWS      `json:",inline"`
	// AMISelector discovers AMIs to be used by Amazon EC2 tags.
	// +optional
	AMISelector map[string]string `json:"amiSelector,omitempty" hash:"ignore"`
	// DetailedMonitoring controls if detailed monitoring is enabled for instances that are launched
	// +optional
	DetailedMonitoring *bool `json:"detailedMonitoring,omitempty"`
}

AWSNodeTemplateSpec is the top level specification for the AWS Karpenter Provider. This will contain configuration necessary to launch instances in AWS.

func (*AWSNodeTemplateSpec) DeepCopy

func (in *AWSNodeTemplateSpec) DeepCopy() *AWSNodeTemplateSpec

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSNodeTemplateSpec.

func (*AWSNodeTemplateSpec) DeepCopyInto

func (in *AWSNodeTemplateSpec) DeepCopyInto(out *AWSNodeTemplateSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type AWSNodeTemplateStatus added in v0.24.0

type AWSNodeTemplateStatus struct {
	// Subnets contains the current Subnet values that are available to the
	// cluster under the subnet selectors.
	// +optional
	Subnets []Subnet `json:"subnets,omitempty"`
	// SecurityGroups contains the current Security Groups values that are available to the
	// cluster under the SecurityGroups selectors.
	// +optional
	SecurityGroups []SecurityGroup `json:"securityGroups,omitempty"`
	// AMI contains the current AMI values that are available to the
	// cluster under the AMI selectors.
	// +optional
	AMIs []AMI `json:"amis,omitempty"`
}

AWSNodeTemplateStatus contains the resolved state of the AWSNodeTemplate

func (*AWSNodeTemplateStatus) DeepCopy added in v0.24.0

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSNodeTemplateStatus.

func (*AWSNodeTemplateStatus) DeepCopyInto added in v0.24.0

func (in *AWSNodeTemplateStatus) DeepCopyInto(out *AWSNodeTemplateStatus)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type AcceleratorManufacturer added in v0.27.3

type AcceleratorManufacturer string

type BlockDevice

type BlockDevice struct {
	// DeleteOnTermination indicates whether the EBS volume is deleted on instance termination.
	DeleteOnTermination *bool `json:"deleteOnTermination,omitempty"`

	// Encrypted indicates whether the EBS volume is encrypted. Encrypted volumes can only
	// be attached to instances that support Amazon EBS encryption. If you are creating
	// a volume from a snapshot, you can't specify an encryption value.
	Encrypted *bool `json:"encrypted,omitempty"`

	// IOPS is the number of I/O operations per second (IOPS). For gp3, io1, and io2 volumes,
	// this represents the number of IOPS that are provisioned for the volume. For
	// gp2 volumes, this represents the baseline performance of the volume and the
	// rate at which the volume accumulates I/O credits for bursting.
	//
	// The following are the supported values for each volume type:
	//
	//    * gp3: 3,000-16,000 IOPS
	//
	//    * io1: 100-64,000 IOPS
	//
	//    * io2: 100-64,000 IOPS
	//
	// For io1 and io2 volumes, we guarantee 64,000 IOPS only for Instances built
	// on the Nitro System (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances).
	// Other instance families guarantee performance up to 32,000 IOPS.
	//
	// This parameter is supported for io1, io2, and gp3 volumes only. This parameter
	// is not supported for gp2, st1, sc1, or standard volumes.
	IOPS *int64 `json:"iops,omitempty"`

	// KMSKeyID (ARN) of the symmetric Key Management Service (KMS) CMK used for encryption.
	KMSKeyID *string `json:"kmsKeyID,omitempty"`

	// SnapshotID is the ID of an EBS snapshot
	SnapshotID *string `json:"snapshotID,omitempty"`

	// Throughput to provision for a gp3 volume, with a maximum of 1,000 MiB/s.
	// Valid Range: Minimum value of 125. Maximum value of 1000.
	Throughput *int64 `json:"throughput,omitempty"`

	// VolumeSize in GiBs. You must specify either a snapshot ID or
	// a volume size. The following are the supported volumes sizes for each volume
	// type:
	//
	//    * gp2 and gp3: 1-16,384
	//
	//    * io1 and io2: 4-16,384
	//
	//    * st1 and sc1: 125-16,384
	//
	//    * standard: 1-1,024
	VolumeSize *resource.Quantity `json:"volumeSize,omitempty" hash:"string"`

	// VolumeType of the block device.
	// For more information, see Amazon EBS volume types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html)
	// in the Amazon Elastic Compute Cloud User Guide.
	VolumeType *string `json:"volumeType,omitempty"`
}

func (*BlockDevice) DeepCopy

func (in *BlockDevice) DeepCopy() *BlockDevice

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BlockDevice.

func (*BlockDevice) DeepCopyInto

func (in *BlockDevice) DeepCopyInto(out *BlockDevice)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type BlockDeviceMapping

type BlockDeviceMapping struct {
	// The device name (for example, /dev/sdh or xvdh).
	DeviceName *string `json:"deviceName,omitempty"`
	// EBS contains parameters used to automatically set up EBS volumes when an instance is launched.
	EBS *BlockDevice `json:"ebs,omitempty"`
}

func (*BlockDeviceMapping) DeepCopy

func (in *BlockDeviceMapping) DeepCopy() *BlockDeviceMapping

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BlockDeviceMapping.

func (*BlockDeviceMapping) DeepCopyInto

func (in *BlockDeviceMapping) DeepCopyInto(out *BlockDeviceMapping)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type LaunchTemplate

type LaunchTemplate struct {
	// LaunchTemplateName for the node. If not specified, a launch template will be generated.
	// NOTE: This field is for specifying a custom launch template and is exposed in the Spec
	// as `launchTemplate` for backwards compatibility.
	// +optional
	LaunchTemplateName *string `json:"launchTemplate,omitempty" hash:"ignore"`
	// MetadataOptions for the generated launch template of provisioned nodes.
	//
	// This specifies the exposure of the Instance Metadata Service to
	// provisioned EC2 nodes. For more information,
	// see Instance Metadata and User Data
	// (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html)
	// in the Amazon Elastic Compute Cloud User Guide.
	//
	// Refer to recommended, security best practices
	// (https://aws.github.io/aws-eks-best-practices/security/docs/iam/#restrict-access-to-the-instance-profile-assigned-to-the-worker-node)
	// for limiting exposure of Instance Metadata and User Data to pods.
	// If omitted, defaults to httpEndpoint enabled, with httpProtocolIPv6
	// disabled, with httpPutResponseLimit of 2, and with httpTokens
	// required.
	// +optional
	MetadataOptions *MetadataOptions `json:"metadataOptions,omitempty"`
	// BlockDeviceMappings to be applied to provisioned nodes.
	// +optionals
	BlockDeviceMappings []*BlockDeviceMapping `json:"blockDeviceMappings,omitempty"`
}

func (*LaunchTemplate) DeepCopy

func (in *LaunchTemplate) DeepCopy() *LaunchTemplate

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LaunchTemplate.

func (*LaunchTemplate) DeepCopyInto

func (in *LaunchTemplate) DeepCopyInto(out *LaunchTemplate)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type MetadataOptions

type MetadataOptions struct {
	// HTTPEndpoint enables or disables the HTTP metadata endpoint on provisioned
	// nodes. If metadata options is non-nil, but this parameter is not specified,
	// the default state is "enabled".
	//
	// If you specify a value of "disabled", instance metadata will not be accessible
	// on the node.
	// +optional
	HTTPEndpoint *string `json:"httpEndpoint,omitempty"`

	// HTTPProtocolIPv6 enables or disables the IPv6 endpoint for the instance metadata
	// service on provisioned nodes. If metadata options is non-nil, but this parameter
	// is not specified, the default state is "disabled".
	// +optional
	HTTPProtocolIPv6 *string `json:"httpProtocolIPv6,omitempty"`

	// HTTPPutResponseHopLimit is the desired HTTP PUT response hop limit for
	// instance metadata requests. The larger the number, the further instance
	// metadata requests can travel. Possible values are integers from 1 to 64.
	// If metadata options is non-nil, but this parameter is not specified, the
	// default value is 1.
	// +optional
	HTTPPutResponseHopLimit *int64 `json:"httpPutResponseHopLimit,omitempty"`

	// HTTPTokens determines the state of token usage for instance metadata
	// requests. If metadata options is non-nil, but this parameter is not
	// specified, the default state is "optional".
	//
	// If the state is optional, one can choose to retrieve instance metadata with
	// or without a signed token header on the request. If one retrieves the IAM
	// role credentials without a token, the version 1.0 role credentials are
	// returned. If one retrieves the IAM role credentials using a valid signed
	// token, the version 2.0 role credentials are returned.
	//
	// If the state is "required", one must send a signed token header with any
	// instance metadata retrieval requests. In this state, retrieving the IAM
	// role credentials always returns the version 2.0 credentials; the version
	// 1.0 credentials are not available.
	// +optional
	HTTPTokens *string `json:"httpTokens,omitempty"`
}

MetadataOptions contains parameters for specifying the exposure of the Instance Metadata Service to provisioned EC2 nodes.

func (*MetadataOptions) DeepCopy

func (in *MetadataOptions) DeepCopy() *MetadataOptions

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MetadataOptions.

func (*MetadataOptions) DeepCopyInto

func (in *MetadataOptions) DeepCopyInto(out *MetadataOptions)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type SecurityGroup added in v0.28.0

type SecurityGroup struct {
	// ID of the security group
	// +required
	ID string `json:"id"`
	// Name of the security group
	// +optional
	Name string `json:"name,omitempty"`
}

SecurityGroup contains resolved SecurityGroup selector values utilized for node launch

func (*SecurityGroup) DeepCopy added in v0.28.0

func (in *SecurityGroup) DeepCopy() *SecurityGroup

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SecurityGroup.

func (*SecurityGroup) DeepCopyInto added in v0.28.0

func (in *SecurityGroup) DeepCopyInto(out *SecurityGroup)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type Subnet added in v0.28.0

type Subnet struct {
	// ID of the subnet
	// +required
	ID string `json:"id"`
	// The associated availability zone
	// +required
	Zone string `json:"zone"`
}

Subnet contains resolved Subnet selector values utilized for node launch

func (*Subnet) DeepCopy added in v0.28.0

func (in *Subnet) DeepCopy() *Subnet

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Subnet.

func (*Subnet) DeepCopyInto added in v0.28.0

func (in *Subnet) DeepCopyInto(out *Subnet)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

Jump to

Keyboard shortcuts

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