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
+preserveOnDeletePreserveOnDelete 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.
autoModerestrictPrivateSubnets-(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.
autoModerestrictPrivateSubnetsnetworkStatusnetworkStatusNetworks holds details about the AWS networking resources used by the control plane
+failureDomainsFailureDomains specifies a list fo available availability zones that can be used
+bastionBastion holds details of the instance that is used as a bastion jump box
+oidcProviderOIDCProvider holds the status of the identity provider for this cluster
+externalManagedControlPlaneExternalManagedControlPlane indicates to cluster-api that the control plane +is managed by an external service such as AKS, EKS, GKE, etc.
+initializedInitialized denotes whether or not the control plane has the +uploaded kubernetes config-map.
+readyReady denotes that the AWSManagedControlPlane API Server is ready to +receive requests and that the VPC infra is ready.
+failureMessageErrorMessage indicates that there is a terminal problem reconciling the +state, and will be set to a descriptive error message.
+conditionsConditions specifies the cpnditions for the managed control plane
+addonsAddons holds the current status of the EKS addons
+identityProviderStatusIdentityProviderStatus holds the status for +associated identity provider
+versionVersion 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.
marketTypemarketTypeMarketType 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”.
+hostIDHostID specifies the Dedicated Host on which the instance must be started.
+hostAffinityHostAffinity 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.
+capacityReservationPreferenceMarketType 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
hostIDHostID specifies the Dedicated Host on which the instance must be started.
+hostAffinityHostAffinity 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.
+capacityReservationPreferenceCapacityReservationPreference 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
hostIDHostID specifies the Dedicated Host on which the instance must be started.
+hostAffinityHostAffinity 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.
+capacityReservationPreferenceCapacityReservationPreference 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.
hostAffinityHostAffinity 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.
+hostIDHostID specifies the dedicated host on which the instance should be started.
+capacityReservationPreferenceCapacityReservationPreference 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
capacityReservationPreferenceCapacityReservationPreference 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. + |