Documentation
¶
Overview ¶
+k8s:openapi-gen=true +k8s:deepcopy-gen=package,register +k8s:defaulter-gen=TypeMeta +groupName=compute.k8s.aws
Index ¶
- Constants
- Variables
- type AMI
- type AMISelectorTerm
- type BlockDevice
- type BlockDeviceMapping
- type MetadataOptions
- type NodeClass
- func (in *NodeClass) DeepCopy() *NodeClass
- func (in *NodeClass) DeepCopyInto(out *NodeClass)
- func (in *NodeClass) DeepCopyObject() runtime.Object
- func (a *NodeClass) Hash() string
- func (a *NodeClass) SetDefaults(_ context.Context)
- func (a *NodeClass) SupportedVerbs() []admissionregistrationv1.OperationType
- func (a *NodeClass) Validate(ctx context.Context) (errs *apis.FieldError)
- type NodeClassList
- type NodeClassSpec
- type NodeClassStatus
- type SecurityGroup
- type SecurityGroupSelectorTerm
- type Subnet
- type SubnetSelectorTerm
Constants ¶
const Group = "compute.k8s.aws"
Variables ¶
var ( CapacityTypeSpot = ec2.DefaultTargetCapacityTypeSpot CapacityTypeOnDemand = ec2.DefaultTargetCapacityTypeOnDemand AWSToKubeArchitectures = map[string]string{ "x86_64": v1beta1.ArchitectureAmd64, v1beta1.ArchitectureArm64: v1beta1.ArchitectureArm64, } WellKnownArchitectures = sets.NewString( v1beta1.ArchitectureAmd64, v1beta1.ArchitectureArm64, ) RestrictedLabelDomains = []string{ Group, } 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))), regexp.MustCompile(fmt.Sprintf("^%s$", regexp.QuoteMeta(v1beta1.NodePoolLabelKey))), regexp.MustCompile(fmt.Sprintf("^%s$", regexp.QuoteMeta(v1beta1.ManagedByAnnotationKey))), } AMIFamilyBottlerocket = "Bottlerocket" AMIFamilyAL2 = "AL2" AMIFamilyUbuntu = "Ubuntu" AMIFamilyWindows2019 = "Windows2019" AMIFamilyWindows2022 = "Windows2022" AMIFamilyCustom = "Custom" SupportedAMIFamilies = []string{ AMIFamilyBottlerocket, AMIFamilyAL2, AMIFamilyUbuntu, AMIFamilyWindows2019, AMIFamilyWindows2022, AMIFamilyCustom, } 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" LabelInstanceHypervisor = Group + "/instance-hypervisor" LabelInstanceEncryptionInTransitSupported = Group + "/instance-encryption-in-transit-supported" LabelInstanceCategory = Group + "/instance-category" LabelInstanceFamily = Group + "/instance-family" LabelInstanceGeneration = Group + "/instance-generation" LabelInstanceLocalNVME = Group + "/instance-local-nvme" LabelInstanceSize = Group + "/instance-size" LabelInstanceCPU = Group + "/instance-cpu" LabelInstanceMemory = Group + "/instance-memory" LabelInstanceNetworkBandwidth = Group + "/instance-network-bandwidth" LabelInstancePods = Group + "/instance-pods" LabelInstanceGPUName = Group + "/instance-gpu-name" LabelInstanceGPUManufacturer = Group + "/instance-gpu-manufacturer" LabelInstanceGPUCount = Group + "/instance-gpu-count" LabelInstanceGPUMemory = Group + "/instance-gpu-memory" LabelInstanceAcceleratorName = Group + "/instance-accelerator-name" LabelInstanceAcceleratorManufacturer = Group + "/instance-accelerator-manufacturer" LabelInstanceAcceleratorCount = Group + "/instance-accelerator-count" AnnotationNodeClassHash = Group + "/nodeclass-hash" )
var ( SchemeGroupVersion = schema.GroupVersion{Group: Group, Version: "v1beta1"} SchemeBuilder = runtime.NewSchemeBuilder(func(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &NodeClass{}, &NodeClassList{}, ) metav1.AddToGroupVersion(scheme, SchemeGroupVersion) return nil }) )
Functions ¶
This section is empty.
Types ¶
type AMI ¶
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 ¶
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AMI.
func (*AMI) DeepCopyInto ¶
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type AMISelectorTerm ¶
type AMISelectorTerm struct {
// Tags is a map of key/value tags used to select subnets
// Specifying '*' for a value selects all values for a given tag key.
// +optional
Tags map[string]string `json:"tags,omitempty"`
// ID is the ami id in EC2
// +kubebuilder:validation:Pattern:="ami-[0-9a-z]+"
// +optional
ID string `json:"id,omitempty"`
// Name is the ami name in EC2.
// This value is the name field, which is different from the name tag.
// +optional
Name string `json:"name,omitempty"`
// Owner is the owner for the ami.
// You can specify a combination of AWS account IDs, "self", "amazon", and "aws-marketplace"
// +optional
Owner string `json:"owner,omitempty"`
// SSM is the ssm alias for an ami.
// +optional
SSM string `json:"ssm,omitempty"`
}
AMISelectorTerm defines selection logic for an ami used by Karpenter to launch nodes. If multiple fields are used for selection, the requirements are ANDed.
func (*AMISelectorTerm) DeepCopy ¶
func (in *AMISelectorTerm) DeepCopy() *AMISelectorTerm
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AMISelectorTerm.
func (*AMISelectorTerm) DeepCopyInto ¶
func (in *AMISelectorTerm) DeepCopyInto(out *AMISelectorTerm)
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.
// +optional
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.
// +optional
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.
// +optional
IOPS *int64 `json:"iops,omitempty"`
// KMSKeyID (ARN) of the symmetric Key Management Service (KMS) CMK used for encryption.
// +optional
KMSKeyID *string `json:"kmsKeyID,omitempty"`
// SnapshotID is the ID of an EBS snapshot
// +optional
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.
// +optional
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
// +optional
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.
// +optional
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).
// +optional
DeviceName *string `json:"deviceName,omitempty"`
// EBS contains parameters used to automatically set up EBS volumes when an instance is launched.
// +optional
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 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 NodeClass ¶
type NodeClass struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec NodeClassSpec `json:"spec,omitempty"`
Status NodeClassStatus `json:"status,omitempty"`
// IsNodeTemplate tells Karpenter whether the in-memory representation of this object
// is actually referring to a AWSNodeTemplate object. This value is not actually part of the v1beta1 public-facing API
// TODO @joinnis: Remove this field when v1alpha5 is unsupported in a future version of Karpenter
IsNodeTemplate bool `json:"-" hash:"ignore"`
}
NodeClass is the Schema for the NodeClass API +kubebuilder:object:root=true +kubebuilder:resource:path=nodeclasses,scope=Cluster,categories=karpenter +kubebuilder:subresource:status
func (*NodeClass) DeepCopy ¶
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodeClass.
func (*NodeClass) DeepCopyInto ¶
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*NodeClass) DeepCopyObject ¶
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
func (*NodeClass) SetDefaults ¶
SetDefaults for the NodeClass
func (*NodeClass) SupportedVerbs ¶
func (a *NodeClass) SupportedVerbs() []admissionregistrationv1.OperationType
type NodeClassList ¶
type NodeClassList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []NodeClass `json:"items"`
}
NodeClassList contains a list of NodeClass +kubebuilder:object:root=true
func (*NodeClassList) DeepCopy ¶
func (in *NodeClassList) DeepCopy() *NodeClassList
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodeClassList.
func (*NodeClassList) DeepCopyInto ¶
func (in *NodeClassList) DeepCopyInto(out *NodeClassList)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*NodeClassList) DeepCopyObject ¶
func (in *NodeClassList) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type NodeClassSpec ¶
type NodeClassSpec struct {
// SubnetSelectorTerms is a list of or subnet selector terms. The terms are ORed.
// +optional
SubnetSelectorTerms []SubnetSelectorTerm `json:"subnetSelectorTerms" hash:"ignore"`
// SecurityGroupSelectorTerms is a list of or security group selector terms. The terms are ORed.
// +optional
SecurityGroupSelectorTerms []SecurityGroupSelectorTerm `json:"securityGroupSelectorTerms" hash:"ignore"`
// AMISelectorTerms is a list of or ami selector terms. The terms are ORed.
// +optional
AMISelectorTerms []AMISelectorTerm `json:"amiSelectorTerms,omitempty" hash:"ignore"`
// AMIFamily is the AMI family that instances use.
// +optional
AMIFamily *string `json:"amiFamily,omitempty"`
// 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"`
// Role is the AWS identity that nodes use.
// +optional
Role *string `json:"role,omitempty"`
// Tags to be applied on ec2 resources like instances and launch templates.
// +optional
Tags map[string]string `json:"tags,omitempty"`
// BlockDeviceMappings to be applied to provisioned nodes.
// +optional
BlockDeviceMappings []*BlockDeviceMapping `json:"blockDeviceMappings,omitempty"`
// DetailedMonitoring controls if detailed monitoring is enabled for instances that are launched
// +optional
DetailedMonitoring *bool `json:"detailedMonitoring,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"`
// 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"`
// TODO @joinnis: Remove this field when v1alpha5 is unsupported in a future version of Karpenter
// 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:"-" hash:"ignore"`
// TODO @joinnis: Remove this field when v1alpha5 is unsupported in a future version of Karpenter
// InstanceProfile is the AWS identity that instances use.
// +optional
InstanceProfile *string `json:"-" hash:"ignore"`
}
NodeClassSpec is the top level specification for the AWS Karpenter Provider. This will contain configuration necessary to launch instances in AWS.
func (*NodeClassSpec) DeepCopy ¶
func (in *NodeClassSpec) DeepCopy() *NodeClassSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodeClassSpec.
func (*NodeClassSpec) DeepCopyInto ¶
func (in *NodeClassSpec) DeepCopyInto(out *NodeClassSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type NodeClassStatus ¶
type NodeClassStatus 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"`
}
NodeClassStatus contains the resolved state of the NodeClass
func (*NodeClassStatus) DeepCopy ¶
func (in *NodeClassStatus) DeepCopy() *NodeClassStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodeClassStatus.
func (*NodeClassStatus) DeepCopyInto ¶
func (in *NodeClassStatus) DeepCopyInto(out *NodeClassStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type SecurityGroup ¶
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 ¶
func (in *SecurityGroup) DeepCopy() *SecurityGroup
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SecurityGroup.
func (*SecurityGroup) DeepCopyInto ¶
func (in *SecurityGroup) DeepCopyInto(out *SecurityGroup)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type SecurityGroupSelectorTerm ¶
type SecurityGroupSelectorTerm struct {
// Tags is a map of key/value tags used to select subnets
// Specifying '*' for a value selects all values for a given tag key.
// +optional
Tags map[string]string `json:"tags,omitempty"`
// ID is the security group id in EC2
// +kubebuilder:validation:Pattern:="sg-[0-9a-z]+"
// +optional
ID string `json:"id,omitempty"`
// Name is the security group name in EC2.
// This value is the name field, which is different from the name tag.
Name string `json:"name,omitempty"`
}
SecurityGroupSelectorTerm defines selection logic for a security group used by Karpenter to launch nodes. If multiple fields are used for selection, the requirements are ANDed.
func (*SecurityGroupSelectorTerm) DeepCopy ¶
func (in *SecurityGroupSelectorTerm) DeepCopy() *SecurityGroupSelectorTerm
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SecurityGroupSelectorTerm.
func (*SecurityGroupSelectorTerm) DeepCopyInto ¶
func (in *SecurityGroupSelectorTerm) DeepCopyInto(out *SecurityGroupSelectorTerm)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type Subnet ¶
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 ¶
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Subnet.
func (*Subnet) DeepCopyInto ¶
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type SubnetSelectorTerm ¶
type SubnetSelectorTerm struct {
// Tags is a map of key/value tags used to select subnets
// Specifying '*' for a value selects all values for a given tag key.
// +optional
Tags map[string]string `json:"tags,omitempty"`
// ID is the subnet id in EC2
// +kubebuilder:validation:Pattern="subnet-[0-9a-z]+"
// +optional
ID string `json:"id,omitempty"`
}
SubnetSelectorTerm defines selection logic for a subnet used by Karpenter to launch nodes. If multiple fields are used for selection, the requirements are ANDed.
func (*SubnetSelectorTerm) DeepCopy ¶
func (in *SubnetSelectorTerm) DeepCopy() *SubnetSelectorTerm
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SubnetSelectorTerm.
func (*SubnetSelectorTerm) DeepCopyInto ¶
func (in *SubnetSelectorTerm) DeepCopyInto(out *SubnetSelectorTerm)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.