diff --git a/config/crd/bases/controlplane.cluster.x-k8s.io_awsmanagedcontrolplanes.yaml b/config/crd/bases/controlplane.cluster.x-k8s.io_awsmanagedcontrolplanes.yaml index 858dac8a4c..b0131f7b12 100644 --- a/config/crd/bases/controlplane.cluster.x-k8s.io_awsmanagedcontrolplanes.yaml +++ b/config/crd/bases/controlplane.cluster.x-k8s.io_awsmanagedcontrolplanes.yaml @@ -2345,6 +2345,33 @@ spec: AssociateOIDCProvider can be enabled to automatically create an identity provider for the controller for use with IAM roles for service accounts type: boolean + autoMode: + description: |- + AutoMode is the EKS Auto Mode. + allows to create cluster with aws compute, ebs, elb capabilities. + properties: + compute: + description: Compute capability configuration for EKS Auto Mode. + properties: + nodePools: + description: NodePools that defines the compute resources + for your EKS Auto Mode cluster. + items: + type: string + type: array + nodeRoleArn: + description: |- + NodeRoleArn the ARN of the IAM Role EKS will assign to EC2 Managed Instances in your EKS + Auto Mode cluster. This value cannot be changed after the compute capability of + EKS Auto Mode is enabled. For more information, see the IAM Reference in the + Amazon EKS User Guide. + type: string + type: object + enabled: + default: false + description: Enabled will enable EKS Auto Mode. + type: boolean + type: object bastion: description: Bastion contains options to configure the bastion host. properties: diff --git a/config/crd/bases/controlplane.cluster.x-k8s.io_awsmanagedcontrolplanetemplates.yaml b/config/crd/bases/controlplane.cluster.x-k8s.io_awsmanagedcontrolplanetemplates.yaml index ad5c56c54b..c48ad4a5fa 100644 --- a/config/crd/bases/controlplane.cluster.x-k8s.io_awsmanagedcontrolplanetemplates.yaml +++ b/config/crd/bases/controlplane.cluster.x-k8s.io_awsmanagedcontrolplanetemplates.yaml @@ -129,6 +129,34 @@ spec: AssociateOIDCProvider can be enabled to automatically create an identity provider for the controller for use with IAM roles for service accounts type: boolean + autoMode: + description: |- + AutoMode is the EKS Auto Mode. + allows to create cluster with aws compute, ebs, elb capabilities. + properties: + compute: + description: Compute capability configuration for EKS + Auto Mode. + properties: + nodePools: + description: NodePools that defines the compute resources + for your EKS Auto Mode cluster. + items: + type: string + type: array + nodeRoleArn: + description: |- + NodeRoleArn the ARN of the IAM Role EKS will assign to EC2 Managed Instances in your EKS + Auto Mode cluster. This value cannot be changed after the compute capability of + EKS Auto Mode is enabled. For more information, see the IAM Reference in the + Amazon EKS User Guide. + type: string + type: object + enabled: + default: false + description: Enabled will enable EKS Auto Mode. + type: boolean + type: object bastion: description: Bastion contains options to configure the bastion host. diff --git a/controlplane/eks/api/v1beta1/conversion.go b/controlplane/eks/api/v1beta1/conversion.go index 0985ef66d5..7f3a33e95f 100644 --- a/controlplane/eks/api/v1beta1/conversion.go +++ b/controlplane/eks/api/v1beta1/conversion.go @@ -122,6 +122,7 @@ func (r *AWSManagedControlPlane) ConvertTo(dstRaw conversion.Hub) error { dst.Spec.RolePermissionsBoundary = restored.Spec.RolePermissionsBoundary dst.Status.Version = restored.Status.Version dst.Spec.BootstrapSelfManagedAddons = restored.Spec.BootstrapSelfManagedAddons + dst.Spec.AutoMode = restored.Spec.AutoMode return nil } diff --git a/controlplane/eks/api/v1beta1/zz_generated.conversion.go b/controlplane/eks/api/v1beta1/zz_generated.conversion.go index 48f326b2dc..006f789ea7 100644 --- a/controlplane/eks/api/v1beta1/zz_generated.conversion.go +++ b/controlplane/eks/api/v1beta1/zz_generated.conversion.go @@ -380,6 +380,7 @@ func autoConvert_v1beta2_AWSManagedControlPlaneSpec_To_v1beta1_AWSManagedControl return err } // WARNING: in.BootstrapSelfManagedAddons requires manual conversion: does not exist in peer-type + // WARNING: in.AutoMode requires manual conversion: does not exist in peer-type // WARNING: in.RestrictPrivateSubnets requires manual conversion: does not exist in peer-type if err := Convert_v1beta2_KubeProxy_To_v1beta1_KubeProxy(&in.KubeProxy, &out.KubeProxy, s); err != nil { return err diff --git a/controlplane/eks/api/v1beta2/awsmanagedcontrolplane_types.go b/controlplane/eks/api/v1beta2/awsmanagedcontrolplane_types.go index 9112863e35..14a05c52c8 100644 --- a/controlplane/eks/api/v1beta2/awsmanagedcontrolplane_types.go +++ b/controlplane/eks/api/v1beta2/awsmanagedcontrolplane_types.go @@ -206,6 +206,9 @@ type AWSManagedControlPlaneSpec struct { //nolint: maligned // +kubebuilder:default=true BootstrapSelfManagedAddons bool `json:"bootstrapSelfManagedAddons,omitempty"` + // +optional + AutoMode *AutoMode `json:"autoMode,omitempty"` + // RestrictPrivateSubnets indicates that the EKS control plane should only use private subnets. // +kubebuilder:default=false RestrictPrivateSubnets bool `json:"restrictPrivateSubnets,omitempty"` @@ -225,6 +228,29 @@ type KubeProxy struct { Disable bool `json:"disable,omitempty"` } +// AutoMode is the EKS Auto Mode. +// allows to create cluster with aws compute, ebs, elb capabilities. +type AutoMode struct { + // Enabled will enable EKS Auto Mode. + // +kubebuilder:default=false + Enabled bool `json:"enabled,omitempty"` + // Compute capability configuration for EKS Auto Mode. + // +optional + Compute Compute `json:"compute,omitempty"` +} + +// Compute allows to run compute capability with EKS AutoMode. +type Compute struct { + // NodePools that defines the compute resources for your EKS Auto Mode cluster. + NodePools []string `json:"nodePools,omitempty"` + // NodeRoleArn the ARN of the IAM Role EKS will assign to EC2 Managed Instances in your EKS + // Auto Mode cluster. This value cannot be changed after the compute capability of + // EKS Auto Mode is enabled. For more information, see the IAM Reference in the + // Amazon EKS User Guide. + // +optional + NodeRoleArn *string `json:"nodeRoleArn,omitempty"` +} + // VpcCni specifies configuration related to the VPC CNI. type VpcCni struct { // Disable indicates that the Amazon VPC CNI should be disabled. With EKS clusters the diff --git a/controlplane/eks/api/v1beta2/awsmanagedcontrolplane_webhook.go b/controlplane/eks/api/v1beta2/awsmanagedcontrolplane_webhook.go index 5554eff7c1..4a290e1189 100644 --- a/controlplane/eks/api/v1beta2/awsmanagedcontrolplane_webhook.go +++ b/controlplane/eks/api/v1beta2/awsmanagedcontrolplane_webhook.go @@ -25,6 +25,7 @@ import ( "github.com/pkg/errors" apierrors "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/validation/field" "k8s.io/apimachinery/pkg/util/version" "k8s.io/klog/v2" @@ -52,6 +53,9 @@ const ( cidrSizeMin = 16 vpcCniAddon = "vpc-cni" kubeProxyAddon = "kube-proxy" + + autoModeComputeNodePoolSystem = "system" + autoModeComputeNodePoolGeneral = "general-purpose" ) // SetupWebhookWithManager will setup the webhooks for the AWSManagedControlPlane. @@ -102,6 +106,7 @@ func (*awsManagedControlPlaneWebhook) ValidateCreate(_ context.Context, obj runt allErrs = append(allErrs, r.validateSecondaryCIDR()...) allErrs = append(allErrs, r.validateEKSAddons()...) allErrs = append(allErrs, r.validateDisableVPCCNI()...) + allErrs = append(allErrs, r.validateAutoMode(nil)...) allErrs = append(allErrs, r.validateRestrictPrivateSubnets()...) allErrs = append(allErrs, r.validateKubeProxy()...) allErrs = append(allErrs, r.Spec.AdditionalTags.Validate()...) @@ -144,6 +149,7 @@ func (*awsManagedControlPlaneWebhook) ValidateUpdate(ctx context.Context, oldObj allErrs = append(allErrs, r.validateAccessConfigUpdate(oldAWSManagedControlplane)...) allErrs = append(allErrs, r.validateIAMAuthConfig()...) allErrs = append(allErrs, r.validateSecondaryCIDR()...) + allErrs = append(allErrs, r.validateAutoMode(oldAWSManagedControlplane)...) allErrs = append(allErrs, r.validateEKSAddons()...) allErrs = append(allErrs, r.validateDisableVPCCNI()...) allErrs = append(allErrs, r.validateRestrictPrivateSubnets()...) @@ -472,6 +478,52 @@ func validateDisableVPCCNI(vpcCni VpcCni, addons *[]Addon, path *field.Path) fie return allErrs } +func (r *AWSManagedControlPlane) validateAutoMode(old *AWSManagedControlPlane) field.ErrorList { + return validateAutoMode(r.Spec, old, field.NewPath("spec")) +} + +func validateAutoMode(spec AWSManagedControlPlaneSpec, old *AWSManagedControlPlane, path *field.Path) field.ErrorList { + var allErrs field.ErrorList + + if spec.AutoMode == nil { + return nil + } + + if spec.AutoMode.Enabled { + // EKS Auto mode is not compatible with configmap AuthenticationMode. + if spec.AccessConfig.AuthenticationMode == EKSAuthenticationModeConfigMap { + authConfigField := path.Child("accessConfig", "authenticationMode") + allErrs = append(allErrs, field.Invalid(authConfigField, spec.AccessConfig.AuthenticationMode, "authenticationMode CONFIG_MAP couldn't be used with autoMode")) + } + + if old != nil { + // nodeRoleArn cannot be changed after the compute capability of EKS Auto Mode is enabled. + if old.Spec.AutoMode.Compute.NodeRoleArn != spec.AutoMode.Compute.NodeRoleArn { + nodeRoleArnField := path.Child("autoMode", "compute", "nodeRoleArn") + allErrs = append(allErrs, field.Invalid(nodeRoleArnField, spec.AutoMode.Compute.NodeRoleArn, "nodeRoleArn could not be changed")) + } + } + + if len(spec.AutoMode.Compute.NodePools) > 0 { + // nodeRoleArn should be always defined with node pools. + if spec.AutoMode.Compute.NodeRoleArn == nil { + nodeRoleArnField := path.Child("autoMode", "compute", "nodeRoleArn") + allErrs = append(allErrs, field.Invalid(nodeRoleArnField, spec.AutoMode.Compute.NodeRoleArn, "nodeRoleArn is required when nodePools specified")) + } + + allowedPoolNames := sets.New[string](autoModeComputeNodePoolSystem, autoModeComputeNodePoolGeneral) + for _, poolName := range spec.AutoMode.Compute.NodePools { + nodePoolsField := path.Child("autoMode", "compute", "nodePools") + if !allowedPoolNames.Has(poolName) { + allErrs = append(allErrs, field.Invalid(nodePoolsField, poolName, "nodePools contains an invalid pool")) + } + } + } + } + + return allErrs +} + func (r *AWSManagedControlPlane) validateRestrictPrivateSubnets() field.ErrorList { return validateRestrictPrivateSubnets(r.Spec.RestrictPrivateSubnets, r.Spec.NetworkSpec, r.Spec.EKSClusterName, field.NewPath("spec")) } @@ -620,7 +672,5 @@ func (*awsManagedControlPlaneWebhook) Default(_ context.Context, obj runtime.Obj infrav1.SetDefaults_Bastion(&r.Spec.Bastion) infrav1.SetDefaults_NetworkSpec(&r.Spec.NetworkSpec) - // Set default value for BootstrapSelfManagedAddons - r.Spec.BootstrapSelfManagedAddons = true return nil } diff --git a/controlplane/eks/api/v1beta2/awsmanagedcontrolplane_webhook_test.go b/controlplane/eks/api/v1beta2/awsmanagedcontrolplane_webhook_test.go index 40de7b369b..e28e19a521 100644 --- a/controlplane/eks/api/v1beta2/awsmanagedcontrolplane_webhook_test.go +++ b/controlplane/eks/api/v1beta2/awsmanagedcontrolplane_webhook_test.go @@ -179,6 +179,7 @@ func TestWebhookCreate(t *testing.T) { secondaryCidr *string secondaryCidrBlocks []infrav1.VpcCidrBlock kubeProxy KubeProxy + AutoMode *AutoMode accessConfig *AccessConfig }{ { @@ -364,6 +365,30 @@ func TestWebhookCreate(t *testing.T) { BootstrapClusterCreatorAdminPermissions: ptr.To(false), }, }, + { + name: "autoMode compute not allowed with authenticationMode CONFIG_MAP", + eksClusterName: "default_cluster1", + eksVersion: "v1.19", + expectError: true, + vpcCNI: VpcCni{Disable: false}, + AutoMode: &AutoMode{Enabled: true}, + }, + { + name: "autoMode compute nodeRoleArn should be defined with nodePools", + eksClusterName: "default_cluster1", + eksVersion: "v1.19", + expectError: true, + vpcCNI: VpcCni{Disable: false}, + AutoMode: &AutoMode{Enabled: true, Compute: Compute{NodePools: []string{"system", "general-purpose"}}}, + }, + { + name: "autoMode compute nodeRoleArn defined with nodePools", + eksClusterName: "default_cluster1", + eksVersion: "v1.19", + expectError: false, + vpcCNI: VpcCni{Disable: false}, + AutoMode: &AutoMode{Enabled: true, Compute: Compute{NodePools: []string{"system", "general-purpose"}, NodeRoleArn: aws.String("foo")}}, + }, } for _, tc := range tests { @@ -411,6 +436,10 @@ func TestWebhookCreate(t *testing.T) { mcp.Spec.AccessConfig = tc.accessConfig } + if tc.AutoMode != nil { + mcp.Spec.AutoMode = tc.AutoMode + } + err := testEnv.Create(ctx, mcp) if tc.expectError { @@ -877,6 +906,37 @@ func TestWebhookUpdate(t *testing.T) { }, expectError: true, }, + { + name: "changing noderolearn is not allowed after it has been set", + oldClusterSpec: AWSManagedControlPlaneSpec{ + EKSClusterName: "default_cluster1", + NetworkSpec: infrav1.NetworkSpec{ + VPC: infrav1.VPCSpec{}, + }, + Version: ptr.To[string]("1.22"), + AutoMode: &AutoMode{ + Compute: Compute{ + NodeRoleArn: aws.String("fooarn"), + NodePools: []string{"pool1", "pool2"}, + }, + }, + }, + newClusterSpec: AWSManagedControlPlaneSpec{ + EKSClusterName: "default_cluster1", + NetworkSpec: infrav1.NetworkSpec{ + VPC: infrav1.VPCSpec{ + IPv6: &infrav1.IPv6{}, + }, + }, + AutoMode: &AutoMode{ + Compute: Compute{ + NodeRoleArn: aws.String("bararn"), + NodePools: []string{"pool1", "pool2"}, + }, + }, + }, + expectError: true, + }, } for _, tc := range tests { diff --git a/controlplane/eks/api/v1beta2/zz_generated.deepcopy.go b/controlplane/eks/api/v1beta2/zz_generated.deepcopy.go index 678a641e9c..869d29f7cd 100644 --- a/controlplane/eks/api/v1beta2/zz_generated.deepcopy.go +++ b/controlplane/eks/api/v1beta2/zz_generated.deepcopy.go @@ -176,6 +176,11 @@ func (in *AWSManagedControlPlaneSpec) DeepCopyInto(out *AWSManagedControlPlaneSp (*in).DeepCopyInto(*out) } in.VpcCni.DeepCopyInto(&out.VpcCni) + if in.AutoMode != nil { + in, out := &in.AutoMode, &out.AutoMode + *out = new(AutoMode) + (*in).DeepCopyInto(*out) + } out.KubeProxy = in.KubeProxy } @@ -447,6 +452,47 @@ func (in *AddonState) DeepCopy() *AddonState { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AutoMode) DeepCopyInto(out *AutoMode) { + *out = *in + in.Compute.DeepCopyInto(&out.Compute) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AutoMode. +func (in *AutoMode) DeepCopy() *AutoMode { + if in == nil { + return nil + } + out := new(AutoMode) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Compute) DeepCopyInto(out *Compute) { + *out = *in + if in.NodePools != nil { + in, out := &in.NodePools, &out.NodePools + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.NodeRoleArn != nil { + in, out := &in.NodeRoleArn, &out.NodeRoleArn + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Compute. +func (in *Compute) DeepCopy() *Compute { + if in == nil { + return nil + } + out := new(Compute) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ControlPlaneLoggingSpec) DeepCopyInto(out *ControlPlaneLoggingSpec) { *out = *in diff --git a/docs/book/src/crd/index.md b/docs/book/src/crd/index.md index 363550ffb5..2fe02d63e8 100644 --- a/docs/book/src/crd/index.md +++ b/docs/book/src/crd/index.md @@ -5374,6 +5374,19 @@ string
ServiceAccountRoleArn is the ARN of an IAM role to bind to the addons service account
+preserveOnDelete
PreserveOnDelete indicates that the addon resources should be +preserved in the cluster on delete.
+IdentityRef is a reference to an identity to be used when reconciling the managed control plane. If no identity is specified, the default identity for this controller will be used.
autoMode
restrictPrivateSubnets
-(Appears on:AWSManagedControlPlane) +(Appears on:AWSManagedControlPlane, AWSManagedControlPlaneTemplateResource)
AWSManagedControlPlaneSpec defines the desired state of an Amazon EKS Cluster.
@@ -6729,6 +6756,7 @@ AWSIdentityReferenceIdentityRef is a reference to an identity to be used when reconciling the managed control plane. If no identity is specified, the default identity for this controller will be used.
autoMode
restrictPrivateSubnets
networkStatus
networkStatus
Networks holds details about the AWS networking resources used by the control plane
+failureDomains
FailureDomains specifies a list fo available availability zones that can be used
+bastion
Bastion holds details of the instance that is used as a bastion jump box
+oidcProvider
OIDCProvider holds the status of the identity provider for this cluster
+externalManagedControlPlane
ExternalManagedControlPlane indicates to cluster-api that the control plane +is managed by an external service such as AKS, EKS, GKE, etc.
+initialized
Initialized denotes whether or not the control plane has the +uploaded kubernetes config-map.
+ready
Ready denotes that the AWSManagedControlPlane API Server is ready to +receive requests and that the VPC infra is ready.
+failureMessage
ErrorMessage indicates that there is a terminal problem reconciling the +state, and will be set to a descriptive error message.
+conditions
Conditions specifies the cpnditions for the managed control plane
+addons
Addons holds the current status of the EKS addons
+identityProviderStatus
IdentityProviderStatus holds the status for +associated identity provider
+version
Version represents the minimum Kubernetes version for the control plane machines +in the cluster.
++
AWSManagedControlPlaneTemplate is the Schema for the AWSManagedControlPlaneTemplates API.
+ +Field | +Description | +||
---|---|---|---|
+metadata + + +Kubernetes meta/v1.ObjectMeta + + + |
+
+Refer to the Kubernetes API documentation for the fields of the
+metadata field.
+ |
+||
+spec + + +AWSManagedControlPlaneTemplateSpec + + + |
+
+ + +
|
+
+(Appears on:AWSManagedControlPlaneTemplateSpec) +
++
AWSManagedControlPlaneTemplateResource describes the data needed to create an AWSManagedCluster from a template.
+ +Field | +Description | +||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
+spec + + +AWSManagedControlPlaneSpec + + + |
+
+ + +
|
+(Appears on:AWSManagedControlPlaneTemplate) +
++
AWSManagedControlPlaneTemplateSpec defines the desired state of AWSManagedControlPlaneTemplate.
+ +Field | +Description | +
---|---|
-version + template -string + +AWSManagedControlPlaneTemplateResource + |
-(Optional)
- Version represents the minimum Kubernetes version for the control plane machines -in the cluster. |
ConflictResolution is used to declare what should happen if there -are parameter conflicts. Defaults to none +are parameter conflicts. Defaults to overwrite |
+preserveOnDelete + +bool + + |
+
+(Optional)
+ PreserveOnDelete indicates that the addon resources should be +preserved in the cluster on delete. + |
+
AddonStatus defines the status for an addon.
++(Appears on:AWSManagedControlPlaneSpec) +
++
AutoMode is the EKS Auto Mode. +allows to create cluster with aws compute, ebs, elb capabilities.
+ +Field | +Description | +
---|---|
+enabled + +bool + + |
+
+ Enabled will enable EKS Auto Mode. + |
+
+compute + + +Compute + + + |
+
+(Optional)
+ Compute capability configuration for EKS Auto Mode. + |
+
+(Appears on:AutoMode) +
++
Compute allows to run compute capability with EKS AutoMode.
+ +Field | +Description | +
---|---|
+nodePools + +[]string + + |
+
+ NodePools that defines the compute resources for your EKS Auto Mode cluster. + |
+
+nodeRoleArn + +string + + |
+
+(Optional)
+ NodeRoleArn the ARN of the IAM Role EKS will assign to EC2 Managed Instances in your EKS +Auto Mode cluster. This value cannot be changed after the compute capability of +EKS Auto Mode is enabled. For more information, see the IAM Reference in the +Amazon EKS User Guide. + |
+
@@ -8682,6 +9390,9 @@ string
"candidate"
Candidate channel group is for testing candidate builds.
"fast"
Fast channel group is for fast channel releases.
+"nightly"
Nightly channel group is for testing nigtly builds.
marketType
marketType
MarketType specifies the type of market for the EC2 instance. Valid values include: +“OnDemand” (default): The instance runs as a standard OnDemand instance. +“Spot”: The instance runs as a Spot instance. When SpotMarketOptions is provided, the marketType defaults to “Spot”. +“CapacityBlock”: The instance utilizes pre-purchased compute capacity (capacity blocks) with AWS Capacity Reservations. +If this value is selected, CapacityReservationID must be specified to identify the target reservation. +If marketType is not specified and spotMarketOptions is provided, the marketType defaults to “Spot”.
+hostID
HostID specifies the Dedicated Host on which the instance must be started.
+hostAffinity
HostAffinity specifies the dedicated host affinity setting for the instance. +When hostAffinity is set to host, an instance started onto a specific host always restarts on the same host if stopped. +When hostAffinity is set to default, and you stop and restart the instance, it can be restarted on any available host. +When HostAffinity is defined, HostID is required.
+capacityReservationPreference
MarketType specifies the type of market for the EC2 instance. Valid values include: -“OnDemand” (default): The instance runs as a standard OnDemand instance. -“Spot”: The instance runs as a Spot instance. When SpotMarketOptions is provided, the marketType defaults to “Spot”. -“CapacityBlock”: The instance utilizes pre-purchased compute capacity (capacity blocks) with AWS Capacity Reservations. -If this value is selected, CapacityReservationID must be specified to identify the target reservation. -If marketType is not specified and spotMarketOptions is provided, the marketType defaults to “Spot”.
+CapacityReservationPreference specifies the preference for use of Capacity Reservations by the instance. Valid values include:
+“Open”: The instance may make use of open Capacity Reservations that match its AZ and InstanceType
+“None”: The instance may not make use of any Capacity Reservations. This is to conserve open reservations for desired workloads
+“CapacityReservationsOnly”: The instance will only run if matched or targeted to a Capacity Reservation. Note that this is incompatible with a MarketType of Spot
hostID
HostID specifies the Dedicated Host on which the instance must be started.
+hostAffinity
HostAffinity specifies the dedicated host affinity setting for the instance. +When hostAffinity is set to host, an instance started onto a specific host always restarts on the same host if stopped. +When hostAffinity is set to default, and you stop and restart the instance, it can be restarted on any available host. +When HostAffinity is defined, HostID is required.
+capacityReservationPreference
CapacityReservationPreference specifies the preference for use of Capacity Reservations by the instance. Valid values include:
+“Open”: The instance may make use of open Capacity Reservations that match its AZ and InstanceType
+“None”: The instance may not make use of any Capacity Reservations. This is to conserve open reservations for desired workloads
+“CapacityReservationsOnly”: The instance will only run if matched or targeted to a Capacity Reservation. Note that this is incompatible with a MarketType of Spot
hostID
HostID specifies the Dedicated Host on which the instance must be started.
+hostAffinity
HostAffinity specifies the dedicated host affinity setting for the instance. +When hostAffinity is set to host, an instance started onto a specific host always restarts on the same host if stopped. +When hostAffinity is set to default, and you stop and restart the instance, it can be restarted on any available host. +When HostAffinity is defined, HostID is required.
+capacityReservationPreference
CapacityReservationPreference specifies the preference for use of Capacity Reservations by the instance. Valid values include:
+“Open”: The instance may make use of open Capacity Reservations that match its AZ and InstanceType
+“None”: The instance may not make use of any Capacity Reservations. This is to conserve open reservations for desired workloads
+“CapacityReservationsOnly”: The instance will only run if matched or targeted to a Capacity Reservation. Note that this is incompatible with a MarketType of Spot
-(Appears on:AWSManagedCluster) +(Appears on:AWSManagedCluster, AWSManagedClusterTemplateResource)
AWSManagedClusterSpec defines the desired state of AWSManagedCluster
@@ -21409,6 +22252,141 @@ Cluster API api/v1beta1.Conditions ++
AWSManagedClusterTemplate is the Schema for the AWSManagedClusterTemplates API.
+ +Field | +Description | +||
---|---|---|---|
+metadata + + +Kubernetes meta/v1.ObjectMeta + + + |
+
+Refer to the Kubernetes API documentation for the fields of the
+metadata field.
+ |
+||
+spec + + +AWSManagedClusterTemplateSpec + + + |
+
+ + +
|
+
+(Appears on:AWSManagedClusterTemplateSpec) +
++
AWSManagedClusterTemplateResource describes the data needed to create an AWSManagedCluster from a template.
+ +Field | +Description | +||
---|---|---|---|
+spec + + +AWSManagedClusterSpec + + + |
+
+ + +
|
+
+(Appears on:AWSManagedClusterTemplate) +
++
AWSManagedClusterTemplateSpec defines the desired state of AWSManagedClusterTemplate.
+ +Field | +Description | +
---|---|
+template + + +AWSManagedClusterTemplateResource + + + |
++ | +
@@ -21914,6 +22892,15 @@ The source for the rule will be set to control plane and worker security group I +
string
alias)+(Appears on:AWSMachineSpec, Instance, AWSLaunchTemplate) +
++
CapacityReservationPreference describes the preferred use of capacity reservations +of an instance
+@@ -22447,7 +23434,9 @@ string
Version defines which version of Ignition will be used to generate bootstrap data.
+Version defines which version of Ignition will be used to generate bootstrap data.
+Defaults to 2.3
if storageType is set to ClusterObjectStore
.
+It will be ignored if storageType is set to UnencryptedUserData
, as the userdata defines its own version.
hostAffinity
HostAffinity specifies the dedicated host affinity setting for the instance. +When hostAffinity is set to host, an instance started onto a specific host always restarts on the same host if stopped. +When hostAffinity is set to default, and you stop and restart the instance, it can be restarted on any available host. +When HostAffinity is defined, HostID is required.
+hostID
HostID specifies the dedicated host on which the instance should be started.
+capacityReservationPreference
CapacityReservationPreference specifies the preference for use of Capacity Reservations by the instance. Valid values include:
+“Open”: The instance may make use of open Capacity Reservations that match its AZ and InstanceType
+“None”: The instance may not make use of any Capacity Reservations. This is to conserve open reservations for desired workloads
+“CapacityReservationsOnly”: The instance will only run if matched or targeted to a Capacity Reservation. Note that this is incompatible with a MarketType of Spot
capacityReservationPreference
CapacityReservationPreference specifies the preference for use of Capacity Reservations by the instance. Valid values include: +“Open”: The instance may make use of open Capacity Reservations that match its AZ and InstanceType +“None”: The instance may not make use of any Capacity Reservations. This is to conserve open reservations for desired workloads +“CapacityReservationsOnly”: The instance will only run if matched or targeted to a Capacity Reservation
++
AWSMachinePoolWebhook implements a custom validation webhook for AWSMachinePool.
+@@ -27735,7 +28790,9 @@ int64 (Appears on:AWSManagedMachinePoolSpec)
-
ManagedMachineAMIType specifies which AWS AMI to use for a managed MachinePool.
+ManagedMachineAMIType specifies which AWS AMI to use for a managed MachinePool. +Source of truth can be found using the link below: +https://docs.aws.amazon.com/eks/latest/APIReference/API_CreateNodegroup.html#AmazonEKS-CreateNodegroup-request-amiType
"AL2023_ARM_64_STANDARD" |
Al2023Arm64 is the AL2023 Arm AMI type. |
+
"AL2023_ARM_64_NVIDIA" |
+Al2023Arm64Nvidia is the AL2023 Arm Nvidia AMI type. + |
"AL2023_x86_64_STANDARD" |
Al2023x86_64 is the AL2023 x86-64 AMI type. |
+
"AL2023_x86_64_NEURON" |
+Al2023x86_64Neuron is the AL2023 x86-64 Neuron AMI type. + |
+
"AL2023_x86_64_NVIDIA" |
+Al2023x86_64Nvidia is the AL2023 x86-64 Nvidia AMI type. + |
"AL2_ARM_64" |
Al2Arm64 is the Arm AMI type. |
@@ -27759,6 +28825,39 @@ int64
"AL2_x86_64_GPU" |
Al2x86_64GPU is the x86-64 GPU AMI type. |
+
"BOTTLEROCKET_ARM_64" |
+BottleRocketArm64 is the Arm AMI type. + |
+
"BOTTLEROCKET_ARM_64_FIPS" |
+BottleRocketArm64Fips is the BottleRocket Arm Fips AMI type. + |
+
"BOTTLEROCKET_ARM_64_NVIDIA" |
+BottleRocketArm64Nvidia is the BottleRocket Arm Nvidia AMI type. + |
+
"BOTTLEROCKET_x86_64" |
+BottleRocketx86_64 is the BottleRocket x86-64 AMI type. + |
+
"BOTTLEROCKET_x86_64_FIPS" |
+BottleRocketx86_64Fips is the BottleRocket x86-64 Fips AMI type. + |
+
"BOTTLEROCKET_x86_64_NVIDIA" |
+BottleRocketx86_64Nvidia is the BottleRocket x86-64 Nvidia AMI type. + |
+
"CUSTOM" |
+Custom is the custom AMI type. + |
+
"WINDOWS_CORE_2019_x86_64" |
+WindowsCore2019x86_64 is the Windows Core 2019 x86-64 AMI type. + |
+
"WINDOWS_CORE_2022_x86_64" |
+WindowsCore2022x86_64 is the Windows Core 2022 x86-64 AMI type. + |
+
"WINDOWS_FULL_2019_x86_64" |
+WindowsFull2019x86_64 is the Windows Full 2019 x86-64 AMI type. + |
+
"WINDOWS_FULL_2022_x86_64" |
+WindowsFull2022x86_64 is the Windows Full 2022 x86-64 AMI type. + |