v1alpha1

package
v0.0.0-...-5affba4 Latest Latest
Warning

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

Go to latest
Published: Mar 14, 2023 License: Apache-2.0 Imports: 19 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,
	}
	RestrictedLabelDomains = []string{
		LabelDomain,
	}
	AMIFamilyBottlerocket = "Bottlerocket"
	AMIFamilyAL2          = "AL2"
	AMIFamilyUbuntu       = "Ubuntu"
	AMIFamilyCustom       = "Custom"
	SupportedAMIFamilies  = []string{
		AMIFamilyBottlerocket,
		AMIFamilyAL2,
		AMIFamilyUbuntu,
		AMIFamilyCustom,
	}
	SupportedContainerRuntimesByAMIFamily = map[string]sets.String{
		AMIFamilyBottlerocket: sets.NewString("containerd"),
		AMIFamilyAL2:          sets.NewString("dockerd", "containerd"),
		AMIFamilyUbuntu:       sets.NewString("dockerd", "containerd"),
	}
	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"

	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"

	InterruptionInfrastructureFinalizer = Group + "/interruption-infrastructure"
)
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

func MergeTags

func MergeTags(ctx context.Context, custom ...map[string]string) (result []*ec2.Tag)

Types

type AWS

type AWS struct {
	// TypeMeta includes version and kind of the extensions, inferred if not provided.
	// +optional
	metav1.TypeMeta `json:",inline"`
	// 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"`
	// SecurityGroups specify the names of the security groups.
	// +optional
	SecurityGroupSelector map[string]string `json:"securityGroupSelector,omitempty"`
	// 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

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) SetDefaults

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

SetDefaults for the AWSNodeTemplate

func (*AWSNodeTemplate) SupportedVerbs

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"`
	// 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

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

AWSNodeTemplateStatus contains the resolved state of the AWSNodeTemplate

func (*AWSNodeTemplateStatus) DeepCopy

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

func (*AWSNodeTemplateStatus) DeepCopyInto

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

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

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"`
	// 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 SecurityGroupStatus

type SecurityGroupStatus struct {
	// Id of the security group
	// +optional
	ID string `json:"id,omitempty"`
}

SecurityGroupStatus contains resolved SecurityGroup selector values utilized for node launch

func (*SecurityGroupStatus) DeepCopy

func (in *SecurityGroupStatus) DeepCopy() *SecurityGroupStatus

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

func (*SecurityGroupStatus) DeepCopyInto

func (in *SecurityGroupStatus) DeepCopyInto(out *SecurityGroupStatus)

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

type SubnetStatus

type SubnetStatus struct {
	// Id of the subnet
	// +optional
	ID string `json:"id,omitempty"`
	// The associated availability zone
	// +optional
	Zone string `json:"zone,omitempty"`
}

SubnetStatus contains resolved Subnet selector values utilized for node launch

func (*SubnetStatus) DeepCopy

func (in *SubnetStatus) DeepCopy() *SubnetStatus

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

func (*SubnetStatus) DeepCopyInto

func (in *SubnetStatus) DeepCopyInto(out *SubnetStatus)

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