<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Karpenter – Upgrading</title><link>https://pr-35.d2bgfookghzifw.amplifyapp.com/v0.32/upgrading/</link><description>Recent content in Upgrading on Karpenter</description><generator>Hugo -- gohugo.io</generator><language>en</language><atom:link href="https://pr-35.d2bgfookghzifw.amplifyapp.com/v0.32/upgrading/index.xml" rel="self" type="application/rss+xml"/><item><title>V0.32: Upgrade Guide</title><link>https://pr-35.d2bgfookghzifw.amplifyapp.com/v0.32/upgrading/upgrade-guide/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pr-35.d2bgfookghzifw.amplifyapp.com/v0.32/upgrading/upgrade-guide/</guid><description>
&lt;p>Karpenter is a controller that runs in your cluster, but it is not tied to a specific Kubernetes version, as the Cluster Autoscaler is.
Use your existing upgrade mechanisms to upgrade your core add-ons in Kubernetes and keep Karpenter up to date on bug fixes and new features.
This guide contains information needed to upgrade to the latest release of Karpenter, along with compatibility issues you need to be aware of when upgrading from earlier Karpenter versions.&lt;/p>
&lt;p>When upgrading Karpenter in production environments, implementing a robust CI/CD pipeline approach is crucial. Improper upgrades can lead to significant disruptions including failed node provisioning, orphaned nodes, interrupted workloads, and potential cost implications from unmanaged scaling. Given Karpenter&amp;rsquo;s critical role in cluster scaling and workload management, untested upgrades could result in production outages or resource allocation issues that directly impact application availability and performance. Therefore, we recommend following these structured steps:&lt;/p>
&lt;h4 id="pre-upgrade-validation">Pre-upgrade Validation&lt;/h4>
&lt;ul>
&lt;li>Validate all required IAM permissions (node role, controller role)&lt;/li>
&lt;li>Check webhook configurations&lt;/li>
&lt;li>Back up existing NodePool and NodeClass configurations&lt;/li>
&lt;li>Document current version and settings&lt;/li>
&lt;/ul>
&lt;h4 id="staging-environment-setup">Staging Environment Setup&lt;/h4>
&lt;ul>
&lt;li>Create or verify staging environment&lt;/li>
&lt;li>Update version tags in Helm values or manifests&lt;/li>
&lt;li>Configure automated validation tests&lt;/li>
&lt;/ul>
&lt;h4 id="staging-deployment">Staging Deployment&lt;/h4>
&lt;ul>
&lt;li>Deploy to staging environment&lt;/li>
&lt;li>Run comprehensive tests including node provisioning&lt;/li>
&lt;li>Verify controller health&lt;/li>
&lt;li>Test NodePool and NodeClass functionality&lt;/li>
&lt;li>Monitor system behavior&lt;/li>
&lt;/ul>
&lt;h4 id="production-approval-and-deployment">Production Approval and Deployment&lt;/h4>
&lt;ul>
&lt;li>Require manual approval/review&lt;/li>
&lt;li>Schedule maintenance window if needed&lt;/li>
&lt;li>Execute production deployment&lt;/li>
&lt;li>Monitor deployment progress&lt;/li>
&lt;li>Verify all components are functioning&lt;/li>
&lt;/ul>
&lt;h4 id="post-deployment">Post-Deployment&lt;/h4>
&lt;ul>
&lt;li>Monitor system health&lt;/li>
&lt;li>Verify node provisioning&lt;/li>
&lt;li>Keep rollback configurations accessible&lt;/li>
&lt;li>Update documentation&lt;/li>
&lt;/ul>
&lt;p>Here are few recommended CI/CD Pipeline Options:&lt;/p>
&lt;ul>
&lt;li>GitHub Actions - Excellent for GitHub-hosted repositories with built-in Kubernetes support&lt;/li>
&lt;li>GitLab CI - Strong container-native pipeline with integrated Kubernetes functionality&lt;/li>
&lt;li>ArgoCD - Specialized for GitOps workflows with Kubernetes&lt;/li>
&lt;li>AWS CodePipeline - Native integration with EKS and AWS services&lt;/li>
&lt;li>Flux - Open-source GitOps tool for Kubernetes with automatic deployment capabilities&lt;/li>
&lt;/ul>
&lt;p>Each pipeline tool can be configured to handle the Karpenter upgrade workflow, but choose based on your existing infrastructure, team expertise, and specific requirements for automation and integration.&lt;/p>
&lt;h3 id="crd-upgrades">CRD Upgrades&lt;/h3>
&lt;p>Karpenter ships with a few Custom Resource Definitions (CRDs). These CRDs are published:&lt;/p>
&lt;ul>
&lt;li>As an independent Helm chart &lt;a href="https://gallery.ecr.aws/karpenter/karpenter-crd">karpenter-crd&lt;/a> (&lt;a href="https://github.com/aws/karpenter/blob/main/charts/karpenter-crd">source&lt;/a>) that can be used by Helm to manage the lifecycle of these CRDs. To upgrade or install &lt;code>karpenter-crd&lt;/code> run:
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">KARPENTER_NAMESPACE&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>kube-system
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>helm upgrade --install karpenter-crd oci://public.ecr.aws/karpenter/karpenter-crd --version vx.y.z --namespace &lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">KARPENTER_NAMESPACE&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span> --create-namespace
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>As part of the helm chart &lt;a href="https://gallery.ecr.aws/karpenter/karpenter">karpenter&lt;/a> (&lt;a href="https://github.com/aws/karpenter/blob/main/charts/karpenter/crds">source&lt;/a>).
Helm &lt;a href="https://helm.sh/docs/chart_best_practices/custom_resource_definitions/">does not manage the lifecycle of CRDs using this method&lt;/a> - the tool will only install the CRD during the first installation of the Helm chart.
Subsequent chart upgrades will not add or remove CRDs, even if the CRDs have changed.&lt;/li>
&lt;/ul>
&lt;p>CRDs are coupled to the version of Karpenter, and should be updated along with Karpenter.
For this reason, we recommend using the independent &lt;code>karpenter-crd&lt;/code> chart to manage CRDs.&lt;/p>
&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">Note&lt;/h4>
If you get the error &lt;code>invalid ownership metadata; label validation error:&lt;/code> while installing the &lt;code>karpenter-crd&lt;/code> chart from an older version of Karpenter, follow the &lt;a href="https://pr-35.d2bgfookghzifw.amplifyapp.com/v0.32/troubleshooting/#helm-error-when-upgrading-from-older-karpenter-version">Troubleshooting Guide&lt;/a> for details on how to resolve these errors.
&lt;/div>
&lt;h3 id="upgrading-to-v0320">Upgrading to v0.32.0+&lt;/h3>
&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">Warning&lt;/h4>
&lt;p>Karpenter v0.32.0 introduces v1beta1 APIs, including &lt;em>significant&lt;/em> changes to the API and installation procedures for the Karpenter controllers. Do not upgrade to v0.32.0+ without referencing the &lt;a href="https://pr-35.d2bgfookghzifw.amplifyapp.com/v0.32/upgrading/v1beta1-migration/#upgrade-procedure">v1beta1 Migration Upgrade Procedure&lt;/a>.&lt;/p>
&lt;p>This version includes &lt;strong>dual support&lt;/strong> for both alpha and beta APIs to ensure that you can slowly migrate your existing Provisioner, AWSNodeTemplate, and Machine alpha APIs to the newer NodePool, EC2NodeClass, and NodeClaim beta APIs.&lt;/p>
&lt;p>Note that if you are rolling back after upgrading to v0.32.0, note that &lt;strong>only&lt;/strong> versions v0.31.4+ support handling rollback after you have deployed the v1beta1 APIs to your cluster.&lt;/p>
&lt;/div>
&lt;ul>
&lt;li>Karpenter now uses &lt;code>settings.InterruptionQueue&lt;/code> instead of &lt;code>settings.aws.InterruptionQueueName&lt;/code> in its helm chart. The CLI argument also changed to &lt;code>--interruption-queue&lt;/code>.&lt;/li>
&lt;li>Karpenter now serves the webhook prometheus metrics server on port &lt;code>8001&lt;/code>. If this port is already in-use on the pod or you are running in &lt;code>hostNetworking&lt;/code> mode, you may need to change this port value. You can configure this port value through the &lt;code>WEBHOOK_METRICS_PORT&lt;/code> environment variable or the &lt;code>webhook.metrics.port&lt;/code> value if installing via Helm.&lt;/li>
&lt;li>Karpenter now exposes the ability to disable webhooks through the &lt;code>webhook.enabled=false&lt;/code> value. This value will disable the webhook server and will prevent any permissions, mutating or validating webhook configurations from being deployed to the cluster.&lt;/li>
&lt;li>Karpenter now moves all logging configuration for the Zap logger into the &lt;code>logConfig&lt;/code> values block. Configuring Karpenter logging with this mechanism &lt;em>is&lt;/em> deprecated and will be dropped at v1. Karpenter now only surfaces logLevel through the &lt;code>logLevel&lt;/code> helm value. If you need more advanced configuration due to log parsing constraints, we recommend configuring your log parser to handle Karpenter&amp;rsquo;s Zap JSON logging.&lt;/li>
&lt;li>The default log encoding changed from &lt;code>console&lt;/code> to &lt;code>json&lt;/code>. If you were previously not setting the type of log encoding, this default will change with the helm chart. If you were setting the value through &lt;code>logEncoding&lt;/code>, this value will continue to work until v0.33.x but it is deprecated in favor of &lt;code>logConfig.logEncoding&lt;/code>&lt;/li>
&lt;li>Karpenter now uses the &lt;code>karpenter.sh/disruption:NoSchedule=disrupting&lt;/code> taint instead of the upstream &lt;code>node.kubernetes.io/unschedulable&lt;/code> taint for nodes spawned with a NodePool to prevent pods from scheduling to nodes being disrupted. Pods that previously tolerated the &lt;code>node.kubernetes.io/unschedulable&lt;/code> taint that previously weren&amp;rsquo;t evicted during termination will now be evicted. This most notably affects DaemonSets, which have the &lt;code>node.kubernetes.io/unschedulable&lt;/code> toleration by default, where Karpenter will now remove these pods during termination. If you want your specific pods to not be evicted when nodes are scaled down, you should add a toleration to the pods with the following: &lt;code>Key=karpenter.sh/disruption, Effect=NoSchedule, Operator=Equals, Values=disrupting&lt;/code>.
&lt;ul>
&lt;li>Note: Karpenter will continue to use the old &lt;code>node.kubernetes.io/unschedulable&lt;/code> taint for nodes spawned with a Provisioner.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="upgrading-to-v0310">Upgrading to v0.31.0+&lt;/h3>
&lt;ul>
&lt;li>Karpenter moved its &lt;code>securityContext&lt;/code> constraints from pod-wide to only applying to the Karpenter container exclusively. If you were previously relying on the pod-wide &lt;code>securityContext&lt;/code> for your sidecar containers, you will now need to set these values explicitly in your sidecar container configuration.&lt;/li>
&lt;/ul>
&lt;h3 id="upgrading-to-v0300">Upgrading to v0.30.0+&lt;/h3>
&lt;ul>
&lt;li>Karpenter will now &lt;a href="https://pr-35.d2bgfookghzifw.amplifyapp.com/v0.32/concepts/disruption/#drift">statically drift&lt;/a> on both Provisioner and AWSNodeTemplate Fields. For Provisioner Static Drift, the &lt;code>karpenter.sh/provisioner-hash&lt;/code> annotation must be present on both the Provisioner and Machine. For AWSNodeTemplate drift, the &lt;code>karpenter.k8s.aws/nodetemplate-hash&lt;/code> annotation must be present on the AWSNodeTemplate and Machine. Karpenter will not add these annotations to pre-existing nodes, so each of these nodes will need to be recycled one time for the annotations to be added.&lt;/li>
&lt;li>Karpenter will now fail validation on AWSNodeTemplates and Provisioner &lt;code>spec.provider&lt;/code> that have &lt;code>amiSelectors&lt;/code>, &lt;code>subnetSelectors&lt;/code>, or &lt;code>securityGroupSelectors&lt;/code> set with a combination of id selectors (&lt;code>aws-ids&lt;/code>, &lt;code>aws::ids&lt;/code>) and other selectors.&lt;/li>
&lt;li>Karpenter now statically sets the &lt;code>securityContext&lt;/code> at both the pod and container-levels and doesn&amp;rsquo;t allow override values to be passed through the helm chart. This change was made to adhere to &lt;a href="https://kubernetes.io/docs/concepts/security/pod-security-standards/#restricted">Restricted Pod Security Standard&lt;/a>, which follows pod hardening best practices.&lt;/li>
&lt;/ul>
&lt;div class="alert alert-primary" role="alert">
&lt;h4 class="alert-heading">Note&lt;/h4>
If you have sidecar containers configured to run alongside Karpenter that cannot tolerate the &lt;a href="https://github.com/aws/karpenter/blob/v0.30.0/charts/karpenter/templates/deployment.yaml#L40">pod-wide &lt;code>securityContext&lt;/code> constraints&lt;/a>, you will need to specify overrides to the sidecar &lt;code>securityContext&lt;/code> in your deployment.
&lt;/div>
&lt;h3 id="upgrading-to-v0290">Upgrading to v0.29.0+&lt;/h3>
&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">Warning&lt;/h4>
Karpenter &lt;code>v0.29.1&lt;/code> contains a &lt;a href="https://github.com/aws/karpenter/issues/4296">file descriptor and memory leak bug&lt;/a> that leads to Karpenter getting OOMKilled and restarting at the point that it hits its memory or file descriptor limit. Karpenter &lt;code>&amp;gt;v0.29.2&lt;/code> fixes this leak.
&lt;/div>
&lt;ul>
&lt;li>
&lt;p>Karpenter has changed the default metrics service port from 8080 to 8000 and the default webhook service port from 443 to 8443. In &lt;code>v0.28.0&lt;/code>, the Karpenter pod port was changed to 8000, but referenced the service by name, allowing users to scrape the service at port 8080 for metrics. &lt;code>v0.29.0&lt;/code> aligns the two ports so that service and pod metrics ports are the same. These ports are set by the &lt;code>controller.metrics.port&lt;/code> and &lt;code>webhook.port&lt;/code> helm chart values, so if you have previously set these to non-default values, you may need to update your Prometheus scraper to match these new values.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Karpenter will now reconcile nodes that are drifted due to their Security Groups or their Subnets. If your AWSNodeTemplate&amp;rsquo;s Security Groups differ from the Security Groups used for an instance, Karpenter will consider it drifted. If the Subnet used by an instance is not contained in the allowed list of Subnets for an AWSNodeTemplate, Karpenter will also consider it drifted.&lt;/p>
&lt;ul>
&lt;li>Since Karpenter uses tags for discovery of Subnets and SecurityGroups, check the &lt;a href="https://pr-35.d2bgfookghzifw.amplifyapp.com/v0.32/reference/threat-model/#threat-using-ec2-createtagdeletetag-permissions-to-orchestrate-machine-creationdeletion">Threat Model&lt;/a> to see how to manage this IAM Permission.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="upgrading-to-v0280">Upgrading to v0.28.0+&lt;/h3>
&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">Warning&lt;/h4>
Karpenter &lt;code>v0.28.0&lt;/code> is incompatible with Kubernetes version 1.26+, which can result in additional node scale outs when using &lt;code>--cloudprovider=external&lt;/code>, which is the default for the EKS Optimized AMI. See: &lt;a href="https://github.com/aws/karpenter-core/pull/375">https://github.com/aws/karpenter-core/pull/375&lt;/a>. Karpenter &lt;code>&amp;gt;v0.28.1&lt;/code> fixes this issue and is compatible with Kubernetes version 1.26+.
&lt;/div>
&lt;ul>
&lt;li>
&lt;p>The &lt;code>extraObjects&lt;/code> value is now removed from the Helm chart. Having this value in the chart proved to not work in the majority of Karpenter installs and often led to anti-patterns, where the Karpenter resources installed to manage Karpenter&amp;rsquo;s capacity were directly tied to the install of the Karpenter controller deployments. The Karpenter team recommends that, if you want to install Karpenter manifests alongside the Karpenter helm chart, to do so by creating a separate chart for the manifests, creating a dependency on the controller chart.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>The &lt;code>aws.nodeNameConvention&lt;/code> setting is now removed from the &lt;a href="https://pr-35.d2bgfookghzifw.amplifyapp.com/v0.32/reference/settings/#configmap">&lt;code>karpenter-global-settings&lt;/code>&lt;/a> ConfigMap. Because Karpenter is now driving its orchestration of capacity through Machines, it no longer needs to know the node name, making this setting obsolete. Karpenter ignores configuration that it doesn&amp;rsquo;t recognize in the &lt;a href="https://pr-35.d2bgfookghzifw.amplifyapp.com/v0.32/reference/settings/#configmap">&lt;code>karpenter-global-settings&lt;/code>&lt;/a> ConfigMap, so leaving the &lt;code>aws.nodeNameConvention&lt;/code> in the ConfigMap will simply cause this setting to be ignored.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Karpenter now defines a set of &amp;ldquo;restricted tags&amp;rdquo; which can&amp;rsquo;t be overridden with custom tagging in the AWSNodeTemplate or in the &lt;a href="https://pr-35.d2bgfookghzifw.amplifyapp.com/v0.32/reference/settings/#configmap">&lt;code>karpenter-global-settings&lt;/code>&lt;/a> ConfigMap. If you are currently using any of these tag overrides when tagging your instances, webhook validation will now fail. These tags include:&lt;/p>
&lt;ul>
&lt;li>&lt;code>karpenter.sh/managed-by&lt;/code>&lt;/li>
&lt;li>&lt;code>karpenter.sh/provisioner-name&lt;/code>&lt;/li>
&lt;li>&lt;code>kubernetes.io/cluster/${CLUSTER_NAME}&lt;/code>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>The following metrics changed their meaning, based on the introduction of the Machine resource:&lt;/p>
&lt;ul>
&lt;li>&lt;code>karpenter_nodes_terminated&lt;/code>: Use &lt;code>karpenter_machines_terminated&lt;/code> if you are interested in the reason why a Karpenter machine was deleted. &lt;code>karpenter_nodes_terminated&lt;/code> now only tracks the count of terminated nodes without any additional labels.&lt;/li>
&lt;li>&lt;code>karpenter_nodes_created&lt;/code>: Use &lt;code>karpenter_machines_created&lt;/code> if you are interested in the reason why a Karpenter machine was created. &lt;code>karpenter_nodes_created&lt;/code> now only tracks the count of created nodes without any additional labels.&lt;/li>
&lt;li>&lt;code>karpenter_deprovisioning_replacement_node_initialized_seconds&lt;/code>: This metric has been replaced in favor of &lt;code>karpenter_deprovisioning_replacement_machine_initialized_seconds&lt;/code>.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;code>v0.28.0&lt;/code> introduces the Machine CustomResource into the &lt;code>karpenter.sh&lt;/code> API Group and requires this CustomResourceDefinition to run properly. Karpenter now orchestrates its CloudProvider capacity through these in-cluster Machine CustomResources. When performing a scheduling decision, Karpenter will create a Machine, resulting in launching CloudProvider capacity. The kubelet running on the new capacity will then register the node to the cluster shortly after launch.&lt;/p>
&lt;ul>
&lt;li>If you are using Helm to upgrade between versions of Karpenter, note that &lt;a href="https://helm.sh/docs/chart_best_practices/custom_resource_definitions/#some-caveats-and-explanations">Helm does not automate the process of upgrading or install the new CRDs into your cluster&lt;/a>. To install or upgrade the existing CRDs, follow the guidance under the &lt;a href="#custom-resource-definition-crd-upgrades">Custom Resource Definition (CRD) Upgrades&lt;/a> section of the upgrade guide.&lt;/li>
&lt;li>Karpenter will hydrate Machines on startup for existing capacity managed by Karpenter into the cluster. Existing capacity launched by an older version of Karpenter is discovered by finding CloudProvider capacity with the &lt;code>karpenter.sh/provisioner-name&lt;/code> tag or the &lt;code>karpenter.sh/provisioner-name&lt;/code> label on nodes.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>The metrics port for the Karpenter deployment was changed from 8080 to 8000. Users who scrape the pod directly for metrics rather than the service will need to adjust the commands they use to reference port 8000. Any users who scrape metrics from the service should be unaffected.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">Warning&lt;/h4>
&lt;p>Karpenter creates a mapping between CloudProvider machines and CustomResources in the cluster for capacity tracking. To ensure this mapping is consistent, Karpenter utilizes the following tag keys:&lt;/p>
&lt;ul>
&lt;li>&lt;code>karpenter.sh/managed-by&lt;/code>&lt;/li>
&lt;li>&lt;code>karpenter.sh/provisioner-name&lt;/code>&lt;/li>
&lt;li>&lt;code>kubernetes.io/cluster/${CLUSTER_NAME}&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>Because Karpenter takes this dependency, any user that has the ability to Create/Delete these tags on CloudProvider machines will have the ability to orchestrate Karpenter to Create/Delete CloudProvider machines as a side effect. Check the &lt;a href="https://pr-35.d2bgfookghzifw.amplifyapp.com/v0.32/reference/threat-model/#threat-using-ec2-createtagdeletetag-permissions-to-orchestrate-machine-creationdeletion">Threat Model&lt;/a> to see how this might affect you, and ways to mitigate this.&lt;/p>
&lt;/div>
&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">Rolling Back&lt;/h4>
&lt;p>If, after upgrading to &lt;code>v0.28.0+&lt;/code>, a rollback to an older version of Karpenter needs to be performed, Karpenter will continue to function normally, though you will still have the Machine CustomResources on your cluster. You will need to manually delete the Machines and patch out the finalizers to fully complete the rollback.&lt;/p>
&lt;p>Karpenter marks CloudProvider capacity as &amp;ldquo;managed by&amp;rdquo; a Machine using the &lt;code>karpenter-sh/managed-by&lt;/code> tag on the CloudProvider machine. It uses this tag to ensure that the Machine CustomResources in the cluster match the CloudProvider capacity managed by Karpenter. If these states don&amp;rsquo;t match, Karpenter will garbage collect the capacity. Because of this, if performing an upgrade, followed by a rollback, followed by another upgrade to &lt;code>v0.28.0+&lt;/code>, ensure you remove the &lt;code>karpenter.sh/managed-by&lt;/code> tags from existing capacity; otherwise, Karpenter will deprovision the capacity without a Machine CR counterpart.&lt;/p>
&lt;/div>
&lt;h3 id="upgrading-to-v0273">Upgrading to v0.27.3+&lt;/h3>
&lt;ul>
&lt;li>The &lt;code>defaulting.webhook.karpenter.sh&lt;/code> mutating webhook was removed in &lt;code>v0.27.3&lt;/code>. If you are coming from an older version of Karpenter where this webhook existed and the webhook was not managed by Helm, you may need to delete the stale webhook.&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl delete mutatingwebhookconfigurations defaulting.webhook.karpenter.sh
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="upgrading-to-v0270">Upgrading to v0.27.0+&lt;/h3>
&lt;ul>
&lt;li>The Karpenter controller pods now deploy with &lt;code>kubernetes.io/hostname&lt;/code> self anti-affinity by default. If you are running Karpenter in HA (high-availability) mode and you do not have enough nodes to match the number of pod replicas you are deploying with, you will need to scale-out your nodes for Karpenter.&lt;/li>
&lt;li>The following controller metrics changed and moved under the &lt;code>controller_runtime&lt;/code> metrics namespace:
&lt;ul>
&lt;li>&lt;code>karpenter_metricscraper_...&lt;/code>&lt;/li>
&lt;li>&lt;code>karpenter_deprovisioning_...&lt;/code>&lt;/li>
&lt;li>&lt;code>karpenter_provisioner_...&lt;/code>&lt;/li>
&lt;li>&lt;code>karpenter_interruption_...&lt;/code>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>The following controller metric names changed, affecting the &lt;code>controller&lt;/code> label value under &lt;code>controller_runtime_...&lt;/code> metrics. These metrics include:
&lt;ul>
&lt;li>&lt;code>podmetrics&lt;/code> -&amp;gt; &lt;code>pod_metrics&lt;/code>&lt;/li>
&lt;li>&lt;code>provisionermetrics&lt;/code> -&amp;gt; &lt;code>provisioner_metrics&lt;/code>&lt;/li>
&lt;li>&lt;code>metricscraper&lt;/code> -&amp;gt; &lt;code>metric_scraper&lt;/code>&lt;/li>
&lt;li>&lt;code>provisioning&lt;/code> -&amp;gt; &lt;code>provisioner_trigger&lt;/code>&lt;/li>
&lt;li>&lt;code>node-state&lt;/code> -&amp;gt; &lt;code>node_state&lt;/code>&lt;/li>
&lt;li>&lt;code>pod-state&lt;/code> -&amp;gt; &lt;code>pod_state&lt;/code>&lt;/li>
&lt;li>&lt;code>provisioner-state&lt;/code> -&amp;gt; &lt;code>provisioner_state&lt;/code>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>The &lt;code>karpenter_allocation_controller_scheduling_duration_seconds&lt;/code> metric name changed to &lt;code>karpenter_provisioner_scheduling_duration_seconds&lt;/code>&lt;/li>
&lt;/ul>
&lt;h3 id="upgrading-to-v0260">Upgrading to v0.26.0+&lt;/h3>
&lt;ul>
&lt;li>The &lt;code>karpenter.sh/do-not-evict&lt;/code> annotation no longer blocks node termination when running &lt;code>kubectl delete node&lt;/code>. This annotation on pods will only block automatic deprovisioning that is considered &amp;ldquo;voluntary,&amp;rdquo; that is, disruptions that can be avoided. Disruptions that Karpenter deems as &amp;ldquo;involuntary&amp;rdquo; and will ignore the &lt;code>karpenter.sh/do-not-evict&lt;/code> annotation include spot interruption and manual deletion of the node. See &lt;a href="https://pr-35.d2bgfookghzifw.amplifyapp.com/v0.32/concepts/disruption/#disabling-deprovisioning">Disabling Deprovisioning&lt;/a> for more details.&lt;/li>
&lt;li>Default resources &lt;code>requests&lt;/code> and &lt;code>limits&lt;/code> are removed from the Karpenter&amp;rsquo;s controller deployment through the Helm chart. If you have not set custom resource &lt;code>requests&lt;/code> or &lt;code>limits&lt;/code> in your helm values and are using Karpenter&amp;rsquo;s defaults, you will now need to set these values in your helm chart deployment.&lt;/li>
&lt;li>The &lt;code>controller.image&lt;/code> value in the helm chart has been broken out to a map consisting of &lt;code>controller.image.repository&lt;/code>, &lt;code>controller.image.tag&lt;/code>, and &lt;code>controller.image.digest&lt;/code>. If manually overriding the &lt;code>controller.image&lt;/code>, you will need to update your values to the new design.&lt;/li>
&lt;/ul>
&lt;h3 id="upgrading-to-v0250">Upgrading to v0.25.0+&lt;/h3>
&lt;ul>
&lt;li>Cluster Endpoint can now be automatically discovered. If you are using Amazon Elastic Kubernetes Service (EKS), you can now omit the &lt;code>clusterEndpoint&lt;/code> field in your configuration. In order to allow the resolving, you have to add the permission &lt;code>eks:DescribeCluster&lt;/code> to the Karpenter Controller IAM role.&lt;/li>
&lt;/ul>
&lt;h3 id="upgrading-to-v0240">Upgrading to v0.24.0+&lt;/h3>
&lt;ul>
&lt;li>Settings are no longer updated dynamically while Karpenter is running. If you manually make a change to the &lt;a href="https://pr-35.d2bgfookghzifw.amplifyapp.com/v0.32/reference/settings/#configmap">&lt;code>karpenter-global-settings&lt;/code>&lt;/a> ConfigMap, you will need to reload the containers by restarting the deployment with &lt;code>kubectl rollout restart -n karpenter deploy/karpenter&lt;/code>&lt;/li>
&lt;li>Karpenter no longer filters out instance types internally. Previously, &lt;code>g2&lt;/code> (not supported by the NVIDIA device plugin) and FPGA instance types were filtered. The only way to filter instance types now is to set requirements on your provisioner or pods using well-known node labels described &lt;a href="https://pr-35.d2bgfookghzifw.amplifyapp.com/v0.32/concepts/scheduling/#selecting-nodes">here&lt;/a>. If you are currently using overly broad requirements that allows all of the &lt;code>g&lt;/code> instance-category, you will want to tighten the requirement, or add an instance-generation requirement.&lt;/li>
&lt;li>&lt;code>aws.tags&lt;/code> in &lt;a href="https://pr-35.d2bgfookghzifw.amplifyapp.com/v0.32/reference/settings/#configmap">&lt;code>karpenter-global-settings&lt;/code>&lt;/a> ConfigMap is now a top-level field and expects the value associated with this key to be a JSON object of string to string. This is change from previous versions where keys were given implicitly by providing the key-value pair &lt;code>aws.tags.&amp;lt;key&amp;gt;: value&lt;/code> in the ConfigMap.&lt;/li>
&lt;/ul>
&lt;h3 id="upgrading-to-v0220">Upgrading to v0.22.0+&lt;/h3>
&lt;ul>
&lt;li>Do not upgrade to this version unless you are on Kubernetes &amp;gt;= v1.21. Karpenter no longer supports Kubernetes v1.20, but now supports Kubernetes v1.25. This change is due to the v1 PDB API, which was introduced in K8s v1.20 and subsequent removal of the v1beta1 API in K8s v1.25.&lt;/li>
&lt;/ul>
&lt;h3 id="upgrading-to-v0200">Upgrading to v0.20.0+&lt;/h3>
&lt;ul>
&lt;li>Prior to v0.20.0, Karpenter would prioritize certain instance type categories absent of any requirements in the Provisioner. v0.20.0+ removes prioritizing these instance type categories (&amp;ldquo;m&amp;rdquo;, &amp;ldquo;c&amp;rdquo;, &amp;ldquo;r&amp;rdquo;, &amp;ldquo;a&amp;rdquo;, &amp;ldquo;t&amp;rdquo;, &amp;ldquo;i&amp;rdquo;) in code. Bare Metal and GPU instance types are still deprioritized and only used if no other instance types are compatible with the node requirements. Since Karpenter does not prioritize any instance types, if you do not want exotic instance types and are not using the runtime Provisioner defaults, you will need to specify this in the Provisioner.&lt;/li>
&lt;/ul>
&lt;h3 id="upgrading-to-v0190">Upgrading to v0.19.0+&lt;/h3>
&lt;ul>
&lt;li>
&lt;p>The karpenter webhook and controller containers are combined into a single binary, which requires changes to the helm chart. If your Karpenter installation (helm or otherwise) currently customizes the karpenter webhook, your deployment tooling may require minor changes.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Karpenter now supports native interruption handling. If you were previously using Node Termination Handler for spot interruption handling and health events, you will need to remove the component from your cluster before enabling &lt;code>aws.interruptionQueueName&lt;/code>. For more details on Karpenter&amp;rsquo;s interruption handling, see the &lt;a href="https://pr-35.d2bgfookghzifw.amplifyapp.com/v0.32/concepts/disruption/#interruption">Interruption Handling Docs&lt;/a>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Instance category defaults are now explicitly persisted in the Provisioner, rather than handled implicitly in memory. By default, Provisioners will limit instance category to c,m,r. If any instance type constraints are applied, it will override this default. If you have created Provisioners in the past with unconstrained instance type, family, or category, Karpenter will now more flexibly use instance types than before. If you would like to apply these constraints, they must be included in the Provisioner CRD.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Karpenter CRD raw YAML URLs have migrated from &lt;code>https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.19.3/charts/karpenter/crds/...&lt;/code> to &lt;code>https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.19.3/pkg/apis/crds/...&lt;/code>. If you reference static Karpenter CRDs or rely on &lt;code>kubectl replace -f&lt;/code> to apply these CRDs from their remote location, you will need to migrate to the new location.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Pods without an ownerRef (also called &amp;ldquo;controllerless&amp;rdquo; or &amp;ldquo;naked&amp;rdquo; pods) will now be evicted by default during node termination and consolidation. Users can prevent controllerless pods from being voluntarily disrupted by applying the &lt;code>karpenter.sh/do-not-evict: &amp;quot;true&amp;quot;&lt;/code> annotation to the pods in question.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>The following CLI options/environment variables are now removed and replaced in favor of pulling settings dynamically from the &lt;a href="https://pr-35.d2bgfookghzifw.amplifyapp.com/v0.32/reference/settings/#configmap">&lt;code>karpenter-global-settings&lt;/code>&lt;/a> ConfigMap. See the &lt;a href="https://pr-35.d2bgfookghzifw.amplifyapp.com/v0.32/reference/settings/#environment-variables--cli-flags">Settings docs&lt;/a> for more details on configuring the new values in the ConfigMap.&lt;/p>
&lt;ul>
&lt;li>&lt;code>CLUSTER_NAME&lt;/code> -&amp;gt; &lt;code>settings.aws.clusterName&lt;/code>&lt;/li>
&lt;li>&lt;code>CLUSTER_ENDPOINT&lt;/code> -&amp;gt; &lt;code>settings.aws.clusterEndpoint&lt;/code>&lt;/li>
&lt;li>&lt;code>AWS_DEFAULT_INSTANCE_PROFILE&lt;/code> -&amp;gt; &lt;code>settings.aws.defaultInstanceProfile&lt;/code>&lt;/li>
&lt;li>&lt;code>AWS_ENABLE_POD_ENI&lt;/code> -&amp;gt; &lt;code>settings.aws.enablePodENI&lt;/code>&lt;/li>
&lt;li>&lt;code>AWS_ENI_LIMITED_POD_DENSITY&lt;/code> -&amp;gt; &lt;code>settings.aws.enableENILimitedPodDensity&lt;/code>&lt;/li>
&lt;li>&lt;code>AWS_ISOLATED_VPC&lt;/code> -&amp;gt; &lt;code>settings.aws.isolatedVPC&lt;/code>&lt;/li>
&lt;li>&lt;code>AWS_NODE_NAME_CONVENTION&lt;/code> -&amp;gt; &lt;code>settings.aws.nodeNameConvention&lt;/code>&lt;/li>
&lt;li>&lt;code>VM_MEMORY_OVERHEAD&lt;/code> -&amp;gt; &lt;code>settings.aws.vmMemoryOverheadPercent&lt;/code>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="upgrading-to-v0180">Upgrading to v0.18.0+&lt;/h3>
&lt;ul>
&lt;li>v0.18.0 removes the &lt;code>karpenter_consolidation_nodes_created&lt;/code> and &lt;code>karpenter_consolidation_nodes_terminated&lt;/code> prometheus metrics in favor of the more generic &lt;code>karpenter_nodes_created&lt;/code> and &lt;code>karpenter_nodes_terminated&lt;/code> metrics. You can still see nodes created and terminated by consolidation by checking the &lt;code>reason&lt;/code> label on the metrics. Check out all the metrics published by Karpenter &lt;a href="https://pr-35.d2bgfookghzifw.amplifyapp.com/v0.32/reference/metrics/">here&lt;/a>.&lt;/li>
&lt;/ul>
&lt;h3 id="upgrading-to-v0170">Upgrading to v0.17.0+&lt;/h3>
&lt;p>Karpenter&amp;rsquo;s Helm chart package is now stored in &lt;a href="https://gallery.ecr.aws/karpenter/karpenter">Karpenter&amp;rsquo;s OCI (Open Container Initiative) registry&lt;/a>. The Helm CLI supports the new format since &lt;a href="https://helm.sh/docs/topics/registries/">v3.8.0+&lt;/a>.
With this change &lt;a href="https://charts.karpenter.sh/">charts.karpenter.sh&lt;/a> is no longer updated but preserved to allow using older Karpenter versions. For examples on working with the Karpenter helm charts look at &lt;a href="https://pr-35.d2bgfookghzifw.amplifyapp.com/v0.32/getting-started/getting-started-with-karpenter/#install-karpenter-helm-chart">Install Karpenter Helm Chart&lt;/a>.&lt;/p>
&lt;p>Users who have scripted the installation or upgrading of Karpenter need to adjust their scripts with the following changes:&lt;/p>
&lt;ol>
&lt;li>There is no longer a need to add the Karpenter helm repo to helm&lt;/li>
&lt;li>The full URL of the Helm chart needs to be present when using the helm commands&lt;/li>
&lt;li>If you were not prepending a &lt;code>v&lt;/code> to the version (i.e. &lt;code>0.17.0&lt;/code>), you will need to do so with the OCI chart, &lt;code>v0.17.0&lt;/code>.&lt;/li>
&lt;/ol>
&lt;h3 id="upgrading-to-v0162">Upgrading to v0.16.2+&lt;/h3>
&lt;ul>
&lt;li>v0.16.2 adds new kubeletConfiguration fields to the &lt;code>provisioners.karpenter.sh&lt;/code> v1alpha5 CRD. The CRD will need to be updated to use the new parameters:&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl replace -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.16.2/charts/karpenter/crds/karpenter.sh_provisioners.yaml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="upgrading-to-v0160">Upgrading to v0.16.0+&lt;/h3>
&lt;ul>
&lt;li>v0.16.0 adds a new weight field to the &lt;code>provisioners.karpenter.sh&lt;/code> v1alpha5 CRD. The CRD will need to be updated to use the new parameters:&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl replace -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.16.0/charts/karpenter/crds/karpenter.sh_provisioners.yaml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="upgrading-to-v0150">Upgrading to v0.15.0+&lt;/h3>
&lt;ul>
&lt;li>v0.15.0 adds a new consolidation field to the &lt;code>provisioners.karpenter.sh&lt;/code> v1alpha5 CRD. The CRD will need to be updated to use the new parameters:&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl replace -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.15.0/charts/karpenter/crds/karpenter.sh_provisioners.yaml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="upgrading-to-v0140">Upgrading to v0.14.0+&lt;/h3>
&lt;ul>
&lt;li>v0.14.0 adds new fields to the &lt;code>provisioners.karpenter.sh&lt;/code> v1alpha5 and &lt;code>awsnodetemplates.karpenter.k8s.aws&lt;/code> v1alpha1 CRDs. The CRDs will need to be updated to use the new parameters:&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl replace -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.14.0/charts/karpenter/crds/karpenter.sh_provisioners.yaml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>kubectl replace -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.14.0/charts/karpenter/crds/karpenter.k8s.aws_awsnodetemplates.yaml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>v0.14.0 changes the way Karpenter discovers its dynamically generated AWS launch templates to use a tag rather than a Name scheme. The previous name scheme was &lt;code>Karpenter-${CLUSTER_NAME}-*&lt;/code> which could collide with user created launch templates that Karpenter should not manage. The new scheme uses a tag on the launch template &lt;code>karpenter.k8s.aws/cluster: ${CLUSTER_NAME}&lt;/code>. As a result, Karpenter will not clean-up dynamically generated launch templates using the old name scheme. You can manually clean these up with the following commands:&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">## Find launch templates that match the naming pattern and you do not want to keep&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>aws ec2 describe-launch-templates --filters&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;Name=launch-template-name,Values=Karpenter-&lt;/span>&lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">CLUSTER_NAME&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>&lt;span style="color:#4e9a06">-*&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">## Delete launch template(s) that match the name but do not have the &amp;#34;karpenter.k8s.aws/cluster&amp;#34; tag&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>aws ec2 delete-launch-template --launch-template-id &amp;lt;LAUNCH_TEMPLATE_ID&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>v0.14.0 introduces additional instance type filtering if there are no &lt;code>node.kubernetes.io/instance-type&lt;/code> or &lt;code>karpenter.k8s.aws/instance-family&lt;/code> or &lt;code>karpenter.k8s.aws/instance-category&lt;/code> requirements that restrict instance types specified on the provisioner. This prevents Karpenter from launching bare metal and some older non-current generation instance types unless the provisioner has been explicitly configured to allow them. If you specify an instance type or family requirement that supplies a list of instance-types or families, that list will be used regardless of filtering. The filtering can also be completely eliminated by adding an &lt;code>Exists&lt;/code> requirement for instance type or family.&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>- &lt;span style="color:#204a87;font-weight:bold">key&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">node.kubernetes.io/instance-type&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">operator&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">Exists&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>
&lt;p>v0.14.0 introduces support for custom AMIs without the need for an entire launch template. You must add the &lt;code>ec2:DescribeImages&lt;/code> permission to the Karpenter Controller Role for this feature to work. This permission is needed for Karpenter to discover custom images specified. Read the &lt;a href="https://pr-35.d2bgfookghzifw.amplifyapp.com/v0.32/concepts/nodepools/#spec-amiselector">Custom AMI documentation here&lt;/a> to get started&lt;/p>
&lt;/li>
&lt;li>
&lt;p>v0.14.0 adds an an additional default toleration (CriticalAddonOnly=Exists) to the Karpenter helm chart. This may cause Karpenter to run on nodes with that use this Taint which previously would not have been schedulable. This can be overridden by using &lt;code>--set tolerations[0]=null&lt;/code>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>v0.14.0 deprecates the &lt;code>AWS_ENI_LIMITED_POD_DENSITY&lt;/code> environment variable in-favor of specifying &lt;code>spec.kubeletConfiguration.maxPods&lt;/code> on the Provisioner. &lt;code>AWS_ENI_LIMITED_POD_DENSITY&lt;/code> will continue to work when &lt;code>maxPods&lt;/code> is not set on the Provisioner. If &lt;code>maxPods&lt;/code> is set, it will override &lt;code>AWS_ENI_LIMITED_POD_DENSITY&lt;/code> on that specific Provisioner.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h3 id="upgrading-to-v0130">Upgrading to v0.13.0+&lt;/h3>
&lt;ul>
&lt;li>
&lt;p>v0.13.0 introduces a new CRD named &lt;code>AWSNodeTemplate&lt;/code> which can be used to specify AWS Cloud Provider parameters. Everything that was previously specified under &lt;code>spec.provider&lt;/code> in the Provisioner resource, can now be specified in the spec of the new resource. The use of &lt;code>spec.provider&lt;/code> is deprecated but will continue to function to maintain backwards compatibility for the current API version (v1alpha5) of the Provisioner resource. v0.13.0 also introduces support for custom user data that doesn&amp;rsquo;t require the use of a custom launch template. The user data can be specified in-line in the AWSNodeTemplate resource.&lt;/p>
&lt;p>If you are upgrading from v0.10.1 - v0.11.1, a new CRD &lt;code>awsnodetemplate&lt;/code> was added. In v0.12.0, this crd was renamed to &lt;code>awsnodetemplates&lt;/code>. Since helm does not manage the lifecycle of CRDs, you will need to perform a few manual steps for this CRD upgrade:&lt;/p>
&lt;ol>
&lt;li>Make sure any &lt;code>awsnodetemplate&lt;/code> manifests are saved somewhere so that they can be reapplied to the cluster.&lt;/li>
&lt;li>&lt;code>kubectl delete crd awsnodetemplate&lt;/code>&lt;/li>
&lt;li>&lt;code>kubectl apply -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.13.2/charts/karpenter/crds/karpenter.k8s.aws_awsnodetemplates.yaml&lt;/code>&lt;/li>
&lt;li>Perform the Karpenter upgrade to v0.13.x, which will install the new &lt;code>awsnodetemplates&lt;/code> CRD.&lt;/li>
&lt;li>Reapply the &lt;code>awsnodetemplate&lt;/code> manifests you saved from step 1, if applicable.&lt;/li>
&lt;/ol>
&lt;/li>
&lt;li>
&lt;p>v0.13.0 also adds EC2/spot price fetching to Karpenter to allow making more accurate decisions regarding node deployments. Our &lt;a href="https://pr-35.d2bgfookghzifw.amplifyapp.com/v0.32/getting-started/getting-started-with-karpenter/">getting started guide&lt;/a> documents this, but if you are upgrading Karpenter you will need to modify your Karpenter controller policy to add the &lt;code>pricing:GetProducts&lt;/code> and &lt;code>ec2:DescribeSpotPriceHistory&lt;/code> permissions.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h3 id="upgrading-to-v0120">Upgrading to v0.12.0+&lt;/h3>
&lt;ul>
&lt;li>v0.12.0 adds an OwnerReference to each Node created by a provisioner. Previously, deleting a provisioner would orphan nodes. Now, deleting a provisioner will cause Kubernetes &lt;a href="https://kubernetes.io/docs/concepts/architecture/garbage-collection/#cascading-deletion">cascading delete&lt;/a> logic to gracefully terminate the nodes using the Karpenter node finalizer. You may still orphan nodes by removing the owner reference.&lt;/li>
&lt;li>If you are upgrading from v0.10.1 - v0.11.1, a new CRD &lt;code>awsnodetemplate&lt;/code> was added. In v0.12.0, this crd was renamed to &lt;code>awsnodetemplates&lt;/code>. Since helm does not manage the lifecycle of CRDs, you will need to perform a few manual steps for this CRD upgrade:
&lt;ol>
&lt;li>Make sure any &lt;code>awsnodetemplate&lt;/code> manifests are saved somewhere so that they can be reapplied to the cluster.&lt;/li>
&lt;li>&lt;code>kubectl delete crd awsnodetemplate&lt;/code>&lt;/li>
&lt;li>&lt;code>kubectl apply -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.12.1/charts/karpenter/crds/karpenter.k8s.aws_awsnodetemplates.yaml&lt;/code>&lt;/li>
&lt;li>Perform the Karpenter upgrade to v0.12.x, which will install the new &lt;code>awsnodetemplates&lt;/code> CRD.&lt;/li>
&lt;li>Reapply the &lt;code>awsnodetemplate&lt;/code> manifests you saved from step 1, if applicable.&lt;/li>
&lt;/ol>
&lt;/li>
&lt;/ul>
&lt;h3 id="upgrading-to-v0110">Upgrading to v0.11.0+&lt;/h3>
&lt;p>v0.11.0 changes the way that the &lt;code>vpc.amazonaws.com/pod-eni&lt;/code> resource is reported. Instead of being reported for all nodes that could support the resources regardless of if the cluster is configured to support it, it is now controlled by a command line flag or environment variable. The parameter defaults to false and must be set if your cluster uses &lt;a href="https://docs.aws.amazon.com/eks/latest/userguide/security-groups-for-pods.html">security groups for pods&lt;/a>. This can be enabled by setting the environment variable &lt;code>AWS_ENABLE_POD_ENI&lt;/code> to true via the helm value &lt;code>controller.env&lt;/code>.&lt;/p>
&lt;p>Other extended resources must be registered on nodes by their respective device plugins which are typically installed as DaemonSets (e.g. the &lt;code>nvidia.com/gpu&lt;/code> resource will be registered by the &lt;a href="https://github.com/NVIDIA/k8s-device-plugin">NVIDIA device plugin&lt;/a>. Previously, Karpenter would register these resources on nodes at creation and they would be zeroed out by &lt;code>kubelet&lt;/code> at startup. By allowing the device plugins to register the resources, pods will not bind to the nodes before any device plugin initialization has occurred.&lt;/p>
&lt;p>v0.11.0 adds a &lt;code>providerRef&lt;/code> field in the Provisioner CRD. To use this new field you will need to replace the Provisioner CRD manually:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>kubectl replace -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.11.0/charts/karpenter/crds/karpenter.sh_provisioners.yaml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="upgrading-to-v0100">Upgrading to v0.10.0+&lt;/h3>
&lt;p>v0.10.0 adds a new field, &lt;code>startupTaints&lt;/code> to the provisioner spec. Standard Helm upgrades &lt;a href="https://helm.sh/docs/chart_best_practices/custom_resource_definitions/#some-caveats-and-explanations">do not upgrade CRDs&lt;/a> so the field will not be available unless the CRD is manually updated. This can be performed prior to the standard upgrade by applying the new CRD manually:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>kubectl replace -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.10.0/charts/karpenter/crds/karpenter.sh_provisioners.yaml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>📝 If you don&amp;rsquo;t perform this manual CRD update, Karpenter will work correctly except for rejecting the creation/update of provisioners that use &lt;code>startupTaints&lt;/code>.&lt;/p>
&lt;h3 id="upgrading-to-v062">Upgrading to v0.6.2+&lt;/h3>
&lt;p>If using Helm, the variable names have changed for the cluster&amp;rsquo;s name and endpoint. You may need to update any configuration
that sets the old variable names.&lt;/p>
&lt;ul>
&lt;li>&lt;code>controller.clusterName&lt;/code> is now &lt;code>clusterName&lt;/code>&lt;/li>
&lt;li>&lt;code>controller.clusterEndpoint&lt;/code> is now &lt;code>clusterEndpoint&lt;/code>&lt;/li>
&lt;/ul></description></item><item><title>V0.32: Compatibility</title><link>https://pr-35.d2bgfookghzifw.amplifyapp.com/v0.32/upgrading/compatibility/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pr-35.d2bgfookghzifw.amplifyapp.com/v0.32/upgrading/compatibility/</guid><description>
&lt;h1 id="compatibility">Compatibility&lt;/h1>
&lt;p>To make upgrading easier we aim to minimize the introduction of breaking changes.
Before you begin upgrading Karpenter, consider Karpenter compatibility issues related to Kubernetes and the NodePool API (previously Provisioner).&lt;/p>
&lt;h2 id="compatibility-matrix">Compatibility Matrix&lt;/h2>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>KUBERNETES&lt;/th>
&lt;th>1.23&lt;/th>
&lt;th>1.24&lt;/th>
&lt;th>1.25&lt;/th>
&lt;th>1.26&lt;/th>
&lt;th>1.27&lt;/th>
&lt;th>1.28&lt;/th>
&lt;th>1.29&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>karpenter&lt;/td>
&lt;td>&amp;gt;= 0.21&lt;/td>
&lt;td>&amp;gt;= 0.21&lt;/td>
&lt;td>&amp;gt;= 0.25&lt;/td>
&lt;td>&amp;gt;= 0.28&lt;/td>
&lt;td>&amp;gt;= 0.28&lt;/td>
&lt;td>&amp;gt;= 0.31&lt;/td>
&lt;td>&amp;gt;= 0.34.0&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">Note&lt;/h4>
&lt;p>Karpenter currently does not support the following &lt;a href="https://kubernetes.io/blog/2023/04/17/fine-grained-pod-topology-spread-features-beta/">new &lt;code>topologySpreadConstraints&lt;/code> keys&lt;/a>, promoted to beta in Kubernetes 1.27:&lt;/p>
&lt;ul>
&lt;li>&lt;code>matchLabelKeys&lt;/code>&lt;/li>
&lt;li>&lt;code>nodeAffinityPolicy&lt;/code>&lt;/li>
&lt;li>&lt;code>nodeTaintsPolicy&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>For more information on Karpenter&amp;rsquo;s support for these keys, view &lt;a href="https://github.com/aws/karpenter-core/issues/430">this tracking issue&lt;/a>.&lt;/p>
&lt;/div>
&lt;h2 id="compatibility-issues">Compatibility issues&lt;/h2>
&lt;p>When we introduce a breaking change, we do so only as described in this document.&lt;/p>
&lt;p>Karpenter follows &lt;a href="https://semver.org/">Semantic Versioning 2.0.0&lt;/a> in its stable release versions, while in
major version zero (v0.y.z) &lt;a href="https://semver.org/#spec-item-4">anything may change at any time&lt;/a>.
However, to further protect users during this phase we will only introduce breaking changes in minor releases (releases that increment y in x.y.z).
Note this does not mean every minor upgrade has a breaking change as we will also increment the
minor version when we release a new feature.&lt;/p>
&lt;p>Users should therefore check to see if there is a breaking change every time they are upgrading to a new minor version.&lt;/p>
&lt;h3 id="how-do-we-break-incompatibility">How Do We Break Incompatibility?&lt;/h3>
&lt;p>When there is a breaking change we will:&lt;/p>
&lt;ul>
&lt;li>Increment the minor version when in major version 0&lt;/li>
&lt;li>Add a permanent separate section named &lt;code>upgrading to vx.y.z+&lt;/code> under &lt;a href="#release-upgrade-notes">release upgrade notes&lt;/a>
clearly explaining the breaking change and what needs to be done on the user side to ensure a safe upgrade&lt;/li>
&lt;li>Add the sentence “This is a breaking change, please refer to the above link for upgrade instructions” to the top of the release notes and in all our announcements&lt;/li>
&lt;/ul>
&lt;h3 id="how-do-we-find-incompatibilities">How Do We Find Incompatibilities?&lt;/h3>
&lt;p>Besides the peer review process for all changes to the code base we also do the followings in order to find
incompatibilities:&lt;/p>
&lt;ul>
&lt;li>(To be implemented) To check the compatibility of the application, we will automate tests for installing, uninstalling, upgrading from an older version, and downgrading to an older version&lt;/li>
&lt;li>(To be implemented) To check the compatibility of the documentation with the application, we will turn the commands in our documentation into scripts that we can automatically run&lt;/li>
&lt;/ul>
&lt;h3 id="security-patches">Security Patches&lt;/h3>
&lt;p>While we are in major version 0 we will not release security patches to older versions.
Rather we provide the patches in the latest versions.
When at major version 1 we will have an EOL (end of life) policy where we provide security patches
for a subset of older versions and deprecate the others.&lt;/p>
&lt;h2 id="release-types">Release Types&lt;/h2>
&lt;p>Karpenter offers three types of releases. This section explains the purpose of each release type and how the images for each release type are tagged in our &lt;a href="https://gallery.ecr.aws/karpenter">public image repository&lt;/a>.&lt;/p>
&lt;h3 id="stable-releases">Stable Releases&lt;/h3>
&lt;p>Stable releases are the only recommended versions for production environments. Stable releases are tagged with a semantic version (e.g. &lt;code>0.35.0&lt;/code>). Note that stable releases prior to &lt;code>0.35.0&lt;/code> are prefixed with a &lt;code>v&lt;/code> (e.g. &lt;code>v0.34.0&lt;/code>).&lt;/p>
&lt;h3 id="release-candidates">Release Candidates&lt;/h3>
&lt;p>We consider having release candidates for major and important minor versions. Our release candidates are tagged like &lt;code>x.y.z-rc.0&lt;/code>, &lt;code>x.y.z-rc.1&lt;/code>. The release candidate will then graduate to &lt;code>x.y.z&lt;/code> as a stable release.
By adopting this practice we allow our users who are early adopters to test out new releases before they are available to the wider community, thereby providing us with early feedback resulting in more stable releases.
Note that, like the stable releases, release candidates prior to &lt;code>0.35.0&lt;/code> are prefixed with a &lt;code>v&lt;/code>.&lt;/p>
&lt;h3 id="snapshot-releases">Snapshot Releases&lt;/h3>
&lt;p>We release a snapshot release for every commit that gets merged into &lt;a href="https://www.github.com/aws/karpenter-provider-aws">&lt;code>aws/karpenter-provider-aws&lt;/code>&lt;/a>. This enables users to immediately try a new feature or fix right after it&amp;rsquo;s merged rather than waiting days or weeks for release.&lt;/p>
&lt;p>Snapshot releases are not made available in the same public ECR repository as other release types, they are instead published to a separate private ECR repository.
Helm charts are published to &lt;code>oci://021119463062.dkr.ecr.us-east-1.amazonaws.com/karpenter/snapshot/karpenter&lt;/code> and are tagged with the git commit hash prefixed by the Karpenter major version (e.g. &lt;code>v0-fc17bfc89ebb30a3b102a86012b3e3992ec08adf&lt;/code>).
Anyone with an AWS account can pull from this repository, but must first authenticate:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>aws ecr get-login-password --region us-east-1 &lt;span style="color:#000;font-weight:bold">|&lt;/span> docker login --username AWS --password-stdin 021119463062.dkr.ecr.us-east-1.amazonaws.com
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">Note&lt;/h4>
Snapshot releases are suitable for testing, and troubleshooting but they should not be used in production environments. Snapshot releases are ephemeral and will be removed 90 days after they were published.
&lt;/div></description></item><item><title>V0.32: v1beta1 Migration</title><link>https://pr-35.d2bgfookghzifw.amplifyapp.com/v0.32/upgrading/v1beta1-migration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pr-35.d2bgfookghzifw.amplifyapp.com/v0.32/upgrading/v1beta1-migration/</guid><description>
&lt;p>Significant changes to the Karpenter APIs have been introduced in Karpenter v0.32.x.
In this release, Karpenter APIs have advanced to v1beta1, in preparation for Karpenter v1 in the near future.
The v1beta1 changes are meant to simplify and improve ease of use of those APIs, as well as solidify the APIs for the v1 release.
Use this document as a reference to the changes that were introduced in the current release and as a guide to how you need to update the manifests and other Karpenter objects you created in previous Karpenter releases.&lt;/p>
&lt;p>Here is some information you should know about upgrading the Karpenter controller to v0.32.x:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Towards a v1 release&lt;/strong>: The latest version of Karpenter sets the stage for Karpenter v1. Karpenter v0.32.x implements the Karpenter v1beta1 API spec. The intention is to have v1beta1 be used as the v1 spec, with only minimal changes needed.&lt;/li>
&lt;li>&lt;strong>Path to upgrading&lt;/strong>: This procedure assumes that you are upgrading from Karpenter v0.31.x to v0.32.x. If you are on an earlier version of Karpenter, review the &lt;a href="#release-upgrade-notes">Release Upgrade Notes&lt;/a> for earlier versions&amp;rsquo; breaking changes.&lt;/li>
&lt;li>&lt;strong>Enhancing and renaming components&lt;/strong>: For v1beta1, APIs have been enhanced to improve and solidify Karpenter APIs. Part of these enhancements includes renaming the Kinds for all Karpenter CustomResources. The following name changes have been made:
&lt;ul>
&lt;li>Provisioner -&amp;gt; NodePool&lt;/li>
&lt;li>Machine -&amp;gt; NodeClaim&lt;/li>
&lt;li>AWSNodeTemplate -&amp;gt; EC2NodeClass&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>Running v1alpha1 alongside v1beta1&lt;/strong>: Having different Kind names for v1alpha5 and v1beta1 allows them to coexist for the same Karpenter controller for v0.32.x. This gives you time to transition to the new v1beta1 APIs while existing Provisioners and other objects stay in place. Keep in mind that there is no guarantee that the two versions will be able to coexist in future Karpenter versions.&lt;/li>
&lt;/ul>
&lt;h2 id="upgrade-procedure">Upgrade Procedure&lt;/h2>
&lt;p>This procedure assumes you are running the Karpenter controller on cluster and want to upgrade that cluster to v0.32.x.&lt;/p>
&lt;p>&lt;strong>NOTE&lt;/strong>: Please read through the entire procedure before beginning the upgrade. There are major changes in this upgrade, so you should carefully evaluate your cluster and workloads before proceeding.&lt;/p>
&lt;ol>
&lt;li>
&lt;p>Determine the current cluster version: Run the following to make sure that your Karpenter version is v0.31.x:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl get pod -A &lt;span style="color:#000;font-weight:bold">|&lt;/span> grep karpenter
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>kubectl describe pod -n karpenter karpenter-xxxxxxxxxx-xxxxx &lt;span style="color:#000;font-weight:bold">|&lt;/span> grep Image: &lt;span style="color:#000;font-weight:bold">|&lt;/span> grep v0.....
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Sample output:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>Image: public.ecr.aws/karpenter/controller:v0.31.0@sha256:d29767fa9c5c0511a3812397c932f5735234f03a7a875575422b712d15e54a77
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">Warning&lt;/h4>
v0.31.2 introduces minor changes to Karpenter so that rollback from v0.32.0 is supported. If you are coming from some other patch version of minor version v0.31.x, note that &lt;strong>only&lt;/strong> versions v0.31.4+ support rollback for v1beta1.
&lt;/div>
&lt;/li>
&lt;li>
&lt;p>Review for breaking changes: If you are already running Karpenter v0.31.x, you can skip this step. If you are running an earlier Karpenter version, you need to review the upgrade notes for each minor release.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Set environment variables for your cluster:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87">export&lt;/span> &lt;span style="color:#000">KARPENTER_NAMESPACE&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>karpenter
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87">export&lt;/span> &lt;span style="color:#000">KARPENTER_VERSION&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>v0.32.10
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87">export&lt;/span> &lt;span style="color:#000">AWS_PARTITION&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;aws&amp;#34;&lt;/span> &lt;span style="color:#8f5902;font-style:italic"># if you are not using standard partitions, you may need to configure to aws-cn / aws-us-gov&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87">export&lt;/span> &lt;span style="color:#000">CLUSTER_NAME&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">USER&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>&lt;span style="color:#4e9a06">-karpenter-demo&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87">export&lt;/span> &lt;span style="color:#000">AWS_REGION&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;us-west-2&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87">export&lt;/span> &lt;span style="color:#000">AWS_ACCOUNT_ID&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">$(&lt;/span>aws sts get-caller-identity --query Account --output text&lt;span style="color:#204a87;font-weight:bold">)&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87">export&lt;/span> &lt;span style="color:#000">KARPENTER_IAM_ROLE_ARN&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;arn:&lt;/span>&lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">AWS_PARTITION&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>&lt;span style="color:#4e9a06">:iam::&lt;/span>&lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">AWS_ACCOUNT_ID&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>&lt;span style="color:#4e9a06">:role/&lt;/span>&lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">CLUSTER_NAME&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>&lt;span style="color:#4e9a06">-karpenter&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87">export&lt;/span> &lt;span style="color:#000">CLUSTER_ENDPOINT&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">$(&lt;/span>aws eks describe-cluster --name &lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">CLUSTER_NAME&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span> --query &lt;span style="color:#4e9a06">&amp;#34;cluster.endpoint&amp;#34;&lt;/span> --output text&lt;span style="color:#204a87;font-weight:bold">)&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Apply the new Karpenter policy and assign it to the existing Karpenter role:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">TEMPOUT&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#204a87;font-weight:bold">$(&lt;/span>mktemp&lt;span style="color:#204a87;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>curl -fsSL https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.32.10/website/content/en/preview/upgrading/v1beta1-controller-policy.json &amp;gt; &lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">TEMPOUT&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">AWS_REGION&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">AWS_REGION&lt;/span>&lt;span style="color:#000;font-weight:bold">:=&lt;/span>&lt;span style="color:#000">$AWS_DEFAULT_REGION&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span> &lt;span style="color:#8f5902;font-style:italic"># use the default region if AWS_REGION isn&amp;#39;t defined&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">POLICY_DOCUMENT&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#204a87;font-weight:bold">$(&lt;/span>envsubst &amp;lt; &lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">TEMPOUT&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>&lt;span style="color:#204a87;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">POLICY_NAME&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;KarpenterControllerPolicy-&lt;/span>&lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">CLUSTER_NAME&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>&lt;span style="color:#4e9a06">-v1beta1&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">ROLE_NAME&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">CLUSTER_NAME&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>&lt;span style="color:#4e9a06">-karpenter&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">POLICY_ARN&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#204a87;font-weight:bold">$(&lt;/span>aws iam create-policy --policy-name &lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">POLICY_NAME&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span> --policy-document &lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">POLICY_DOCUMENT&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span> jq -r .Policy.Arn&lt;span style="color:#204a87;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>aws iam attach-role-policy --role-name &lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">ROLE_NAME&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span> --policy-arn &lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">POLICY_ARN&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Apply the v0.32.10 Custom Resource Definitions (CRDs):&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span> kubectl apply -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.32.10/pkg/apis/crds/karpenter.sh_provisioners.yaml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> kubectl apply -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.32.10/pkg/apis/crds/karpenter.sh_machines.yaml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> kubectl apply -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.32.10/pkg/apis/crds/karpenter.k8s.aws_awsnodetemplates.yaml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> kubectl apply -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.32.10/pkg/apis/crds/karpenter.sh_nodepools.yaml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> kubectl apply -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.32.10/pkg/apis/crds/karpenter.sh_nodeclaims.yaml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> kubectl apply -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.32.10/pkg/apis/crds/karpenter.k8s.aws_ec2nodeclasses.yaml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Upgrade Karpenter to the new version:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>helm registry &lt;span style="color:#204a87">logout&lt;/span> public.ecr.aws
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>helm upgrade --install karpenter oci://public.ecr.aws/karpenter/karpenter --version &lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">KARPENTER_VERSION&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span> --namespace karpenter --create-namespace &lt;span style="color:#4e9a06">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&lt;/span> --set serviceAccount.annotations.&lt;span style="color:#4e9a06">&amp;#34;eks\.amazonaws\.com/role-arn&amp;#34;&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">KARPENTER_IAM_ROLE_ARN&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span> &lt;span style="color:#4e9a06">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&lt;/span> --set settings.aws.defaultInstanceProfile&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>KarpenterNodeInstanceProfile-&lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">CLUSTER_NAME&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span> &lt;span style="color:#4e9a06">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&lt;/span> --set settings.clusterName&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">CLUSTER_NAME&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span> &lt;span style="color:#4e9a06">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&lt;/span> --set settings.interruptionQueue&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">CLUSTER_NAME&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span> &lt;span style="color:#4e9a06">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&lt;/span> --set controller.resources.requests.cpu&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">1&lt;/span> &lt;span style="color:#4e9a06">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&lt;/span> --set controller.resources.requests.memory&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>1Gi &lt;span style="color:#4e9a06">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&lt;/span> --set controller.resources.limits.cpu&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">1&lt;/span> &lt;span style="color:#4e9a06">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&lt;/span> --set controller.resources.limits.memory&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>1Gi &lt;span style="color:#4e9a06">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&lt;/span> --wait
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">Note&lt;/h4>
Karpenter has deprecated and moved a number of Helm values as part of the v1beta1 release. Ensure that you upgrade to the newer version of these helm values during your migration to v1beta1. You can find detail for all the settings that were moved in the &lt;a href="https://pr-35.d2bgfookghzifw.amplifyapp.com/v0.32/upgrading/v1beta1-migration/#helm-values">v1beta1 Upgrade Reference&lt;/a>.
&lt;/div>
&lt;/li>
&lt;li>
&lt;p>Install the &lt;code>karpenter-convert&lt;/code> tool to help convert the alpha Karpenter manifests to beta manifests:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>go install github.com/aws/karpenter/tools/karpenter-convert/cmd/karpenter-convert@release-v0.32.x
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Convert each AWSNodeTemplate to an EC2NodeClass. To convert your v1alpha Karpenter manifests to v1beta1, you can either manually apply changes to API components or use the &lt;a href="https://github.com/aws/karpenter/tree/release-v0.32.x/tools/karpenter-convert">&lt;code>karpenter-convert&lt;/code>&lt;/a> CLI tool. See the &lt;a href="https://pr-35.d2bgfookghzifw.amplifyapp.com/v0.32/upgrading/v1beta1-migration/#awsnodetemplate---ec2nodeclass">AWSNodeTemplate to EC2NodeClass&lt;/a> section of the Karpenter Upgrade Reference for details on how to update to Karpenter AWSNodeTemplate objects.&lt;/p>
&lt;p>For each EC2NodeClass, specify the &lt;code>$KARPENTER_NODE_ROLE&lt;/code> you will use for nodes launched with this node class. Karpenter v1beta1 &lt;a href="https://pr-35.d2bgfookghzifw.amplifyapp.com/v0.32/upgrading/v1beta1-migration/#instanceprofile">drops the need for managing your own instance profile and uses node roles directly&lt;/a>. The example below shows how to migrate your AWSNodeTemplate to an EC2NodeClass if your node role is the same role that was used when creating your cluster with the &lt;a href="https://pr-35.d2bgfookghzifw.amplifyapp.com/v0.32/getting-started/getting-started-with-karpenter/">Getting Started Guide&lt;/a>.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87">export&lt;/span> &lt;span style="color:#000">KARPENTER_NODE_ROLE&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;KarpenterNodeRole-&lt;/span>&lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">CLUSTER_NAME&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>karpenter-convert -f awsnodetemplate.yaml &lt;span style="color:#000;font-weight:bold">|&lt;/span> envsubst &amp;gt; ec2nodeclass.yaml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>When you are satisfied with your EC2NodeClass file, apply it as follows:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl apply -f ec2nodeclass.yaml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Convert each Provisioner to a NodePool. Again, either manually update your Provisioner manifests or use the &lt;a href="https://github.com/aws/karpenter/tree/release-v0.32.x/tools/karpenter-convert">&lt;code>karpenter-convert&lt;/code>&lt;/a> CLI tool:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>karpenter-convert -f provisioner.yaml &amp;gt; nodepool.yaml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>When you are satisfied with your NodePool file, apply it as follows:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl apply -f nodepool.yaml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ol>
&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">Note&lt;/h4>
The &lt;a href="https://github.com/aws/karpenter/tree/release-v0.32.x/tools/karpenter-convert">&lt;code>karpenter-convert&lt;/code>&lt;/a> CLI tool will auto-inject the previous requirement defaulting logic that was orchestrated by webhooks in alpha. This defaulting logic set things like the &lt;code>karpenter.sh/capacity-type&lt;/code>, &lt;code>karpenter.k8s.aws/instance-generation&lt;/code>, &lt;code>karpenter.k8s.aws/instance-category&lt;/code>, etc. These defaults are no longer set by the webhooks and need to be explicitly defined by the user in the NodePool.
&lt;/div>
&lt;ol start="12">
&lt;li>
&lt;p>Roll over nodes: With the new NodePool yaml in hand, there are several ways you can begin to roll over your nodes to use the new NodePool:&lt;/p>
&lt;ol>
&lt;li>
&lt;p>Periodic Rolling with &lt;a href="https://pr-35.d2bgfookghzifw.amplifyapp.com/v0.32/concepts/disruption/#automated-methods">Expiration&lt;/a>:&lt;/p>
&lt;ul>
&lt;li>Add the following taint to the old Provisioner: &lt;code>karpenter.sh/legacy=true:NoSchedule&lt;/code>&lt;/li>
&lt;li>Set the Expiration in your Provisioner to a small value like &lt;code>ttlSecondsUntilExpired: 300&lt;/code> to mark all nodes older than 5 minutes as expired. &lt;em>Please note that in beta APIs, this is the same as &lt;code>disruption.expireAfter&lt;/code>&lt;/em>&lt;/li>
&lt;li>Watch as replacement nodes are launched from the new NodePool resource.&lt;/li>
&lt;/ul>
&lt;p>Because Karpenter will only roll one node at a time, it may take some time for Karpenter to completely roll all nodes under a Provisioner.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Forced Deletion: For each Provisioner in your cluster:&lt;/p>
&lt;ul>
&lt;li>Delete the old Provisioner with: &lt;code>kubectl delete provisioner &amp;lt;provisioner-name&amp;gt; --cascade=foreground&lt;/code>&lt;/li>
&lt;li>Wait as Karpenter deletes all the Provisioner&amp;rsquo;s nodes. All nodes will drain simultaneously. New nodes are launched after the old ones have been drained.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>Manual Rolling: For each Provisioner in your cluster:&lt;/p>
&lt;ul>
&lt;li>Add the following taint to the old Provisioner: &lt;code>karpenter.sh/legacy=true:NoSchedule&lt;/code>&lt;/li>
&lt;li>For all the nodes owned by the Provisioner, delete one at a time as follows: &lt;code>kubectl delete node &amp;lt;node-name&amp;gt;&lt;/code>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ol>
&lt;/li>
&lt;li>
&lt;p>Update workload labels: Old alpha labels (&lt;code>karpenter.sh/do-not-consolidate&lt;/code> and &lt;code>karpenter.sh/do-not-evict&lt;/code>) &lt;a href="https://pr-35.d2bgfookghzifw.amplifyapp.com/v0.32/upgrading/v1beta1-migration/#annotations-labels-and-status-conditions">are deprecated&lt;/a>, but will not be dropped until Karpenter v1. However, you can begin updating those labels at any time with &lt;code>karpenter.sh/do-not-disrupt&lt;/code>.&lt;/p>
&lt;p>Any pods that specified a &lt;code>karpenter.sh/provisioner-name:DoesNotExist&lt;/code> requirement also need to add a &lt;code>karpenter.sh/nodepool:DoesNotExist&lt;/code> requirement to ensure that the pods continue to not schedule to nodes unmanaged by Karpenter while migrating to v1beta1.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Ensure that there are no more Machine resources on your cluster. You should see &lt;code>No resources found&lt;/code> when running the following command:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span> kubectl get machines
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Once there are no more Machines on your cluster, it is safe to delete the other Karpenter configuration resources. You can do so by running the following commands:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl delete provisioners --all
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>kubectl delete awsnodetemplates --all
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Remove the alpha instance profile(s). If you were just using the InstanceProfile deployed through the &lt;a href="https://pr-35.d2bgfookghzifw.amplifyapp.com/v0.32/getting-started/getting-started-with-karpenter/">Getting Started Guide&lt;/a>, delete the &lt;code>KarpenterNodeInstanceProfile&lt;/code> section from the CloudFormation. Alternatively, if you want to remove the instance profile manually, you can run the following command&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">ROLE_NAME&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;KarpenterNodeRole-&lt;/span>&lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">CLUSTER_NAME&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">INSTANCE_PROFILE_NAME&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;KarpenterNodeInstanceProfile-&lt;/span>&lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">CLUSTER_NAME&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>aws iam remove-role-from-instance-profile --instance-profile-name &lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">INSTANCE_PROFILE_NAME&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span> --role-name &lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">ROLE_NAME&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>aws iam delete-instance-profile --instance-profile-name &lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">INSTANCE_PROFILE_NAME&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Finally, remove the alpha policy from the controller role: This will remove any remaining permissions from the alpha APIs. You can orchestrate the removal of this policy with the following command:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">ROLE_NAME&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">CLUSTER_NAME&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>&lt;span style="color:#4e9a06">-karpenter&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">POLICY_NAME&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;KarpenterControllerPolicy-&lt;/span>&lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">CLUSTER_NAME&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">POLICY_ARN&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#204a87;font-weight:bold">$(&lt;/span>aws iam list-policies --query &lt;span style="color:#4e9a06">&amp;#34;Policies[?PolicyName==&amp;#39;&lt;/span>&lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">POLICY_NAME&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>&lt;span style="color:#4e9a06">&amp;#39;].Arn&amp;#34;&lt;/span> --output text&lt;span style="color:#204a87;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>aws iam detach-role-policy --role-name &lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">ROLE_NAME&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span> --policy-arn &lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">POLICY_ARN&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ol>
&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">Note&lt;/h4>
If you are using some IaC for managing your policy documents attached to the controller role, you may want to attach this new beta policy to the same CloudFormation stack. You can do this by removing the old alpha policy, ensuring that the Karpenter controller continues to work with just the beta policy, and then updating the stack to contain the new beta policy rather than having that policy managed separately.
&lt;/div>
&lt;h2 id="changelog">Changelog&lt;/h2>
&lt;h3 id="provisioner---nodepool">Provisioner -&amp;gt; NodePool&lt;/h3>
&lt;p>Karpenter v1beta1 moves almost all top-level fields under the &lt;code>NodePool&lt;/code> template field. Similar to Deployments (which template Pods that are orchestrated by the deployment controller), Karpenter NodePool templates NodeClaims (that are orchestrated by the Karpenter controller). Here is an example of a &lt;code>Provisioner&lt;/code> (v1alpha5) migrated to a &lt;code>NodePool&lt;/code> (v1beta1):&lt;/p>
&lt;p>Note that:&lt;/p>
&lt;ul>
&lt;li>The &lt;code>Limits&lt;/code> and &lt;code>Weight&lt;/code> fields sit outside of the template section. The &lt;code>Labels&lt;/code> and &lt;code>Annotations&lt;/code> fields from the Provisioner are now under the &lt;code>spec.template.metadata&lt;/code> section. All other fields including requirements, taints, kubelet, and so on, are specified under the &lt;code>spec.template.spec&lt;/code> section.&lt;/li>
&lt;li>Support for &lt;code>spec.template.spec.kubelet.containerRuntime&lt;/code> has been dropped. If you are using EKS 1.23 you should upgrade to containerd before using Karpenter v0.32.0, as this field in the kubelet block of the NodePool is not supported. EKS 1.24+ only supports containerd as a supported runtime.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Provisioner example (v1alpha)&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">apiVersion&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">karpenter.sh/v1alpha5&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">kind&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">Provisioner&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">...&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">spec&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">providerRef&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">name&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">default&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">annotations&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">custom-annotation&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">custom-value&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">labels&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">team&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">team-a&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">custom-label&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">custom-value&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">requirements&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>- &lt;span style="color:#204a87;font-weight:bold">key&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">karpenter.k8s.aws/instance-generation&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">operator&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">Gt&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">values&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">[&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;3&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">]&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>- &lt;span style="color:#204a87;font-weight:bold">key&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">karpenter.k8s.aws/instance-category&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">operator&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">In&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">values&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">[&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;c&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#34;m&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#34;r&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">]&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>- &lt;span style="color:#204a87;font-weight:bold">key&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">karpenter.sh/capacity-type&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">operator&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">In&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">values&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">[&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;spot&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">]&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">taints&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>- &lt;span style="color:#204a87;font-weight:bold">key&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">example.com/special-taint&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">value&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#34;true&amp;#34;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">effect&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">NoSchedule&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">startupTaints&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>- &lt;span style="color:#204a87;font-weight:bold">key&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">example.com/another-taint&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">value&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#34;true&amp;#34;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">effect&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">NoSchedule&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">kubelet&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">systemReserved&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">cpu&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">100m&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">memory&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">100Mi&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">ephemeral-storage&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">1Gi&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">maxPods&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#0000cf;font-weight:bold">20&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">limits&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">resources&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">cpu&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#0000cf;font-weight:bold">1000&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">memory&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">1000Gi&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">weight&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#0000cf;font-weight:bold">50&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>NodePool example (v1beta1)&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">apiVersion&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">karpenter.sh/v1beta1&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">kind&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">NodePool&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#000">...&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">spec&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">template&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">metadata&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">annotations&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">custom-annotation&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">custom-value&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">labels&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">team&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">team-a&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">custom-label&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">custom-value&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">spec&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">requirements&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>- &lt;span style="color:#204a87;font-weight:bold">key&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">karpenter.k8s.aws/instance-generation&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">operator&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">Gt&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">values&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">[&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;3&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">]&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>- &lt;span style="color:#204a87;font-weight:bold">key&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">karpenter.k8s.aws/instance-category&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">operator&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">In&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">values&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">[&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;c&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#34;m&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#34;r&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">]&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>- &lt;span style="color:#204a87;font-weight:bold">key&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">karpenter.sh/capacity-type&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">operator&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">In&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">values&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">[&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;spot&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">]&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">taints&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>- &lt;span style="color:#204a87;font-weight:bold">key&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">example.com/special-taint&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">value&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#34;true&amp;#34;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">effect&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">NoSchedule&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">startupTaints&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>- &lt;span style="color:#204a87;font-weight:bold">key&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">example.com/another-taint&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">value&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#34;true&amp;#34;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">effect&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">NoSchedule&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">kubelet&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">systemReserved&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">cpu&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">100m&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">memory&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">100Mi&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">ephemeral-storage&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">1Gi&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">maxPods&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#0000cf;font-weight:bold">20&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">limits&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">cpu&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#0000cf;font-weight:bold">1000&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">memory&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">1000Gi&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">weight&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#0000cf;font-weight:bold">50&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="provider">Provider&lt;/h4>
&lt;p>The Karpenter &lt;code>spec.provider&lt;/code> field has been deprecated since version v0.7.0 and is now removed in the new &lt;code>NodePool&lt;/code> resource. Any of the fields that you could specify within the &lt;code>spec.provider&lt;/code> field are now available in the separate &lt;code>NodeClass&lt;/code> resource.&lt;/p>
&lt;p>&lt;strong>Provider example (v1alpha)&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">apiVersion&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">karpenter.sh/v1alpha5&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">kind&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">Provisioner&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#000">...&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">spec&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">provider&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">amiFamily&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">Bottlerocket&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">tags&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">test-tag&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">test-value&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>Nodepool example (v1beta1)&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">apiVersion&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">karpenter.sh/v1beta1&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">kind&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">NodePool&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#000">...&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">nodeClassRef&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">apiVersion&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">karpenter.k8s.aws/v1beta1&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">kind&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">EC2NodeClass&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">name&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">default&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>EC2NodeClass example (v1beta1)&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">apiVersion&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">karpenter.k8s.aws/v1beta1&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">kind&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">EC2NodeClass&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">metadata&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">name&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">default&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">spec&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">amiFamily&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">Bottlerocket&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">tags&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">test-tag&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">test-value&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="ttlsecondsafterempty">TTLSecondsAfterEmpty&lt;/h4>
&lt;p>The Karpenter &lt;code>spec.ttlSecondsAfterEmpty&lt;/code> field has been removed in favor of a &lt;code>consolidationPolicy&lt;/code> and &lt;code>consolidateAfter&lt;/code> field.&lt;/p>
&lt;p>As part of the v1beta1 migration, Karpenter has chosen to collapse the concepts of emptiness and underutilization into a single concept: &lt;code>consolidation&lt;/code>.
You can now define the types of consolidation that you want to support in your &lt;code>consolidationPolicy&lt;/code> field.
The current values for this field are &lt;code>WhenEmpty&lt;/code> or &lt;code>WhenUnderutilized&lt;/code> (defaulting to &lt;code>WhenUnderutilized&lt;/code> if not specified).
If specifying &lt;code>WhenEmpty&lt;/code>, you can define how long you wish to wait for consolidation to act on your empty nodes by tuning the &lt;code>consolidateAfter&lt;/code> parameter.
This field works the same as the &lt;code>ttlSecondsAfterEmpty&lt;/code> field except this field now accepts either of the following values:&lt;/p>
&lt;ul>
&lt;li>&lt;code>Never&lt;/code>: This disables empty consolidation.&lt;/li>
&lt;li>Duration String (e.g. “10m”, “1s”): This enables empty consolidation for the time specified.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>ttlSecondsAfterEmpty example (v1alpha)&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">apiVersion&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">karpenter.sh/v1alpha5&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">kind&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">Provisioner&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#000">...&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">spec&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">ttlSecondsAfterEmpty&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#0000cf;font-weight:bold">120&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>consolidationPolicy and consolidateAfter examples (v1beta1)&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">apiVersion&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">karpenter.sh/v1beta1&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">kind&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">NodePool&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#000">...&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">spec&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">disruption&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">consolidationPolicy&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">WhenEmpty&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">consolidateAfter&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">2m&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="consolidation">Consolidation&lt;/h4>
&lt;p>The Karpenter &lt;code>spec.consolidation&lt;/code> block has also been shifted under &lt;code>consolidationPolicy&lt;/code>. If you were previously enabling Karpenter’s consolidation feature for underutilized nodes using the &lt;code>consolidation.enabled&lt;/code> flag, you now enable consolidation through the &lt;code>consolidationPolicy&lt;/code>.&lt;/p>
&lt;p>&lt;strong>consolidation enabled example (v1alpha)&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">apiVersion&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">karpenter.sh/v1alpha5&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">kind&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">Provisioner&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#000">...&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">spec&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">consolidation&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">enabled&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">true&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>consolidationPolicy WhenUnderutilized example (v1beta1)&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">apiVersion&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">karpenter.sh/v1beta1&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">kind&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">NodePool&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#000">...&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">spec&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">disruption&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">consolidationPolicy&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">WhenUnderutilized&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;blockquote>
&lt;p>Note: You currently can’t set the &lt;code>consolidateAfter&lt;/code> field when specifying &lt;code>consolidationPolicy: WhenUnderutilized&lt;/code>. Karpenter will use a 15s &lt;code>consolidateAfter&lt;/code> runtime default.&lt;/p>
&lt;/blockquote>
&lt;h4 id="ttlsecondsuntilexpired">TTLSecondsUntilExpired&lt;/h4>
&lt;p>The Karpenter &lt;code>spec.ttlSecondsUntilExpired&lt;/code> field has been removed in favor of the &lt;code>expireAfter&lt;/code> field inside of the &lt;code>disruption&lt;/code> block. This field works the same as it did before except this field now accepts either of the following values:&lt;/p>
&lt;ul>
&lt;li>&lt;code>Never&lt;/code>: This disables expiration.&lt;/li>
&lt;li>Duration String (e.g. “10m”, “1s”): This enables expiration for the time specified.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>consolidation ttlSecondsUntilExpired example (v1alpha)&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">apiVersion&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">karpenter.sh/v1alpha5&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">kind&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">Provisioner&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#000">...&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">spec&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">ttlSecondsUntilExpired&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#0000cf;font-weight:bold">2592000&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#8f5902;font-style:italic"># 30 Days = 60 * 60 * 24 * 30 Seconds&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>consolidationPolicy WhenUnderutilized example (v1beta1)&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">apiVersion&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">karpenter.sh/v1beta1&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">kind&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">NodePool&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#000">...&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">spec&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">disruption&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">expireAfter&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">720h&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#8f5902;font-style:italic"># 30 days = 30 * 24 Hours&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="defaults">Defaults&lt;/h4>
&lt;p>Karpenter now statically defaults some fields in the v1beta1 if they are not specified when applying the &lt;code>NodePool&lt;/code> configuration. The following fields are defaulted if unspecified.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Field&lt;/th>
&lt;th>Default&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>spec.disruption&lt;/td>
&lt;td>{&amp;ldquo;consolidationPolicy: WhenUnderutilized&amp;rdquo;, expireAfter: &amp;ldquo;720h&amp;rdquo;}&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>spec.disruption.consolidationPolicy&lt;/td>
&lt;td>WhenUnderutilized&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>spec.disruption.expireAfter&lt;/td>
&lt;td>720h&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h4 id="spectemplatespecrequirements-defaults-dropped">spec.template.spec.requirements Defaults Dropped&lt;/h4>
&lt;p>Karpenter v1beta1 drops the defaulting logic for the node requirements that were shipped by default with Provisioners in v1alpha5. Previously, Karpenter would create dynamic defaulting in the following cases. If multiple of these cases were satisfied, those default requirements would be combined:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>If you didn&amp;rsquo;t specify any instance type requirement:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">spec&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">requirements&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>- &lt;span style="color:#204a87;font-weight:bold">key&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">karpenter.k8s.aws/instance-category&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">operator&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">In&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">values&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">[&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;c&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#34;m&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#34;r&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">]&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>- &lt;span style="color:#204a87;font-weight:bold">key&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">karpenter.k8s.aws/instance-generation&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">operator&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">In&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">values&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">[&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;2&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">]&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>If you didn’t specify any capacity type requirement (&lt;code>karpenter.sh/capacity-type&lt;/code>):&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">spec&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">requirements&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>- &lt;span style="color:#204a87;font-weight:bold">key&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">karpenter.sh/capacity-type&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">operator&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">In&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">values&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">[&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;on-demand&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">]&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>If you didn’t specify any OS requirement (&lt;code>kubernetes.io/os&lt;/code>):&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">spec&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">requirements&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>- &lt;span style="color:#204a87;font-weight:bold">key&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">kubernetes.io/os&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">operator&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">In&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">values&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">[&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;linux&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">]&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>If you didn’t specify any architecture requirement (&lt;code>kubernetes.io/arch&lt;/code>):&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">spec&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">requirements&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>- &lt;span style="color:#204a87;font-weight:bold">key&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">kubernetes.io/arch&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">operator&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">In&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">values&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">[&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;amd64&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">]&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ul>
&lt;p>If you were previously relying on this defaulting logic, you will now need to explicitly specify these requirements in your &lt;code>NodePool&lt;/code>.&lt;/p>
&lt;h3 id="awsnodetemplate---ec2nodeclass">AWSNodeTemplate -&amp;gt; EC2NodeClass&lt;/h3>
&lt;p>To configure AWS-specific settings, AWSNodeTemplate (v1alpha) is being changed to EC2NodeClass (v1beta1). Below are ways in which you can update your manifests for the new version.&lt;/p>
&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">Note&lt;/h4>
Tag-based &lt;a href="https://karpenter.sh/v0.31/concepts/node-templates/#ami-selection">AMI Selection&lt;/a> is no longer supported for the new v1beta1 &lt;code>EC2NodeClass&lt;/code> API. That feature allowed users to tag their AMIs using EC2 tags to express “In” requirements on selected. We recommend using different NodePools with different EC2NodeClasses with your various AMI requirement constraints to appropriately constrain your AMIs based on the instance types you’ve selected for a given NodePool.
&lt;/div>
&lt;div class="alert alert-primary" role="alert">
&lt;h4 class="alert-heading">Note&lt;/h4>
Karpenter will now tag EC2 instances with their node name instead of with &lt;code>karpenter.sh/provisioner-name: $PROVISIONER_NAME&lt;/code>. This makes it easier to map nodes to instances if you are not currently using &lt;a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-naming.html">resource-based naming&lt;/a>.
&lt;/div>
&lt;h4 id="instanceprofile">InstanceProfile&lt;/h4>
&lt;p>The Karpenter &lt;code>spec.instanceProfile&lt;/code> field has been removed from the EC2NodeClass in favor of the &lt;code>spec.role&lt;/code> field. Karpenter is also removing support for the &lt;code>defaultInstanceProfile&lt;/code> specified globally in the karpenter-global-settings, making the &lt;code>spec.role&lt;/code> field required for all EC2NodeClasses.&lt;/p>
&lt;p>Karpenter will now auto-generate the instance profile in your EC2NodeClass, given the role that you specify. To find the role, type:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87">export&lt;/span> &lt;span style="color:#000">INSTANCE_PROFILE_NAME&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>KarpenterNodeInstanceProfile-bob-karpenter-demo
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>aws iam get-instance-profile --instance-profile-name &lt;span style="color:#000">$INSTANCE_PROFILE_NAME&lt;/span> --query &lt;span style="color:#4e9a06">&amp;#34;InstanceProfile.Roles[0].RoleName&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>KarpenterNodeRole-bob-karpenter-demo
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>instanceProfile example (v1alpha)&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">apiVersion&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">karpenter.k8s.aws/v1alpha1&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">kind&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">AWSNodeTemplate&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#000">...&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">spec&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">instanceProfile&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">KarpenterNodeInstanceProfile-karpenter-demo&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>role example (v1beta1)&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">apiVersion&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">karpenter.k8s.aws/v1beta1&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">kind&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">EC2NodeClass&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#000">...&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">spec&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">role&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">KarpenterNodeRole-karpenter-demo&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="subnetselector-securitygroupselector-and-amiselector">SubnetSelector, SecurityGroupSelector, and AMISelector&lt;/h4>
&lt;p>Karpenter’s &lt;code>spec.subnetSelector&lt;/code>, &lt;code>spec.securityGroupSelector&lt;/code>, and &lt;code>spec.amiSelector&lt;/code> fields have been modified to support multiple terms and to first-class keys like id and name. If using comma-delimited strings in your &lt;code>tag&lt;/code>, &lt;code>id&lt;/code>, or &lt;code>name&lt;/code> values, you may need to create separate terms for the new fields.&lt;/p>
&lt;p>&lt;strong>subnetSelector example (v1alpha)&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">apiVersion&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">karpenter.k8s.aws/v1alpha1&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">kind&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">AWSNodeTemplate&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#000">...&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">spec&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">subnetSelector&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">karpenter.sh/discovery&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">karpenter-demo&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>SubnetSelectorTerms.tags example (v1beta1)&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">apiVersion&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">karpenter.k8s.aws/v1beta1&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">kind&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">EC2NodeClass&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#000">...&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">spec&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">subnetSelectorTerms&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>- &lt;span style="color:#204a87;font-weight:bold">tags&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">karpenter.sh/discovery&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">karpenter-demo&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>subnetSelector example (v1alpha)&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">apiVersion&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">karpenter.k8s.aws/v1alpha1&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">kind&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">AWSNodeTemplate&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#000">...&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">spec&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">subnetSelector&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">aws::ids&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">subnet-123,subnet-456&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>subnetSelectorTerms.id example (v1beta1)&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">apiVersion&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">karpenter.k8s.aws/v1beta1&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">kind&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">EC2NodeClass&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#000">...&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">spec&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">subnetSelectorTerms&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>- &lt;span style="color:#204a87;font-weight:bold">id&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">subnet-123&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>- &lt;span style="color:#204a87;font-weight:bold">id&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">subnet-456&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>securityGroupSelector example (v1alpha)&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">apiVersion&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">karpenter.k8s.aws/v1alpha1&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">kind&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">AWSNodeTemplate&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#000">...&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">spec&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">securityGroupSelector&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">karpenter.sh/discovery&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">karpenter-demo&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>securityGroupSelectorTerms.tags example (v1beta1)&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">apiVersion&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">compute.k8s.aws/v1beta1&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">kind&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">EC2NodeClass&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#000">...&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">spec&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">securityGroupSelectorTerms&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>- &lt;span style="color:#204a87;font-weight:bold">tags&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">karpenter.sh/discovery&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">karpenter-demo&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>securityGroupSelector example (v1alpha)&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">apiVersion&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">karpenter.k8s.aws/v1alpha1&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">kind&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">AWSNodeTemplate&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#000">...&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">spec&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">securityGroupSelector&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">aws::ids&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">sg-123, sg-456&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>securityGroupSelectorTerms.id example (v1beta1)&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">apiVersion&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">compute.k8s.aws/v1beta1&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">kind&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">EC2NodeClass&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#000">...&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">spec&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">securityGroupSelectorTerms&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>- &lt;span style="color:#204a87;font-weight:bold">id&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">sg-123&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>- &lt;span style="color:#204a87;font-weight:bold">id&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">sg-456&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>amiSelector example (v1alpha)&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">apiVersion&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">karpenter.k8s.aws/v1alpha1&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">kind&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">AWSNodeTemplate&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#000">...&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">spec&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">amiSelector&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">karpenter.sh/discovery&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">karpenter-demo&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>amiSelectorTerms.tags example (v1beta1)&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">apiVersion&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">compute.k8s.aws/v1beta1&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">kind&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">EC2NodeClass&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#000">...&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">spec&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">amiSelectorTerms&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>- &lt;span style="color:#204a87;font-weight:bold">tags&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">karpenter.sh/discovery&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">karpenter-demo&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>amiSelector example (v1alpha)&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">apiVersion&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">karpenter.k8s.aws/v1alpha1&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">kind&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">AWSNodeTemplate&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#000">...&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">spec&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">amiSelector&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">aws::ids&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">ami-123,ami-456&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>amiSelectorTerms example (v1beta1)&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">apiVersion&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">compute.k8s.aws/v1beta1&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">kind&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">EC2NodeClass&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#000">...&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">spec&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">amiSelectorTerms&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>- &lt;span style="color:#204a87;font-weight:bold">id&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">ami-123&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>- &lt;span style="color:#204a87;font-weight:bold">id&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">ami-456&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>amiSelector example (v1alpha)&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">apiVersion&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">karpenter.k8s.aws/v1alpha1&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">kind&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">AWSNodeTemplate&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#000">...&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">spec&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">amiSelector&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">aws::name&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">my-name1,my-name2&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">aws::owners&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#0000cf;font-weight:bold">123456789&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>&lt;span style="color:#000">amazon&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>amiSelectorTerms.name example (v1beta1)&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">apiVersion&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">compute.k8s.aws/v1beta1&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">kind&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">EC2NodeClass&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#000">...&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">spec&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">amiSelectorTerms&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>- &lt;span style="color:#204a87;font-weight:bold">name&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">my-name1&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">owner&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#34;123456789&amp;#34;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>- &lt;span style="color:#204a87;font-weight:bold">name&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">my-name2&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">owner&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#34;123456789&amp;#34;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>- &lt;span style="color:#204a87;font-weight:bold">name&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">my-name1&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">owner&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">amazon&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>- &lt;span style="color:#204a87;font-weight:bold">name&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">my-name2&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">owner&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">amazon&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="launchtemplatename">LaunchTemplateName&lt;/h4>
&lt;p>The &lt;code>spec.launchTemplateName&lt;/code> field for referencing unmanaged launch templates within Karpenter has been removed.
Find a discussion of the decision to remove &lt;code>spec.launchTemplateName&lt;/code>, see &lt;a href="https://github.com/aws/karpenter/blob/main/designs/unmanaged-launch-template-removal.md">RFC: Unmanaged LaunchTemplate Removal&lt;/a>.&lt;/p>
&lt;h4 id="amifamily">AMIFamily&lt;/h4>
&lt;p>The AMIFamily field is now required. If you were previously not specifying the AMIFamily field, having Karpenter default the AMIFamily to AL2, you will now have to specify AL2 explicitly.&lt;/p>
&lt;h3 id="annotations-labels-and-status-conditions">Annotations, Labels, and Status Conditions&lt;/h3>
&lt;p>Karpenter v1beta1 introduces changes to some common labels, annotations, and status conditions that are present in the project. The tables below lists the v1alpha5 values and their v1beta1 equivalent.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Karpenter Labels&lt;/th>
&lt;th>&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;strong>v1alpha5&lt;/strong>&lt;/td>
&lt;td>&lt;strong>v1beta1&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>karpenter.sh/provisioner-name&lt;/td>
&lt;td>karpenter.sh/nodepool&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>karpenter.k8s.aws/instance-pods&lt;/td>
&lt;td>&lt;strong>Dropped&lt;/strong>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;blockquote>
&lt;p>&lt;strong>Note&lt;/strong>: Previously, you could use the &lt;code>karpenter.sh/provisioner-name:DoesNotExist&lt;/code> requirement on pods to specify that pods should schedule to nodes unmanaged by Karpenter. With the addition of the &lt;code>karpenter.sh/nodepool&lt;/code> label key, you now need to specify the &lt;code>karpenter.sh/nodepool:DoesNotExist&lt;/code> requirement on these pods as well to ensure they don&amp;rsquo;t schedule to nodes provisioned by the new NodePool resources.&lt;/p>
&lt;/blockquote>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Karpenter Annotations&lt;/th>
&lt;th>&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;strong>v1alpha5&lt;/strong>&lt;/td>
&lt;td>&lt;strong>v1beta1&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>karpenter.sh/provisioner-hash&lt;/td>
&lt;td>karpenter.sh/nodepool-hash&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>karpenter.k8s.aws/nodetemplate-hash&lt;/td>
&lt;td>karpenter.k8s.aws/ec2nodeclass-hash&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>karpenter.sh/do-not-consolidate&lt;/td>
&lt;td>karpenter.sh/do-not-disrupt&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>karpenter.sh/do-not-evict&lt;/td>
&lt;td>karpenter.sh/do-not-disrupt&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;blockquote>
&lt;p>&lt;strong>Note&lt;/strong>: Karpenter dropped the &lt;code>karpenter.sh/do-not-consolidate&lt;/code> annotation in favor of the &lt;code>karpenter.sh/do-not-disrupt&lt;/code> annotation on nodes. This annotation specifies that no voluntary disruption should be performed by Karpenter against this node.&lt;/p>
&lt;/blockquote>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>StatusCondition Types&lt;/th>
&lt;th>&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;strong>v1alpha5&lt;/strong>&lt;/td>
&lt;td>&lt;strong>v1beta1&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>MachineLaunched&lt;/td>
&lt;td>Launched&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>MachineRegistered&lt;/td>
&lt;td>Registered&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>MachineInitialized&lt;/td>
&lt;td>Initialized&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>MachineEmpty&lt;/td>
&lt;td>Empty&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>MachineExpired&lt;/td>
&lt;td>Expired&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>MachineDrifted&lt;/td>
&lt;td>Drifted&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="iam-controller-permissions">IAM Controller Permissions&lt;/h3>
&lt;p>v1beta1 introduces changes to the IAM permissions assigned to the Karpenter controller policy used when deploying Karpenter to your cluster with &lt;a href="https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/setting-up-enable-IAM.html">IRSA&lt;/a> or &lt;a href="https://docs.aws.amazon.com/eks/latest/userguide/pod-identities.html">EKS Pod Identity&lt;/a>.&lt;/p>
&lt;p>You can see a full example of the v1beta1 required controller permissions by viewing the &lt;a href="https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.32.10/website/content/en/preview/upgrading/v1beta1-controller-policy.json">v1beta1 Controller Policy&lt;/a>.&lt;/p>
&lt;p>Additionally, read more detail about the full set of permissions assigned to the Karpenter controller policy in the &lt;a href="https://pr-35.d2bgfookghzifw.amplifyapp.com/v0.32/reference/cloudformation/">CloudFormation Reference Guide&lt;/a>.&lt;/p>
&lt;h4 id="updating-tag-based-permissions">Updating Tag-Based Permissions&lt;/h4>
&lt;p>Since Karpenter v1beta1 introduces changes to custom resource, label, and annotation naming, this also changes the tag keys that Karpenter uses to tag instances, volumes launch templates, and any other resources that Karpenter deploys and manages.&lt;/p>
&lt;p>By default, when using the &lt;a href="https://pr-35.d2bgfookghzifw.amplifyapp.com/v0.32/getting-started/getting-started-with-karpenter/">Karpenter Getting Started Guide&lt;/a> to setup Karpenter on your cluster, you will deploy an IAM policy that scopes Karpenter&amp;rsquo;s permissions based on tag keys and values using &lt;a href="https://aws.amazon.com/identity/attribute-based-access-control/">ABAC&lt;/a>. Any part of the Karpenter alpha controller policy which previously referenced &lt;code>aws:RequestTag:karpenter.sh/provisioner-name&lt;/code> or &lt;code>aws:ResourceTag:karpenter.sh/provisioner-name&lt;/code> is now updated in v1beta1 to be &lt;code>aws:RequestTag:karpenter.sh/nodepool&lt;/code> and &lt;code>aws:ResourceTag:karpenter.sh/nodepool&lt;/code>.&lt;/p>
&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">Note&lt;/h4>
While migrating between alpha and beta, you will need to maintain the old tag permissions as well as the new permissions. You can remove the old tag key permissions from the controller policy when you have fully migrated to beta resources. This process for maintaining both sets of permissions while migrating is also mentioned in greater detail in the &lt;a href="#upgrade-procedure">Upgrade Procedure&lt;/a> shown above.
&lt;/div>
&lt;h4 id="updating-iam-instance-profile-permissions">Updating IAM Instance Profile Permissions&lt;/h4>
&lt;p>Additionally, starting in v1beta1, Karpenter removes the need for you to manage your own instance profiles used to launch EC2 instances, allowing you to only specify the role that you want assigned to your instances in the &lt;code>spec.role&lt;/code> of the &lt;code>EC2NodeClass&lt;/code>. When you do this, Karpenter will generate and manage an instance profile on your behalf.&lt;/p>
&lt;p>To enable this functionality, you need to add &lt;code>iam:&lt;/code> permissions that give Karpenter permission to generate and managed instance profiles. These permissions include &lt;code>iam:CreateInstanceProfile&lt;/code>, &lt;code>iam:TagInstanceProfile&lt;/code>, &lt;code>iam:AddRoleToInstanceProfile&lt;/code>, &lt;code>iam:RemoveRoleFromInstanceProfile&lt;/code>, &lt;code>iam:DeleteInstanceProfile&lt;/code>, and &lt;code>iam:GetInstanceProfile&lt;/code>. Each of these permissions is scoped down to only operate on instance profiles generated from a single Karpenter instance on a single Karpenter cluster using &lt;a href="https://aws.amazon.com/identity/attribute-based-access-control/">ABAC&lt;/a>.&lt;/p>
&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">Note&lt;/h4>
These &lt;code>iam:&lt;/code> permissions are not required if you do not intend to use the &lt;code>spec.role&lt;/code> field to enable the managed instance profile feature. Instead, you can use the &lt;code>spec.instanceProfile&lt;/code> field to tell Karpenter to use an unmanaged instance profile explicitly. Note that this means that you have to manually provision and manage the instance profile yourself as you did in alpha.
&lt;/div>
&lt;h3 id="metrics">Metrics&lt;/h3>
&lt;p>The following table shows v1alpha5 metrics and the v1beta1 version of each metric. All metrics on this table will exist simultaneously, while both v1alpha5 and v1beta1 are supported within the same version.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>&lt;strong>v1alpha5 Metric Name&lt;/strong>&lt;/th>
&lt;th>&lt;strong>v1beta1 Metric Name&lt;/strong>&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>karpenter_machines_created&lt;/td>
&lt;td>karpenter_nodeclaims_created&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>karpenter_machines_disrupted&lt;/td>
&lt;td>karpenter_nodeclaims_disrupted&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>karpenter_machines_drifted&lt;/td>
&lt;td>karpenter_nodeclaims_drifted&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>karpenter_machines_initialized&lt;/td>
&lt;td>karpenter_nodeclaims_initialized&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>karpenter_machines_launched&lt;/td>
&lt;td>karpenter_nodeclaims_launched&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>karpenter_machines_registered&lt;/td>
&lt;td>karpenter_nodeclaims_registered&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>karpenter_machines_terminated&lt;/td>
&lt;td>karpenter_nodeclaims_terminated&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>karpenter_provisioners_limit&lt;/td>
&lt;td>karpenter_nodepools_limit&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>karpenter_provisioners_usage&lt;/td>
&lt;td>karpenter_nodepools_usage&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>karpenter_deprovisioning_evaluation_duration_seconds&lt;/td>
&lt;td>karpenter_disruption_evaluation_duration_seconds&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>karpenter_deprovisioning_eligible_machines&lt;/td>
&lt;td>karpenter_disruption_eligible_nodeclaims&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>karpenter_deprovisioning_replacement_machine_initialized_seconds&lt;/td>
&lt;td>karpenter_disruption_replacement_nodeclaims_initialized_seconds&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>karpenter_deprovisioning_replacement_machine_launch_failure_counter&lt;/td>
&lt;td>karpenter_disruption_replacement_nodeclaims_launch_failed_total&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>karpenter_deprovisioning_actions_performed&lt;/td>
&lt;td>karpenter_disruption_actions_performed_total&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>karpenter_deprovisioning_consolidation_timeouts&lt;/td>
&lt;td>karpenter_disruption_consolidation_timeouts_total&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>karpenter_nodes_leases_deleted&lt;/td>
&lt;td>karpenter_leases_deleted&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>karpenter_provisioners_usage_pct&lt;/td>
&lt;td>&lt;strong>Dropped&lt;/strong>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>In addition to these metrics, the MachineNotFound error returned by the &lt;code>karpenter_cloudprovider_errors_total&lt;/code> values in the error label has been changed to &lt;code>NodeClaimNotFound&lt;/code>. This is agnostic to the version of the API (Machine or NodeClaim) that actually owns the instance.&lt;/p>
&lt;h3 id="global-settings">Global Settings&lt;/h3>
&lt;p>The v1beta1 specification removes the &lt;code>karpenter-global-settings&lt;/code> ConfigMap in favor of setting all Karpenter configuration using environment variables. Along, with this change, Karpenter has chosen to remove certain global variables that can be configured with more specificity in the EC2NodeClass . These values are marked as removed below.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>&lt;strong>&lt;code>karpenter-global-settings&lt;/code> ConfigMap Key&lt;/strong>&lt;/th>
&lt;th>&lt;strong>Environment Variable&lt;/strong>&lt;/th>
&lt;th>&lt;strong>CLI Argument&lt;/strong>&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>batchMaxDuration&lt;/td>
&lt;td>BATCH_MAX_DURATION&lt;/td>
&lt;td>&amp;ndash;batch-max-duration&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>batchIdleDuration&lt;/td>
&lt;td>BATCH_IDLE_DURATION&lt;/td>
&lt;td>&amp;ndash;batch-idle-duration&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>aws.assumeRoleARN&lt;/td>
&lt;td>ASSUME_ROLE_ARN&lt;/td>
&lt;td>&amp;ndash;assume-role-arn&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>aws.assumeRoleDuration&lt;/td>
&lt;td>ASSUME_ROLE_DURATION&lt;/td>
&lt;td>&amp;ndash;assume-role-duration&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>aws.clusterCABundle&lt;/td>
&lt;td>CLUSTER_CA_BUNDLE&lt;/td>
&lt;td>&amp;ndash;cluster-ca-bundle&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>aws.clusterName&lt;/td>
&lt;td>CLUSTER_NAME&lt;/td>
&lt;td>&amp;ndash;cluster-name&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>aws.clusterEndpoint&lt;/td>
&lt;td>CLUSTER_ENDPOINT&lt;/td>
&lt;td>&amp;ndash;cluster-endpoint&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>aws.isolatedVPC&lt;/td>
&lt;td>ISOLATED_VPC&lt;/td>
&lt;td>&amp;ndash;isolated-vpc&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>aws.vmMemoryOverheadPercent&lt;/td>
&lt;td>VM_MEMORY_OVERHEAD_PERCENT&lt;/td>
&lt;td>&amp;ndash;vm-memory-overhead-percent&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>aws.interruptionQueueName&lt;/td>
&lt;td>INTERRUPTION_QUEUE&lt;/td>
&lt;td>&amp;ndash;interruption-queue&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>aws.reservedENIs&lt;/td>
&lt;td>RESERVED_ENIS&lt;/td>
&lt;td>&amp;ndash;reserved-enis&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>featureGates.driftEnabled&lt;/td>
&lt;td>FEATURE_GATE=&amp;ldquo;Drift=true&amp;rdquo;&lt;/td>
&lt;td>&amp;ndash;feature-gates Drift=true&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>aws.defaultInstanceProfile&lt;/td>
&lt;td>&lt;strong>Dropped&lt;/strong>&lt;/td>
&lt;td>&lt;strong>Dropped&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>aws.enablePodENI&lt;/td>
&lt;td>&lt;strong>Dropped&lt;/strong>&lt;/td>
&lt;td>&lt;strong>Dropped&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>aws.enableENILimitedPodDensity&lt;/td>
&lt;td>&lt;strong>Dropped&lt;/strong>&lt;/td>
&lt;td>&lt;strong>Dropped&lt;/strong>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;blockquote>
&lt;p>NOTE: The &lt;code>aws.defaultInstanceProfile&lt;/code> was dropped because Karpenter no longer utilizes instance profiles but creates a managed version of an instance profile based on an EC2NodeClass role. The &lt;code>aws.enablePodENI&lt;/code> was dropped since Karpenter will now &lt;em>always&lt;/em> assume that &lt;code>vpc.amazonaws.com/pod-eni&lt;/code> resource exists. The &lt;code>aws.enableENILimitedPodDensity&lt;/code> was dropped since you can now override the &lt;code>--max-pods&lt;/code> value for kubelet in the &lt;code>spec.kubelet.maxPods&lt;/code> for NodeClaims or NodeClaimTemplates.&lt;/p>
&lt;/blockquote>
&lt;h3 id="helm-values">Helm Values&lt;/h3>
&lt;p>The v1beta1 helm chart comes with a number of changes to the values that were previously used in v0.31.x. Your older helm values will continue to work throughout v0.32.x but any values no longer specified in the chart will no longer be supported starting in v0.33.0.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>&amp;lt; v0.32.x Key&lt;/th>
&lt;th>&amp;gt;= v0.32.x Key&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>controller.outputPaths&lt;/td>
&lt;td>logConfig.outputPaths&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>controller.errorOutputPaths&lt;/td>
&lt;td>logConfig.errorOutputPaths&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>controller.logLevel&lt;/td>
&lt;td>logConfig.logLevel.controller&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>webhook.logLevel&lt;/td>
&lt;td>logConfig.logLevel.webhook&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>logEncoding&lt;/td>
&lt;td>logConfig.logEncoding&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>settings.aws.assumeRoleARN&lt;/td>
&lt;td>settings.assumeRoleARN&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>settings.aws.assumeRoleDuration&lt;/td>
&lt;td>settings.assumeRoleDuration&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>settings.aws.clusterCABundle&lt;/td>
&lt;td>settings.clusterCABundle&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>settings.aws.clusterName&lt;/td>
&lt;td>settings.clusterName&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>settings.aws.clusterEndpoint&lt;/td>
&lt;td>settings.clusterEndpoint&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>settings.aws.isolatedVPC&lt;/td>
&lt;td>settings.isolatedVPC&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>settings.aws.vmMemoryOverheadPercent&lt;/td>
&lt;td>settings.vmMemoryOverheadPercent&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>settings.aws.interruptionQueueName&lt;/td>
&lt;td>settings.interruptionQueue&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>settings.aws.reservedENIs&lt;/td>
&lt;td>settings.reservedENIs&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>settings.featureGates.driftEnabled&lt;/td>
&lt;td>settings.featureGates.drift&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>settings.aws.defaultInstanceProfile&lt;/td>
&lt;td>&lt;strong>Dropped&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>settings.aws.enablePodENI&lt;/td>
&lt;td>&lt;strong>Dropped&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>settings.aws.enableENILimitedPodDensity&lt;/td>
&lt;td>&lt;strong>Dropped&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>settings.aws.tags&lt;/td>
&lt;td>&lt;strong>Dropped&lt;/strong>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="drift-enabled-by-default">Drift Enabled by Default&lt;/h3>
&lt;p>The drift feature will now be enabled by default starting from v0.33.0. If you don’t specify the Drift featureGate, the feature will be assumed to be enabled. You can disable the drift feature by specifying &amp;ndash;feature-gates Drift=false. This feature gate is expected to be dropped when core APIs (NodePool, NodeClaim) are bumped to v1.&lt;/p>
&lt;h3 id="logging-configuration-is-no-longer-dynamic">Logging Configuration is No Longer Dynamic&lt;/h3>
&lt;p>As part of this deprecation, Karpenter will no longer call out to the APIServer to discover the ConfigMap. Instead, Karpenter will expect the ConfigMap to be mounted on the filesystem at &lt;code>/etc/karpenter/logging/zap-logger-config&lt;/code>. You can also still choose to override the individual log level of components of the system (webhook and controller) at the paths &lt;code>/etc/karpenter/logging/loglevel.webhook&lt;/code> and &lt;code>/etc/karpenter/logging/loglevel.controller&lt;/code>.&lt;/p>
&lt;p>What you do to upgrade this feature depends on how you install Karpenter:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>If you are using the helm chart to install Karpenter, you won’t need to make any changes for Karpenter to begin using this new mechanism for loading the config.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>If you are manually configuring the deployment for Karpenter, you will need to add the following sections to your deployment:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">apiVersion&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">apps/v1&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">kind&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">Deployment&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">spec&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">template&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">spec&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">...&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">containers&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>- &lt;span style="color:#204a87;font-weight:bold">name&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">controller&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">volumeMounts&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>- &lt;span style="color:#204a87;font-weight:bold">name&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">config-logging&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">mountPath&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">/etc/karpenter/logging&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">volumes&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>- &lt;span style="color:#204a87;font-weight:bold">name&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">config-logging&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">configMap&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">name&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">config-logging&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ul>
&lt;p>Karpenter will drop support for ConfigMap discovery through the APIServer starting in v0.33.0, meaning that you will need to ensure that you are mounting the config file on the expected filepath by that version.&lt;/p>
&lt;h3 id="webhook-support-deprecated-in-favor-of-cel">Webhook Support Deprecated in Favor of CEL&lt;/h3>
&lt;p>Karpenter v1beta1 APIs now support Common Expression Language (CEL) for validaiton directly through the APIServer. This change means that Karpenter’s validating webhooks are no longer needed to ensure that Karpenter’s NodePools and EC2NodeClasses are configured correctly.&lt;/p>
&lt;p>As a result, Karpenter will now disable webhooks by default by setting the &lt;code>DISABLE_WEBHOOK&lt;/code> environment variable to &lt;code>true&lt;/code> starting in v0.33.0. If you are currently on a version of Kubernetes &amp;lt; less than 1.25, CEL validation for Custom Resources is not enabled. We recommend that you enable the webhooks on these versions with &lt;code>DISABLE_WEBHOOK=false&lt;/code> to get proper validation support for any Karpenter configuration.&lt;/p></description></item></channel></rss>