diff --git a/ADOPTERS.md b/ADOPTERS.md
index 6454f2d72196..e0bf9a0ad315 100644
--- a/ADOPTERS.md
+++ b/ADOPTERS.md
@@ -20,9 +20,11 @@ If you are open to others contacting you about your use of Karpenter on Slack, a
| Anthropic | Better utilizing mixes of instance types for more reliable capacity | N/A | [Homepage](https://anthropic.com) |
| Astradot | Using Karpenter on all K8s clusters in production and staging | N/A | [Homepage](https://astradot.com) |
| Beeswax | Using Karpenter to scale our high load AdTech platform efficiently | `@James Wojewoda` | [Homepage](https://www.beeswax.com)
+| Canva | Using Karpetner to scale CPU and GPU workloads on EKS | `@groodt` | [Canva](https://www.canva.com/) |
| Codefresh | Juggling workloads for the SAAS CD/GitOps offering | `@Vadim Gusev` | [Codefresh](https://codefresh.io/) |
| Cordial | Using Karpenter to scale multiple EKS clusters quickly | `@dschaaff` | [Cordial](https://cordial.com) |
| Dig Security | Protecting our customers data - Using Karpenter to manage production and development workloads on EKS, We are using only Spot Instances in production. | `@Shahar Danus` | [Dig Security](https://dig.security/) |
+| Docker | Using Karpenter to scale Docker Hub on our EKS clusters | N/A | [Docker](https://www.docker.com) |
| H2O.ai | Dynamically scaling CPU and GPU nodes for AI workloads | `@Ophir Zahavi`, `@Asaf Oren` | [H2O.ai](https://h2o.ai/) |
| idealo | Scaling multi-arch IPv6 clusters hosting web and event-driven applications | `@Heiko Rothe` | [Homepage](https://www.idealo.de) |
| Nexxiot | Easier, Safer, Cleaner Global Transportation - Using Karpenter to manage EKS nodes | `@Alex Berger` | [Homepage](https://nexxiot.com/) |
diff --git a/charts/karpenter-crd/Chart.yaml b/charts/karpenter-crd/Chart.yaml
index 40fb0b8d6532..5d1569bbb5c9 100644
--- a/charts/karpenter-crd/Chart.yaml
+++ b/charts/karpenter-crd/Chart.yaml
@@ -2,8 +2,8 @@ apiVersion: v2
name: karpenter-crd
description: A Helm chart for Karpenter Custom Resource Definitions (CRDs)
type: application
-version: 0.25.0
-appVersion: 0.25.0
+version: 0.26.1
+appVersion: 0.26.1
keywords:
- cluster
- node
diff --git a/charts/karpenter/Chart.yaml b/charts/karpenter/Chart.yaml
index 8d7c61ab7c12..5d3a58ece3e6 100644
--- a/charts/karpenter/Chart.yaml
+++ b/charts/karpenter/Chart.yaml
@@ -2,8 +2,8 @@ apiVersion: v2
name: karpenter
description: A Helm chart for Karpenter, an open-source node provisioning project built for Kubernetes.
type: application
-version: 0.25.0
-appVersion: 0.25.0
+version: 0.26.1
+appVersion: 0.26.1
keywords:
- cluster
- node
diff --git a/charts/karpenter/README.md b/charts/karpenter/README.md
index 165ce830b619..10c78f8dea3f 100644
--- a/charts/karpenter/README.md
+++ b/charts/karpenter/README.md
@@ -2,20 +2,20 @@
A Helm chart for Karpenter, an open-source node provisioning project built for Kubernetes.
-![Version: 0.25.0](https://img.shields.io/badge/Version-0.25.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 0.25.0](https://img.shields.io/badge/AppVersion-0.25.0-informational?style=flat-square)
+![Version: 0.26.1](https://img.shields.io/badge/Version-0.26.1-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 0.26.1](https://img.shields.io/badge/AppVersion-0.26.1-informational?style=flat-square)
## Documentation
-For full Karpenter documentation please checkout [https://karpenter.sh](https://karpenter.sh/v0.25.0/).
+For full Karpenter documentation please checkout [https://karpenter.sh](https://karpenter.sh/v0.26.1/).
## Installing the Chart
-You can follow the detailed installation instruction in the [documentation](https://karpenter.sh/v0.25.0/getting-started/getting-started-with-eksctl/#install) which covers the Karpenter prerequisites and installation options. The outcome of these instructions should result in something like the following command.
+You can follow the detailed installation instruction in the [documentation](https://karpenter.sh/v0.26.1/getting-started/getting-started-with-eksctl/#install) which covers the Karpenter prerequisites and installation options. The outcome of these instructions should result in something like the following command.
```bash
helm upgrade --install --namespace karpenter --create-namespace \
karpenter oci://public.ecr.aws/karpenter/karpenter \
- --version v0.25.0 \
+ --version v0.26.1 \
--set serviceAccount.annotations.eks\.amazonaws\.com/role-arn=${KARPENTER_IAM_ROLE_ARN} \
--set settings.aws.clusterName=${CLUSTER_NAME} \
--set settings.aws.clusterEndpoint=${CLUSTER_ENDPOINT} \
@@ -31,15 +31,15 @@ helm upgrade --install --namespace karpenter --create-namespace \
| additionalAnnotations | object | `{}` | Additional annotations to add into metadata. |
| additionalClusterRoleRules | list | `[]` | Specifies additional rules for the core ClusterRole. |
| additionalLabels | object | `{}` | Additional labels to add into metadata. |
-| affinity | object | `{"nodeAffinity":{"requiredDuringSchedulingIgnoredDuringExecution":{"nodeSelectorTerms":[{"matchExpressions":[{"key":"karpenter.sh/provisioner-name","operator":"DoesNotExist"}]}]}}}` | Affinity rules for scheduling the pod. |
+| affinity | object | `{"nodeAffinity":{"requiredDuringSchedulingIgnoredDuringExecution":{"nodeSelectorTerms":[{"matchExpressions":[{"key":"karpenter.sh/provisioner-name","operator":"DoesNotExist"}]}]}},"podAntiAffinity":{"requiredDuringSchedulingIgnoredDuringExecution":[{"labelSelector":{"matchExpressions":[{"key":"app.kubernetes.io/instance","operator":"In","values":["{{ .Release.Name }}"]}]},"topologyKey":"kubernetes.io/hostname"}]}}` | Affinity rules for scheduling the pod. |
| controller.env | list | `[]` | Additional environment variables for the controller pod. |
| controller.envFrom | list | `[]` | |
| controller.errorOutputPaths | list | `["stderr"]` | Controller errorOutputPaths - default to stderr only |
| controller.extraVolumeMounts | list | `[]` | Additional volumeMounts for the controller pod. |
| controller.healthProbe.port | int | `8081` | The container port to use for http health probe. |
-| controller.image.digest | string | `"sha256:fefae2739efa1c4d9561069d1683a0ed201e41771351da1ef504c805941f0bf2"` | SHA256 digest of the controller image. |
+| controller.image.digest | string | `"sha256:5dfe506624961f386b68556dd1cc850bfe3a42b62d2dd5dcb8b21d1a89ec817c"` | SHA256 digest of the controller image. |
| controller.image.repository | string | `"public.ecr.aws/karpenter/controller"` | Repository path to the controller image. |
-| controller.image.tag | string | `"v0.25.0"` | Tag of the controller image. |
+| controller.image.tag | string | `"v0.26.1"` | Tag of the controller image. |
| controller.logEncoding | string | `""` | Controller log encoding, defaults to the global log encoding |
| controller.logLevel | string | `""` | Controller log level, defaults to the global log level |
| controller.metrics.port | int | `8080` | The container port to use for metrics. |
@@ -50,7 +50,7 @@ helm upgrade --install --namespace karpenter --create-namespace \
| controller.sidecarVolumeMounts | list | `[]` | Additional volumeMounts for the sidecar - this will be added to the volume mounts on top of extraVolumeMounts |
| dnsConfig | object | `{}` | Configure DNS Config for the pod |
| dnsPolicy | string | `"Default"` | Configure the DNS Policy for the pod |
-| extraObjects | list | `[]` | Array of extra K8s manifests to deploy |
+| extraObjects | list | `[]` | Array of extra K8s manifests to deploy |
| extraVolumes | list | `[]` | Additional volumes for the pod. |
| fullnameOverride | string | `""` | Overrides the chart's computed fullname. |
| hostNetwork | bool | `false` | Bind the pod to the host network. This is required when using a custom CNI. |
@@ -74,7 +74,7 @@ helm upgrade --install --namespace karpenter --create-namespace \
| serviceMonitor.additionalLabels | object | `{}` | Additional labels for the ServiceMonitor. |
| serviceMonitor.enabled | bool | `false` | Specifies whether a ServiceMonitor should be created. |
| serviceMonitor.endpointConfig | object | `{}` | Endpoint configuration for the ServiceMonitor. |
-| settings | object | `{"aws":{"clusterEndpoint":"","clusterName":"","defaultInstanceProfile":"","enableENILimitedPodDensity":true,"enablePodENI":false,"interruptionQueueName":"","isolatedVPC":false,"nodeNameConvention":"ip-name","tags":null,"vmMemoryOverheadPercent":0.075},"batchIdleDuration":"1s","batchMaxDuration":"10s"}` | Global Settings to configure Karpenter |
+| settings | object | `{"aws":{"clusterEndpoint":"","clusterName":"","defaultInstanceProfile":"","enableENILimitedPodDensity":true,"enablePodENI":false,"interruptionQueueName":"","isolatedVPC":false,"nodeNameConvention":"ip-name","tags":null,"vmMemoryOverheadPercent":0.075},"batchIdleDuration":"1s","batchMaxDuration":"10s","featureGates":{"driftEnabled":false}}` | Global Settings to configure Karpenter |
| settings.aws | object | `{"clusterEndpoint":"","clusterName":"","defaultInstanceProfile":"","enableENILimitedPodDensity":true,"enablePodENI":false,"interruptionQueueName":"","isolatedVPC":false,"nodeNameConvention":"ip-name","tags":null,"vmMemoryOverheadPercent":0.075}` | AWS-specific configuration values |
| settings.aws.clusterEndpoint | string | `""` | Cluster endpoint. If not set, will be discovered during startup (EKS only) |
| settings.aws.clusterName | string | `""` | Cluster name. |
@@ -88,6 +88,8 @@ helm upgrade --install --namespace karpenter --create-namespace \
| settings.aws.vmMemoryOverheadPercent | float | `0.075` | The VM memory overhead as a percent that will be subtracted from the total memory for all instance types |
| settings.batchIdleDuration | string | `"1s"` | The maximum amount of time with no new ending pods that if exceeded ends the current batching window. If pods arrive faster than this time, the batching window will be extended up to the maxDuration. If they arrive slower, the pods will be batched separately. |
| settings.batchMaxDuration | string | `"10s"` | The maximum length of a batch window. The longer this is, the more pods we can consider for provisioning at one time which usually results in fewer but larger nodes. |
+| settings.featureGates | object | `{"driftEnabled":false}` | Feature Gate configuration values. Feature Gates will follow the same graduation process and requirements as feature gates in Kubernetes. More information here https://kubernetes.io/docs/reference/command-line-tools-reference/feature-gates/#feature-gates-for-alpha-or-beta-features |
+| settings.featureGates.driftEnabled | bool | `false` | driftEnabled is in ALPHA and is disabled by default. Setting driftEnabled to true enables the drift deprovisioner to watch for drift between currently deployed nodes and the desired state of nodes set in provisioners and node templates |
| strategy | object | `{"rollingUpdate":{"maxUnavailable":1}}` | Strategy for updating the pod. |
| terminationGracePeriodSeconds | string | `nil` | Override the default termination grace period for the pod. |
| tolerations | list | `[{"key":"CriticalAddonsOnly","operator":"Exists"}]` | Tolerations to allow the pod to be scheduled to nodes with taints. |
diff --git a/charts/karpenter/templates/deployment.yaml b/charts/karpenter/templates/deployment.yaml
index f1017252303b..72e191fd0e2b 100644
--- a/charts/karpenter/templates/deployment.yaml
+++ b/charts/karpenter/templates/deployment.yaml
@@ -140,7 +140,7 @@ spec:
{{- end }}
{{- with .Values.affinity }}
affinity:
- {{- toYaml . | nindent 8 }}
+ {{- tpl (toYaml .) $ | nindent 8 }}
{{- end }}
{{- with .Values.tolerations }}
tolerations:
diff --git a/charts/karpenter/values.yaml b/charts/karpenter/values.yaml
index 638fd220ed3f..1411e3e72873 100644
--- a/charts/karpenter/values.yaml
+++ b/charts/karpenter/values.yaml
@@ -72,6 +72,15 @@ affinity:
- matchExpressions:
- key: karpenter.sh/provisioner-name
operator: DoesNotExist
+ podAntiAffinity:
+ requiredDuringSchedulingIgnoredDuringExecution:
+ - labelSelector:
+ matchExpressions:
+ - key: app.kubernetes.io/instance
+ operator: In
+ values:
+ - "{{ .Release.Name }}"
+ topologyKey: "kubernetes.io/hostname"
# -- topologySpreadConstraints to increase the controller resilience
topologySpreadConstraints:
- maxSkew: 1
@@ -92,7 +101,7 @@ extraVolumes: []
# expirationSeconds: 86400
# path: token
-# -- Array of extra K8s manifests to deploy
+# -- Array of extra K8s manifests to deploy
extraObjects: []
#- apiVersion: karpenter.k8s.aws/v1alpha1
# kind: AWSNodeTemplate
@@ -109,9 +118,9 @@ controller:
# -- Repository path to the controller image.
repository: public.ecr.aws/karpenter/controller
# -- Tag of the controller image.
- tag: v0.25.0
+ tag: v0.26.1
# -- SHA256 digest of the controller image.
- digest: sha256:fefae2739efa1c4d9561069d1683a0ed201e41771351da1ef504c805941f0bf2
+ digest: sha256:5dfe506624961f386b68556dd1cc850bfe3a42b62d2dd5dcb8b21d1a89ec817c
# -- SecurityContext for the controller container.
securityContext: {}
# -- Additional environment variables for the controller pod.
@@ -119,7 +128,6 @@ controller:
# - name: AWS_REGION
# value: eu-west-1
envFrom: []
-
# -- Resources for the controller pod.
resources: {}
# We usually recommend not to specify default resources and to leave this as a conscious
@@ -200,3 +208,10 @@ settings:
interruptionQueueName: ""
# -- The global tags to use on all AWS infrastructure resources (launch templates, instances, etc.) across node templates
tags:
+ # -- Feature Gate configuration values. Feature Gates will follow the same graduation process and requirements as feature gates
+ # in Kubernetes. More information here https://kubernetes.io/docs/reference/command-line-tools-reference/feature-gates/#feature-gates-for-alpha-or-beta-features
+ featureGates:
+ # -- driftEnabled is in ALPHA and is disabled by default.
+ # Setting driftEnabled to true enables the drift deprovisioner to watch for drift between currently deployed nodes
+ # and the desired state of nodes set in provisioners and node templates
+ driftEnabled: false
diff --git a/cmd/controller/main.go b/cmd/controller/main.go
index 06f0366d0227..e41c110ca1e0 100644
--- a/cmd/controller/main.go
+++ b/cmd/controller/main.go
@@ -41,7 +41,13 @@ func main() {
EventRecorder: operator.EventRecorder,
StartAsync: operator.Elected(),
})
- awsCloudProvider := cloudprovider.New(awsCtx)
+ awsCloudProvider := cloudprovider.New(
+ awsCtx,
+ awsCtx.InstanceTypesProvider,
+ awsCtx.InstanceProvider,
+ awsCtx.KubeClient,
+ awsCtx.AMIProvider,
+ )
lo.Must0(operator.AddHealthzCheck("cloud-provider", awsCloudProvider.LivenessProbe))
cloudProvider := metrics.Decorate(awsCloudProvider)
diff --git a/go.mod b/go.mod
index 46a2fc7ff529..9547d72d5f50 100644
--- a/go.mod
+++ b/go.mod
@@ -7,7 +7,7 @@ require (
github.com/PuerkitoBio/goquery v1.8.1
github.com/avast/retry-go v3.0.0+incompatible
github.com/aws/aws-sdk-go v1.44.195
- github.com/aws/karpenter-core v0.25.1-0.20230224225813-3e5ec9b8eb1a
+ github.com/aws/karpenter-core v0.27.0
github.com/go-playground/validator/v10 v10.11.2
github.com/imdario/mergo v0.3.13
github.com/mitchellh/hashstructure/v2 v2.0.2
diff --git a/go.sum b/go.sum
index 8a1c3cf8ff8d..7af4a0c2b622 100644
--- a/go.sum
+++ b/go.sum
@@ -70,8 +70,8 @@ github.com/avast/retry-go v3.0.0+incompatible h1:4SOWQ7Qs+oroOTQOYnAHqelpCO0biHS
github.com/avast/retry-go v3.0.0+incompatible/go.mod h1:XtSnn+n/sHqQIpZ10K1qAevBhOOCWBLXXy3hyiqqBrY=
github.com/aws/aws-sdk-go v1.44.195 h1:d5xFL0N83Fpsq2LFiHgtBUHknCRUPGHdOlCWt/jtOJs=
github.com/aws/aws-sdk-go v1.44.195/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI=
-github.com/aws/karpenter-core v0.25.1-0.20230224225813-3e5ec9b8eb1a h1:+SrX+qETmZxfGFx0gWiHzUWsZytRbXuq3GGcH2z3AQk=
-github.com/aws/karpenter-core v0.25.1-0.20230224225813-3e5ec9b8eb1a/go.mod h1:szIXYuMzg8kAwAbMIoB1VJBjAM+AdX+cIwsINkmWnpI=
+github.com/aws/karpenter-core v0.27.0 h1:WaJ+7mIkyMH7+wT+g+XJalOc4aSY8+WFh7DoJvcomEc=
+github.com/aws/karpenter-core v0.27.0/go.mod h1:szIXYuMzg8kAwAbMIoB1VJBjAM+AdX+cIwsINkmWnpI=
github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8=
github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
diff --git a/hack/api-code-gen.sh b/hack/api-code-gen.sh
index 59bde8c5f097..b58ad2aba4f7 100755
--- a/hack/api-code-gen.sh
+++ b/hack/api-code-gen.sh
@@ -8,7 +8,7 @@ fi
echo "api-code-gen running ENABLE_GIT_PUSH: ${ENABLE_GIT_PUSH}"
bandwidth() {
- GENERATED_FILE="pkg/cloudprovider/zz_generated.bandwidth.go"
+ GENERATED_FILE="pkg/providers/instancetype/zz_generated.bandwidth.go"
NO_UPDATE=''
SUBJECT="Bandwidth"
@@ -30,7 +30,7 @@ pricing() {
}
vpcLimits() {
- GENERATED_FILE="pkg/cloudprovider/zz_generated.vpclimits.go"
+ GENERATED_FILE="pkg/providers/instancetype/zz_generated.vpclimits.go"
NO_UPDATE=''
SUBJECT="VPC Limits"
diff --git a/hack/code/bandwidth_gen.go b/hack/code/bandwidth_gen.go
index ca670407aeb2..5279c18d64a2 100644
--- a/hack/code/bandwidth_gen.go
+++ b/hack/code/bandwidth_gen.go
@@ -40,7 +40,7 @@ var uriSelectors = map[string]string{
const fileFormat = `
%s
-package cloudprovider
+package instancetype
// GENERATED FILE. DO NOT EDIT DIRECTLY.
// Update hack/code/bandwidth_gen.go and re-generate to edit
@@ -56,7 +56,7 @@ var (
func main() {
flag.Parse()
if flag.NArg() != 1 {
- log.Fatalf("Usage: `bandwidth_gen.go pkg/cloudprovider/zz_generated.pricing.go`")
+ log.Fatalf("Usage: `bandwidth_gen.go pkg/providers/instancetype/zz_generated.pricing.go`")
}
bandwidth := map[string]int64{}
diff --git a/hack/code/vpc_limits_gen.go b/hack/code/vpc_limits_gen.go
index 2255f7ceb3e1..773777fc567c 100644
--- a/hack/code/vpc_limits_gen.go
+++ b/hack/code/vpc_limits_gen.go
@@ -35,7 +35,7 @@ func main() {
opts := options{}
flag.StringVar(&opts.urlInput, "url", "https://raw.githubusercontent.com/aws/amazon-vpc-resource-controller-k8s/master/pkg/aws/vpc/limits.go",
"url of the raw vpc/limits.go file in the github.com/aws/amazon-vpc-resource-controller-k8s repo")
- flag.StringVar(&opts.sourceOutput, "output", "pkg/cloudprovider/zz_generated.vpclimits.go", "output location for the generated go source file")
+ flag.StringVar(&opts.sourceOutput, "output", "pkg/providers/instancetype/zz_generated.vpclimits.go", "output location for the generated go source file")
flag.Parse()
limitsURL, err := url.Parse(opts.urlInput)
@@ -58,7 +58,7 @@ func main() {
if err != nil {
log.Fatal(err)
}
- newRespData := strings.Replace(string(respData), "package vpc", "package cloudprovider", 1)
+ newRespData := strings.Replace(string(respData), "package vpc", "package instancetype", 1)
out.WriteString(newRespData)
defer out.Close()
diff --git a/hack/docs/instancetypes_gen_docs.go b/hack/docs/instancetypes_gen_docs.go
index 826ee621297a..9b9d4b671172 100644
--- a/hack/docs/instancetypes_gen_docs.go
+++ b/hack/docs/instancetypes_gen_docs.go
@@ -233,9 +233,10 @@ func (f kubeDnsTransport) RoundTrip(request *http.Request) (*http.Response, erro
}
func NewAWSCloudProviderForCodeGen(ctx context.Context) *awscloudprovider.CloudProvider {
- return awscloudprovider.New(awscontext.NewOrDie(cloudprovider.Context{
+ context := awscontext.NewOrDie(cloudprovider.Context{
Context: ctx,
RESTConfig: &rest.Config{},
KubernetesInterface: lo.Must(kubernetes.NewForConfigAndClient(&rest.Config{}, &http.Client{Transport: &kubeDnsTransport{}})),
- }))
+ })
+ return awscloudprovider.New(context, context.InstanceTypesProvider, context.InstanceProvider, context.KubeClient, context.AMIProvider)
}
diff --git a/hack/docs/metrics_gen_docs.go b/hack/docs/metrics_gen_docs.go
index 5bdfa674facc..9e776ecabcd6 100644
--- a/hack/docs/metrics_gen_docs.go
+++ b/hack/docs/metrics_gen_docs.go
@@ -81,7 +81,7 @@ description: >
// TODO @joinnis: Remove this line when exposing machine metrics
allMetrics = lo.Reject(allMetrics, func(m metricInfo, _ int) bool {
- return m.subsystem == "machines"
+ return m.subsystem == "machines" || strings.HasPrefix(m.name, "controller_runtime")
})
for _, metric := range allMetrics {
if metric.subsystem != previousSubsystem {
diff --git a/pkg/cloudprovider/cloudprovider.go b/pkg/cloudprovider/cloudprovider.go
index f756b09184e5..c01b553a094b 100644
--- a/pkg/cloudprovider/cloudprovider.go
+++ b/pkg/cloudprovider/cloudprovider.go
@@ -42,19 +42,15 @@ import (
"knative.dev/pkg/logging"
"sigs.k8s.io/controller-runtime/pkg/client"
- awscontext "github.com/aws/karpenter/pkg/context"
"github.com/aws/karpenter/pkg/providers/amifamily"
+ "github.com/aws/karpenter/pkg/providers/instance"
+ "github.com/aws/karpenter/pkg/providers/instancetype"
coreapis "github.com/aws/karpenter-core/pkg/apis"
"github.com/aws/karpenter-core/pkg/apis/v1alpha5"
"github.com/aws/karpenter-core/pkg/cloudprovider"
)
-const (
- // MaxInstanceTypes defines the number of instance type options to pass to CreateFleet
- MaxInstanceTypes = 60
-)
-
func init() {
v1alpha5.NormalizedLabels = lo.Assign(v1alpha5.NormalizedLabels, map[string]string{"topology.ebs.csi.aws.com/zone": v1.LabelTopologyZone})
coreapis.Settings = append(coreapis.Settings, apis.Settings...)
@@ -63,27 +59,19 @@ func init() {
var _ cloudprovider.CloudProvider = (*CloudProvider)(nil)
type CloudProvider struct {
- instanceTypeProvider *InstanceTypeProvider
- instanceProvider *InstanceProvider
+ instanceTypeProvider *instancetype.Provider
+ instanceProvider *instance.Provider
kubeClient client.Client
amiProvider *amifamily.Provider
}
-func New(ctx awscontext.Context) *CloudProvider {
- instanceTypeProvider := NewInstanceTypeProvider(ctx.Session, ctx.EC2API, ctx.SubnetProvider, ctx.UnavailableOfferingsCache, ctx.PricingProvider)
+func New(ctx context.Context, instanceTypeProvider *instancetype.Provider,
+ instanceProvider *instance.Provider, kubeClient client.Client, amiProvider *amifamily.Provider) *CloudProvider {
return &CloudProvider{
- kubeClient: ctx.KubeClient,
instanceTypeProvider: instanceTypeProvider,
- amiProvider: ctx.AMIProvider,
- instanceProvider: NewInstanceProvider(
- ctx,
- aws.StringValue(ctx.Session.Config.Region),
- ctx.EC2API,
- ctx.UnavailableOfferingsCache,
- instanceTypeProvider,
- ctx.SubnetProvider,
- ctx.LaunchTemplateProvider,
- ),
+ instanceProvider: instanceProvider,
+ kubeClient: kubeClient,
+ amiProvider: amiProvider,
}
}
@@ -315,7 +303,7 @@ func (c *CloudProvider) resolveProvisionerFromInstance(ctx context.Context, inst
return provisioner, nil
}
-func (c *CloudProvider) instanceToMachine(ctx context.Context, instance *ec2.Instance, instanceType *cloudprovider.InstanceType) *v1alpha5.Machine {
+func (c *CloudProvider) instanceToMachine(ctx context.Context, ec2instance *ec2.Instance, instanceType *cloudprovider.InstanceType) *v1alpha5.Machine {
machine := &v1alpha5.Machine{}
labels := map[string]string{}
@@ -328,22 +316,22 @@ func (c *CloudProvider) instanceToMachine(ctx context.Context, instance *ec2.Ins
machine.Status.Capacity = functional.FilterMap(instanceType.Capacity, func(_ v1.ResourceName, v resource.Quantity) bool { return !resources.IsZero(v) })
machine.Status.Allocatable = functional.FilterMap(instanceType.Allocatable(), func(_ v1.ResourceName, v resource.Quantity) bool { return !resources.IsZero(v) })
}
- labels[v1alpha1.LabelInstanceAMIID] = aws.StringValue(instance.ImageId)
- labels[v1.LabelTopologyZone] = aws.StringValue(instance.Placement.AvailabilityZone)
- labels[v1alpha5.LabelCapacityType] = getCapacityType(instance)
- if tag, ok := lo.Find(instance.Tags, func(t *ec2.Tag) bool { return aws.StringValue(t.Key) == v1alpha5.ProvisionerNameLabelKey }); ok {
+ labels[v1alpha1.LabelInstanceAMIID] = aws.StringValue(ec2instance.ImageId)
+ labels[v1.LabelTopologyZone] = aws.StringValue(ec2instance.Placement.AvailabilityZone)
+ labels[v1alpha5.LabelCapacityType] = instance.GetCapacityType(ec2instance)
+ if tag, ok := lo.Find(ec2instance.Tags, func(t *ec2.Tag) bool { return aws.StringValue(t.Key) == v1alpha5.ProvisionerNameLabelKey }); ok {
labels[v1alpha5.ProvisionerNameLabelKey] = aws.StringValue(tag.Value)
}
- if tag, ok := lo.Find(instance.Tags, func(t *ec2.Tag) bool { return aws.StringValue(t.Key) == v1alpha5.ManagedByLabelKey }); ok {
+ if tag, ok := lo.Find(ec2instance.Tags, func(t *ec2.Tag) bool { return aws.StringValue(t.Key) == v1alpha5.ManagedByLabelKey }); ok {
labels[v1alpha5.ManagedByLabelKey] = aws.StringValue(tag.Value)
}
machine.Name = lo.Ternary(
settings.FromContext(ctx).NodeNameConvention == settings.ResourceName,
- aws.StringValue(instance.InstanceId),
- strings.ToLower(aws.StringValue(instance.PrivateDnsName)),
+ aws.StringValue(ec2instance.InstanceId),
+ strings.ToLower(aws.StringValue(ec2instance.PrivateDnsName)),
)
machine.Labels = labels
- machine.CreationTimestamp = metav1.Time{Time: aws.TimeValue(instance.LaunchTime)}
- machine.Status.ProviderID = fmt.Sprintf("aws:///%s/%s", aws.StringValue(instance.Placement.AvailabilityZone), aws.StringValue(instance.InstanceId))
+ machine.CreationTimestamp = metav1.Time{Time: aws.TimeValue(ec2instance.LaunchTime)}
+ machine.Status.ProviderID = fmt.Sprintf("aws:///%s/%s", aws.StringValue(ec2instance.Placement.AvailabilityZone), aws.StringValue(ec2instance.InstanceId))
return machine
}
diff --git a/pkg/cloudprovider/suite_test.go b/pkg/cloudprovider/suite_test.go
index e6a24c6d5f44..e0180651c273 100644
--- a/pkg/cloudprovider/suite_test.go
+++ b/pkg/cloudprovider/suite_test.go
@@ -12,29 +12,28 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
-package cloudprovider
+package cloudprovider_test
import (
"context"
+ "fmt"
"net"
"testing"
"time"
"github.com/Pallinder/go-randomdata"
- "github.com/patrickmn/go-cache"
"github.com/samber/lo"
"k8s.io/client-go/tools/record"
- "github.com/aws/karpenter-core/pkg/events"
- . "github.com/aws/karpenter-core/pkg/test/expectations"
-
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"github.com/aws/aws-sdk-go/aws"
v1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/runtime/schema"
clock "k8s.io/utils/clock/testing"
- "knative.dev/pkg/ptr"
+
+ "github.com/aws/aws-sdk-go/service/ec2"
+ "github.com/aws/aws-sdk-go/service/ssm"
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
@@ -43,68 +42,42 @@ import (
"github.com/aws/karpenter/pkg/apis"
"github.com/aws/karpenter/pkg/apis/settings"
"github.com/aws/karpenter/pkg/apis/v1alpha1"
- awscache "github.com/aws/karpenter/pkg/cache"
- "github.com/aws/karpenter/pkg/providers/amifamily"
- "github.com/aws/karpenter/pkg/test"
-
- "github.com/aws/karpenter-core/pkg/cloudprovider"
- machineutil "github.com/aws/karpenter-core/pkg/utils/machine"
-
- "github.com/aws/karpenter-core/pkg/operator/controller"
-
- "github.com/aws/aws-sdk-go/service/ec2"
- "github.com/aws/aws-sdk-go/service/ssm"
-
+ "github.com/aws/karpenter/pkg/cloudprovider"
"github.com/aws/karpenter/pkg/fake"
+ "github.com/aws/karpenter/pkg/test"
coresettings "github.com/aws/karpenter-core/pkg/apis/settings"
"github.com/aws/karpenter-core/pkg/apis/v1alpha5"
+ corecloudproivder "github.com/aws/karpenter-core/pkg/cloudprovider"
"github.com/aws/karpenter-core/pkg/controllers/provisioning"
"github.com/aws/karpenter-core/pkg/controllers/state"
+ "github.com/aws/karpenter-core/pkg/events"
+ "github.com/aws/karpenter-core/pkg/operator/controller"
"github.com/aws/karpenter-core/pkg/operator/injection"
"github.com/aws/karpenter-core/pkg/operator/options"
"github.com/aws/karpenter-core/pkg/operator/scheme"
coretest "github.com/aws/karpenter-core/pkg/test"
- "github.com/aws/karpenter-core/pkg/utils/pretty"
-
- "github.com/aws/karpenter/pkg/providers/launchtemplate"
- "github.com/aws/karpenter/pkg/providers/pricing"
- "github.com/aws/karpenter/pkg/providers/securitygroup"
- "github.com/aws/karpenter/pkg/providers/subnet"
+ . "github.com/aws/karpenter-core/pkg/test/expectations"
+ machineutil "github.com/aws/karpenter-core/pkg/utils/machine"
)
var ctx context.Context
var stop context.CancelFunc
var opts options.Options
var env *coretest.Environment
-var launchTemplateCache *cache.Cache
-var ssmCache *cache.Cache
-var ec2Cache *cache.Cache
-var kubernetesVersionCache *cache.Cache
-var unavailableOfferingsCache *awscache.UnavailableOfferings
-var instanceTypeCache *cache.Cache
-var instanceTypeProvider *InstanceTypeProvider
-var launchTemplateProvider *launchtemplate.Provider
-var amiProvider *amifamily.Provider
-var fakeEC2API *fake.EC2API
-var fakeSSMAPI *fake.SSMAPI
-var fakeEKSAPI *fake.EKSAPI
-var fakePricingAPI *fake.PricingAPI
+var awsEnv *test.Environment
var prov *provisioning.Provisioner
var provisioningController controller.Controller
-var cloudProvider *CloudProvider
var cluster *state.Cluster
var fakeClock *clock.FakeClock
var provisioner *v1alpha5.Provisioner
var nodeTemplate *v1alpha1.AWSNodeTemplate
-var pricingProvider *pricing.Provider
-var subnetProvider *subnet.Provider
-var securityGroupProvider *securitygroup.Provider
+var cloudProvider *cloudprovider.CloudProvider
func TestAWS(t *testing.T) {
ctx = TestContextWithLogger(t)
RegisterFailHandler(Fail)
- RunSpecs(t, "CloudProvider/AWS")
+ RunSpecs(t, "cloudProvider/AWS")
}
var _ = BeforeSuite(func() {
@@ -112,47 +85,10 @@ var _ = BeforeSuite(func() {
ctx = coresettings.ToContext(ctx, coretest.Settings())
ctx = settings.ToContext(ctx, test.Settings())
ctx, stop = context.WithCancel(ctx)
+ awsEnv = test.NewEnvironment(ctx, env)
- launchTemplateCache = cache.New(awscache.DefaultTTL, awscache.DefaultCleanupInterval)
- unavailableOfferingsCache = awscache.NewUnavailableOfferings()
- ssmCache = cache.New(awscache.DefaultTTL, awscache.DefaultCleanupInterval)
- ec2Cache = cache.New(awscache.DefaultTTL, awscache.DefaultCleanupInterval)
- kubernetesVersionCache = cache.New(awscache.DefaultTTL, awscache.DefaultCleanupInterval)
- instanceTypeCache = cache.New(awscache.InstanceTypesAndZonesTTL, awscache.DefaultCleanupInterval)
- fakeEC2API = &fake.EC2API{}
- fakeSSMAPI = &fake.SSMAPI{}
- fakeEKSAPI = &fake.EKSAPI{}
- fakePricingAPI = &fake.PricingAPI{}
- pricingProvider = pricing.NewProvider(ctx, fakePricingAPI, fakeEC2API, "", make(chan struct{}))
- amiProvider = amifamily.NewProvider(env.Client, env.KubernetesInterface, fakeSSMAPI, fakeEC2API, ssmCache, ec2Cache, kubernetesVersionCache)
- subnetProvider = subnet.NewProvider(fakeEC2API)
- instanceTypeProvider = &InstanceTypeProvider{
- ec2api: fakeEC2API,
- subnetProvider: subnetProvider,
- cache: instanceTypeCache,
- pricingProvider: pricingProvider,
- unavailableOfferings: unavailableOfferingsCache,
- cm: pretty.NewChangeMonitor(),
- }
- securityGroupProvider = securitygroup.NewProvider(fakeEC2API)
- launchTemplateProvider = launchtemplate.NewProvider(
- ctx,
- launchTemplateCache,
- fakeEC2API,
- amifamily.New(env.Client, amiProvider),
- securityGroupProvider,
- ptr.String("ca-bundle"),
- make(chan struct{}),
- net.ParseIP("10.0.100.10"),
- "https://test-cluster",
- )
- cloudProvider = &CloudProvider{
- instanceTypeProvider: instanceTypeProvider,
- amiProvider: amiProvider,
- instanceProvider: NewInstanceProvider(ctx, "", fakeEC2API, unavailableOfferingsCache, instanceTypeProvider, subnetProvider, launchTemplateProvider),
- kubeClient: env.Client,
- }
fakeClock = clock.NewFakeClock(time.Now())
+ cloudProvider = cloudprovider.New(ctx, awsEnv.InstanceTypesProvider, awsEnv.InstanceProvider, env.Client, awsEnv.AMIProvider)
cluster = state.NewCluster(fakeClock, env.Client, cloudProvider)
prov = provisioning.NewProvisioner(ctx, env.Client, env.KubernetesInterface.CoreV1(), events.NewRecorder(&record.FakeRecorder{}), cloudProvider, cluster)
provisioningController = provisioning.NewController(env.Client, prov, events.NewRecorder(&record.FakeRecorder{}))
@@ -197,37 +133,17 @@ var _ = BeforeEach(func() {
})
cluster.Reset()
- fakeEC2API.Reset()
- fakeSSMAPI.Reset()
- fakeEKSAPI.Reset()
- fakePricingAPI.Reset()
- launchTemplateCache.Flush()
- unavailableOfferingsCache.Flush()
- ssmCache.Flush()
- ec2Cache.Flush()
- kubernetesVersionCache.Flush()
- instanceTypeCache.Flush()
- subnetProvider.Reset()
- securityGroupProvider.Reset()
- launchTemplateProvider.KubeDNSIP = net.ParseIP("10.0.100.10")
- launchTemplateProvider.ClusterEndpoint = "https://test-cluster"
+ awsEnv.Reset()
- // Reset the pricing provider, so we don't cross-pollinate pricing data
- instanceTypeProvider = &InstanceTypeProvider{
- ec2api: fakeEC2API,
- subnetProvider: subnetProvider,
- cache: instanceTypeCache,
- pricingProvider: pricing.NewProvider(ctx, fakePricingAPI, fakeEC2API, "", make(chan struct{})),
- unavailableOfferings: unavailableOfferingsCache,
- cm: pretty.NewChangeMonitor(),
- }
+ awsEnv.LaunchTemplateProvider.KubeDNSIP = net.ParseIP("10.0.100.10")
+ awsEnv.LaunchTemplateProvider.ClusterEndpoint = "https://test-cluster"
})
var _ = AfterEach(func() {
ExpectCleanedUp(ctx, env.Client)
})
-var _ = Describe("Allocation", func() {
+var _ = Describe("CloudProvider", func() {
Context("Defaulting", func() {
// Intent here is that if updates occur on the provisioningController, the Provisioner doesn't need to be recreated
It("should not set the InstanceProfile with the default if none provided in Provisioner", func() {
@@ -263,8 +179,8 @@ var _ = Describe("Allocation", func() {
pod := coretest.UnschedulablePod()
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CreateFleetBehavior.CalledWithInput.Len()).To(Equal(1))
- createFleetInput := fakeEC2API.CreateFleetBehavior.CalledWithInput.Pop()
+ Expect(awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Len()).To(Equal(1))
+ createFleetInput := awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Pop()
Expect(aws.StringValue(createFleetInput.Context)).To(Equal("context-1234"))
})
It("should default to no EC2 Context", func() {
@@ -273,21 +189,21 @@ var _ = Describe("Allocation", func() {
pod := coretest.UnschedulablePod()
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CreateFleetBehavior.CalledWithInput.Len()).To(Equal(1))
- createFleetInput := fakeEC2API.CreateFleetBehavior.CalledWithInput.Pop()
+ Expect(awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Len()).To(Equal(1))
+ createFleetInput := awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Pop()
Expect(createFleetInput.Context).To(BeNil())
})
})
Context("Node Drift", func() {
var validAMI string
- var selectedInstanceType *cloudprovider.InstanceType
+ var selectedInstanceType *corecloudproivder.InstanceType
var instance *ec2.Instance
BeforeEach(func() {
validAMI = fake.ImageID()
- fakeSSMAPI.GetParameterOutput = &ssm.GetParameterOutput{
+ awsEnv.SSMAPI.GetParameterOutput = &ssm.GetParameterOutput{
Parameter: &ssm.Parameter{Value: aws.String(validAMI)},
}
- fakeEC2API.DescribeImagesOutput.Set(&ec2.DescribeImagesOutput{
+ awsEnv.EC2API.DescribeImagesOutput.Set(&ec2.DescribeImagesOutput{
Images: []*ec2.Image{{ImageId: aws.String(validAMI)}},
})
ExpectApplied(ctx, env.Client, provisioner, nodeTemplate)
@@ -306,7 +222,7 @@ var _ = Describe("Allocation", func() {
},
InstanceId: aws.String(fake.InstanceID()),
}
- fakeEC2API.DescribeInstancesBehavior.Output.Set(&ec2.DescribeInstancesOutput{
+ awsEnv.EC2API.DescribeInstancesBehavior.Output.Set(&ec2.DescribeInstancesOutput{
Reservations: []*ec2.Reservation{{Instances: []*ec2.Instance{instance}}},
})
})
@@ -430,11 +346,11 @@ var _ = Describe("Allocation", func() {
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
- firstLt := fakeEC2API.CalledWithCreateLaunchTemplateInput.Pop()
- Expect(fakeEC2API.CreateFleetBehavior.CalledWithInput.Len()).To(Equal(1))
+ Expect(awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
+ firstLt := awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Pop()
+ Expect(awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Len()).To(Equal(1))
- createFleetInput := fakeEC2API.CreateFleetBehavior.CalledWithInput.Pop()
+ createFleetInput := awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Pop()
launchTemplate := createFleetInput.LaunchTemplateConfigs[0].LaunchTemplateSpecification
Expect(createFleetInput.LaunchTemplateConfigs).To(HaveLen(1))
@@ -459,8 +375,8 @@ var _ = Describe("Allocation", func() {
pod := coretest.UnschedulablePod()
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
- input := fakeEC2API.CalledWithCreateLaunchTemplateInput.Pop()
+ Expect(awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
+ input := awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Pop()
Expect(aws.StringValueSlice(input.LaunchTemplateData.SecurityGroupIds)).To(ConsistOf(
"sg-test1",
))
@@ -481,7 +397,7 @@ var _ = Describe("Allocation", func() {
pod := coretest.UnschedulablePod()
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- createFleetInput := fakeEC2API.CreateFleetBehavior.CalledWithInput.Pop()
+ createFleetInput := awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Pop()
Expect(fake.SubnetsFromFleetRequest(createFleetInput)).To(ConsistOf("subnet-test1"))
})
It("should use the instance profile on the Provisioner when specified", func() {
@@ -501,8 +417,8 @@ var _ = Describe("Allocation", func() {
pod := coretest.UnschedulablePod()
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
- input := fakeEC2API.CalledWithCreateLaunchTemplateInput.Pop()
+ Expect(awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
+ input := awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Pop()
Expect(*input.LaunchTemplateData.IamInstanceProfile.Name).To(Equal("overridden-profile"))
})
})
@@ -515,8 +431,8 @@ var _ = Describe("Allocation", func() {
coretest.PodOptions{NodeSelector: map[string]string{v1.LabelArchStable: v1alpha5.ArchitectureAmd64}})
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CreateFleetBehavior.CalledWithInput.Len()).To(Equal(1))
- input := fakeEC2API.CreateFleetBehavior.CalledWithInput.Pop()
+ Expect(awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Len()).To(Equal(1))
+ input := awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Pop()
Expect(input.LaunchTemplateConfigs).To(HaveLen(1))
foundNonGPULT := false
@@ -535,7 +451,7 @@ var _ = Describe("Allocation", func() {
Expect(foundNonGPULT).To(BeTrue())
})
It("should launch instances into subnet with the most available IP addresses", func() {
- fakeEC2API.DescribeSubnetsOutput.Set(&ec2.DescribeSubnetsOutput{Subnets: []*ec2.Subnet{
+ awsEnv.EC2API.DescribeSubnetsOutput.Set(&ec2.DescribeSubnetsOutput{Subnets: []*ec2.Subnet{
{SubnetId: aws.String("test-subnet-1"), AvailabilityZone: aws.String("test-zone-1a"), AvailableIpAddressCount: aws.Int64(10),
Tags: []*ec2.Tag{{Key: aws.String("Name"), Value: aws.String("test-subnet-1")}}},
{SubnetId: aws.String("test-subnet-2"), AvailabilityZone: aws.String("test-zone-1a"), AvailableIpAddressCount: aws.Int64(100),
@@ -545,11 +461,11 @@ var _ = Describe("Allocation", func() {
pod := coretest.UnschedulablePod(coretest.PodOptions{NodeSelector: map[string]string{v1.LabelTopologyZone: "test-zone-1a"}})
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- createFleetInput := fakeEC2API.CreateFleetBehavior.CalledWithInput.Pop()
+ createFleetInput := awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Pop()
Expect(fake.SubnetsFromFleetRequest(createFleetInput)).To(ConsistOf("test-subnet-2"))
})
It("should launch instances into subnet with the most available IP addresses in-between cache refreshes", func() {
- fakeEC2API.DescribeSubnetsOutput.Set(&ec2.DescribeSubnetsOutput{Subnets: []*ec2.Subnet{
+ awsEnv.EC2API.DescribeSubnetsOutput.Set(&ec2.DescribeSubnetsOutput{Subnets: []*ec2.Subnet{
{SubnetId: aws.String("test-subnet-1"), AvailabilityZone: aws.String("test-zone-1a"), AvailableIpAddressCount: aws.Int64(10),
Tags: []*ec2.Tag{{Key: aws.String("Name"), Value: aws.String("test-subnet-1")}}},
{SubnetId: aws.String("test-subnet-2"), AvailabilityZone: aws.String("test-zone-1a"), AvailableIpAddressCount: aws.Int64(11),
@@ -562,17 +478,28 @@ var _ = Describe("Allocation", func() {
ExpectProvisioned(ctx, env.Client, cluster, prov, pod1, pod2)
ExpectScheduled(ctx, env.Client, pod1)
ExpectScheduled(ctx, env.Client, pod2)
- createFleetInput := fakeEC2API.CreateFleetBehavior.CalledWithInput.Pop()
+ createFleetInput := awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Pop()
Expect(fake.SubnetsFromFleetRequest(createFleetInput)).To(ConsistOf("test-subnet-2"))
// Provision for another pod that should now use the other subnet since we've consumed some from the first launch.
pod3 := coretest.UnschedulablePod(coretest.PodOptions{NodeSelector: map[string]string{v1.LabelTopologyZone: "test-zone-1a"}})
ExpectProvisioned(ctx, env.Client, cluster, prov, pod3)
ExpectScheduled(ctx, env.Client, pod3)
- createFleetInput = fakeEC2API.CreateFleetBehavior.CalledWithInput.Pop()
+ createFleetInput = awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Pop()
Expect(fake.SubnetsFromFleetRequest(createFleetInput)).To(ConsistOf("test-subnet-1"))
})
+ It("should update in-flight IPs when a CreateFleet error occurs", func() {
+ awsEnv.EC2API.DescribeSubnetsOutput.Set(&ec2.DescribeSubnetsOutput{Subnets: []*ec2.Subnet{
+ {SubnetId: aws.String("test-subnet-1"), AvailabilityZone: aws.String("test-zone-1a"), AvailableIpAddressCount: aws.Int64(10),
+ Tags: []*ec2.Tag{{Key: aws.String("Name"), Value: aws.String("test-subnet-1")}}},
+ }})
+ pod1 := coretest.UnschedulablePod(coretest.PodOptions{NodeSelector: map[string]string{v1.LabelTopologyZone: "test-zone-1a"}})
+ ExpectApplied(ctx, env.Client, provisioner, nodeTemplate, pod1)
+ awsEnv.EC2API.CreateFleetBehavior.Error.Set(fmt.Errorf("CreateFleet synthetic error"))
+ bindings := ExpectProvisioned(ctx, env.Client, cluster, prov, pod1)
+ Expect(len(bindings)).To(Equal(0))
+ })
It("should launch instances into subnets that are excluded by another provisioner", func() {
- fakeEC2API.DescribeSubnetsOutput.Set(&ec2.DescribeSubnetsOutput{Subnets: []*ec2.Subnet{
+ awsEnv.EC2API.DescribeSubnetsOutput.Set(&ec2.DescribeSubnetsOutput{Subnets: []*ec2.Subnet{
{SubnetId: aws.String("test-subnet-1"), AvailabilityZone: aws.String("test-zone-1a"), AvailableIpAddressCount: aws.Int64(10),
Tags: []*ec2.Tag{{Key: aws.String("Name"), Value: aws.String("test-subnet-1")}}},
{SubnetId: aws.String("test-subnet-2"), AvailabilityZone: aws.String("test-zone-1b"), AvailableIpAddressCount: aws.Int64(100),
@@ -583,7 +510,7 @@ var _ = Describe("Allocation", func() {
podSubnet1 := coretest.UnschedulablePod()
ExpectProvisioned(ctx, env.Client, cluster, prov, podSubnet1)
ExpectScheduled(ctx, env.Client, podSubnet1)
- createFleetInput := fakeEC2API.CreateFleetBehavior.CalledWithInput.Pop()
+ createFleetInput := awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Pop()
Expect(fake.SubnetsFromFleetRequest(createFleetInput)).To(ConsistOf("test-subnet-1"))
provisioner = test.Provisioner(coretest.ProvisionerOptions{Provider: &v1alpha1.AWS{
@@ -594,7 +521,7 @@ var _ = Describe("Allocation", func() {
podSubnet2 := coretest.UnschedulablePod(coretest.PodOptions{NodeSelector: map[string]string{v1alpha5.ProvisionerNameLabelKey: provisioner.Name}})
ExpectProvisioned(ctx, env.Client, cluster, prov, podSubnet2)
ExpectScheduled(ctx, env.Client, podSubnet2)
- createFleetInput = fakeEC2API.CreateFleetBehavior.CalledWithInput.Pop()
+ createFleetInput = awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Pop()
Expect(fake.SubnetsFromFleetRequest(createFleetInput)).To(ConsistOf("test-subnet-2"))
})
})
diff --git a/pkg/context/context.go b/pkg/context/context.go
index 47d9c9a5a47e..cad118905089 100644
--- a/pkg/context/context.go
+++ b/pkg/context/context.go
@@ -45,6 +45,8 @@ import (
"github.com/aws/karpenter/pkg/apis/settings"
awscache "github.com/aws/karpenter/pkg/cache"
"github.com/aws/karpenter/pkg/providers/amifamily"
+ "github.com/aws/karpenter/pkg/providers/instance"
+ "github.com/aws/karpenter/pkg/providers/instancetype"
"github.com/aws/karpenter/pkg/providers/launchtemplate"
"github.com/aws/karpenter/pkg/providers/pricing"
"github.com/aws/karpenter/pkg/providers/securitygroup"
@@ -67,6 +69,8 @@ type Context struct {
AMIResolver *amifamily.Resolver
LaunchTemplateProvider *launchtemplate.Provider
PricingProvider *pricing.Provider
+ InstanceTypesProvider *instancetype.Provider
+ InstanceProvider *instance.Provider
}
func NewOrDie(ctx cloudprovider.Context) Context {
@@ -103,8 +107,9 @@ func NewOrDie(ctx cloudprovider.Context) Context {
logging.FromContext(ctx).With("kube-dns-ip", kubeDNSIP).Debugf("discovered kube dns")
}
- subnetProvider := subnet.NewProvider(ec2api)
- securityGroupProvider := securitygroup.NewProvider(ec2api)
+ unavailableOfferingsCache := awscache.NewUnavailableOfferings()
+ subnetProvider := subnet.NewProvider(ec2api, cache.New(awscache.DefaultTTL, awscache.DefaultCleanupInterval))
+ securityGroupProvider := securitygroup.NewProvider(ec2api, cache.New(awscache.DefaultTTL, awscache.DefaultCleanupInterval))
pricingProvider := pricing.NewProvider(
ctx,
pricing.NewAPI(sess, *sess.Config.Region),
@@ -126,11 +131,28 @@ func NewOrDie(ctx cloudprovider.Context) Context {
kubeDNSIP,
clusterEndpoint,
)
+ instanceTypeProvider := instancetype.NewProvider(
+ *sess.Config.Region,
+ cache.New(awscache.InstanceTypesAndZonesTTL, awscache.DefaultCleanupInterval),
+ ec2api,
+ subnetProvider,
+ unavailableOfferingsCache,
+ pricingProvider,
+ )
+ instanceProvider := instance.NewProvider(
+ ctx,
+ aws.StringValue(sess.Config.Region),
+ ec2api,
+ unavailableOfferingsCache,
+ instanceTypeProvider,
+ subnetProvider,
+ launchTemplateProvider,
+ )
return Context{
Context: ctx,
Session: sess,
- UnavailableOfferingsCache: awscache.NewUnavailableOfferings(),
+ UnavailableOfferingsCache: unavailableOfferingsCache,
EC2API: ec2api,
SubnetProvider: subnetProvider,
SecurityGroupProvider: securityGroupProvider,
@@ -138,6 +160,8 @@ func NewOrDie(ctx cloudprovider.Context) Context {
AMIResolver: amiResolver,
LaunchTemplateProvider: launchTemplateProvider,
PricingProvider: pricingProvider,
+ InstanceTypesProvider: instanceTypeProvider,
+ InstanceProvider: instanceProvider,
}
}
diff --git a/pkg/controllers/machine/garbagecollect/suite_test.go b/pkg/controllers/machine/garbagecollect/suite_test.go
index 0d54824e35a5..975819ca1ef6 100644
--- a/pkg/controllers/machine/garbagecollect/suite_test.go
+++ b/pkg/controllers/machine/garbagecollect/suite_test.go
@@ -22,47 +22,39 @@ import (
"time"
"github.com/aws/aws-sdk-go/aws"
- "github.com/aws/aws-sdk-go/awstesting/mock"
"github.com/aws/aws-sdk-go/service/ec2"
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
"github.com/patrickmn/go-cache"
"github.com/samber/lo"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
- "k8s.io/client-go/tools/record"
- clock "k8s.io/utils/clock/testing"
. "knative.dev/pkg/logging/testing"
"sigs.k8s.io/controller-runtime/pkg/client"
coresettings "github.com/aws/karpenter-core/pkg/apis/settings"
"github.com/aws/karpenter-core/pkg/apis/v1alpha5"
corecloudprovider "github.com/aws/karpenter-core/pkg/cloudprovider"
- "github.com/aws/karpenter-core/pkg/events"
"github.com/aws/karpenter-core/pkg/operator/controller"
"github.com/aws/karpenter-core/pkg/operator/scheme"
coretest "github.com/aws/karpenter-core/pkg/test"
. "github.com/aws/karpenter-core/pkg/test/expectations"
+
"github.com/aws/karpenter/pkg/apis"
"github.com/aws/karpenter/pkg/apis/settings"
"github.com/aws/karpenter/pkg/apis/v1alpha1"
- awscache "github.com/aws/karpenter/pkg/cache"
"github.com/aws/karpenter/pkg/cloudprovider"
- awscontext "github.com/aws/karpenter/pkg/context"
"github.com/aws/karpenter/pkg/controllers/machine/garbagecollect"
"github.com/aws/karpenter/pkg/controllers/machine/link"
"github.com/aws/karpenter/pkg/fake"
- "github.com/aws/karpenter/pkg/providers/securitygroup"
- "github.com/aws/karpenter/pkg/providers/subnet"
"github.com/aws/karpenter/pkg/test"
)
var ctx context.Context
+var awsEnv *test.Environment
var env *coretest.Environment
-var unavailableOfferingsCache *awscache.UnavailableOfferings
-var ec2API *fake.EC2API
-var cloudProvider *cloudprovider.CloudProvider
var garbageCollectController controller.Controller
var linkedMachineCache *cache.Cache
+var cloudProvider *cloudprovider.CloudProvider
func TestAPIs(t *testing.T) {
ctx = TestContextWithLogger(t)
@@ -74,24 +66,9 @@ var _ = BeforeSuite(func() {
ctx = coresettings.ToContext(ctx, coretest.Settings())
ctx = settings.ToContext(ctx, test.Settings())
env = coretest.NewEnvironment(scheme.Scheme, coretest.WithCRDs(apis.CRDs...))
- unavailableOfferingsCache = awscache.NewUnavailableOfferings()
- ec2API = &fake.EC2API{}
- cloudProvider = cloudprovider.New(awscontext.Context{
- Context: corecloudprovider.Context{
- Context: ctx,
- RESTConfig: env.Config,
- KubernetesInterface: env.KubernetesInterface,
- KubeClient: env.Client,
- EventRecorder: events.NewRecorder(&record.FakeRecorder{}),
- Clock: &clock.FakeClock{},
- StartAsync: nil,
- },
- SubnetProvider: subnet.NewProvider(ec2API),
- SecurityGroupProvider: securitygroup.NewProvider(ec2API),
- Session: mock.Session,
- UnavailableOfferingsCache: unavailableOfferingsCache,
- EC2API: ec2API,
- })
+ awsEnv = test.NewEnvironment(ctx, env)
+
+ cloudProvider = cloudprovider.New(ctx, awsEnv.InstanceTypesProvider, awsEnv.InstanceProvider, env.Client, awsEnv.AMIProvider)
linkedMachineCache = cache.New(time.Minute*10, time.Second*10)
linkController := &link.Controller{
Cache: linkedMachineCache,
@@ -103,12 +80,15 @@ var _ = AfterSuite(func() {
Expect(env.Stop()).To(Succeed(), "Failed to stop environment")
})
+var _ = BeforeEach(func() {
+ awsEnv.Reset()
+})
+
var _ = Describe("MachineGarbageCollect", func() {
var instance *ec2.Instance
var providerID string
BeforeEach(func() {
- ec2API.Reset()
instanceID := fake.InstanceID()
providerID = fmt.Sprintf("aws:///test-zone-1a/%s", instanceID)
nodeTemplate := test.AWSNodeTemplate(v1alpha1.AWSNodeTemplateSpec{})
@@ -153,7 +133,7 @@ var _ = Describe("MachineGarbageCollect", func() {
It("should delete an instance if there is no machine owner", func() {
// Launch time was 10m ago
instance.LaunchTime = aws.Time(time.Now().Add(-time.Minute * 10))
- ec2API.Instances.Store(aws.StringValue(instance.InstanceId), instance)
+ awsEnv.EC2API.Instances.Store(aws.StringValue(instance.InstanceId), instance)
ExpectReconcileSucceeded(ctx, garbageCollectController, client.ObjectKey{})
_, err := cloudProvider.Get(ctx, providerID)
@@ -163,7 +143,7 @@ var _ = Describe("MachineGarbageCollect", func() {
It("should delete an instance along with the node if there is no machine owner (to quicken scheduling)", func() {
// Launch time was 10m ago
instance.LaunchTime = aws.Time(time.Now().Add(-time.Minute * 10))
- ec2API.Instances.Store(aws.StringValue(instance.InstanceId), instance)
+ awsEnv.EC2API.Instances.Store(aws.StringValue(instance.InstanceId), instance)
node := coretest.Node(coretest.NodeOptions{
ProviderID: providerID,
@@ -182,7 +162,7 @@ var _ = Describe("MachineGarbageCollect", func() {
var ids []string
for i := 0; i < 500; i++ {
instanceID := fake.InstanceID()
- ec2API.Instances.Store(
+ awsEnv.EC2API.Instances.Store(
instanceID,
&ec2.Instance{
State: &ec2.InstanceState{
@@ -236,7 +216,7 @@ var _ = Describe("MachineGarbageCollect", func() {
var machines []*v1alpha5.Machine
for i := 0; i < 500; i++ {
instanceID := fake.InstanceID()
- ec2API.Instances.Store(
+ awsEnv.EC2API.Instances.Store(
instanceID,
&ec2.Instance{
State: &ec2.InstanceState{
@@ -297,7 +277,7 @@ var _ = Describe("MachineGarbageCollect", func() {
It("should not delete an instance if it is within the machine resolution window (1m)", func() {
// Launch time just happened
instance.LaunchTime = aws.Time(time.Now())
- ec2API.Instances.Store(aws.StringValue(instance.InstanceId), instance)
+ awsEnv.EC2API.Instances.Store(aws.StringValue(instance.InstanceId), instance)
ExpectReconcileSucceeded(ctx, garbageCollectController, client.ObjectKey{})
_, err := cloudProvider.Get(ctx, providerID)
@@ -311,7 +291,7 @@ var _ = Describe("MachineGarbageCollect", func() {
// Launch time was 10m ago
instance.LaunchTime = aws.Time(time.Now().Add(-time.Minute * 10))
- ec2API.Instances.Store(aws.StringValue(instance.InstanceId), instance)
+ awsEnv.EC2API.Instances.Store(aws.StringValue(instance.InstanceId), instance)
ExpectReconcileSucceeded(ctx, garbageCollectController, client.ObjectKey{})
_, err := cloudProvider.Get(ctx, providerID)
@@ -320,7 +300,7 @@ var _ = Describe("MachineGarbageCollect", func() {
It("should not delete the instance or node if it already has a machine that matches it", func() {
// Launch time was 10m ago
instance.LaunchTime = aws.Time(time.Now().Add(-time.Minute * 10))
- ec2API.Instances.Store(aws.StringValue(instance.InstanceId), instance)
+ awsEnv.EC2API.Instances.Store(aws.StringValue(instance.InstanceId), instance)
machine := coretest.Machine(v1alpha5.Machine{
Status: v1alpha5.MachineStatus{
@@ -340,7 +320,7 @@ var _ = Describe("MachineGarbageCollect", func() {
It("should not delete an instance if it is linked", func() {
// Launch time was 10m ago
instance.LaunchTime = aws.Time(time.Now().Add(-time.Minute * 10))
- ec2API.Instances.Store(aws.StringValue(instance.InstanceId), instance)
+ awsEnv.EC2API.Instances.Store(aws.StringValue(instance.InstanceId), instance)
// Create a machine that is actively linking
machine := coretest.Machine(v1alpha5.Machine{
@@ -359,7 +339,7 @@ var _ = Describe("MachineGarbageCollect", func() {
It("should not delete an instance if it is recently linked but the machine doesn't exist", func() {
// Launch time was 10m ago
instance.LaunchTime = aws.Time(time.Now().Add(-time.Minute * 10))
- ec2API.Instances.Store(aws.StringValue(instance.InstanceId), instance)
+ awsEnv.EC2API.Instances.Store(aws.StringValue(instance.InstanceId), instance)
// Add a provider id to the recently linked cache
linkedMachineCache.SetDefault(providerID, nil)
diff --git a/pkg/controllers/machine/link/suite_test.go b/pkg/controllers/machine/link/suite_test.go
index 008c91efff02..2ece7472cdb4 100644
--- a/pkg/controllers/machine/link/suite_test.go
+++ b/pkg/controllers/machine/link/suite_test.go
@@ -21,48 +21,38 @@ import (
"testing"
"github.com/aws/aws-sdk-go/aws"
- "github.com/aws/aws-sdk-go/awstesting/mock"
"github.com/aws/aws-sdk-go/service/ec2"
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
"github.com/samber/lo"
v1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/runtime"
- "k8s.io/client-go/tools/record"
- clock "k8s.io/utils/clock/testing"
. "knative.dev/pkg/logging/testing"
"sigs.k8s.io/controller-runtime/pkg/client"
coresettings "github.com/aws/karpenter-core/pkg/apis/settings"
"github.com/aws/karpenter-core/pkg/apis/v1alpha5"
- corecloudprovider "github.com/aws/karpenter-core/pkg/cloudprovider"
- "github.com/aws/karpenter-core/pkg/events"
"github.com/aws/karpenter-core/pkg/operator/controller"
"github.com/aws/karpenter-core/pkg/operator/scheme"
coretest "github.com/aws/karpenter-core/pkg/test"
. "github.com/aws/karpenter-core/pkg/test/expectations"
"github.com/aws/karpenter-core/pkg/utils/sets"
+
"github.com/aws/karpenter/pkg/apis"
"github.com/aws/karpenter/pkg/apis/settings"
"github.com/aws/karpenter/pkg/apis/v1alpha1"
- awscache "github.com/aws/karpenter/pkg/cache"
"github.com/aws/karpenter/pkg/cloudprovider"
- awscontext "github.com/aws/karpenter/pkg/context"
"github.com/aws/karpenter/pkg/controllers/machine/link"
"github.com/aws/karpenter/pkg/fake"
- "github.com/aws/karpenter/pkg/providers/pricing"
- "github.com/aws/karpenter/pkg/providers/securitygroup"
- "github.com/aws/karpenter/pkg/providers/subnet"
"github.com/aws/karpenter/pkg/test"
"github.com/aws/karpenter/pkg/utils"
)
var ctx context.Context
+var awsEnv *test.Environment
var env *coretest.Environment
-var unavailableOfferingsCache *awscache.UnavailableOfferings
-var ec2API *fake.EC2API
-var cloudProvider *cloudprovider.CloudProvider
var linkController controller.Controller
+var cloudProvider *cloudprovider.CloudProvider
func TestAPIs(t *testing.T) {
ctx = TestContextWithLogger(t)
@@ -74,32 +64,19 @@ var _ = BeforeSuite(func() {
ctx = coresettings.ToContext(ctx, coretest.Settings())
ctx = settings.ToContext(ctx, test.Settings())
env = coretest.NewEnvironment(scheme.Scheme, coretest.WithCRDs(apis.CRDs...))
- unavailableOfferingsCache = awscache.NewUnavailableOfferings()
- ec2API = &fake.EC2API{}
- cloudProvider = cloudprovider.New(awscontext.Context{
- Context: corecloudprovider.Context{
- Context: ctx,
- RESTConfig: env.Config,
- KubernetesInterface: env.KubernetesInterface,
- KubeClient: env.Client,
- EventRecorder: events.NewRecorder(&record.FakeRecorder{}),
- Clock: &clock.FakeClock{},
- StartAsync: nil,
- },
- SubnetProvider: subnet.NewProvider(ec2API),
- SecurityGroupProvider: securitygroup.NewProvider(ec2API),
- Session: mock.Session,
- UnavailableOfferingsCache: unavailableOfferingsCache,
- EC2API: ec2API,
- PricingProvider: pricing.NewProvider(ctx, &fake.PricingAPI{}, ec2API, "", make(chan struct{})),
- })
+ awsEnv = test.NewEnvironment(ctx, env)
+
+ cloudProvider = cloudprovider.New(ctx, awsEnv.InstanceTypesProvider, awsEnv.InstanceProvider, env.Client, awsEnv.AMIProvider)
linkController = link.NewController(env.Client, cloudProvider)
})
-
var _ = AfterSuite(func() {
Expect(env.Stop()).To(Succeed(), "Failed to stop environment")
})
+var _ = BeforeEach(func() {
+ awsEnv.Reset()
+})
+
var _ = Describe("MachineLink", func() {
var instanceID string
var providerID string
@@ -107,7 +84,6 @@ var _ = Describe("MachineLink", func() {
var nodeTemplate *v1alpha1.AWSNodeTemplate
BeforeEach(func() {
- ec2API.Reset()
instanceID = fake.InstanceID()
providerID = fmt.Sprintf("aws:///test-zone-1a/%s", instanceID)
nodeTemplate = test.AWSNodeTemplate(v1alpha1.AWSNodeTemplateSpec{})
@@ -120,7 +96,7 @@ var _ = Describe("MachineLink", func() {
})
// Store the instance as existing at DescribeInstances
- ec2API.Instances.Store(
+ awsEnv.EC2API.Instances.Store(
instanceID,
&ec2.Instance{
State: &ec2.InstanceState{
@@ -166,7 +142,7 @@ var _ = Describe("MachineLink", func() {
},
}
ExpectApplied(ctx, env.Client, provisioner, nodeTemplate)
- ExpectInstanceExists(ec2API, instanceID)
+ ExpectInstanceExists(awsEnv.EC2API, instanceID)
ExpectReconcileSucceeded(ctx, linkController, client.ObjectKey{})
machineList := &v1alpha5.MachineList{}
@@ -182,7 +158,7 @@ var _ = Describe("MachineLink", func() {
// Expect machine has linking annotation to get machine details
Expect(machine.Annotations).To(HaveKeyWithValue(v1alpha5.MachineLinkedAnnotationKey, providerID))
- instance := ExpectInstanceExists(ec2API, instanceID)
+ instance := ExpectInstanceExists(awsEnv.EC2API, instanceID)
ExpectManagedByTagExists(instance)
})
It("should link and instance with expected requirements and labels", func() {
@@ -204,7 +180,7 @@ var _ = Describe("MachineLink", func() {
},
}
ExpectApplied(ctx, env.Client, provisioner, nodeTemplate)
- ExpectInstanceExists(ec2API, instanceID)
+ ExpectInstanceExists(awsEnv.EC2API, instanceID)
ExpectReconcileSucceeded(ctx, linkController, client.ObjectKey{})
machineList := &v1alpha5.MachineList{}
@@ -233,7 +209,7 @@ var _ = Describe("MachineLink", func() {
// Expect machine has linking annotation to get machine details
Expect(machine.Annotations).To(HaveKeyWithValue(v1alpha5.MachineLinkedAnnotationKey, providerID))
- instance := ExpectInstanceExists(ec2API, instanceID)
+ instance := ExpectInstanceExists(awsEnv.EC2API, instanceID)
ExpectManagedByTagExists(instance)
})
It("should link an instance with expected kubelet from provisioner kubelet configuration", func() {
@@ -257,18 +233,18 @@ var _ = Describe("MachineLink", func() {
// Expect machine has linking annotation to get machine details
Expect(machine.Annotations).To(HaveKeyWithValue(v1alpha5.MachineLinkedAnnotationKey, providerID))
- instance := ExpectInstanceExists(ec2API, instanceID)
+ instance := ExpectInstanceExists(awsEnv.EC2API, instanceID)
ExpectManagedByTagExists(instance)
})
It("should link many instances to many machines", func() {
- ec2API.Reset() // Reset so we don't store the extra instance
+ awsEnv.EC2API.Reset() // Reset so we don't store the extra instance
ExpectApplied(ctx, env.Client, provisioner)
// Generate 500 instances that have different instanceIDs
var ids []string
for i := 0; i < 500; i++ {
instanceID = fake.InstanceID()
- ec2API.EC2Behavior.Instances.Store(
+ awsEnv.EC2API.EC2Behavior.Instances.Store(
instanceID,
&ec2.Instance{
State: &ec2.InstanceState{
@@ -309,7 +285,7 @@ var _ = Describe("MachineLink", func() {
Expect(machineInstanceIDs).To(HaveLen(len(ids)))
for _, id := range ids {
Expect(machineInstanceIDs.Has(id)).To(BeTrue())
- instance := ExpectInstanceExists(ec2API, id)
+ instance := ExpectInstanceExists(awsEnv.EC2API, id)
ExpectManagedByTagExists(instance)
}
})
@@ -334,7 +310,7 @@ var _ = Describe("MachineLink", func() {
// Expect machine has linking annotation to get machine details
Expect(machine.Annotations).To(HaveKeyWithValue(v1alpha5.MachineLinkedAnnotationKey, providerID))
- instance := ExpectInstanceExists(ec2API, instanceID)
+ instance := ExpectInstanceExists(awsEnv.EC2API, instanceID)
ExpectManagedByTagExists(instance)
})
It("should link an instance without node template existence", func() {
@@ -351,17 +327,17 @@ var _ = Describe("MachineLink", func() {
// Expect machine has linking annotation to get machine details
Expect(machine.Annotations).To(HaveKeyWithValue(v1alpha5.MachineLinkedAnnotationKey, providerID))
- instance := ExpectInstanceExists(ec2API, instanceID)
+ instance := ExpectInstanceExists(awsEnv.EC2API, instanceID)
ExpectManagedByTagExists(instance)
})
})
Context("Failed", func() {
It("should not link an instance without a provisioner tag", func() {
- instance := ExpectInstanceExists(ec2API, instanceID)
+ instance := ExpectInstanceExists(awsEnv.EC2API, instanceID)
instance.Tags = lo.Reject(instance.Tags, func(t *ec2.Tag, _ int) bool {
return aws.StringValue(t.Key) == v1alpha5.ProvisionerNameLabelKey
})
- ec2API.Instances.Store(instanceID, instance)
+ awsEnv.EC2API.Instances.Store(instanceID, instance)
ExpectApplied(ctx, env.Client, provisioner, nodeTemplate)
ExpectReconcileSucceeded(ctx, linkController, client.ObjectKey{})
@@ -398,9 +374,9 @@ var _ = Describe("MachineLink", func() {
})
It("should not link an instance that is terminated", func() {
// Update the state of the existing instance
- instance := ExpectInstanceExists(ec2API, instanceID)
+ instance := ExpectInstanceExists(awsEnv.EC2API, instanceID)
instance.State.Name = aws.String(ec2.InstanceStateNameTerminated)
- ec2API.Instances.Store(instanceID, instance)
+ awsEnv.EC2API.Instances.Store(instanceID, instance)
ExpectReconcileSucceeded(ctx, linkController, client.ObjectKey{})
machineList := &v1alpha5.MachineList{}
diff --git a/pkg/controllers/nodetemplate/suite_test.go b/pkg/controllers/nodetemplate/suite_test.go
index 717832d3ea62..f3f20bffd9dc 100644
--- a/pkg/controllers/nodetemplate/suite_test.go
+++ b/pkg/controllers/nodetemplate/suite_test.go
@@ -19,38 +19,34 @@ import (
"sort"
"testing"
+ "github.com/aws/aws-sdk-go/service/ec2"
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
"github.com/samber/lo"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
. "knative.dev/pkg/logging/testing"
_ "knative.dev/pkg/system/testing"
"sigs.k8s.io/controller-runtime/pkg/client"
- "github.com/aws/aws-sdk-go/service/ec2"
-
+ coresettings "github.com/aws/karpenter-core/pkg/apis/settings"
+ corecontroller "github.com/aws/karpenter-core/pkg/operator/controller"
"github.com/aws/karpenter-core/pkg/operator/injection"
"github.com/aws/karpenter-core/pkg/operator/options"
"github.com/aws/karpenter-core/pkg/operator/scheme"
-
- metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-
- corecontroller "github.com/aws/karpenter-core/pkg/operator/controller"
coretest "github.com/aws/karpenter-core/pkg/test"
. "github.com/aws/karpenter-core/pkg/test/expectations"
+
"github.com/aws/karpenter/pkg/apis"
+ "github.com/aws/karpenter/pkg/apis/settings"
"github.com/aws/karpenter/pkg/apis/v1alpha1"
"github.com/aws/karpenter/pkg/controllers/nodetemplate"
- "github.com/aws/karpenter/pkg/fake"
- "github.com/aws/karpenter/pkg/providers/securitygroup"
- "github.com/aws/karpenter/pkg/providers/subnet"
+ "github.com/aws/karpenter/pkg/test"
)
var ctx context.Context
var env *coretest.Environment
-var fakeEC2API *fake.EC2API
+var awsEnv *test.Environment
var opts options.Options
-var subnetProvider *subnet.Provider
-var securityGroupProvider *securitygroup.Provider
var nodeTemplate *v1alpha1.AWSNodeTemplate
var controller corecontroller.Controller
@@ -62,11 +58,11 @@ func TestAPIs(t *testing.T) {
var _ = BeforeSuite(func() {
env = coretest.NewEnvironment(scheme.Scheme, coretest.WithCRDs(apis.CRDs...))
+ ctx = coresettings.ToContext(ctx, coretest.Settings())
+ ctx = settings.ToContext(ctx, test.Settings())
+ awsEnv = test.NewEnvironment(ctx, env)
- fakeEC2API = &fake.EC2API{}
- subnetProvider = subnet.NewProvider(fakeEC2API)
- securityGroupProvider = securitygroup.NewProvider(fakeEC2API)
- controller = nodetemplate.NewController(env.Client, subnetProvider, securityGroupProvider)
+ controller = nodetemplate.NewController(env.Client, awsEnv.SubnetProvider, awsEnv.SecurityGroupProvider)
})
var _ = AfterSuite(func() {
@@ -88,7 +84,7 @@ var _ = BeforeEach(func() {
},
}
- fakeEC2API.Reset()
+ awsEnv.Reset()
})
var _ = AfterEach(func() {
@@ -101,7 +97,7 @@ var _ = Describe("AWSNodeTemplateController", func() {
ExpectApplied(ctx, env.Client, nodeTemplate)
ExpectReconcileSucceeded(ctx, controller, client.ObjectKeyFromObject(nodeTemplate))
nodeTemplate = ExpectExists(ctx, env.Client, nodeTemplate)
- subnet, _ := subnetProvider.List(ctx, nodeTemplate)
+ subnet, _ := awsEnv.SubnetProvider.List(ctx, nodeTemplate)
subnetIDs := lo.Map(subnet, func(ec2subnet *ec2.Subnet, _ int) string {
return *ec2subnet.SubnetId
})
@@ -116,7 +112,7 @@ var _ = Describe("AWSNodeTemplateController", func() {
ExpectApplied(ctx, env.Client, nodeTemplate)
ExpectReconcileSucceeded(ctx, controller, client.ObjectKeyFromObject(nodeTemplate))
nodeTemplate = ExpectExists(ctx, env.Client, nodeTemplate)
- subnet, _ := subnetProvider.List(ctx, nodeTemplate)
+ subnet, _ := awsEnv.SubnetProvider.List(ctx, nodeTemplate)
sort.Slice(subnet, func(i, j int) bool {
return int(*subnet[i].AvailableIpAddressCount) > int(*subnet[j].AvailableIpAddressCount)
})
@@ -133,7 +129,7 @@ var _ = Describe("AWSNodeTemplateController", func() {
ExpectApplied(ctx, env.Client, nodeTemplate)
ExpectReconcileSucceeded(ctx, controller, client.ObjectKeyFromObject(nodeTemplate))
nodeTemplate = ExpectExists(ctx, env.Client, nodeTemplate)
- subnet, _ := subnetProvider.List(ctx, nodeTemplate)
+ subnet, _ := awsEnv.SubnetProvider.List(ctx, nodeTemplate)
sort.Slice(subnet, func(i, j int) bool {
return int(*subnet[i].AvailableIpAddressCount) > int(*subnet[j].AvailableIpAddressCount)
})
@@ -150,7 +146,7 @@ var _ = Describe("AWSNodeTemplateController", func() {
ExpectApplied(ctx, env.Client, nodeTemplate)
ExpectReconcileSucceeded(ctx, controller, client.ObjectKeyFromObject(nodeTemplate))
nodeTemplate = ExpectExists(ctx, env.Client, nodeTemplate)
- subnet, _ := subnetProvider.List(ctx, nodeTemplate)
+ subnet, _ := awsEnv.SubnetProvider.List(ctx, nodeTemplate)
correctSubnetIDs := lo.Map(subnet, func(ec2subnet *ec2.Subnet, _ int) v1alpha1.SubnetStatus {
return v1alpha1.SubnetStatus{
ID: *ec2subnet.SubnetId,
@@ -164,7 +160,7 @@ var _ = Describe("AWSNodeTemplateController", func() {
ExpectApplied(ctx, env.Client, nodeTemplate)
ExpectReconcileSucceeded(ctx, controller, client.ObjectKeyFromObject(nodeTemplate))
nodeTemplate = ExpectExists(ctx, env.Client, nodeTemplate)
- subnet, _ := subnetProvider.List(ctx, nodeTemplate)
+ subnet, _ := awsEnv.SubnetProvider.List(ctx, nodeTemplate)
subnetIDs := lo.Map(subnet, func(ec2subnet *ec2.Subnet, _ int) string {
return *ec2subnet.SubnetId
})
@@ -179,7 +175,7 @@ var _ = Describe("AWSNodeTemplateController", func() {
ExpectApplied(ctx, env.Client, nodeTemplate)
ExpectReconcileSucceeded(ctx, controller, client.ObjectKeyFromObject(nodeTemplate))
nodeTemplate = ExpectExists(ctx, env.Client, nodeTemplate)
- subnet, _ = subnetProvider.List(ctx, nodeTemplate)
+ subnet, _ = awsEnv.SubnetProvider.List(ctx, nodeTemplate)
sort.Slice(subnet, func(i, j int) bool {
return int(*subnet[i].AvailableIpAddressCount) > int(*subnet[j].AvailableIpAddressCount)
})
@@ -195,7 +191,7 @@ var _ = Describe("AWSNodeTemplateController", func() {
ExpectApplied(ctx, env.Client, nodeTemplate)
ExpectReconcileSucceeded(ctx, controller, client.ObjectKeyFromObject(nodeTemplate))
nodeTemplate = ExpectExists(ctx, env.Client, nodeTemplate)
- subnet, _ := subnetProvider.List(ctx, nodeTemplate)
+ subnet, _ := awsEnv.SubnetProvider.List(ctx, nodeTemplate)
subnetIDs := lo.Map(subnet, func(ec2subnet *ec2.Subnet, _ int) string {
return *ec2subnet.SubnetId
})
@@ -210,7 +206,7 @@ var _ = Describe("AWSNodeTemplateController", func() {
ExpectApplied(ctx, env.Client, nodeTemplate)
ExpectReconcileSucceeded(ctx, controller, client.ObjectKeyFromObject(nodeTemplate))
nodeTemplate = ExpectExists(ctx, env.Client, nodeTemplate)
- subnet, _ = subnetProvider.List(ctx, nodeTemplate)
+ subnet, _ = awsEnv.SubnetProvider.List(ctx, nodeTemplate)
correctSubnetIDs := lo.Map(subnet, func(ec2subnet *ec2.Subnet, _ int) v1alpha1.SubnetStatus {
return v1alpha1.SubnetStatus{
ID: *ec2subnet.SubnetId,
@@ -231,7 +227,7 @@ var _ = Describe("AWSNodeTemplateController", func() {
ExpectApplied(ctx, env.Client, nodeTemplate)
ExpectReconcileSucceeded(ctx, controller, client.ObjectKeyFromObject(nodeTemplate))
nodeTemplate = ExpectExists(ctx, env.Client, nodeTemplate)
- subnet, _ := subnetProvider.List(ctx, nodeTemplate)
+ subnet, _ := awsEnv.SubnetProvider.List(ctx, nodeTemplate)
subnetIDs := lo.Map(subnet, func(ec2subnet *ec2.Subnet, _ int) string {
return *ec2subnet.SubnetId
})
@@ -256,7 +252,7 @@ var _ = Describe("AWSNodeTemplateController", func() {
ExpectApplied(ctx, env.Client, nodeTemplate)
ExpectReconcileSucceeded(ctx, controller, client.ObjectKeyFromObject(nodeTemplate))
nodeTemplate = ExpectExists(ctx, env.Client, nodeTemplate)
- securityGroupsIDs, _ := securityGroupProvider.List(ctx, nodeTemplate)
+ securityGroupsIDs, _ := awsEnv.SecurityGroupProvider.List(ctx, nodeTemplate)
securityGroupsIDInStatus := lo.Map(nodeTemplate.Status.SecurityGroups, func(securitygroup v1alpha1.SecurityGroupStatus, _ int) string {
return securitygroup.ID
})
@@ -266,7 +262,7 @@ var _ = Describe("AWSNodeTemplateController", func() {
ExpectApplied(ctx, env.Client, nodeTemplate)
ExpectReconcileSucceeded(ctx, controller, client.ObjectKeyFromObject(nodeTemplate))
nodeTemplate = ExpectExists(ctx, env.Client, nodeTemplate)
- securityGroupsIDs, _ := securityGroupProvider.List(ctx, nodeTemplate)
+ securityGroupsIDs, _ := awsEnv.SecurityGroupProvider.List(ctx, nodeTemplate)
securityGroupsIDInStatus := lo.Map(nodeTemplate.Status.SecurityGroups, func(securitygroup v1alpha1.SecurityGroupStatus, _ int) string {
return securitygroup.ID
})
@@ -277,7 +273,7 @@ var _ = Describe("AWSNodeTemplateController", func() {
ExpectApplied(ctx, env.Client, nodeTemplate)
ExpectReconcileSucceeded(ctx, controller, client.ObjectKeyFromObject(nodeTemplate))
nodeTemplate = ExpectExists(ctx, env.Client, nodeTemplate)
- securityGroupsIDs, _ := securityGroupProvider.List(ctx, nodeTemplate)
+ securityGroupsIDs, _ := awsEnv.SecurityGroupProvider.List(ctx, nodeTemplate)
correctSecurityGroupsIDs := lo.Map(securityGroupsIDs, func(securitygroup string, _ int) v1alpha1.SecurityGroupStatus {
return v1alpha1.SecurityGroupStatus{
ID: securitygroup,
@@ -290,7 +286,7 @@ var _ = Describe("AWSNodeTemplateController", func() {
ExpectApplied(ctx, env.Client, nodeTemplate)
ExpectReconcileSucceeded(ctx, controller, client.ObjectKeyFromObject(nodeTemplate))
nodeTemplate = ExpectExists(ctx, env.Client, nodeTemplate)
- securityGroupsIDs, _ := securityGroupProvider.List(ctx, nodeTemplate)
+ securityGroupsIDs, _ := awsEnv.SecurityGroupProvider.List(ctx, nodeTemplate)
correctSecurityGroupsIDs := lo.Map(securityGroupsIDs, func(securitygroup string, _ int) v1alpha1.SecurityGroupStatus {
return v1alpha1.SecurityGroupStatus{
ID: securitygroup,
@@ -302,7 +298,7 @@ var _ = Describe("AWSNodeTemplateController", func() {
ExpectApplied(ctx, env.Client, nodeTemplate)
ExpectReconcileSucceeded(ctx, controller, client.ObjectKeyFromObject(nodeTemplate))
nodeTemplate = ExpectExists(ctx, env.Client, nodeTemplate)
- securityGroupsIDs, _ := securityGroupProvider.List(ctx, nodeTemplate)
+ securityGroupsIDs, _ := awsEnv.SecurityGroupProvider.List(ctx, nodeTemplate)
securityGroupsIDInStatus := lo.Map(nodeTemplate.Status.SecurityGroups, func(securitygroup v1alpha1.SecurityGroupStatus, _ int) string {
return securitygroup.ID
})
@@ -312,7 +308,7 @@ var _ = Describe("AWSNodeTemplateController", func() {
ExpectApplied(ctx, env.Client, nodeTemplate)
ExpectReconcileSucceeded(ctx, controller, client.ObjectKeyFromObject(nodeTemplate))
nodeTemplate = ExpectExists(ctx, env.Client, nodeTemplate)
- securityGroupsIDs, _ = securityGroupProvider.List(ctx, nodeTemplate)
+ securityGroupsIDs, _ = awsEnv.SecurityGroupProvider.List(ctx, nodeTemplate)
correctSecurityGroupsIDs := lo.Map(securityGroupsIDs, func(securitygroup string, _ int) v1alpha1.SecurityGroupStatus {
return v1alpha1.SecurityGroupStatus{
ID: securitygroup,
@@ -324,7 +320,7 @@ var _ = Describe("AWSNodeTemplateController", func() {
ExpectApplied(ctx, env.Client, nodeTemplate)
ExpectReconcileSucceeded(ctx, controller, client.ObjectKeyFromObject(nodeTemplate))
nodeTemplate = ExpectExists(ctx, env.Client, nodeTemplate)
- securityGroupsIDs, _ := securityGroupProvider.List(ctx, nodeTemplate)
+ securityGroupsIDs, _ := awsEnv.SecurityGroupProvider.List(ctx, nodeTemplate)
securityGroupsIDInStatus := lo.Map(nodeTemplate.Status.SecurityGroups, func(securitygroup v1alpha1.SecurityGroupStatus, _ int) string {
return securitygroup.ID
})
@@ -334,7 +330,7 @@ var _ = Describe("AWSNodeTemplateController", func() {
ExpectApplied(ctx, env.Client, nodeTemplate)
ExpectReconcileSucceeded(ctx, controller, client.ObjectKeyFromObject(nodeTemplate))
nodeTemplate = ExpectExists(ctx, env.Client, nodeTemplate)
- securityGroupsIDs, _ = securityGroupProvider.List(ctx, nodeTemplate)
+ securityGroupsIDs, _ = awsEnv.SecurityGroupProvider.List(ctx, nodeTemplate)
correctSecurityGroupsIDs := lo.Map(securityGroupsIDs, func(securitygroup string, _ int) v1alpha1.SecurityGroupStatus {
return v1alpha1.SecurityGroupStatus{
ID: securitygroup,
@@ -353,7 +349,7 @@ var _ = Describe("AWSNodeTemplateController", func() {
ExpectApplied(ctx, env.Client, nodeTemplate)
ExpectReconcileSucceeded(ctx, controller, client.ObjectKeyFromObject(nodeTemplate))
nodeTemplate = ExpectExists(ctx, env.Client, nodeTemplate)
- securityGroupsIDs, _ := securityGroupProvider.List(ctx, nodeTemplate)
+ securityGroupsIDs, _ := awsEnv.SecurityGroupProvider.List(ctx, nodeTemplate)
securityGroupsIDInStatus := lo.Map(nodeTemplate.Status.SecurityGroups, func(securitygroup v1alpha1.SecurityGroupStatus, _ int) string {
return securitygroup.ID
})
diff --git a/pkg/providers/amifamily/ami.go b/pkg/providers/amifamily/ami.go
index 9bf1054ee4b2..96b92c57b646 100644
--- a/pkg/providers/amifamily/ami.go
+++ b/pkg/providers/amifamily/ami.go
@@ -179,7 +179,11 @@ func (p *Provider) fetchAMIsFromEC2(ctx context.Context, amiSelector map[string]
if amis, ok := p.ec2Cache.Get(fmt.Sprint(hash)); ok {
return amis.([]*ec2.Image), nil
}
- describeImagesInput := &ec2.DescribeImagesInput{Filters: filters, Owners: owners}
+ describeImagesInput := &ec2.DescribeImagesInput{Owners: owners}
+ // Don't include filters in the Describe Images call as EC2 API doesn't allow empty filters.
+ if len(filters) != 0 {
+ describeImagesInput.Filters = filters
+ }
// This API is not paginated, so a single call suffices.
output, err := p.ec2api.DescribeImagesWithContext(ctx, describeImagesInput)
if err != nil {
diff --git a/pkg/providers/amifamily/ami_test.go b/pkg/providers/amifamily/ami_test.go
index d840c82541f5..aec7a1fc21cc 100644
--- a/pkg/providers/amifamily/ami_test.go
+++ b/pkg/providers/amifamily/ami_test.go
@@ -62,16 +62,11 @@ var _ = Describe("AMI Selectors", func() {
})
It("should not set owners when legacy ids are passed", func() {
amiSelector := map[string]string{
- "aws::name": "my-ami",
- "aws-ids": "ami-abcd1234,ami-cafeaced",
+ "aws-ids": "ami-abcd1234,ami-cafeaced",
}
filters, owners := getFiltersAndOwners(amiSelector)
Expect(owners).Should(BeNil())
Expect(filters).Should(ConsistOf([]*ec2.Filter{
- {
- Name: aws.String("name"),
- Values: aws.StringSlice([]string{"my-ami"}),
- },
{
Name: aws.String("image-id"),
Values: aws.StringSlice([]string{
@@ -83,16 +78,11 @@ var _ = Describe("AMI Selectors", func() {
})
It("should not set owners when prefixed ids are passed", func() {
amiSelector := map[string]string{
- "aws::name": "my-ami",
- "aws::ids": "ami-abcd1234,ami-cafeaced",
+ "aws::ids": "ami-abcd1234,ami-cafeaced",
}
filters, owners := getFiltersAndOwners(amiSelector)
Expect(owners).Should(BeNil())
Expect(filters).Should(ConsistOf([]*ec2.Filter{
- {
- Name: aws.String("name"),
- Values: aws.StringSlice([]string{"my-ami"}),
- },
{
Name: aws.String("image-id"),
Values: aws.StringSlice([]string{
@@ -102,6 +92,15 @@ var _ = Describe("AMI Selectors", func() {
},
}))
})
+ It("should allow only specifying owners", func() {
+ amiSelector := map[string]string{
+ "aws::owners": "abcdef,123456789012",
+ }
+ _, owners := getFiltersAndOwners(amiSelector)
+ Expect(owners).Should(ConsistOf(
+ []*string{aws.String("abcdef"), aws.String("123456789012")},
+ ))
+ })
It("should allow prefixed id, prefixed name, and prefixed owners", func() {
amiSelector := map[string]string{
"aws::name": "my-ami",
diff --git a/pkg/cloudprovider/instance.go b/pkg/providers/instance/instance.go
similarity index 89%
rename from pkg/cloudprovider/instance.go
rename to pkg/providers/instance/instance.go
index 65d753607246..98a40b7722fe 100644
--- a/pkg/cloudprovider/instance.go
+++ b/pkg/providers/instance/instance.go
@@ -12,7 +12,7 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
-package cloudprovider
+package instance
import (
"context"
@@ -38,6 +38,7 @@ import (
"github.com/aws/karpenter/pkg/batcher"
"github.com/aws/karpenter/pkg/cache"
awserrors "github.com/aws/karpenter/pkg/errors"
+ "github.com/aws/karpenter/pkg/providers/instancetype"
"github.com/aws/karpenter/pkg/providers/launchtemplate"
"github.com/aws/karpenter/pkg/providers/subnet"
"github.com/aws/karpenter/pkg/utils"
@@ -45,11 +46,13 @@ import (
"github.com/aws/karpenter-core/pkg/utils/resources"
"github.com/aws/karpenter-core/pkg/apis/v1alpha5"
- "github.com/aws/karpenter-core/pkg/cloudprovider"
+ cloudprovider "github.com/aws/karpenter-core/pkg/cloudprovider"
"github.com/aws/karpenter-core/pkg/scheduling"
)
var (
+ // MaxInstanceTypes defines the number of instance type options to pass to CreateFleet
+ MaxInstanceTypes = 60
instanceTypeFlexibilityThreshold = 5 // falling back to on-demand without flexibility risks insufficient capacity errors
instanceStateFilter = &ec2.Filter{
@@ -58,18 +61,19 @@ var (
}
)
-type InstanceProvider struct {
+type Provider struct {
region string
ec2api ec2iface.EC2API
unavailableOfferings *cache.UnavailableOfferings
- instanceTypeProvider *InstanceTypeProvider
+ instanceTypeProvider *instancetype.Provider
subnetProvider *subnet.Provider
launchTemplateProvider *launchtemplate.Provider
ec2Batcher *batcher.EC2API
}
-func NewInstanceProvider(ctx context.Context, region string, ec2api ec2iface.EC2API, unavailableOfferings *cache.UnavailableOfferings, instanceTypeProvider *InstanceTypeProvider, subnetProvider *subnet.Provider, launchTemplateProvider *launchtemplate.Provider) *InstanceProvider {
- return &InstanceProvider{
+func NewProvider(ctx context.Context, region string, ec2api ec2iface.EC2API, unavailableOfferings *cache.UnavailableOfferings,
+ instanceTypeProvider *instancetype.Provider, subnetProvider *subnet.Provider, launchTemplateProvider *launchtemplate.Provider) *Provider {
+ return &Provider{
region: region,
ec2api: ec2api,
unavailableOfferings: unavailableOfferings,
@@ -80,7 +84,7 @@ func NewInstanceProvider(ctx context.Context, region string, ec2api ec2iface.EC2
}
}
-func (p *InstanceProvider) Create(ctx context.Context, nodeTemplate *v1alpha1.AWSNodeTemplate, machine *v1alpha5.Machine, instanceTypes []*cloudprovider.InstanceType) (*ec2.Instance, error) {
+func (p *Provider) Create(ctx context.Context, nodeTemplate *v1alpha1.AWSNodeTemplate, machine *v1alpha5.Machine, instanceTypes []*cloudprovider.InstanceType) (*ec2.Instance, error) {
instanceTypes = p.filterInstanceTypes(machine, instanceTypes)
instanceTypes = orderInstanceTypesByPrice(instanceTypes, scheduling.NewNodeSelectorRequirements(machine.Spec.Requirements...))
if len(instanceTypes) > MaxInstanceTypes {
@@ -111,12 +115,12 @@ func (p *InstanceProvider) Create(ctx context.Context, nodeTemplate *v1alpha1.AW
"hostname", aws.StringValue(instance.PrivateDnsName),
"instance-type", aws.StringValue(instance.InstanceType),
"zone", aws.StringValue(instance.Placement.AvailabilityZone),
- "capacity-type", getCapacityType(instance)).Infof("launched new instance")
+ "capacity-type", GetCapacityType(instance)).Infof("launched new instance")
return instance, nil
}
-func (p *InstanceProvider) Link(ctx context.Context, id string) error {
+func (p *Provider) Link(ctx context.Context, id string) error {
_, err := p.ec2api.CreateTagsWithContext(ctx, &ec2.CreateTagsInput{
Resources: aws.StringSlice([]string{id}),
Tags: []*ec2.Tag{
@@ -135,7 +139,7 @@ func (p *InstanceProvider) Link(ctx context.Context, id string) error {
return nil
}
-func (p *InstanceProvider) Get(ctx context.Context, id string) (*ec2.Instance, error) {
+func (p *Provider) Get(ctx context.Context, id string) (*ec2.Instance, error) {
out, err := p.ec2Batcher.DescribeInstances(ctx, &ec2.DescribeInstancesInput{
InstanceIds: aws.StringSlice([]string{id}),
Filters: []*ec2.Filter{instanceStateFilter},
@@ -159,7 +163,7 @@ func (p *InstanceProvider) Get(ctx context.Context, id string) (*ec2.Instance, e
return instances[0], nil
}
-func (p *InstanceProvider) List(ctx context.Context) ([]*ec2.Instance, error) {
+func (p *Provider) List(ctx context.Context) ([]*ec2.Instance, error) {
// Use the machine name data to determine which instances match this machine
out, err := p.ec2api.DescribeInstancesWithContext(ctx, &ec2.DescribeInstancesInput{
Filters: []*ec2.Filter{
@@ -181,7 +185,7 @@ func (p *InstanceProvider) List(ctx context.Context) ([]*ec2.Instance, error) {
return instances, cloudprovider.IgnoreMachineNotFoundError(err)
}
-func (p *InstanceProvider) Delete(ctx context.Context, id string) error {
+func (p *Provider) Delete(ctx context.Context, id string) error {
if _, err := p.ec2Batcher.TerminateInstances(ctx, &ec2.TerminateInstancesInput{
InstanceIds: []*string{aws.String(id)},
}); err != nil {
@@ -199,7 +203,7 @@ func (p *InstanceProvider) Delete(ctx context.Context, id string) error {
return nil
}
-func (p *InstanceProvider) launchInstance(ctx context.Context, nodeTemplate *v1alpha1.AWSNodeTemplate, machine *v1alpha5.Machine, instanceTypes []*cloudprovider.InstanceType) (*string, error) {
+func (p *Provider) launchInstance(ctx context.Context, nodeTemplate *v1alpha1.AWSNodeTemplate, machine *v1alpha5.Machine, instanceTypes []*cloudprovider.InstanceType) (*string, error) {
capacityType := p.getCapacityType(machine, instanceTypes)
zonalSubnets, err := p.subnetProvider.ZonalSubnetsForLaunch(ctx, nodeTemplate, instanceTypes, capacityType)
if err != nil {
@@ -232,7 +236,7 @@ func (p *InstanceProvider) launchInstance(ctx context.Context, nodeTemplate *v1a
},
}
if capacityType == v1alpha5.CapacityTypeSpot {
- createFleetInput.SpotOptions = &ec2.SpotOptionsRequest{AllocationStrategy: aws.String(ec2.AllocationStrategyPriceCapacityOptimized)}
+ createFleetInput.SpotOptions = &ec2.SpotOptionsRequest{AllocationStrategy: aws.String(ec2.SpotAllocationStrategyPriceCapacityOptimized)}
} else {
createFleetInput.OnDemandOptions = &ec2.OnDemandOptionsRequest{AllocationStrategy: aws.String(ec2.FleetOnDemandAllocationStrategyLowestPrice)}
}
@@ -259,7 +263,7 @@ func (p *InstanceProvider) launchInstance(ctx context.Context, nodeTemplate *v1a
return createFleetOutput.Instances[0].InstanceIds[0], nil
}
-func (p *InstanceProvider) checkODFallback(machine *v1alpha5.Machine, instanceTypes []*cloudprovider.InstanceType, launchTemplateConfigs []*ec2.FleetLaunchTemplateConfigRequest) error {
+func (p *Provider) checkODFallback(machine *v1alpha5.Machine, instanceTypes []*cloudprovider.InstanceType, launchTemplateConfigs []*ec2.FleetLaunchTemplateConfigRequest) error {
// only evaluate for on-demand fallback if the capacity type for the request is OD and both OD and spot are allowed in requirements
if p.getCapacityType(machine, instanceTypes) != v1alpha5.CapacityTypeOnDemand || !scheduling.NewNodeSelectorRequirements(machine.Spec.Requirements...).Get(v1alpha5.LabelCapacityType).Has(v1alpha5.CapacityTypeSpot) {
return nil
@@ -281,7 +285,7 @@ func (p *InstanceProvider) checkODFallback(machine *v1alpha5.Machine, instanceTy
return nil
}
-func (p *InstanceProvider) getLaunchTemplateConfigs(ctx context.Context, nodeTemplate *v1alpha1.AWSNodeTemplate, machine *v1alpha5.Machine,
+func (p *Provider) getLaunchTemplateConfigs(ctx context.Context, nodeTemplate *v1alpha1.AWSNodeTemplate, machine *v1alpha5.Machine,
instanceTypes []*cloudprovider.InstanceType, zonalSubnets map[string]*ec2.Subnet, capacityType string) ([]*ec2.FleetLaunchTemplateConfigRequest, error) {
var launchTemplateConfigs []*ec2.FleetLaunchTemplateConfigRequest
launchTemplates, err := p.launchTemplateProvider.EnsureAll(ctx, nodeTemplate, machine, instanceTypes, map[string]string{v1alpha5.LabelCapacityType: capacityType})
@@ -308,7 +312,7 @@ func (p *InstanceProvider) getLaunchTemplateConfigs(ctx context.Context, nodeTem
// getOverrides creates and returns launch template overrides for the cross product of InstanceTypes and subnets (with subnets being constrained by
// zones and the offerings in InstanceTypes)
-func (p *InstanceProvider) getOverrides(instanceTypes []*cloudprovider.InstanceType, zonalSubnets map[string]*ec2.Subnet, zones *scheduling.Requirement, capacityType string) []*ec2.FleetLaunchTemplateOverridesRequest {
+func (p *Provider) getOverrides(instanceTypes []*cloudprovider.InstanceType, zonalSubnets map[string]*ec2.Subnet, zones *scheduling.Requirement, capacityType string) []*ec2.FleetLaunchTemplateOverridesRequest {
// Unwrap all the offerings to a flat slice that includes a pointer
// to the parent instance type name
type offeringWithParentName struct {
@@ -351,7 +355,7 @@ func (p *InstanceProvider) getOverrides(instanceTypes []*cloudprovider.InstanceT
// Update receives a machine and updates the EC2 instance with tags linking it to the machine
// Deprecated: This function can be removed when v1alpha6/v1beta1 migration has completed.
-func (p *InstanceProvider) Update(ctx context.Context, machine *v1alpha5.Machine) (*ec2.Instance, error) {
+func (p *Provider) Update(ctx context.Context, machine *v1alpha5.Machine) (*ec2.Instance, error) {
_, err := p.ec2api.CreateTagsWithContext(ctx, &ec2.CreateTagsInput{
Resources: aws.StringSlice([]string{lo.Must(utils.ParseInstanceID(machine.Status.ProviderID))}),
Tags: []*ec2.Tag{
@@ -393,7 +397,7 @@ func (p *InstanceProvider) Update(ctx context.Context, machine *v1alpha5.Machine
return instance, nil
}
-func (p *InstanceProvider) updateUnavailableOfferingsCache(ctx context.Context, errors []*ec2.CreateFleetError, capacityType string) {
+func (p *Provider) updateUnavailableOfferingsCache(ctx context.Context, errors []*ec2.CreateFleetError, capacityType string) {
for _, err := range errors {
if awserrors.IsUnfulfillableCapacity(err) {
p.unavailableOfferings.MarkUnavailableForFleetErr(ctx, err, capacityType)
@@ -404,7 +408,7 @@ func (p *InstanceProvider) updateUnavailableOfferingsCache(ctx context.Context,
// getCapacityType selects spot if both constraints are flexible and there is an
// available offering. The AWS Cloud Provider defaults to [ on-demand ], so spot
// must be explicitly included in capacity type requirements.
-func (p *InstanceProvider) getCapacityType(machine *v1alpha5.Machine, instanceTypes []*cloudprovider.InstanceType) string {
+func (p *Provider) getCapacityType(machine *v1alpha5.Machine, instanceTypes []*cloudprovider.InstanceType) string {
requirements := scheduling.NewNodeSelectorRequirements(machine.
Spec.Requirements...)
if requirements.Get(v1alpha5.LabelCapacityType).Has(v1alpha5.CapacityTypeSpot) {
@@ -440,7 +444,7 @@ func orderInstanceTypesByPrice(instanceTypes []*cloudprovider.InstanceType, requ
// filterInstanceTypes is used to provide filtering on the list of potential instance types to further limit it to those
// that make the most sense given our specific AWS cloudprovider.
-func (p *InstanceProvider) filterInstanceTypes(machine *v1alpha5.Machine, instanceTypes []*cloudprovider.InstanceType) []*cloudprovider.InstanceType {
+func (p *Provider) filterInstanceTypes(machine *v1alpha5.Machine, instanceTypes []*cloudprovider.InstanceType) []*cloudprovider.InstanceType {
instanceTypes = filterExoticInstanceTypes(instanceTypes)
// If we could potentially launch either a spot or on-demand node, we want to filter out the spot instance types that
// are more expensive than the cheapest on-demand type.
@@ -452,7 +456,7 @@ func (p *InstanceProvider) filterInstanceTypes(machine *v1alpha5.Machine, instan
// isMixedCapacityLaunch returns true if provisioners and available offerings could potentially allow either a spot or
// and on-demand node to launch
-func (p *InstanceProvider) isMixedCapacityLaunch(machine *v1alpha5.Machine, instanceTypes []*cloudprovider.InstanceType) bool {
+func (p *Provider) isMixedCapacityLaunch(machine *v1alpha5.Machine, instanceTypes []*cloudprovider.InstanceType) bool {
requirements := scheduling.NewNodeSelectorRequirements(machine.Spec.Requirements...)
// requirements must allow both
if !requirements.Get(v1alpha5.LabelCapacityType).Has(v1alpha5.CapacityTypeSpot) ||
@@ -557,7 +561,7 @@ func combineFleetErrors(errors []*ec2.CreateFleetError) (errs error) {
return fmt.Errorf("with fleet error(s), %w", errs)
}
-func getCapacityType(instance *ec2.Instance) string {
+func GetCapacityType(instance *ec2.Instance) string {
if instance.SpotInstanceRequestId != nil {
return v1alpha5.CapacityTypeSpot
}
diff --git a/pkg/cloudprovider/instancetypes.go b/pkg/providers/instancetype/instancetype.go
similarity index 88%
rename from pkg/cloudprovider/instancetypes.go
rename to pkg/providers/instancetype/instancetype.go
index 75a1bc10bceb..a30459c0f974 100644
--- a/pkg/cloudprovider/instancetypes.go
+++ b/pkg/providers/instancetype/instancetype.go
@@ -12,7 +12,7 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
-package cloudprovider
+package instancetype
import (
"context"
@@ -21,8 +21,6 @@ import (
"sync"
"sync/atomic"
- "github.com/aws/aws-sdk-go/aws/session"
-
awscache "github.com/aws/karpenter/pkg/cache"
"github.com/aws/aws-sdk-go/aws"
@@ -48,7 +46,7 @@ const (
InstanceTypeZonesCacheKeyPrefix = "zones:"
)
-type InstanceTypeProvider struct {
+type Provider struct {
region string
ec2api ec2iface.EC2API
subnetProvider *subnet.Provider
@@ -68,23 +66,23 @@ type InstanceTypeProvider struct {
instanceTypesSeqNum uint64
}
-func NewInstanceTypeProvider(sess *session.Session, ec2api ec2iface.EC2API, subnetProvider *subnet.Provider,
- unavailableOfferingsCache *awscache.UnavailableOfferings, pricingProvider *pricing.Provider) *InstanceTypeProvider {
- return &InstanceTypeProvider{
+func NewProvider(region string, cache *cache.Cache, ec2api ec2iface.EC2API, subnetProvider *subnet.Provider,
+ unavailableOfferingsCache *awscache.UnavailableOfferings, pricingProvider *pricing.Provider) *Provider {
+ return &Provider{
ec2api: ec2api,
- region: *sess.Config.Region,
+ region: region,
subnetProvider: subnetProvider,
pricingProvider: pricingProvider,
- cache: cache.New(awscache.InstanceTypesAndZonesTTL, awscache.DefaultCleanupInterval),
+ cache: cache,
unavailableOfferings: unavailableOfferingsCache,
cm: pretty.NewChangeMonitor(),
instanceTypesSeqNum: 0,
}
}
-func (p *InstanceTypeProvider) List(ctx context.Context, kc *v1alpha5.KubeletConfiguration, nodeTemplate *v1alpha1.AWSNodeTemplate) ([]*cloudprovider.InstanceType, error) {
+func (p *Provider) List(ctx context.Context, kc *v1alpha5.KubeletConfiguration, nodeTemplate *v1alpha1.AWSNodeTemplate) ([]*cloudprovider.InstanceType, error) {
// Get InstanceTypes from EC2
- instanceTypes, err := p.getInstanceTypes(ctx)
+ instanceTypes, err := p.GetInstanceTypes(ctx)
if err != nil {
return nil, err
}
@@ -109,7 +107,7 @@ func (p *InstanceTypeProvider) List(ctx context.Context, kc *v1alpha5.KubeletCon
return result, nil
}
-func (p *InstanceTypeProvider) LivenessProbe(req *http.Request) error {
+func (p *Provider) LivenessProbe(req *http.Request) error {
if err := p.subnetProvider.LivenessProbe(req); err != nil {
return err
}
@@ -119,7 +117,7 @@ func (p *InstanceTypeProvider) LivenessProbe(req *http.Request) error {
return nil
}
-func (p *InstanceTypeProvider) createOfferings(ctx context.Context, instanceType *ec2.InstanceTypeInfo, zones sets.String) []cloudprovider.Offering {
+func (p *Provider) createOfferings(ctx context.Context, instanceType *ec2.InstanceTypeInfo, zones sets.String) []cloudprovider.Offering {
var offerings []cloudprovider.Offering
for zone := range zones {
// while usage classes should be a distinct set, there's no guarantee of that
@@ -149,7 +147,7 @@ func (p *InstanceTypeProvider) createOfferings(ctx context.Context, instanceType
return offerings
}
-func (p *InstanceTypeProvider) getInstanceTypeZones(ctx context.Context, nodeTemplate *v1alpha1.AWSNodeTemplate) (map[string]sets.String, error) {
+func (p *Provider) getInstanceTypeZones(ctx context.Context, nodeTemplate *v1alpha1.AWSNodeTemplate) (map[string]sets.String, error) {
subnetSelectorHash, err := hashstructure.Hash(nodeTemplate.Spec.SubnetSelector, hashstructure.FormatV2, nil)
if err != nil {
return nil, fmt.Errorf("failed to hash the subnet selector: %w", err)
@@ -194,8 +192,8 @@ func (p *InstanceTypeProvider) getInstanceTypeZones(ctx context.Context, nodeTem
return instanceTypeZones, nil
}
-// getInstanceTypes retrieves all instance types from the ec2 DescribeInstanceTypes API using some opinionated filters
-func (p *InstanceTypeProvider) getInstanceTypes(ctx context.Context) ([]*ec2.InstanceTypeInfo, error) {
+// GetInstanceTypes retrieves all instance types from the ec2 DescribeInstanceTypes API using some opinionated filters
+func (p *Provider) GetInstanceTypes(ctx context.Context) ([]*ec2.InstanceTypeInfo, error) {
// DO NOT REMOVE THIS LOCK ----------------------------------------------------------------------------
// We lock here so that multiple callers to GetInstanceTypes do not result in cache misses and multiple
// calls to EC2 when we could have just made one call. This lock is here because multiple callers to EC2 result
diff --git a/pkg/cloudprovider/instancetypes_test.go b/pkg/providers/instancetype/suite_test.go
similarity index 79%
rename from pkg/cloudprovider/instancetypes_test.go
rename to pkg/providers/instancetype/suite_test.go
index 1053e21b7ccb..500804c2d073 100644
--- a/pkg/cloudprovider/instancetypes_test.go
+++ b/pkg/providers/instancetype/suite_test.go
@@ -12,14 +12,16 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
-package cloudprovider
+package instancetype_test
import (
"context"
"fmt"
"math"
+ "net"
"sort"
"strings"
+ "testing"
"time"
"github.com/aws/aws-sdk-go/aws"
@@ -29,22 +31,122 @@ import (
"github.com/samber/lo"
v1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/resource"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ "k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apimachinery/pkg/util/sets"
+ "k8s.io/client-go/tools/record"
+ clock "k8s.io/utils/clock/testing"
+ . "knative.dev/pkg/logging/testing"
"knative.dev/pkg/ptr"
- . "github.com/aws/karpenter-core/pkg/test/expectations"
- "github.com/aws/karpenter/pkg/apis/settings"
- "github.com/aws/karpenter/pkg/providers/pricing"
-
+ coresettings "github.com/aws/karpenter-core/pkg/apis/settings"
"github.com/aws/karpenter-core/pkg/apis/v1alpha5"
- "github.com/aws/karpenter-core/pkg/cloudprovider"
+ corecloudproivder "github.com/aws/karpenter-core/pkg/cloudprovider"
+ "github.com/aws/karpenter-core/pkg/controllers/provisioning"
+ "github.com/aws/karpenter-core/pkg/controllers/state"
+ "github.com/aws/karpenter-core/pkg/events"
+ "github.com/aws/karpenter-core/pkg/operator/controller"
+ "github.com/aws/karpenter-core/pkg/operator/injection"
+ "github.com/aws/karpenter-core/pkg/operator/options"
+ "github.com/aws/karpenter-core/pkg/operator/scheme"
"github.com/aws/karpenter-core/pkg/scheduling"
coretest "github.com/aws/karpenter-core/pkg/test"
+ . "github.com/aws/karpenter-core/pkg/test/expectations"
+ "github.com/aws/karpenter-core/pkg/utils/resources"
+
+ "github.com/aws/karpenter/pkg/apis"
+ "github.com/aws/karpenter/pkg/apis/settings"
"github.com/aws/karpenter/pkg/apis/v1alpha1"
+ "github.com/aws/karpenter/pkg/cloudprovider"
"github.com/aws/karpenter/pkg/fake"
+ "github.com/aws/karpenter/pkg/providers/instance"
+ "github.com/aws/karpenter/pkg/providers/instancetype"
+ "github.com/aws/karpenter/pkg/providers/pricing"
"github.com/aws/karpenter/pkg/test"
)
+var ctx context.Context
+var stop context.CancelFunc
+var opts options.Options
+var env *coretest.Environment
+var awsEnv *test.Environment
+var fakeClock *clock.FakeClock
+var prov *provisioning.Provisioner
+var provisioner *v1alpha5.Provisioner
+var nodeTemplate *v1alpha1.AWSNodeTemplate
+var cluster *state.Cluster
+var provisioningController controller.Controller
+var cloudProvider *cloudprovider.CloudProvider
+
+func TestAWS(t *testing.T) {
+ ctx = TestContextWithLogger(t)
+ RegisterFailHandler(Fail)
+ RunSpecs(t, "Provider/AWS")
+}
+
+var _ = BeforeSuite(func() {
+ env = coretest.NewEnvironment(scheme.Scheme, coretest.WithCRDs(apis.CRDs...))
+ ctx = coresettings.ToContext(ctx, coretest.Settings())
+ ctx = settings.ToContext(ctx, test.Settings())
+ ctx, stop = context.WithCancel(ctx)
+ awsEnv = test.NewEnvironment(ctx, env)
+
+ fakeClock = &clock.FakeClock{}
+ cloudProvider = cloudprovider.New(ctx, awsEnv.InstanceTypesProvider, awsEnv.InstanceProvider, env.Client, awsEnv.AMIProvider)
+ cluster = state.NewCluster(fakeClock, env.Client, cloudProvider)
+ prov = provisioning.NewProvisioner(ctx, env.Client, env.KubernetesInterface.CoreV1(), events.NewRecorder(&record.FakeRecorder{}), cloudProvider, cluster)
+ provisioningController = provisioning.NewController(env.Client, prov, events.NewRecorder(&record.FakeRecorder{}))
+})
+
+var _ = AfterSuite(func() {
+ stop()
+ Expect(env.Stop()).To(Succeed(), "Failed to stop environment")
+})
+
+var _ = BeforeEach(func() {
+ ctx = injection.WithOptions(ctx, opts)
+ ctx = coresettings.ToContext(ctx, coretest.Settings())
+ ctx = settings.ToContext(ctx, test.Settings())
+ nodeTemplate = &v1alpha1.AWSNodeTemplate{
+ ObjectMeta: metav1.ObjectMeta{
+ Name: coretest.RandomName(),
+ },
+ Spec: v1alpha1.AWSNodeTemplateSpec{
+ AWS: v1alpha1.AWS{
+ AMIFamily: aws.String(v1alpha1.AMIFamilyAL2),
+ SubnetSelector: map[string]string{"*": "*"},
+ SecurityGroupSelector: map[string]string{"*": "*"},
+ },
+ },
+ }
+ nodeTemplate.SetGroupVersionKind(schema.GroupVersionKind{
+ Group: v1alpha1.SchemeGroupVersion.Group,
+ Version: v1alpha1.SchemeGroupVersion.Version,
+ Kind: "AWSNodeTemplate",
+ })
+ provisioner = test.Provisioner(coretest.ProvisionerOptions{
+ Requirements: []v1.NodeSelectorRequirement{{
+ Key: v1alpha1.LabelInstanceCategory,
+ Operator: v1.NodeSelectorOpExists,
+ }},
+ ProviderRef: &v1alpha5.ProviderRef{
+ APIVersion: nodeTemplate.APIVersion,
+ Kind: nodeTemplate.Kind,
+ Name: nodeTemplate.Name,
+ },
+ })
+
+ cluster.Reset()
+ awsEnv.Reset()
+
+ awsEnv.LaunchTemplateProvider.KubeDNSIP = net.ParseIP("10.0.100.10")
+ awsEnv.LaunchTemplateProvider.ClusterEndpoint = "https://test-cluster"
+})
+
+var _ = AfterEach(func() {
+ ExpectCleanedUp(ctx, env.Client)
+})
+
var _ = Describe("Instance Types", func() {
It("should support instance type labels", func() {
ExpectApplied(ctx, env.Client, provisioner, nodeTemplate)
@@ -105,10 +207,10 @@ var _ = Describe("Instance Types", func() {
})
It("should order the instance types by price and only consider the cheapest ones", func() {
instances := makeFakeInstances()
- fakeEC2API.DescribeInstanceTypesOutput.Set(&ec2.DescribeInstanceTypesOutput{
+ awsEnv.EC2API.DescribeInstanceTypesOutput.Set(&ec2.DescribeInstanceTypesOutput{
InstanceTypes: makeFakeInstances(),
})
- fakeEC2API.DescribeInstanceTypeOfferingsOutput.Set(&ec2.DescribeInstanceTypeOfferingsOutput{
+ awsEnv.EC2API.DescribeInstanceTypeOfferingsOutput.Set(&ec2.DescribeInstanceTypeOfferingsOutput{
InstanceTypeOfferings: makeFakeInstanceOfferings(instances),
})
ExpectApplied(ctx, env.Client, provisioner, nodeTemplate)
@@ -134,24 +236,24 @@ var _ = Describe("Instance Types", func() {
return iPrice < jPrice
})
// Expect that the launch template overrides gives the 60 cheapest instance types
- expected := sets.NewString(lo.Map(its[:MaxInstanceTypes], func(i *cloudprovider.InstanceType, _ int) string {
+ expected := sets.NewString(lo.Map(its[:instance.MaxInstanceTypes], func(i *corecloudproivder.InstanceType, _ int) string {
return i.Name
})...)
- Expect(fakeEC2API.CreateFleetBehavior.CalledWithInput.Len()).To(Equal(1))
- call := fakeEC2API.CreateFleetBehavior.CalledWithInput.Pop()
+ Expect(awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Len()).To(Equal(1))
+ call := awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Pop()
Expect(call.LaunchTemplateConfigs).To(HaveLen(1))
- Expect(call.LaunchTemplateConfigs[0].Overrides).To(HaveLen(MaxInstanceTypes))
+ Expect(call.LaunchTemplateConfigs[0].Overrides).To(HaveLen(instance.MaxInstanceTypes))
for _, override := range call.LaunchTemplateConfigs[0].Overrides {
Expect(expected.Has(aws.StringValue(override.InstanceType))).To(BeTrue(), fmt.Sprintf("expected %s to exist in set", aws.StringValue(override.InstanceType)))
}
})
It("should order the instance types by price and only consider the spot types that are cheaper than the cheapest on-demand", func() {
instances := makeFakeInstances()
- fakeEC2API.DescribeInstanceTypesOutput.Set(&ec2.DescribeInstanceTypesOutput{
+ awsEnv.EC2API.DescribeInstanceTypesOutput.Set(&ec2.DescribeInstanceTypesOutput{
InstanceTypes: makeFakeInstances(),
})
- fakeEC2API.DescribeInstanceTypeOfferingsOutput.Set(&ec2.DescribeInstanceTypeOfferingsOutput{
+ awsEnv.EC2API.DescribeInstanceTypeOfferingsOutput.Set(&ec2.DescribeInstanceTypeOfferingsOutput{
InstanceTypeOfferings: makeFakeInstanceOfferings(instances),
})
@@ -166,8 +268,8 @@ var _ = Describe("Instance Types", func() {
},
}
ExpectApplied(ctx, env.Client, provisioner, nodeTemplate)
- fakeEC2API.DescribeSpotPriceHistoryOutput.Set(generateSpotPricing(cloudProvider, provisioner))
- Expect(pricingProvider.UpdateSpotPricing(ctx)).To(Succeed())
+ awsEnv.EC2API.DescribeSpotPriceHistoryOutput.Set(generateSpotPricing(cloudProvider, provisioner))
+ Expect(awsEnv.PricingProvider.UpdateSpotPricing(ctx)).To(Succeed())
pod := coretest.UnschedulablePod(coretest.PodOptions{
ResourceRequirements: v1.ResourceRequirements{
@@ -192,14 +294,14 @@ var _ = Describe("Instance Types", func() {
return iPrice < jPrice
})
- Expect(fakeEC2API.CreateFleetBehavior.CalledWithInput.Len()).To(Equal(1))
- call := fakeEC2API.CreateFleetBehavior.CalledWithInput.Pop()
+ Expect(awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Len()).To(Equal(1))
+ call := awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Pop()
Expect(call.LaunchTemplateConfigs).To(HaveLen(1))
// find the cheapest OD price that works
cheapestODPrice := math.MaxFloat64
for _, override := range call.LaunchTemplateConfigs[0].Overrides {
- odPrice, ok := pricingProvider.OnDemandPrice(*override.InstanceType)
+ odPrice, ok := awsEnv.PricingProvider.OnDemandPrice(*override.InstanceType)
Expect(ok).To(BeTrue())
if odPrice < cheapestODPrice {
cheapestODPrice = odPrice
@@ -207,7 +309,7 @@ var _ = Describe("Instance Types", func() {
}
// and our spot prices should be cheaper than the OD price
for _, override := range call.LaunchTemplateConfigs[0].Overrides {
- spotPrice, ok := pricingProvider.SpotPrice(*override.InstanceType, *override.AvailabilityZone)
+ spotPrice, ok := awsEnv.PricingProvider.SpotPrice(*override.InstanceType, *override.AvailabilityZone)
Expect(ok).To(BeTrue())
Expect(spotPrice).To(BeNumerically("<", cheapestODPrice))
}
@@ -223,8 +325,8 @@ var _ = Describe("Instance Types", func() {
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CreateFleetBehavior.CalledWithInput.Len()).To(Equal(1))
- call := fakeEC2API.CreateFleetBehavior.CalledWithInput.Pop()
+ Expect(awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Len()).To(Equal(1))
+ call := awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Pop()
for _, ltc := range call.LaunchTemplateConfigs {
for _, ovr := range ltc.Overrides {
Expect(strings.HasSuffix(aws.StringValue(ovr.InstanceType), "metal")).To(BeFalse())
@@ -242,8 +344,8 @@ var _ = Describe("Instance Types", func() {
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CreateFleetBehavior.CalledWithInput.Len()).To(Equal(1))
- call := fakeEC2API.CreateFleetBehavior.CalledWithInput.Pop()
+ Expect(awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Len()).To(Equal(1))
+ call := awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Pop()
for _, ltc := range call.LaunchTemplateConfigs {
for _, ovr := range ltc.Overrides {
Expect(strings.HasPrefix(aws.StringValue(ovr.InstanceType), "g")).To(BeFalse())
@@ -295,7 +397,7 @@ var _ = Describe("Instance Types", func() {
node := ExpectScheduled(ctx, env.Client, pod)
Expect(node.Labels).To(HaveKey(v1.LabelInstanceTypeStable))
supportsPodENI := func() bool {
- limits, ok := Limits[node.Labels[v1.LabelInstanceTypeStable]]
+ limits, ok := instancetype.Limits[node.Labels[v1.LabelInstanceTypeStable]]
return ok && limits.IsTrunkingCompatible
}
Expect(supportsPodENI()).To(Equal(true))
@@ -401,18 +503,18 @@ var _ = Describe("Instance Types", func() {
ctx = settings.ToContext(ctx, test.Settings(test.SettingOptions{
EnableENILimitedPodDensity: lo.ToPtr(false),
}))
- instanceInfo, err := instanceTypeProvider.getInstanceTypes(ctx)
+ instanceInfo, err := awsEnv.InstanceTypesProvider.GetInstanceTypes(ctx)
Expect(err).To(BeNil())
for _, info := range instanceInfo {
- it := NewInstanceType(ctx, info, provisioner.Spec.KubeletConfiguration, "", nodeTemplate, nil)
+ it := instancetype.NewInstanceType(ctx, info, provisioner.Spec.KubeletConfiguration, "", nodeTemplate, nil)
Expect(it.Capacity.Pods().Value()).To(BeNumerically("==", 110))
}
})
It("should not set pods to 110 if using ENI-based pod density", func() {
- instanceInfo, err := instanceTypeProvider.getInstanceTypes(ctx)
+ instanceInfo, err := awsEnv.InstanceTypesProvider.GetInstanceTypes(ctx)
Expect(err).To(BeNil())
for _, info := range instanceInfo {
- it := NewInstanceType(ctx, info, provisioner.Spec.KubeletConfiguration, "", nodeTemplate, nil)
+ it := instancetype.NewInstanceType(ctx, info, provisioner.Spec.KubeletConfiguration, "", nodeTemplate, nil)
Expect(it.Capacity.Pods().Value()).ToNot(BeNumerically("==", 110))
}
})
@@ -425,7 +527,7 @@ var _ = Describe("Instance Types", func() {
}))
var ok bool
- instanceInfo, err := instanceTypeProvider.getInstanceTypes(ctx)
+ instanceInfo, err := awsEnv.InstanceTypesProvider.GetInstanceTypes(ctx)
Expect(err).To(BeNil())
info, ok = lo.Find(instanceInfo, func(i *ec2.InstanceTypeInfo) bool {
return aws.StringValue(i.InstanceType) == "m5.xlarge"
@@ -441,7 +543,7 @@ var _ = Describe("Instance Types", func() {
},
},
})
- it := NewInstanceType(ctx, info, provisioner.Spec.KubeletConfiguration, "", nodeTemplate, nil)
+ it := instancetype.NewInstanceType(ctx, info, provisioner.Spec.KubeletConfiguration, "", nodeTemplate, nil)
Expect(it.Overhead.SystemReserved.Cpu().String()).To(Equal("2"))
})
It("should override system reserved memory when specified", func() {
@@ -452,7 +554,7 @@ var _ = Describe("Instance Types", func() {
},
},
})
- it := NewInstanceType(ctx, info, provisioner.Spec.KubeletConfiguration, "", nodeTemplate, nil)
+ it := instancetype.NewInstanceType(ctx, info, provisioner.Spec.KubeletConfiguration, "", nodeTemplate, nil)
Expect(it.Overhead.SystemReserved.Memory().String()).To(Equal("20Gi"))
})
It("should override kube reserved when specified", func() {
@@ -470,7 +572,7 @@ var _ = Describe("Instance Types", func() {
},
},
})
- it := NewInstanceType(ctx, info, provisioner.Spec.KubeletConfiguration, "", nodeTemplate, nil)
+ it := instancetype.NewInstanceType(ctx, info, provisioner.Spec.KubeletConfiguration, "", nodeTemplate, nil)
Expect(it.Overhead.KubeReserved.Cpu().String()).To(Equal("2"))
Expect(it.Overhead.KubeReserved.Memory().String()).To(Equal("10Gi"))
Expect(it.Overhead.KubeReserved.StorageEphemeral().String()).To(Equal("2Gi"))
@@ -492,11 +594,11 @@ var _ = Describe("Instance Types", func() {
v1.ResourceMemory: resource.MustParse("10Gi"),
},
EvictionHard: map[string]string{
- memoryAvailable: "500Mi",
+ instancetype.MemoryAvailable: "500Mi",
},
},
})
- it := NewInstanceType(ctx, info, provisioner.Spec.KubeletConfiguration, "", nodeTemplate, nil)
+ it := instancetype.NewInstanceType(ctx, info, provisioner.Spec.KubeletConfiguration, "", nodeTemplate, nil)
Expect(it.Overhead.EvictionThreshold.Memory().String()).To(Equal("500Mi"))
})
It("should override eviction threshold (hard) when specified as a percentage value", func() {
@@ -509,11 +611,11 @@ var _ = Describe("Instance Types", func() {
v1.ResourceMemory: resource.MustParse("10Gi"),
},
EvictionHard: map[string]string{
- memoryAvailable: "10%",
+ instancetype.MemoryAvailable: "10%",
},
},
})
- it := NewInstanceType(ctx, info, provisioner.Spec.KubeletConfiguration, "", nodeTemplate, nil)
+ it := instancetype.NewInstanceType(ctx, info, provisioner.Spec.KubeletConfiguration, "", nodeTemplate, nil)
Expect(it.Overhead.EvictionThreshold.Memory().Value()).To(BeNumerically("~", float64(it.Capacity.Memory().Value())*0.1, 10))
})
It("should consider the eviction threshold (hard) disabled when specified as 100%", func() {
@@ -526,11 +628,11 @@ var _ = Describe("Instance Types", func() {
v1.ResourceMemory: resource.MustParse("10Gi"),
},
EvictionHard: map[string]string{
- memoryAvailable: "100%",
+ instancetype.MemoryAvailable: "100%",
},
},
})
- it := NewInstanceType(ctx, info, provisioner.Spec.KubeletConfiguration, "", nodeTemplate, nil)
+ it := instancetype.NewInstanceType(ctx, info, provisioner.Spec.KubeletConfiguration, "", nodeTemplate, nil)
Expect(it.Overhead.EvictionThreshold.Memory().String()).To(Equal("0"))
})
It("should used default eviction threshold (hard) for memory when evictionHard not specified", func() {
@@ -543,11 +645,11 @@ var _ = Describe("Instance Types", func() {
v1.ResourceMemory: resource.MustParse("10Gi"),
},
EvictionSoft: map[string]string{
- memoryAvailable: "50Mi",
+ instancetype.MemoryAvailable: "50Mi",
},
},
})
- it := NewInstanceType(ctx, info, provisioner.Spec.KubeletConfiguration, "", nodeTemplate, nil)
+ it := instancetype.NewInstanceType(ctx, info, provisioner.Spec.KubeletConfiguration, "", nodeTemplate, nil)
Expect(it.Overhead.EvictionThreshold.Memory().String()).To(Equal("50Mi"))
})
It("should override eviction threshold (soft) when specified as a quantity", func() {
@@ -560,11 +662,11 @@ var _ = Describe("Instance Types", func() {
v1.ResourceMemory: resource.MustParse("10Gi"),
},
EvictionSoft: map[string]string{
- memoryAvailable: "500Mi",
+ instancetype.MemoryAvailable: "500Mi",
},
},
})
- it := NewInstanceType(ctx, info, provisioner.Spec.KubeletConfiguration, "", nodeTemplate, nil)
+ it := instancetype.NewInstanceType(ctx, info, provisioner.Spec.KubeletConfiguration, "", nodeTemplate, nil)
Expect(it.Overhead.EvictionThreshold.Memory().String()).To(Equal("500Mi"))
})
It("should override eviction threshold (soft) when specified as a percentage value", func() {
@@ -577,14 +679,14 @@ var _ = Describe("Instance Types", func() {
v1.ResourceMemory: resource.MustParse("10Gi"),
},
EvictionHard: map[string]string{
- memoryAvailable: "5%",
+ instancetype.MemoryAvailable: "5%",
},
EvictionSoft: map[string]string{
- memoryAvailable: "10%",
+ instancetype.MemoryAvailable: "10%",
},
},
})
- it := NewInstanceType(ctx, info, provisioner.Spec.KubeletConfiguration, "", nodeTemplate, nil)
+ it := instancetype.NewInstanceType(ctx, info, provisioner.Spec.KubeletConfiguration, "", nodeTemplate, nil)
Expect(it.Overhead.EvictionThreshold.Memory().Value()).To(BeNumerically("~", float64(it.Capacity.Memory().Value())*0.1, 10))
})
It("should consider the eviction threshold (soft) disabled when specified as 100%", func() {
@@ -597,11 +699,11 @@ var _ = Describe("Instance Types", func() {
v1.ResourceMemory: resource.MustParse("10Gi"),
},
EvictionSoft: map[string]string{
- memoryAvailable: "100%",
+ instancetype.MemoryAvailable: "100%",
},
},
})
- it := NewInstanceType(ctx, info, provisioner.Spec.KubeletConfiguration, "", nodeTemplate, nil)
+ it := instancetype.NewInstanceType(ctx, info, provisioner.Spec.KubeletConfiguration, "", nodeTemplate, nil)
Expect(it.Overhead.EvictionThreshold.Memory().String()).To(Equal("0"))
})
It("should ignore eviction threshold (soft) when using Bottlerocket AMI", func() {
@@ -615,14 +717,14 @@ var _ = Describe("Instance Types", func() {
v1.ResourceMemory: resource.MustParse("10Gi"),
},
EvictionHard: map[string]string{
- memoryAvailable: "1Gi",
+ instancetype.MemoryAvailable: "1Gi",
},
EvictionSoft: map[string]string{
- memoryAvailable: "10Gi",
+ instancetype.MemoryAvailable: "10Gi",
},
},
})
- it := NewInstanceType(ctx, info, provisioner.Spec.KubeletConfiguration, "", nodeTemplate, nil)
+ it := instancetype.NewInstanceType(ctx, info, provisioner.Spec.KubeletConfiguration, "", nodeTemplate, nil)
Expect(it.Overhead.EvictionThreshold.Memory().String()).To(Equal("1Gi"))
})
It("should take the greater of evictionHard and evictionSoft for overhead as a value", func() {
@@ -635,14 +737,14 @@ var _ = Describe("Instance Types", func() {
v1.ResourceMemory: resource.MustParse("10Gi"),
},
EvictionSoft: map[string]string{
- memoryAvailable: "3Gi",
+ instancetype.MemoryAvailable: "3Gi",
},
EvictionHard: map[string]string{
- memoryAvailable: "1Gi",
+ instancetype.MemoryAvailable: "1Gi",
},
},
})
- it := NewInstanceType(ctx, info, provisioner.Spec.KubeletConfiguration, "", nodeTemplate, nil)
+ it := instancetype.NewInstanceType(ctx, info, provisioner.Spec.KubeletConfiguration, "", nodeTemplate, nil)
Expect(it.Overhead.EvictionThreshold.Memory().String()).To(Equal("3Gi"))
})
It("should take the greater of evictionHard and evictionSoft for overhead as a value", func() {
@@ -655,14 +757,14 @@ var _ = Describe("Instance Types", func() {
v1.ResourceMemory: resource.MustParse("10Gi"),
},
EvictionSoft: map[string]string{
- memoryAvailable: "2%",
+ instancetype.MemoryAvailable: "2%",
},
EvictionHard: map[string]string{
- memoryAvailable: "5%",
+ instancetype.MemoryAvailable: "5%",
},
},
})
- it := NewInstanceType(ctx, info, provisioner.Spec.KubeletConfiguration, "", nodeTemplate, nil)
+ it := instancetype.NewInstanceType(ctx, info, provisioner.Spec.KubeletConfiguration, "", nodeTemplate, nil)
Expect(it.Overhead.EvictionThreshold.Memory().Value()).To(BeNumerically("~", float64(it.Capacity.Memory().Value())*0.05, 10))
})
It("should take the greater of evictionHard and evictionSoft for overhead with mixed percentage/value", func() {
@@ -675,23 +777,23 @@ var _ = Describe("Instance Types", func() {
v1.ResourceMemory: resource.MustParse("10Gi"),
},
EvictionSoft: map[string]string{
- memoryAvailable: "10%",
+ instancetype.MemoryAvailable: "10%",
},
EvictionHard: map[string]string{
- memoryAvailable: "1Gi",
+ instancetype.MemoryAvailable: "1Gi",
},
},
})
- it := NewInstanceType(ctx, info, provisioner.Spec.KubeletConfiguration, "", nodeTemplate, nil)
+ it := instancetype.NewInstanceType(ctx, info, provisioner.Spec.KubeletConfiguration, "", nodeTemplate, nil)
Expect(it.Overhead.EvictionThreshold.Memory().Value()).To(BeNumerically("~", float64(it.Capacity.Memory().Value())*0.1, 10))
})
})
It("should set max-pods to user-defined value if specified", func() {
- instanceInfo, err := instanceTypeProvider.getInstanceTypes(ctx)
+ instanceInfo, err := awsEnv.InstanceTypesProvider.GetInstanceTypes(ctx)
Expect(err).To(BeNil())
provisioner = test.Provisioner(coretest.ProvisionerOptions{Kubelet: &v1alpha5.KubeletConfiguration{MaxPods: ptr.Int32(10)}})
for _, info := range instanceInfo {
- it := NewInstanceType(ctx, info, provisioner.Spec.KubeletConfiguration, "", nodeTemplate, nil)
+ it := instancetype.NewInstanceType(ctx, info, provisioner.Spec.KubeletConfiguration, "", nodeTemplate, nil)
Expect(it.Capacity.Pods().Value()).To(BeNumerically("==", 10))
}
})
@@ -700,40 +802,41 @@ var _ = Describe("Instance Types", func() {
EnablePodENI: lo.ToPtr(false),
}))
- instanceInfo, err := instanceTypeProvider.getInstanceTypes(ctx)
+ instanceInfo, err := awsEnv.InstanceTypesProvider.GetInstanceTypes(ctx)
Expect(err).To(BeNil())
provisioner = test.Provisioner(coretest.ProvisionerOptions{Kubelet: &v1alpha5.KubeletConfiguration{MaxPods: ptr.Int32(10)}})
for _, info := range instanceInfo {
- it := NewInstanceType(ctx, info, provisioner.Spec.KubeletConfiguration, "", nodeTemplate, nil)
+ it := instancetype.NewInstanceType(ctx, info, provisioner.Spec.KubeletConfiguration, "", nodeTemplate, nil)
Expect(it.Capacity.Pods().Value()).To(BeNumerically("==", 10))
}
})
It("should override pods-per-core value", func() {
- instanceInfo, err := instanceTypeProvider.getInstanceTypes(ctx)
+ instanceInfo, err := awsEnv.InstanceTypesProvider.GetInstanceTypes(ctx)
Expect(err).To(BeNil())
provisioner = test.Provisioner(coretest.ProvisionerOptions{Kubelet: &v1alpha5.KubeletConfiguration{PodsPerCore: ptr.Int32(1)}})
for _, info := range instanceInfo {
- it := NewInstanceType(ctx, info, provisioner.Spec.KubeletConfiguration, "", nodeTemplate, nil)
+ it := instancetype.NewInstanceType(ctx, info, provisioner.Spec.KubeletConfiguration, "", nodeTemplate, nil)
Expect(it.Capacity.Pods().Value()).To(BeNumerically("==", ptr.Int64Value(info.VCpuInfo.DefaultVCpus)))
}
})
It("should take the minimum of pods-per-core and max-pods", func() {
- instanceInfo, err := instanceTypeProvider.getInstanceTypes(ctx)
+ instanceInfo, err := awsEnv.InstanceTypesProvider.GetInstanceTypes(ctx)
Expect(err).To(BeNil())
provisioner = test.Provisioner(coretest.ProvisionerOptions{Kubelet: &v1alpha5.KubeletConfiguration{PodsPerCore: ptr.Int32(4), MaxPods: ptr.Int32(20)}})
for _, info := range instanceInfo {
- it := NewInstanceType(ctx, info, provisioner.Spec.KubeletConfiguration, "", nodeTemplate, nil)
+ it := instancetype.NewInstanceType(ctx, info, provisioner.Spec.KubeletConfiguration, "", nodeTemplate, nil)
Expect(it.Capacity.Pods().Value()).To(BeNumerically("==", lo.Min([]int64{20, ptr.Int64Value(info.VCpuInfo.DefaultVCpus) * 4})))
}
})
It("should ignore pods-per-core when using Bottlerocket AMI", func() {
- instanceInfo, err := instanceTypeProvider.getInstanceTypes(ctx)
+ instanceInfo, err := awsEnv.InstanceTypesProvider.GetInstanceTypes(ctx)
Expect(err).To(BeNil())
nodeTemplate.Spec.AMIFamily = &v1alpha1.AMIFamilyBottlerocket
provisioner = test.Provisioner(coretest.ProvisionerOptions{Kubelet: &v1alpha5.KubeletConfiguration{PodsPerCore: ptr.Int32(1)}})
for _, info := range instanceInfo {
- it := NewInstanceType(ctx, info, provisioner.Spec.KubeletConfiguration, "", nodeTemplate, nil)
- Expect(it.Capacity.Pods().Value()).To(BeNumerically("==", eniLimitedPods(info).Value()))
+ it := instancetype.NewInstanceType(ctx, info, provisioner.Spec.KubeletConfiguration, "", nodeTemplate, nil)
+ limitedPods := resources.Quantity(fmt.Sprint(*info.NetworkInfo.MaximumNetworkInterfaces*(*info.NetworkInfo.Ipv4AddressesPerInterface-1) + 2))
+ Expect(it.Capacity.Pods().Value()).To(BeNumerically("==", limitedPods.Value()))
}
})
It("should take 110 to be the default pods number when pods-per-core is 0 and AWSENILimitedPodDensity is unset", func() {
@@ -741,18 +844,18 @@ var _ = Describe("Instance Types", func() {
EnableENILimitedPodDensity: lo.ToPtr(false),
}))
- instanceInfo, err := instanceTypeProvider.getInstanceTypes(ctx)
+ instanceInfo, err := awsEnv.InstanceTypesProvider.GetInstanceTypes(ctx)
Expect(err).To(BeNil())
provisioner = test.Provisioner(coretest.ProvisionerOptions{Kubelet: &v1alpha5.KubeletConfiguration{PodsPerCore: ptr.Int32(0)}})
for _, info := range instanceInfo {
- it := NewInstanceType(ctx, info, provisioner.Spec.KubeletConfiguration, "", nodeTemplate, nil)
+ it := instancetype.NewInstanceType(ctx, info, provisioner.Spec.KubeletConfiguration, "", nodeTemplate, nil)
Expect(it.Capacity.Pods().Value()).To(BeNumerically("==", 110))
}
})
})
Context("Insufficient Capacity Error Cache", func() {
It("should launch instances of different type on second reconciliation attempt with Insufficient Capacity Error Cache fallback", func() {
- fakeEC2API.InsufficientCapacityPools.Set([]fake.CapacityPool{{CapacityType: v1alpha5.CapacityTypeOnDemand, InstanceType: "inf1.6xlarge", Zone: "test-zone-1a"}})
+ awsEnv.EC2API.InsufficientCapacityPools.Set([]fake.CapacityPool{{CapacityType: v1alpha5.CapacityTypeOnDemand, InstanceType: "inf1.6xlarge", Zone: "test-zone-1a"}})
ExpectApplied(ctx, env.Client, provisioner, nodeTemplate)
pods := []*v1.Pod{
coretest.UnschedulablePod(coretest.PodOptions{
@@ -785,7 +888,7 @@ var _ = Describe("Instance Types", func() {
Expect(nodeNames.Len()).To(Equal(2))
})
It("should launch instances in a different zone on second reconciliation attempt with Insufficient Capacity Error Cache fallback", func() {
- fakeEC2API.InsufficientCapacityPools.Set([]fake.CapacityPool{{CapacityType: v1alpha5.CapacityTypeOnDemand, InstanceType: "p3.8xlarge", Zone: "test-zone-1a"}})
+ awsEnv.EC2API.InsufficientCapacityPools.Set([]fake.CapacityPool{{CapacityType: v1alpha5.CapacityTypeOnDemand, InstanceType: "p3.8xlarge", Zone: "test-zone-1a"}})
pod := coretest.UnschedulablePod(coretest.PodOptions{
NodeSelector: map[string]string{v1.LabelInstanceTypeStable: "p3.8xlarge"},
ResourceRequirements: v1.ResourceRequirements{
@@ -812,7 +915,7 @@ var _ = Describe("Instance Types", func() {
HaveKeyWithValue(v1.LabelTopologyZone, "test-zone-1b")))
})
It("should launch smaller instances than optimal if larger instance launch results in Insufficient Capacity Error", func() {
- fakeEC2API.InsufficientCapacityPools.Set([]fake.CapacityPool{
+ awsEnv.EC2API.InsufficientCapacityPools.Set([]fake.CapacityPool{
{CapacityType: v1alpha5.CapacityTypeOnDemand, InstanceType: "m5.xlarge", Zone: "test-zone-1a"},
})
provisioner.Spec.Requirements = append(provisioner.Spec.Requirements, v1.NodeSelectorRequirement{
@@ -844,7 +947,7 @@ var _ = Describe("Instance Types", func() {
}
})
It("should launch instances on later reconciliation attempt with Insufficient Capacity Error Cache expiry", func() {
- fakeEC2API.InsufficientCapacityPools.Set([]fake.CapacityPool{{CapacityType: v1alpha5.CapacityTypeOnDemand, InstanceType: "inf1.6xlarge", Zone: "test-zone-1a"}})
+ awsEnv.EC2API.InsufficientCapacityPools.Set([]fake.CapacityPool{{CapacityType: v1alpha5.CapacityTypeOnDemand, InstanceType: "inf1.6xlarge", Zone: "test-zone-1a"}})
ExpectApplied(ctx, env.Client, provisioner, nodeTemplate)
pod := coretest.UnschedulablePod(coretest.PodOptions{
NodeSelector: map[string]string{v1.LabelInstanceTypeStable: "inf1.6xlarge"},
@@ -856,14 +959,14 @@ var _ = Describe("Instance Types", func() {
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectNotScheduled(ctx, env.Client, pod)
// capacity shortage is over - expire the item from the cache and try again
- fakeEC2API.InsufficientCapacityPools.Set([]fake.CapacityPool{})
- unavailableOfferingsCache.Delete("inf1.6xlarge", "test-zone-1a", v1alpha5.CapacityTypeOnDemand)
+ awsEnv.EC2API.InsufficientCapacityPools.Set([]fake.CapacityPool{})
+ awsEnv.UnavailableOfferingsCache.Delete("inf1.6xlarge", "test-zone-1a", v1alpha5.CapacityTypeOnDemand)
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
node := ExpectScheduled(ctx, env.Client, pod)
Expect(node.Labels).To(HaveKeyWithValue(v1.LabelInstanceTypeStable, "inf1.6xlarge"))
})
It("should launch instances in a different zone on second reconciliation attempt with Insufficient Capacity Error Cache fallback (Habana)", func() {
- fakeEC2API.InsufficientCapacityPools.Set([]fake.CapacityPool{{CapacityType: v1alpha5.CapacityTypeOnDemand, InstanceType: "dl1.24xlarge", Zone: "test-zone-1a"}})
+ awsEnv.EC2API.InsufficientCapacityPools.Set([]fake.CapacityPool{{CapacityType: v1alpha5.CapacityTypeOnDemand, InstanceType: "dl1.24xlarge", Zone: "test-zone-1a"}})
pod := coretest.UnschedulablePod(coretest.PodOptions{
NodeSelector: map[string]string{v1.LabelInstanceTypeStable: "dl1.24xlarge"},
ResourceRequirements: v1.ResourceRequirements{
@@ -890,9 +993,9 @@ var _ = Describe("Instance Types", func() {
HaveKeyWithValue(v1.LabelTopologyZone, "test-zone-1b")))
})
It("should launch on-demand capacity if flexible to both spot and on-demand, but spot is unavailable", func() {
- Expect(fakeEC2API.DescribeInstanceTypesPagesWithContext(ctx, &ec2.DescribeInstanceTypesInput{}, func(dito *ec2.DescribeInstanceTypesOutput, b bool) bool {
+ Expect(awsEnv.EC2API.DescribeInstanceTypesPagesWithContext(ctx, &ec2.DescribeInstanceTypesInput{}, func(dito *ec2.DescribeInstanceTypesOutput, b bool) bool {
for _, it := range dito.InstanceTypes {
- fakeEC2API.InsufficientCapacityPools.Add(fake.CapacityPool{CapacityType: v1alpha5.CapacityTypeSpot, InstanceType: aws.StringValue(it.InstanceType), Zone: "test-zone-1a"})
+ awsEnv.EC2API.InsufficientCapacityPools.Add(fake.CapacityPool{CapacityType: v1alpha5.CapacityTypeSpot, InstanceType: aws.StringValue(it.InstanceType), Zone: "test-zone-1a"})
}
return true
})).To(Succeed())
@@ -912,7 +1015,7 @@ var _ = Describe("Instance Types", func() {
Expect(node.Labels).To(HaveKeyWithValue(v1alpha5.LabelCapacityType, v1alpha5.CapacityTypeOnDemand))
})
It("should return all instance types, even though with no offerings due to Insufficient Capacity Error", func() {
- fakeEC2API.InsufficientCapacityPools.Set([]fake.CapacityPool{
+ awsEnv.EC2API.InsufficientCapacityPools.Set([]fake.CapacityPool{
{CapacityType: v1alpha5.CapacityTypeOnDemand, InstanceType: "m5.xlarge", Zone: "test-zone-1a"},
{CapacityType: v1alpha5.CapacityTypeOnDemand, InstanceType: "m5.xlarge", Zone: "test-zone-1b"},
{CapacityType: v1alpha5.CapacityTypeSpot, InstanceType: "m5.xlarge", Zone: "test-zone-1a"},
@@ -946,7 +1049,7 @@ var _ = Describe("Instance Types", func() {
}
}
- instanceTypeCache.Flush()
+ awsEnv.InstanceTypeCache.Flush()
instanceTypes, err := cloudProvider.GetInstanceTypes(ctx, provisioner)
Expect(err).To(BeNil())
instanceTypeNames := sets.NewString()
@@ -979,7 +1082,7 @@ var _ = Describe("Instance Types", func() {
})
It("should fail to launch capacity when there is no zonal availability for spot", func() {
now := time.Now()
- fakeEC2API.DescribeSpotPriceHistoryOutput.Set(&ec2.DescribeSpotPriceHistoryOutput{
+ awsEnv.EC2API.DescribeSpotPriceHistoryOutput.Set(&ec2.DescribeSpotPriceHistoryOutput{
SpotPriceHistory: []*ec2.SpotPrice{
{
AvailabilityZone: aws.String("test-zone-1a"),
@@ -989,8 +1092,8 @@ var _ = Describe("Instance Types", func() {
},
},
})
- Expect(pricingProvider.UpdateSpotPricing(ctx)).To(Succeed())
- Eventually(func() bool { return pricingProvider.SpotLastUpdated().After(now) }).Should(BeTrue())
+ Expect(awsEnv.PricingProvider.UpdateSpotPricing(ctx)).To(Succeed())
+ Eventually(func() bool { return awsEnv.PricingProvider.SpotLastUpdated().After(now) }).Should(BeTrue())
provisioner.Spec.Requirements = []v1.NodeSelectorRequirement{
{Key: v1alpha5.LabelCapacityType, Operator: v1.NodeSelectorOpIn, Values: []string{v1alpha5.CapacityTypeSpot}},
@@ -1006,7 +1109,7 @@ var _ = Describe("Instance Types", func() {
})
It("should succeed to launch spot instance when zonal availability exists", func() {
now := time.Now()
- fakeEC2API.DescribeSpotPriceHistoryOutput.Set(&ec2.DescribeSpotPriceHistoryOutput{
+ awsEnv.EC2API.DescribeSpotPriceHistoryOutput.Set(&ec2.DescribeSpotPriceHistoryOutput{
SpotPriceHistory: []*ec2.SpotPrice{
{
AvailabilityZone: aws.String("test-zone-1a"),
@@ -1016,8 +1119,8 @@ var _ = Describe("Instance Types", func() {
},
},
})
- Expect(pricingProvider.UpdateSpotPricing(ctx)).To(Succeed())
- Eventually(func() bool { return pricingProvider.SpotLastUpdated().After(now) }).Should(BeTrue())
+ Expect(awsEnv.PricingProvider.UpdateSpotPricing(ctx)).To(Succeed())
+ Eventually(func() bool { return awsEnv.PricingProvider.SpotLastUpdated().After(now) }).Should(BeTrue())
// not restricting to the zone so we can get any zone
provisioner.Spec.Requirements = []v1.NodeSelectorRequirement{
@@ -1038,8 +1141,8 @@ var _ = Describe("Instance Types", func() {
pod := coretest.UnschedulablePod()
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
- input := fakeEC2API.CalledWithCreateLaunchTemplateInput.Pop()
+ Expect(awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
+ input := awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Pop()
Expect(*input.LaunchTemplateData.MetadataOptions.HttpEndpoint).To(Equal(ec2.LaunchTemplateInstanceMetadataEndpointStateEnabled))
Expect(*input.LaunchTemplateData.MetadataOptions.HttpProtocolIpv6).To(Equal(ec2.LaunchTemplateInstanceMetadataProtocolIpv6Disabled))
Expect(*input.LaunchTemplateData.MetadataOptions.HttpPutResponseHopLimit).To(Equal(int64(2)))
@@ -1056,8 +1159,8 @@ var _ = Describe("Instance Types", func() {
pod := coretest.UnschedulablePod()
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
- input := fakeEC2API.CalledWithCreateLaunchTemplateInput.Pop()
+ Expect(awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
+ input := awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Pop()
Expect(*input.LaunchTemplateData.MetadataOptions.HttpEndpoint).To(Equal(ec2.LaunchTemplateInstanceMetadataEndpointStateDisabled))
Expect(*input.LaunchTemplateData.MetadataOptions.HttpProtocolIpv6).To(Equal(ec2.LaunchTemplateInstanceMetadataProtocolIpv6Enabled))
Expect(*input.LaunchTemplateData.MetadataOptions.HttpPutResponseHopLimit).To(Equal(int64(1)))
@@ -1068,10 +1171,10 @@ var _ = Describe("Instance Types", func() {
// generateSpotPricing creates a spot price history output for use in a mock that has all spot offerings discounted by 50%
// vs the on-demand offering.
-func generateSpotPricing(cp *CloudProvider, prov *v1alpha5.Provisioner) *ec2.DescribeSpotPriceHistoryOutput {
+func generateSpotPricing(cp *cloudprovider.CloudProvider, prov *v1alpha5.Provisioner) *ec2.DescribeSpotPriceHistoryOutput {
rsp := &ec2.DescribeSpotPriceHistoryOutput{}
instanceTypes, err := cp.GetInstanceTypes(ctx, prov)
- instanceTypeCache.Flush()
+ awsEnv.InstanceTypeCache.Flush()
Expect(err).To(Succeed())
t := fakeClock.Now()
diff --git a/pkg/cloudprovider/instancetype.go b/pkg/providers/instancetype/types.go
similarity index 99%
rename from pkg/cloudprovider/instancetype.go
rename to pkg/providers/instancetype/types.go
index e718bd680545..5b2d30bb8998 100644
--- a/pkg/cloudprovider/instancetype.go
+++ b/pkg/providers/instancetype/types.go
@@ -12,7 +12,7 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
-package cloudprovider
+package instancetype
import (
"context"
@@ -40,7 +40,7 @@ import (
)
const (
- memoryAvailable = "memory.available"
+ MemoryAvailable = "memory.available"
)
var (
@@ -306,7 +306,7 @@ func evictionThreshold(memory *resource.Quantity, amiFamily amifamily.AMIFamily,
for _, m := range evictionSignals {
temp := v1.ResourceList{}
- if v, ok := m[memoryAvailable]; ok {
+ if v, ok := m[MemoryAvailable]; ok {
if strings.HasSuffix(v, "%") {
p := mustParsePercentage(v)
diff --git a/pkg/cloudprovider/zz_generated.bandwidth.go b/pkg/providers/instancetype/zz_generated.bandwidth.go
similarity index 99%
rename from pkg/cloudprovider/zz_generated.bandwidth.go
rename to pkg/providers/instancetype/zz_generated.bandwidth.go
index 2045fe4bc18b..a39c92faa235 100644
--- a/pkg/cloudprovider/zz_generated.bandwidth.go
+++ b/pkg/providers/instancetype/zz_generated.bandwidth.go
@@ -12,7 +12,7 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
-package cloudprovider
+package instancetype
// GENERATED FILE. DO NOT EDIT DIRECTLY.
// Update hack/code/bandwidth_gen.go and re-generate to edit
diff --git a/pkg/cloudprovider/zz_generated.vpclimits.go b/pkg/providers/instancetype/zz_generated.vpclimits.go
similarity index 99%
rename from pkg/cloudprovider/zz_generated.vpclimits.go
rename to pkg/providers/instancetype/zz_generated.vpclimits.go
index 0b866eebf848..26df09625feb 100644
--- a/pkg/cloudprovider/zz_generated.vpclimits.go
+++ b/pkg/providers/instancetype/zz_generated.vpclimits.go
@@ -19,7 +19,7 @@
// Code generated by go generate; DO NOT EDIT.
// This file was generated at 2023-01-26T19:39:15Z
-package cloudprovider
+package instancetype
type VPCLimits struct {
Interface int
diff --git a/pkg/providers/launchtemplate/launchtemplate_test.go b/pkg/providers/launchtemplate/suite_test.go
similarity index 83%
rename from pkg/providers/launchtemplate/launchtemplate_test.go
rename to pkg/providers/launchtemplate/suite_test.go
index fba4783c4160..e31c2cbfc285 100644
--- a/pkg/providers/launchtemplate/launchtemplate_test.go
+++ b/pkg/providers/launchtemplate/suite_test.go
@@ -29,11 +29,9 @@ import (
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/awserr"
- "github.com/aws/aws-sdk-go/awstesting/mock"
"github.com/aws/aws-sdk-go/service/ec2"
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
- "github.com/patrickmn/go-cache"
"github.com/samber/lo"
v1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/resource"
@@ -43,25 +41,18 @@ import (
"k8s.io/client-go/tools/record"
clock "k8s.io/utils/clock/testing"
. "knative.dev/pkg/logging/testing"
- "knative.dev/pkg/ptr"
"sigs.k8s.io/controller-runtime/pkg/client"
"github.com/aws/karpenter/pkg/apis"
"github.com/aws/karpenter/pkg/apis/settings"
"github.com/aws/karpenter/pkg/apis/v1alpha1"
"github.com/aws/karpenter/pkg/cloudprovider"
- "github.com/aws/karpenter/pkg/fake"
- "github.com/aws/karpenter/pkg/providers/amifamily"
"github.com/aws/karpenter/pkg/providers/amifamily/bootstrap"
- "github.com/aws/karpenter/pkg/providers/launchtemplate"
- "github.com/aws/karpenter/pkg/providers/pricing"
- "github.com/aws/karpenter/pkg/providers/securitygroup"
- "github.com/aws/karpenter/pkg/providers/subnet"
+ "github.com/aws/karpenter/pkg/providers/instancetype"
"github.com/aws/karpenter/pkg/test"
coresettings "github.com/aws/karpenter-core/pkg/apis/settings"
"github.com/aws/karpenter-core/pkg/apis/v1alpha5"
- corecloudprovider "github.com/aws/karpenter-core/pkg/cloudprovider"
"github.com/aws/karpenter-core/pkg/controllers/provisioning"
"github.com/aws/karpenter-core/pkg/controllers/state"
"github.com/aws/karpenter-core/pkg/events"
@@ -70,40 +61,24 @@ import (
"github.com/aws/karpenter-core/pkg/operator/scheme"
coretest "github.com/aws/karpenter-core/pkg/test"
. "github.com/aws/karpenter-core/pkg/test/expectations"
- awscache "github.com/aws/karpenter/pkg/cache"
- awscontext "github.com/aws/karpenter/pkg/context"
)
var ctx context.Context
var stop context.CancelFunc
var opts options.Options
var env *coretest.Environment
-var ssmCache *cache.Cache
-var ec2Cache *cache.Cache
-var launchTemplateCache *cache.Cache
-var kubernetesVersionCache *cache.Cache
-var fakeEC2API *fake.EC2API
-var fakeSSMAPI *fake.SSMAPI
+var awsEnv *test.Environment
var fakeClock *clock.FakeClock
-var fakePricingAPI *fake.PricingAPI
-var amiProvider *amifamily.Provider
-var amiResolver *amifamily.Resolver
-var cloudProvider *cloudprovider.CloudProvider
-var unavailableOfferingsCache *awscache.UnavailableOfferings
var prov *provisioning.Provisioner
var provisioner *v1alpha5.Provisioner
-var launchTemplateProvider *launchtemplate.Provider
var nodeTemplate *v1alpha1.AWSNodeTemplate
var cluster *state.Cluster
-var pricingProvider *pricing.Provider
-var subnetProvider *subnet.Provider
-var instanceTypeProvider *cloudprovider.InstanceTypeProvider
-var securityGroupProvider *securitygroup.Provider
+var cloudProvider *cloudprovider.CloudProvider
func TestAWS(t *testing.T) {
ctx = TestContextWithLogger(t)
RegisterFailHandler(Fail)
- RunSpecs(t, "CloudProvider/AWS")
+ RunSpecs(t, "Provider/AWS")
}
var _ = BeforeSuite(func() {
@@ -111,58 +86,12 @@ var _ = BeforeSuite(func() {
ctx = coresettings.ToContext(ctx, coretest.Settings())
ctx = settings.ToContext(ctx, test.Settings())
ctx, stop = context.WithCancel(ctx)
+ awsEnv = test.NewEnvironment(ctx, env)
- fakeEC2API = &fake.EC2API{}
- fakeSSMAPI = &fake.SSMAPI{}
- ssmCache = cache.New(awscache.DefaultTTL, awscache.DefaultCleanupInterval)
- ec2Cache = cache.New(awscache.DefaultTTL, awscache.DefaultCleanupInterval)
- launchTemplateCache = cache.New(awscache.DefaultTTL, awscache.DefaultCleanupInterval)
- kubernetesVersionCache = cache.New(awscache.DefaultTTL, awscache.DefaultCleanupInterval)
- fakeClock = clock.NewFakeClock(time.Now())
- unavailableOfferingsCache = awscache.NewUnavailableOfferings()
- fakePricingAPI = &fake.PricingAPI{}
- pricingProvider = pricing.NewProvider(ctx, fakePricingAPI, fakeEC2API, "", make(chan struct{}))
- subnetProvider = subnet.NewProvider(fakeEC2API)
- securityGroupProvider = securitygroup.NewProvider(fakeEC2API)
- amiProvider = amifamily.NewProvider(env.Client, env.KubernetesInterface, fakeSSMAPI, fakeEC2API, ssmCache, ec2Cache, kubernetesVersionCache)
- amiResolver = amifamily.New(env.Client, amiProvider)
- instanceTypeProvider = cloudprovider.NewInstanceTypeProvider(mock.Session, fakeEC2API, subnetProvider, unavailableOfferingsCache, pricingProvider)
-
- launchTemplateProvider = launchtemplate.NewProvider(
- ctx,
- launchTemplateCache,
- fakeEC2API,
- amiResolver,
- securityGroupProvider,
- ptr.String("ca-bundle"),
- make(chan struct{}),
- net.ParseIP("10.0.100.10"),
- "https://test-cluster",
- )
-
- cloudProvider = cloudprovider.New(awscontext.Context{
- Context: corecloudprovider.Context{
- Context: ctx,
- RESTConfig: env.Config,
- KubernetesInterface: env.KubernetesInterface,
- KubeClient: env.Client,
- EventRecorder: events.NewRecorder(&record.FakeRecorder{}),
- Clock: &clock.FakeClock{},
- StartAsync: nil,
- },
- SubnetProvider: subnet.NewProvider(fakeEC2API),
- SecurityGroupProvider: securityGroupProvider,
- Session: mock.Session,
- UnavailableOfferingsCache: unavailableOfferingsCache,
- EC2API: fakeEC2API,
- PricingProvider: pricingProvider,
- AMIProvider: amiProvider,
- AMIResolver: amiResolver,
- LaunchTemplateProvider: launchTemplateProvider,
- })
+ fakeClock = &clock.FakeClock{}
+ cloudProvider = cloudprovider.New(ctx, awsEnv.InstanceTypesProvider, awsEnv.InstanceProvider, env.Client, awsEnv.AMIProvider)
cluster = state.NewCluster(fakeClock, env.Client, cloudProvider)
prov = provisioning.NewProvisioner(ctx, env.Client, env.KubernetesInterface.CoreV1(), events.NewRecorder(&record.FakeRecorder{}), cloudProvider, cluster)
-
})
var _ = AfterSuite(func() {
@@ -202,18 +131,11 @@ var _ = BeforeEach(func() {
Name: nodeTemplate.Name,
},
})
-
cluster.Reset()
- fakeEC2API.Reset()
- fakeSSMAPI.Reset()
- launchTemplateCache.Flush()
- unavailableOfferingsCache.Flush()
- ssmCache.Flush()
- ec2Cache.Flush()
- kubernetesVersionCache.Flush()
- securityGroupProvider.Reset()
- launchTemplateProvider.KubeDNSIP = net.ParseIP("10.0.100.10")
- launchTemplateProvider.ClusterEndpoint = "https://test-cluster"
+ awsEnv.Reset()
+
+ awsEnv.LaunchTemplateProvider.KubeDNSIP = net.ParseIP("10.0.100.10")
+ awsEnv.LaunchTemplateProvider.ClusterEndpoint = "https://test-cluster"
})
var _ = AfterEach(func() {
@@ -228,13 +150,13 @@ var _ = Describe("LaunchTemplates", func() {
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
+ Expect(awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
- firstLt := fakeEC2API.CalledWithCreateLaunchTemplateInput.Pop()
+ firstLt := awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Pop()
- Expect(fakeEC2API.CreateFleetBehavior.CalledWithInput.Len()).To(Equal(1))
+ Expect(awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Len()).To(Equal(1))
- createFleetInput := fakeEC2API.CreateFleetBehavior.CalledWithInput.Pop()
+ createFleetInput := awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Pop()
launchTemplate := createFleetInput.LaunchTemplateConfigs[0].LaunchTemplateSpecification
Expect(createFleetInput.LaunchTemplateConfigs).To(HaveLen(1))
@@ -263,9 +185,9 @@ var _ = Describe("LaunchTemplates", func() {
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
- Expect(fakeEC2API.CreateFleetBehavior.CalledWithInput.Len()).To(Equal(1))
- createFleetInput := fakeEC2API.CreateFleetBehavior.CalledWithInput.Pop()
+ Expect(awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
+ Expect(awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Len()).To(Equal(1))
+ createFleetInput := awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Pop()
// Expect these values to be correctly ordered by price
overrides := createFleetInput.LaunchTemplateConfigs[0].Overrides
@@ -274,7 +196,7 @@ var _ = Describe("LaunchTemplates", func() {
})
lastPrice := -math.MaxFloat64
for _, override := range overrides {
- offeringPrice, ok := pricingProvider.SpotPrice(*override.InstanceType, *override.AvailabilityZone)
+ offeringPrice, ok := awsEnv.PricingProvider.SpotPrice(*override.InstanceType, *override.AvailabilityZone)
Expect(ok).To(BeTrue())
Expect(offeringPrice).To(BeNumerically(">=", lastPrice))
lastPrice = offeringPrice
@@ -288,8 +210,8 @@ var _ = Describe("LaunchTemplates", func() {
pod := coretest.UnschedulablePod()
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CreateFleetBehavior.CalledWithInput.Len()).To(Equal(1))
- input := fakeEC2API.CreateFleetBehavior.CalledWithInput.Pop()
+ Expect(awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Len()).To(Equal(1))
+ input := awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Pop()
Expect(input.LaunchTemplateConfigs).To(HaveLen(1))
launchTemplate := input.LaunchTemplateConfigs[0].LaunchTemplateSpecification
Expect(*launchTemplate.LaunchTemplateName).To(Equal("test-launch-template"))
@@ -333,8 +255,8 @@ var _ = Describe("LaunchTemplates", func() {
})
ExpectProvisioned(ctx, env.Client, cluster, prov, pod1)
ExpectScheduled(ctx, env.Client, pod1)
- Expect(fakeEC2API.CreateFleetBehavior.CalledWithInput.Len()).To(Equal(1))
- name1 := fakeEC2API.CreateFleetBehavior.CalledWithInput.Pop().LaunchTemplateConfigs[0].LaunchTemplateSpecification.LaunchTemplateName
+ Expect(awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Len()).To(Equal(1))
+ name1 := awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Pop().LaunchTemplateConfigs[0].LaunchTemplateSpecification.LaunchTemplateName
pod2 := coretest.UnschedulablePod(coretest.PodOptions{
Tolerations: []v1.Toleration{t2, t3, t1},
@@ -343,8 +265,8 @@ var _ = Describe("LaunchTemplates", func() {
ExpectProvisioned(ctx, env.Client, cluster, prov, pod2)
ExpectScheduled(ctx, env.Client, pod2)
- Expect(fakeEC2API.CreateFleetBehavior.CalledWithInput.Len()).To(Equal(1))
- name2 := fakeEC2API.CreateFleetBehavior.CalledWithInput.Pop().LaunchTemplateConfigs[0].LaunchTemplateSpecification.LaunchTemplateName
+ Expect(awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Len()).To(Equal(1))
+ name2 := awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Pop().LaunchTemplateConfigs[0].LaunchTemplateSpecification.LaunchTemplateName
Expect(name1).To(Equal(name2))
})
It("should recover from an out-of-sync launch template cache", func() {
@@ -353,19 +275,19 @@ var _ = Describe("LaunchTemplates", func() {
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
- firstLt := fakeEC2API.CalledWithCreateLaunchTemplateInput.Pop()
+ Expect(awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
+ firstLt := awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Pop()
ltName := aws.StringValue(firstLt.LaunchTemplateName)
- lt, ok := launchTemplateCache.Get(ltName)
+ lt, ok := awsEnv.LaunchTemplateCache.Get(ltName)
Expect(ok).To(Equal(true))
// Remove expiration from cached LT
- launchTemplateCache.Set(ltName, lt, -1)
+ awsEnv.LaunchTemplateCache.Set(ltName, lt, -1)
- fakeEC2API.CreateFleetBehavior.Error.Set(awserr.New("InvalidLaunchTemplateName.NotFoundException", "", errors.New("")))
+ awsEnv.EC2API.CreateFleetBehavior.Error.Set(awserr.New("InvalidLaunchTemplateName.NotFoundException", "", errors.New("")))
pod = coretest.UnschedulablePod()
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
// should call fleet twice. Once will fail on invalid LT and the next will succeed
- fleetInput := fakeEC2API.CreateFleetBehavior.CalledWithInput.Pop()
+ fleetInput := awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Pop()
Expect(aws.StringValue(fleetInput.LaunchTemplateConfigs[0].LaunchTemplateSpecification.LaunchTemplateName)).To(Equal(ltName))
ExpectScheduled(ctx, env.Client, pod)
})
@@ -381,7 +303,7 @@ var _ = Describe("LaunchTemplates", func() {
Expect(node.Labels).To(HaveKey(v1.LabelInstanceTypeStable))
})
It("should apply provider labels to the node", func() {
- fakeEC2API.DescribeImagesOutput.Set(&ec2.DescribeImagesOutput{Images: []*ec2.Image{
+ awsEnv.EC2API.DescribeImagesOutput.Set(&ec2.DescribeImagesOutput{Images: []*ec2.Image{
{
ImageId: aws.String("ami-123"),
Architecture: aws.String("x86_64"),
@@ -412,8 +334,8 @@ var _ = Describe("LaunchTemplates", func() {
pod := coretest.UnschedulablePod()
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CreateFleetBehavior.CalledWithInput.Len()).To(Equal(1))
- createFleetInput := fakeEC2API.CreateFleetBehavior.CalledWithInput.Pop()
+ Expect(awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Len()).To(Equal(1))
+ createFleetInput := awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Pop()
Expect(createFleetInput.TagSpecifications).To(HaveLen(3))
tags := map[string]string{
@@ -439,8 +361,8 @@ var _ = Describe("LaunchTemplates", func() {
pod := coretest.UnschedulablePod()
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CreateFleetBehavior.CalledWithInput.Len()).To(Equal(1))
- createFleetInput := fakeEC2API.CreateFleetBehavior.CalledWithInput.Pop()
+ Expect(awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Len()).To(Equal(1))
+ createFleetInput := awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Pop()
Expect(createFleetInput.TagSpecifications).To(HaveLen(3))
// tags should be included in instance, volume, and fleet tag specification
@@ -463,8 +385,8 @@ var _ = Describe("LaunchTemplates", func() {
pod := coretest.UnschedulablePod()
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CreateFleetBehavior.CalledWithInput.Len()).To(Equal(1))
- createFleetInput := fakeEC2API.CreateFleetBehavior.CalledWithInput.Pop()
+ Expect(awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Len()).To(Equal(1))
+ createFleetInput := awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Pop()
Expect(createFleetInput.TagSpecifications).To(HaveLen(3))
// tags should be included in instance, volume, and fleet tag specification
@@ -494,8 +416,8 @@ var _ = Describe("LaunchTemplates", func() {
pod := coretest.UnschedulablePod()
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CreateFleetBehavior.CalledWithInput.Len()).To(Equal(1))
- createFleetInput := fakeEC2API.CreateFleetBehavior.CalledWithInput.Pop()
+ Expect(awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Len()).To(Equal(1))
+ createFleetInput := awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Pop()
Expect(createFleetInput.TagSpecifications).To(HaveLen(3))
// tags should be included in instance, volume, and fleet tag specification
@@ -524,8 +446,8 @@ var _ = Describe("LaunchTemplates", func() {
pod := coretest.UnschedulablePod()
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CreateFleetBehavior.CalledWithInput.Len()).To(Equal(1))
- createFleetInput := fakeEC2API.CreateFleetBehavior.CalledWithInput.Pop()
+ Expect(awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Len()).To(Equal(1))
+ createFleetInput := awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Pop()
Expect(createFleetInput.TagSpecifications).To(HaveLen(3))
// tags should be included in instance, volume, and fleet tag specification
@@ -549,8 +471,8 @@ var _ = Describe("LaunchTemplates", func() {
pod := coretest.UnschedulablePod()
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
- input := fakeEC2API.CalledWithCreateLaunchTemplateInput.Pop()
+ Expect(awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
+ input := awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Pop()
Expect(len(input.LaunchTemplateData.BlockDeviceMappings)).To(Equal(1))
Expect(*input.LaunchTemplateData.BlockDeviceMappings[0].Ebs.VolumeSize).To(Equal(int64(20)))
Expect(*input.LaunchTemplateData.BlockDeviceMappings[0].Ebs.VolumeType).To(Equal("gp3"))
@@ -586,8 +508,8 @@ var _ = Describe("LaunchTemplates", func() {
pod := coretest.UnschedulablePod()
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
- input := fakeEC2API.CalledWithCreateLaunchTemplateInput.Pop()
+ Expect(awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
+ input := awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Pop()
Expect(input.LaunchTemplateData.BlockDeviceMappings[0].Ebs).To(Equal(&ec2.LaunchTemplateEbsBlockDeviceRequest{
VolumeSize: aws.Int64(187),
VolumeType: aws.String("io2"),
@@ -635,8 +557,8 @@ var _ = Describe("LaunchTemplates", func() {
pod := coretest.UnschedulablePod()
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
- input := fakeEC2API.CalledWithCreateLaunchTemplateInput.Pop()
+ Expect(awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
+ input := awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Pop()
// Both of these values are rounded up when converting to Gibibytes
Expect(aws.Int64Value(input.LaunchTemplateData.BlockDeviceMappings[0].Ebs.VolumeSize)).To(BeNumerically("==", 4))
@@ -648,8 +570,8 @@ var _ = Describe("LaunchTemplates", func() {
pod := coretest.UnschedulablePod()
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
- input := fakeEC2API.CalledWithCreateLaunchTemplateInput.Pop()
+ Expect(awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
+ input := awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Pop()
Expect(len(input.LaunchTemplateData.BlockDeviceMappings)).To(Equal(2))
// Bottlerocket control volume
Expect(*input.LaunchTemplateData.BlockDeviceMappings[0].Ebs.VolumeSize).To(Equal(int64(4)))
@@ -666,8 +588,8 @@ var _ = Describe("LaunchTemplates", func() {
pod := coretest.UnschedulablePod()
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
- input := fakeEC2API.CalledWithCreateLaunchTemplateInput.Pop()
+ Expect(awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
+ input := awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Pop()
Expect(len(input.LaunchTemplateData.BlockDeviceMappings)).To(Equal(0))
})
It("should use custom block device mapping for custom AMIFamilies", func() {
@@ -689,8 +611,8 @@ var _ = Describe("LaunchTemplates", func() {
pod := coretest.UnschedulablePod()
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
- input := fakeEC2API.CalledWithCreateLaunchTemplateInput.Pop()
+ Expect(awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
+ input := awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Pop()
Expect(len(input.LaunchTemplateData.BlockDeviceMappings)).To(Equal(1))
Expect(*input.LaunchTemplateData.BlockDeviceMappings[0].Ebs.VolumeSize).To(Equal(int64(40)))
Expect(*input.LaunchTemplateData.BlockDeviceMappings[0].Ebs.VolumeType).To(Equal("io2"))
@@ -849,7 +771,7 @@ var _ = Describe("LaunchTemplates", func() {
BeforeEach(func() {
var ok bool
var instanceInfo []*ec2.InstanceTypeInfo
- err := fakeEC2API.DescribeInstanceTypesPagesWithContext(ctx, &ec2.DescribeInstanceTypesInput{
+ err := awsEnv.EC2API.DescribeInstanceTypesPagesWithContext(ctx, &ec2.DescribeInstanceTypesInput{
Filters: []*ec2.Filter{
{
Name: aws.String("supported-virtualization-type"),
@@ -878,7 +800,7 @@ var _ = Describe("LaunchTemplates", func() {
}))
nodeTemplate.Spec.AMIFamily = &v1alpha1.AMIFamilyAL2
- it := cloudprovider.NewInstanceType(ctx, info, provisioner.Spec.KubeletConfiguration, "", nodeTemplate, nil)
+ it := instancetype.NewInstanceType(ctx, info, provisioner.Spec.KubeletConfiguration, "", nodeTemplate, nil)
overhead := it.Overhead.Total()
Expect(overhead.Memory().String()).To(Equal("1093Mi"))
})
@@ -889,7 +811,7 @@ var _ = Describe("LaunchTemplates", func() {
}))
nodeTemplate.Spec.AMIFamily = &v1alpha1.AMIFamilyAL2
- it := cloudprovider.NewInstanceType(ctx, info, provisioner.Spec.KubeletConfiguration, "", nodeTemplate, nil)
+ it := instancetype.NewInstanceType(ctx, info, provisioner.Spec.KubeletConfiguration, "", nodeTemplate, nil)
overhead := it.Overhead.Total()
Expect(overhead.Memory().String()).To(Equal("1093Mi"))
})
@@ -899,7 +821,7 @@ var _ = Describe("LaunchTemplates", func() {
BeforeEach(func() {
var ok bool
var instanceInfo []*ec2.InstanceTypeInfo
- err := fakeEC2API.DescribeInstanceTypesPagesWithContext(ctx, &ec2.DescribeInstanceTypesInput{
+ err := awsEnv.EC2API.DescribeInstanceTypesPagesWithContext(ctx, &ec2.DescribeInstanceTypesInput{
Filters: []*ec2.Filter{
{
Name: aws.String("supported-virtualization-type"),
@@ -928,7 +850,7 @@ var _ = Describe("LaunchTemplates", func() {
}))
nodeTemplate.Spec.AMIFamily = &v1alpha1.AMIFamilyBottlerocket
- it := cloudprovider.NewInstanceType(ctx, info, provisioner.Spec.KubeletConfiguration, "", nodeTemplate, nil)
+ it := instancetype.NewInstanceType(ctx, info, provisioner.Spec.KubeletConfiguration, "", nodeTemplate, nil)
overhead := it.Overhead.Total()
Expect(overhead.Memory().String()).To(Equal("1093Mi"))
})
@@ -939,7 +861,7 @@ var _ = Describe("LaunchTemplates", func() {
}))
nodeTemplate.Spec.AMIFamily = &v1alpha1.AMIFamilyBottlerocket
- it := cloudprovider.NewInstanceType(ctx, info, provisioner.Spec.KubeletConfiguration, "", nodeTemplate, nil)
+ it := instancetype.NewInstanceType(ctx, info, provisioner.Spec.KubeletConfiguration, "", nodeTemplate, nil)
overhead := it.Overhead.Total()
Expect(overhead.Memory().String()).To(Equal("1665Mi"))
})
@@ -950,8 +872,8 @@ var _ = Describe("LaunchTemplates", func() {
pod := coretest.UnschedulablePod()
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
- input := fakeEC2API.CalledWithCreateLaunchTemplateInput.Pop()
+ Expect(awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
+ input := awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Pop()
userData, err := base64.StdEncoding.DecodeString(*input.LaunchTemplateData.UserData)
Expect(err).To(BeNil())
Expect(string(userData)).NotTo(ContainSubstring("--use-max-pods false"))
@@ -965,8 +887,8 @@ var _ = Describe("LaunchTemplates", func() {
pod := coretest.UnschedulablePod()
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
- input := fakeEC2API.CalledWithCreateLaunchTemplateInput.Pop()
+ Expect(awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
+ input := awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Pop()
userData, err := base64.StdEncoding.DecodeString(*input.LaunchTemplateData.UserData)
Expect(err).To(BeNil())
Expect(string(userData)).To(ContainSubstring("--use-max-pods false"))
@@ -978,8 +900,8 @@ var _ = Describe("LaunchTemplates", func() {
pod := coretest.UnschedulablePod()
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
- input := fakeEC2API.CalledWithCreateLaunchTemplateInput.Pop()
+ Expect(awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
+ input := awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Pop()
userData, err := base64.StdEncoding.DecodeString(*input.LaunchTemplateData.UserData)
Expect(err).To(BeNil())
Expect(string(userData)).To(ContainSubstring("--use-max-pods false"))
@@ -997,8 +919,8 @@ var _ = Describe("LaunchTemplates", func() {
pod := coretest.UnschedulablePod()
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
- input := fakeEC2API.CalledWithCreateLaunchTemplateInput.Pop()
+ Expect(awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
+ input := awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Pop()
userData, err := base64.StdEncoding.DecodeString(*input.LaunchTemplateData.UserData)
Expect(err).To(BeNil())
@@ -1023,8 +945,8 @@ var _ = Describe("LaunchTemplates", func() {
pod := coretest.UnschedulablePod()
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
- input := fakeEC2API.CalledWithCreateLaunchTemplateInput.Pop()
+ Expect(awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
+ input := awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Pop()
userData, err := base64.StdEncoding.DecodeString(*input.LaunchTemplateData.UserData)
Expect(err).To(BeNil())
@@ -1049,8 +971,8 @@ var _ = Describe("LaunchTemplates", func() {
pod := coretest.UnschedulablePod()
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
- input := fakeEC2API.CalledWithCreateLaunchTemplateInput.Pop()
+ Expect(awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
+ input := awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Pop()
userData, err := base64.StdEncoding.DecodeString(*input.LaunchTemplateData.UserData)
Expect(err).To(BeNil())
@@ -1075,8 +997,8 @@ var _ = Describe("LaunchTemplates", func() {
pod := coretest.UnschedulablePod()
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
- input := fakeEC2API.CalledWithCreateLaunchTemplateInput.Pop()
+ Expect(awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
+ input := awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Pop()
userData, err := base64.StdEncoding.DecodeString(*input.LaunchTemplateData.UserData)
Expect(err).To(BeNil())
@@ -1101,8 +1023,8 @@ var _ = Describe("LaunchTemplates", func() {
pod := coretest.UnschedulablePod()
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
- input := fakeEC2API.CalledWithCreateLaunchTemplateInput.Pop()
+ Expect(awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
+ input := awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Pop()
userData, err := base64.StdEncoding.DecodeString(*input.LaunchTemplateData.UserData)
Expect(err).To(BeNil())
@@ -1123,8 +1045,8 @@ var _ = Describe("LaunchTemplates", func() {
pod := coretest.UnschedulablePod()
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
- input := fakeEC2API.CalledWithCreateLaunchTemplateInput.Pop()
+ Expect(awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
+ input := awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Pop()
userData, err := base64.StdEncoding.DecodeString(*input.LaunchTemplateData.UserData)
Expect(err).To(BeNil())
@@ -1138,8 +1060,8 @@ var _ = Describe("LaunchTemplates", func() {
pod := coretest.UnschedulablePod()
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
- input := fakeEC2API.CalledWithCreateLaunchTemplateInput.Pop()
+ Expect(awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
+ input := awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Pop()
userData, err := base64.StdEncoding.DecodeString(*input.LaunchTemplateData.UserData)
Expect(err).To(BeNil())
Expect(string(userData)).To(ContainSubstring(fmt.Sprintf("--pods-per-core=%d", 2)))
@@ -1153,8 +1075,8 @@ var _ = Describe("LaunchTemplates", func() {
pod := coretest.UnschedulablePod()
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
- input := fakeEC2API.CalledWithCreateLaunchTemplateInput.Pop()
+ Expect(awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
+ input := awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Pop()
userData, err := base64.StdEncoding.DecodeString(*input.LaunchTemplateData.UserData)
Expect(err).To(BeNil())
Expect(string(userData)).To(ContainSubstring(fmt.Sprintf("--pods-per-core=%d", 2)))
@@ -1165,8 +1087,8 @@ var _ = Describe("LaunchTemplates", func() {
pod := coretest.UnschedulablePod()
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
- input := fakeEC2API.CalledWithCreateLaunchTemplateInput.Pop()
+ Expect(awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
+ input := awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Pop()
userData, err := base64.StdEncoding.DecodeString(*input.LaunchTemplateData.UserData)
Expect(err).To(BeNil())
Expect(string(userData)).To(ContainSubstring("--container-runtime containerd"))
@@ -1177,8 +1099,8 @@ var _ = Describe("LaunchTemplates", func() {
pod := coretest.UnschedulablePod()
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
- input := fakeEC2API.CalledWithCreateLaunchTemplateInput.Pop()
+ Expect(awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
+ input := awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Pop()
userData, err := base64.StdEncoding.DecodeString(*input.LaunchTemplateData.UserData)
Expect(err).To(BeNil())
Expect(string(userData)).To(ContainSubstring("--container-runtime dockerd"))
@@ -1199,8 +1121,8 @@ var _ = Describe("LaunchTemplates", func() {
})
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
- input := fakeEC2API.CalledWithCreateLaunchTemplateInput.Pop()
+ Expect(awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
+ input := awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Pop()
userData, err := base64.StdEncoding.DecodeString(*input.LaunchTemplateData.UserData)
Expect(err).To(BeNil())
Expect(string(userData)).To(ContainSubstring("--container-runtime containerd"))
@@ -1221,20 +1143,20 @@ var _ = Describe("LaunchTemplates", func() {
})
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
- input := fakeEC2API.CalledWithCreateLaunchTemplateInput.Pop()
+ Expect(awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
+ input := awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Pop()
userData, err := base64.StdEncoding.DecodeString(*input.LaunchTemplateData.UserData)
Expect(err).To(BeNil())
Expect(string(userData)).To(ContainSubstring("--container-runtime containerd"))
})
It("should specify --dns-cluster-ip and --ip-family when running in an ipv6 cluster", func() {
- launchTemplateProvider.KubeDNSIP = net.ParseIP("fd4b:121b:812b::a")
+ awsEnv.LaunchTemplateProvider.KubeDNSIP = net.ParseIP("fd4b:121b:812b::a")
ExpectApplied(ctx, env.Client, provisioner, nodeTemplate)
pod := coretest.UnschedulablePod()
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
- input := fakeEC2API.CalledWithCreateLaunchTemplateInput.Pop()
+ Expect(awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
+ input := awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Pop()
userData, err := base64.StdEncoding.DecodeString(*input.LaunchTemplateData.UserData)
Expect(err).To(BeNil())
Expect(string(userData)).To(ContainSubstring("--dns-cluster-ip 'fd4b:121b:812b::a'"))
@@ -1249,8 +1171,8 @@ var _ = Describe("LaunchTemplates", func() {
pod := coretest.UnschedulablePod()
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
- input := fakeEC2API.CalledWithCreateLaunchTemplateInput.Pop()
+ Expect(awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
+ input := awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Pop()
userData, err := base64.StdEncoding.DecodeString(*input.LaunchTemplateData.UserData)
Expect(err).To(BeNil())
Expect(string(userData)).To(ContainSubstring("--image-gc-high-threshold=50"))
@@ -1263,8 +1185,8 @@ var _ = Describe("LaunchTemplates", func() {
pod := coretest.UnschedulablePod()
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
- input := fakeEC2API.CalledWithCreateLaunchTemplateInput.Pop()
+ Expect(awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
+ input := awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Pop()
userData, err := base64.StdEncoding.DecodeString(*input.LaunchTemplateData.UserData)
Expect(err).To(BeNil())
Expect(string(userData)).To(ContainSubstring("--image-gc-low-threshold=50"))
@@ -1288,8 +1210,8 @@ var _ = Describe("LaunchTemplates", func() {
})
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
- input := fakeEC2API.CalledWithCreateLaunchTemplateInput.Pop()
+ Expect(awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
+ input := awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Pop()
userData, err := base64.StdEncoding.DecodeString(*input.LaunchTemplateData.UserData)
Expect(err).To(BeNil())
content, err = os.ReadFile("testdata/br_userdata_merged.golden")
@@ -1313,8 +1235,8 @@ var _ = Describe("LaunchTemplates", func() {
})
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
- input := fakeEC2API.CalledWithCreateLaunchTemplateInput.Pop()
+ Expect(awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
+ input := awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Pop()
userData, err := base64.StdEncoding.DecodeString(*input.LaunchTemplateData.UserData)
Expect(err).To(BeNil())
content, err := os.ReadFile("testdata/br_userdata_unmerged.golden")
@@ -1365,8 +1287,8 @@ var _ = Describe("LaunchTemplates", func() {
pod := coretest.UnschedulablePod()
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
- input := fakeEC2API.CalledWithCreateLaunchTemplateInput.Pop()
+ Expect(awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
+ input := awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Pop()
userData, err := base64.StdEncoding.DecodeString(*input.LaunchTemplateData.UserData)
Expect(err).To(BeNil())
config := &bootstrap.BottlerocketConfig{}
@@ -1395,8 +1317,8 @@ var _ = Describe("LaunchTemplates", func() {
pod := coretest.UnschedulablePod()
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
- input := fakeEC2API.CalledWithCreateLaunchTemplateInput.Pop()
+ Expect(awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
+ input := awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Pop()
userData, err := base64.StdEncoding.DecodeString(*input.LaunchTemplateData.UserData)
Expect(err).To(BeNil())
config := &bootstrap.BottlerocketConfig{}
@@ -1425,8 +1347,8 @@ var _ = Describe("LaunchTemplates", func() {
pod := coretest.UnschedulablePod()
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
- input := fakeEC2API.CalledWithCreateLaunchTemplateInput.Pop()
+ Expect(awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
+ input := awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Pop()
userData, err := base64.StdEncoding.DecodeString(*input.LaunchTemplateData.UserData)
Expect(err).To(BeNil())
config := &bootstrap.BottlerocketConfig{}
@@ -1450,8 +1372,8 @@ var _ = Describe("LaunchTemplates", func() {
pod := coretest.UnschedulablePod()
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
- input := fakeEC2API.CalledWithCreateLaunchTemplateInput.Pop()
+ Expect(awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
+ input := awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Pop()
userData, err := base64.StdEncoding.DecodeString(*input.LaunchTemplateData.UserData)
Expect(err).To(BeNil())
config := &bootstrap.BottlerocketConfig{}
@@ -1475,8 +1397,8 @@ var _ = Describe("LaunchTemplates", func() {
pod := coretest.UnschedulablePod()
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
- input := fakeEC2API.CalledWithCreateLaunchTemplateInput.Pop()
+ Expect(awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
+ input := awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Pop()
userData, err := base64.StdEncoding.DecodeString(*input.LaunchTemplateData.UserData)
Expect(err).To(BeNil())
content, err = os.ReadFile("testdata/al2_userdata_merged.golden")
@@ -1498,8 +1420,8 @@ var _ = Describe("LaunchTemplates", func() {
pod := coretest.UnschedulablePod()
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
- input := fakeEC2API.CalledWithCreateLaunchTemplateInput.Pop()
+ Expect(awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
+ input := awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Pop()
userData, err := base64.StdEncoding.DecodeString(*input.LaunchTemplateData.UserData)
Expect(err).To(BeNil())
content, err = os.ReadFile("testdata/al2_userdata_merged.golden")
@@ -1518,8 +1440,8 @@ var _ = Describe("LaunchTemplates", func() {
pod := coretest.UnschedulablePod()
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
- input := fakeEC2API.CalledWithCreateLaunchTemplateInput.Pop()
+ Expect(awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
+ input := awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Pop()
userData, err := base64.StdEncoding.DecodeString(*input.LaunchTemplateData.UserData)
Expect(err).To(BeNil())
content, err := os.ReadFile("testdata/al2_userdata_unmerged.golden")
@@ -1531,7 +1453,7 @@ var _ = Describe("LaunchTemplates", func() {
Context("Custom AMI Selector", func() {
It("should use ami selector specified in AWSNodeTemplate", func() {
nodeTemplate.Spec.AMISelector = map[string]string{"karpenter.sh/discovery": "my-cluster"}
- fakeEC2API.DescribeImagesOutput.Set(&ec2.DescribeImagesOutput{Images: []*ec2.Image{
+ awsEnv.EC2API.DescribeImagesOutput.Set(&ec2.DescribeImagesOutput{Images: []*ec2.Image{
{
ImageId: aws.String("ami-123"),
Architecture: aws.String("x86_64"),
@@ -1543,15 +1465,15 @@ var _ = Describe("LaunchTemplates", func() {
pod := coretest.UnschedulablePod()
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
- input := fakeEC2API.CalledWithCreateLaunchTemplateInput.Pop()
+ Expect(awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
+ input := awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Pop()
Expect("ami-123").To(Equal(*input.LaunchTemplateData.ImageId))
})
It("should copy over userData untouched when AMIFamily is Custom", func() {
nodeTemplate.Spec.UserData = aws.String("special user data")
nodeTemplate.Spec.AMISelector = map[string]string{"karpenter.sh/discovery": "my-cluster"}
nodeTemplate.Spec.AMIFamily = &v1alpha1.AMIFamilyCustom
- fakeEC2API.DescribeImagesOutput.Set(&ec2.DescribeImagesOutput{Images: []*ec2.Image{
+ awsEnv.EC2API.DescribeImagesOutput.Set(&ec2.DescribeImagesOutput{Images: []*ec2.Image{
{
ImageId: aws.String("ami-123"),
Architecture: aws.String("x86_64"),
@@ -1563,15 +1485,15 @@ var _ = Describe("LaunchTemplates", func() {
pod := coretest.UnschedulablePod()
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
- input := fakeEC2API.CalledWithCreateLaunchTemplateInput.Pop()
+ Expect(awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
+ input := awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Pop()
userData, err := base64.StdEncoding.DecodeString(*input.LaunchTemplateData.UserData)
Expect(err).To(BeNil())
Expect("special user data").To(Equal(string(userData)))
})
It("should correctly use ami selector with specific IDs in AWSNodeTemplate", func() {
nodeTemplate.Spec.AMISelector = map[string]string{"aws-ids": "ami-123,ami-456"}
- fakeEC2API.DescribeImagesOutput.Set(&ec2.DescribeImagesOutput{Images: []*ec2.Image{
+ awsEnv.EC2API.DescribeImagesOutput.Set(&ec2.DescribeImagesOutput{Images: []*ec2.Image{
{
ImageId: aws.String("ami-123"),
Architecture: aws.String("x86_64"),
@@ -1591,8 +1513,8 @@ var _ = Describe("LaunchTemplates", func() {
pod := coretest.UnschedulablePod()
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(2))
- actualFilter := fakeEC2API.CalledWithDescribeImagesInput.Pop().Filters
+ Expect(awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(2))
+ actualFilter := awsEnv.EC2API.CalledWithDescribeImagesInput.Pop().Filters
expectedFilter := []*ec2.Filter{
{
Name: aws.String("image-id"),
@@ -1602,7 +1524,7 @@ var _ = Describe("LaunchTemplates", func() {
Expect(actualFilter).To(Equal(expectedFilter))
})
It("should create multiple launch templates when multiple amis are discovered with non-equivalent requirements", func() {
- fakeEC2API.DescribeImagesOutput.Set(&ec2.DescribeImagesOutput{Images: []*ec2.Image{
+ awsEnv.EC2API.DescribeImagesOutput.Set(&ec2.DescribeImagesOutput{Images: []*ec2.Image{
{
ImageId: aws.String("ami-123"),
Architecture: aws.String("x86_64"),
@@ -1623,16 +1545,16 @@ var _ = Describe("LaunchTemplates", func() {
pod := coretest.UnschedulablePod()
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(2))
+ Expect(awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(2))
expectedImageIds := sets.NewString("ami-123", "ami-456")
actualImageIds := sets.NewString(
- *fakeEC2API.CalledWithCreateLaunchTemplateInput.Pop().LaunchTemplateData.ImageId,
- *fakeEC2API.CalledWithCreateLaunchTemplateInput.Pop().LaunchTemplateData.ImageId,
+ *awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Pop().LaunchTemplateData.ImageId,
+ *awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Pop().LaunchTemplateData.ImageId,
)
Expect(expectedImageIds.Equal(actualImageIds)).To(BeTrue())
})
It("should create a launch template with the newest compatible AMI when multiple amis are discovered", func() {
- fakeEC2API.DescribeImagesOutput.Set(&ec2.DescribeImagesOutput{Images: []*ec2.Image{
+ awsEnv.EC2API.DescribeImagesOutput.Set(&ec2.DescribeImagesOutput{Images: []*ec2.Image{
{
ImageId: aws.String("ami-123"),
Architecture: aws.String("x86_64"),
@@ -1666,13 +1588,13 @@ var _ = Describe("LaunchTemplates", func() {
pod := coretest.UnschedulablePod()
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
- input := fakeEC2API.CalledWithCreateLaunchTemplateInput.Pop()
+ Expect(awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
+ input := awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Pop()
Expect("ami-456").To(Equal(*input.LaunchTemplateData.ImageId))
})
It("should fail if no amis match selector.", func() {
- fakeEC2API.DescribeImagesOutput.Set(&ec2.DescribeImagesOutput{Images: []*ec2.Image{}})
+ awsEnv.EC2API.DescribeImagesOutput.Set(&ec2.DescribeImagesOutput{Images: []*ec2.Image{}})
nodeTemplate.Spec.AMISelector = map[string]string{"karpenter.sh/discovery": "my-cluster"}
ExpectApplied(ctx, env.Client, nodeTemplate)
newProvisioner := test.Provisioner(coretest.ProvisionerOptions{ProviderRef: &v1alpha5.ProviderRef{Name: nodeTemplate.Name}})
@@ -1680,10 +1602,10 @@ var _ = Describe("LaunchTemplates", func() {
pod := coretest.UnschedulablePod()
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectNotScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(0))
+ Expect(awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(0))
})
It("should fail if no instanceType matches ami requirements.", func() {
- fakeEC2API.DescribeImagesOutput.Set(&ec2.DescribeImagesOutput{Images: []*ec2.Image{
+ awsEnv.EC2API.DescribeImagesOutput.Set(&ec2.DescribeImagesOutput{Images: []*ec2.Image{
{ImageId: aws.String("ami-123"), Architecture: aws.String("newnew"), CreationDate: aws.String("2022-01-01T12:00:00Z")},
}})
nodeTemplate.Spec.AMISelector = map[string]string{"karpenter.sh/discovery": "my-cluster"}
@@ -1693,7 +1615,7 @@ var _ = Describe("LaunchTemplates", func() {
pod := coretest.UnschedulablePod()
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectNotScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(0))
+ Expect(awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(0))
})
It("should choose amis from SSM if no selector specified in AWSNodeTemplate", func() {
ExpectApplied(ctx, env.Client, nodeTemplate)
@@ -1702,7 +1624,7 @@ var _ = Describe("LaunchTemplates", func() {
pod := coretest.UnschedulablePod()
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- input := fakeEC2API.CalledWithCreateLaunchTemplateInput.Pop()
+ input := awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Pop()
Expect(*input.LaunchTemplateData.ImageId).To(ContainSubstring("test-ami"))
})
})
@@ -1713,8 +1635,8 @@ var _ = Describe("LaunchTemplates", func() {
pod := coretest.UnschedulablePod()
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
- input := fakeEC2API.CalledWithCreateLaunchTemplateInput.Pop()
+ Expect(awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
+ input := awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Pop()
userData, err := base64.StdEncoding.DecodeString(*input.LaunchTemplateData.UserData)
Expect(err).To(BeNil())
Expect(string(userData)).To(ContainSubstring("--dns-cluster-ip '10.0.10.100'"))
@@ -1726,8 +1648,8 @@ var _ = Describe("LaunchTemplates", func() {
pod := coretest.UnschedulablePod()
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
- input := fakeEC2API.CalledWithCreateLaunchTemplateInput.Pop()
+ Expect(awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
+ input := awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Pop()
Expect(*input.LaunchTemplateData.IamInstanceProfile.Name).To(Equal("test-instance-profile"))
})
It("should use the instance profile on the Provisioner when specified", func() {
@@ -1736,8 +1658,8 @@ var _ = Describe("LaunchTemplates", func() {
pod := coretest.UnschedulablePod()
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
- input := fakeEC2API.CalledWithCreateLaunchTemplateInput.Pop()
+ Expect(awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
+ input := awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Pop()
Expect(*input.LaunchTemplateData.IamInstanceProfile.Name).To(Equal("overridden-profile"))
})
})
@@ -1749,8 +1671,8 @@ var _ = Describe("LaunchTemplates", func() {
pod := coretest.UnschedulablePod()
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
- input := fakeEC2API.CalledWithCreateLaunchTemplateInput.Pop()
+ Expect(awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
+ input := awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Pop()
Expect(aws.BoolValue(input.LaunchTemplateData.Monitoring.Enabled)).To(BeFalse())
})
It("should pass detailed monitoring setting to the launch template at creation", func() {
@@ -1760,8 +1682,8 @@ var _ = Describe("LaunchTemplates", func() {
pod := coretest.UnschedulablePod()
ExpectProvisioned(ctx, env.Client, cluster, prov, pod)
ExpectScheduled(ctx, env.Client, pod)
- Expect(fakeEC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
- input := fakeEC2API.CalledWithCreateLaunchTemplateInput.Pop()
+ Expect(awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Len()).To(Equal(1))
+ input := awsEnv.EC2API.CalledWithCreateLaunchTemplateInput.Pop()
Expect(aws.BoolValue(input.LaunchTemplateData.Monitoring.Enabled)).To(BeTrue())
})
})
diff --git a/pkg/providers/pricing/suite_test.go b/pkg/providers/pricing/suite_test.go
index f6880c15a712..60511eaf2d58 100644
--- a/pkg/providers/pricing/suite_test.go
+++ b/pkg/providers/pricing/suite_test.go
@@ -46,14 +46,12 @@ var ctx context.Context
var stop context.CancelFunc
var opts options.Options
var env *coretest.Environment
-var fakePricingAPI *fake.PricingAPI
-var fakeEC2API *fake.EC2API
-var pricingProvider *pricing.Provider
+var awsEnv *test.Environment
func TestAWS(t *testing.T) {
ctx = TestContextWithLogger(t)
RegisterFailHandler(Fail)
- RunSpecs(t, "CloudProvider/AWS")
+ RunSpecs(t, "Provider/AWS")
}
var _ = BeforeSuite(func() {
@@ -61,10 +59,7 @@ var _ = BeforeSuite(func() {
ctx = coresettings.ToContext(ctx, coretest.Settings())
ctx = settings.ToContext(ctx, test.Settings())
ctx, stop = context.WithCancel(ctx)
-
- fakeEC2API = &fake.EC2API{}
- fakePricingAPI = &fake.PricingAPI{}
- pricingProvider = pricing.NewProvider(ctx, fakePricingAPI, fakeEC2API, "", make(chan struct{}))
+ awsEnv = test.NewEnvironment(ctx, env)
})
var _ = AfterSuite(func() {
@@ -77,8 +72,7 @@ var _ = BeforeEach(func() {
ctx = coresettings.ToContext(ctx, coretest.Settings())
ctx = settings.ToContext(ctx, test.Settings())
- fakeEC2API.Reset()
- fakePricingAPI.Reset()
+ awsEnv.Reset()
})
var _ = AfterEach(func() {
@@ -86,20 +80,16 @@ var _ = AfterEach(func() {
})
var _ = Describe("Pricing", func() {
- BeforeEach(func() {
- fakeEC2API.Reset()
- fakePricingAPI.Reset()
- })
It("should return static on-demand data if pricing API fails", func() {
- fakePricingAPI.NextError.Set(fmt.Errorf("failed"))
- p := pricing.NewProvider(ctx, fakePricingAPI, fakeEC2API, "", make(chan struct{}))
+ awsEnv.PricingAPI.NextError.Set(fmt.Errorf("failed"))
+ p := pricing.NewProvider(ctx, awsEnv.PricingAPI, awsEnv.EC2API, "", make(chan struct{}))
price, ok := p.OnDemandPrice("c5.large")
Expect(ok).To(BeTrue())
Expect(price).To(BeNumerically(">", 0))
})
It("should return static spot data if EC2 describeSpotPriceHistory API fails", func() {
- fakePricingAPI.NextError.Set(fmt.Errorf("failed"))
- p := pricing.NewProvider(ctx, fakePricingAPI, fakeEC2API, "", make(chan struct{}))
+ awsEnv.PricingAPI.NextError.Set(fmt.Errorf("failed"))
+ p := pricing.NewProvider(ctx, awsEnv.PricingAPI, awsEnv.EC2API, "", make(chan struct{}))
price, ok := p.SpotPrice("c5.large", "test-zone-1a")
Expect(ok).To(BeTrue())
Expect(price).To(BeNumerically(">", 0))
@@ -107,14 +97,14 @@ var _ = Describe("Pricing", func() {
It("should update on-demand pricing with response from the pricing API", func() {
// modify our API before creating the pricing provider as it performs an initial update on creation. The pricing
// API provides on-demand prices, the ec2 API provides spot prices
- fakePricingAPI.GetProductsOutput.Set(&awspricing.GetProductsOutput{
+ awsEnv.PricingAPI.GetProductsOutput.Set(&awspricing.GetProductsOutput{
PriceList: []aws.JSONValue{
fake.NewOnDemandPrice("c98.large", 1.20),
fake.NewOnDemandPrice("c99.large", 1.23),
},
})
updateStart := time.Now()
- p := pricing.NewProvider(ctx, fakePricingAPI, fakeEC2API, "", make(chan struct{}))
+ p := pricing.NewProvider(ctx, awsEnv.PricingAPI, awsEnv.EC2API, "", make(chan struct{}))
Eventually(func() bool { return p.OnDemandLastUpdated().After(updateStart) }).Should(BeTrue())
price, ok := p.OnDemandPrice("c98.large")
@@ -127,7 +117,7 @@ var _ = Describe("Pricing", func() {
})
It("should update spot pricing with response from the pricing API", func() {
now := time.Now()
- fakeEC2API.DescribeSpotPriceHistoryOutput.Set(&ec2.DescribeSpotPriceHistoryOutput{
+ awsEnv.EC2API.DescribeSpotPriceHistoryOutput.Set(&ec2.DescribeSpotPriceHistoryOutput{
SpotPriceHistory: []*ec2.SpotPrice{
{
AvailabilityZone: aws.String("test-zone-1a"),
@@ -155,14 +145,14 @@ var _ = Describe("Pricing", func() {
},
},
})
- fakePricingAPI.GetProductsOutput.Set(&awspricing.GetProductsOutput{
+ awsEnv.PricingAPI.GetProductsOutput.Set(&awspricing.GetProductsOutput{
PriceList: []aws.JSONValue{
fake.NewOnDemandPrice("c98.large", 1.20),
fake.NewOnDemandPrice("c99.large", 1.23),
},
})
updateStart := time.Now()
- p := pricing.NewProvider(ctx, fakePricingAPI, fakeEC2API, "", make(chan struct{}))
+ p := pricing.NewProvider(ctx, awsEnv.PricingAPI, awsEnv.EC2API, "", make(chan struct{}))
Eventually(func() bool { return p.SpotLastUpdated().After(updateStart) }).Should(BeTrue())
price, ok := p.SpotPrice("c98.large", "test-zone-1b")
@@ -175,7 +165,7 @@ var _ = Describe("Pricing", func() {
})
It("should update zonal pricing with data from the spot pricing API", func() {
now := time.Now()
- fakeEC2API.DescribeSpotPriceHistoryOutput.Set(&ec2.DescribeSpotPriceHistoryOutput{
+ awsEnv.EC2API.DescribeSpotPriceHistoryOutput.Set(&ec2.DescribeSpotPriceHistoryOutput{
SpotPriceHistory: []*ec2.SpotPrice{
{
AvailabilityZone: aws.String("test-zone-1a"),
@@ -191,14 +181,14 @@ var _ = Describe("Pricing", func() {
},
},
})
- fakePricingAPI.GetProductsOutput.Set(&awspricing.GetProductsOutput{
+ awsEnv.PricingAPI.GetProductsOutput.Set(&awspricing.GetProductsOutput{
PriceList: []aws.JSONValue{
fake.NewOnDemandPrice("c98.large", 1.20),
fake.NewOnDemandPrice("c99.large", 1.23),
},
})
updateStart := time.Now()
- p := pricing.NewProvider(ctx, fakePricingAPI, fakeEC2API, "", make(chan struct{}))
+ p := pricing.NewProvider(ctx, awsEnv.PricingAPI, awsEnv.EC2API, "", make(chan struct{}))
Eventually(func() bool { return p.SpotLastUpdated().After(updateStart) }).Should(BeTrue())
price, ok := p.SpotPrice("c98.large", "test-zone-1a")
@@ -210,7 +200,7 @@ var _ = Describe("Pricing", func() {
})
It("should respond with false if price doesn't exist in zone", func() {
now := time.Now()
- fakeEC2API.DescribeSpotPriceHistoryOutput.Set(&ec2.DescribeSpotPriceHistoryOutput{
+ awsEnv.EC2API.DescribeSpotPriceHistoryOutput.Set(&ec2.DescribeSpotPriceHistoryOutput{
SpotPriceHistory: []*ec2.SpotPrice{
{
AvailabilityZone: aws.String("test-zone-1a"),
@@ -220,14 +210,14 @@ var _ = Describe("Pricing", func() {
},
},
})
- fakePricingAPI.GetProductsOutput.Set(&awspricing.GetProductsOutput{
+ awsEnv.PricingAPI.GetProductsOutput.Set(&awspricing.GetProductsOutput{
PriceList: []aws.JSONValue{
fake.NewOnDemandPrice("c98.large", 1.20),
fake.NewOnDemandPrice("c99.large", 1.23),
},
})
updateStart := time.Now()
- p := pricing.NewProvider(ctx, fakePricingAPI, fakeEC2API, "", make(chan struct{}))
+ p := pricing.NewProvider(ctx, awsEnv.PricingAPI, awsEnv.EC2API, "", make(chan struct{}))
Eventually(func() bool { return p.SpotLastUpdated().After(updateStart) }).Should(BeTrue())
_, ok := p.SpotPrice("c99.large", "test-zone-1b")
@@ -239,7 +229,7 @@ var _ = Describe("Pricing", func() {
// If it doesn't, they have a product description of Linux/UNIX. To work in both cases, we
// need to search for both values.
updateStart := time.Now()
- fakeEC2API.DescribeSpotPriceHistoryOutput.Set(&ec2.DescribeSpotPriceHistoryOutput{
+ awsEnv.EC2API.DescribeSpotPriceHistoryOutput.Set(&ec2.DescribeSpotPriceHistoryOutput{
SpotPriceHistory: []*ec2.SpotPrice{
{
AvailabilityZone: aws.String("test-zone-1a"),
@@ -249,15 +239,15 @@ var _ = Describe("Pricing", func() {
},
},
})
- fakePricingAPI.GetProductsOutput.Set(&awspricing.GetProductsOutput{
+ awsEnv.PricingAPI.GetProductsOutput.Set(&awspricing.GetProductsOutput{
PriceList: []aws.JSONValue{
fake.NewOnDemandPrice("c98.large", 1.20),
fake.NewOnDemandPrice("c99.large", 1.23),
},
})
- p := pricing.NewProvider(ctx, fakePricingAPI, fakeEC2API, "", make(chan struct{}))
+ p := pricing.NewProvider(ctx, awsEnv.PricingAPI, awsEnv.EC2API, "", make(chan struct{}))
Eventually(func() bool { return p.SpotLastUpdated().After(updateStart) }, 5*time.Second).Should(BeTrue())
- inp := fakeEC2API.DescribeSpotPriceHistoryInput.Clone()
+ inp := awsEnv.EC2API.DescribeSpotPriceHistoryInput.Clone()
Expect(lo.Map(inp.ProductDescriptions, func(x *string, _ int) string { return *x })).
To(ContainElements("Linux/UNIX", "Linux/UNIX (Amazon VPC)"))
})
diff --git a/pkg/providers/securitygroup/securitygroup.go b/pkg/providers/securitygroup/securitygroup.go
index 0ea8eb47a27a..178f5e71a24e 100644
--- a/pkg/providers/securitygroup/securitygroup.go
+++ b/pkg/providers/securitygroup/securitygroup.go
@@ -30,7 +30,6 @@ import (
"github.com/aws/karpenter-core/pkg/utils/functional"
"github.com/aws/karpenter-core/pkg/utils/pretty"
"github.com/aws/karpenter/pkg/apis/v1alpha1"
- awscache "github.com/aws/karpenter/pkg/cache"
)
type Provider struct {
@@ -42,12 +41,12 @@ type Provider struct {
const TTL = 5 * time.Minute
-func NewProvider(ec2api ec2iface.EC2API) *Provider {
+func NewProvider(ec2api ec2iface.EC2API, cache *cache.Cache) *Provider {
return &Provider{
ec2api: ec2api,
cm: pretty.NewChangeMonitor(),
// TODO: Remove cache for v1beta1, utilize resolved security groups from the AWSNodeTemplate.status
- cache: cache.New(awscache.DefaultTTL, awscache.DefaultCleanupInterval),
+ cache: cache,
}
}
@@ -122,7 +121,3 @@ func (p *Provider) securityGroupIds(securityGroups []*ec2.SecurityGroup) []strin
}
return names
}
-
-func (p *Provider) Reset() {
- p.cache.Flush()
-}
diff --git a/pkg/providers/securitygroup/suite_test.go b/pkg/providers/securitygroup/suite_test.go
index ca346039332a..f6183bdf88c5 100644
--- a/pkg/providers/securitygroup/suite_test.go
+++ b/pkg/providers/securitygroup/suite_test.go
@@ -32,7 +32,6 @@ import (
"github.com/aws/karpenter/pkg/apis"
"github.com/aws/karpenter/pkg/apis/settings"
"github.com/aws/karpenter/pkg/apis/v1alpha1"
- "github.com/aws/karpenter/pkg/providers/securitygroup"
"github.com/aws/karpenter/pkg/test"
coresettings "github.com/aws/karpenter-core/pkg/apis/settings"
@@ -42,22 +41,20 @@ import (
"github.com/aws/karpenter-core/pkg/operator/scheme"
coretest "github.com/aws/karpenter-core/pkg/test"
. "github.com/aws/karpenter-core/pkg/test/expectations"
- "github.com/aws/karpenter/pkg/fake"
)
var ctx context.Context
var stop context.CancelFunc
var opts options.Options
var env *coretest.Environment
-var fakeEC2API *fake.EC2API
+var awsEnv *test.Environment
var provisioner *corev1alpha5.Provisioner
var nodeTemplate *v1alpha1.AWSNodeTemplate
-var securityGroupProvider *securitygroup.Provider
func TestAWS(t *testing.T) {
ctx = TestContextWithLogger(t)
RegisterFailHandler(Fail)
- RunSpecs(t, "CloudProvider/AWS")
+ RunSpecs(t, "Provider/AWS")
}
var _ = BeforeSuite(func() {
@@ -65,8 +62,7 @@ var _ = BeforeSuite(func() {
ctx = coresettings.ToContext(ctx, coretest.Settings())
ctx = settings.ToContext(ctx, test.Settings())
ctx, stop = context.WithCancel(ctx)
- fakeEC2API = &fake.EC2API{}
- securityGroupProvider = securitygroup.NewProvider(fakeEC2API)
+ awsEnv = test.NewEnvironment(ctx, env)
})
var _ = AfterSuite(func() {
@@ -107,8 +103,7 @@ var _ = BeforeEach(func() {
},
})
- fakeEC2API.Reset()
- securityGroupProvider.Reset()
+ awsEnv.Reset()
})
var _ = AfterEach(func() {
@@ -118,7 +113,7 @@ var _ = AfterEach(func() {
var _ = Describe("Security Group Provider", func() {
It("should default to the clusters security groups", func() {
ExpectApplied(ctx, env.Client, provisioner, nodeTemplate)
- resolvedSecurityGroups, err := securityGroupProvider.List(ctx, nodeTemplate)
+ resolvedSecurityGroups, err := awsEnv.SecurityGroupProvider.List(ctx, nodeTemplate)
Expect(err).To(BeNil())
Expect(len(resolvedSecurityGroups)).To(Equal(3))
Expect(resolvedSecurityGroups).To(ConsistOf(
@@ -128,12 +123,12 @@ var _ = Describe("Security Group Provider", func() {
))
})
It("should discover security groups by tag", func() {
- fakeEC2API.DescribeSecurityGroupsOutput.Set(&ec2.DescribeSecurityGroupsOutput{SecurityGroups: []*ec2.SecurityGroup{
+ awsEnv.EC2API.DescribeSecurityGroupsOutput.Set(&ec2.DescribeSecurityGroupsOutput{SecurityGroups: []*ec2.SecurityGroup{
{GroupId: aws.String("test-sg-1"), Tags: []*ec2.Tag{{Key: aws.String("kubernetes.io/cluster/test-cluster"), Value: aws.String("test-sg-1")}}},
{GroupId: aws.String("test-sg-2"), Tags: []*ec2.Tag{{Key: aws.String("kubernetes.io/cluster/test-cluster"), Value: aws.String("test-sg-2")}}},
}})
ExpectApplied(ctx, env.Client, provisioner, nodeTemplate)
- resolvedSecurityGroups, err := securityGroupProvider.List(ctx, nodeTemplate)
+ resolvedSecurityGroups, err := awsEnv.SecurityGroupProvider.List(ctx, nodeTemplate)
Expect(err).To(BeNil())
Expect(len(resolvedSecurityGroups)).To(Equal(2))
Expect(resolvedSecurityGroups).To(ConsistOf(
@@ -144,7 +139,7 @@ var _ = Describe("Security Group Provider", func() {
It("should discover security groups by multiple tag values", func() {
nodeTemplate.Spec.SecurityGroupSelector = map[string]string{"Name": "test-security-group-1,test-security-group-2"}
ExpectApplied(ctx, env.Client, provisioner, nodeTemplate)
- resolvedSecurityGroups, err := securityGroupProvider.List(ctx, nodeTemplate)
+ resolvedSecurityGroups, err := awsEnv.SecurityGroupProvider.List(ctx, nodeTemplate)
Expect(err).To(BeNil())
Expect(len(resolvedSecurityGroups)).To(Equal(2))
Expect(resolvedSecurityGroups).To(ConsistOf(
@@ -155,7 +150,7 @@ var _ = Describe("Security Group Provider", func() {
It("should discover security groups by ID", func() {
nodeTemplate.Spec.SecurityGroupSelector = map[string]string{"aws-ids": "sg-test1"}
ExpectApplied(ctx, env.Client, provisioner, nodeTemplate)
- resolvedSecurityGroups, err := securityGroupProvider.List(ctx, nodeTemplate)
+ resolvedSecurityGroups, err := awsEnv.SecurityGroupProvider.List(ctx, nodeTemplate)
Expect(err).To(BeNil())
Expect(len(resolvedSecurityGroups)).To(Equal(1))
Expect(resolvedSecurityGroups).To(ConsistOf(
@@ -165,7 +160,7 @@ var _ = Describe("Security Group Provider", func() {
It("should discover security groups by IDs", func() {
nodeTemplate.Spec.SecurityGroupSelector = map[string]string{"aws-ids": "sg-test1,sg-test2"}
ExpectApplied(ctx, env.Client, provisioner, nodeTemplate)
- resolvedSecurityGroups, err := securityGroupProvider.List(ctx, nodeTemplate)
+ resolvedSecurityGroups, err := awsEnv.SecurityGroupProvider.List(ctx, nodeTemplate)
Expect(err).To(BeNil())
Expect(len(resolvedSecurityGroups)).To(Equal(2))
Expect(resolvedSecurityGroups).To(ConsistOf(
@@ -176,7 +171,7 @@ var _ = Describe("Security Group Provider", func() {
It("should discover security groups by IDs and tags", func() {
nodeTemplate.Spec.SecurityGroupSelector = map[string]string{"aws-ids": "sg-test1,sg-test2", "foo": "bar"}
ExpectApplied(ctx, env.Client, provisioner, nodeTemplate)
- resolvedSecurityGroups, err := securityGroupProvider.List(ctx, nodeTemplate)
+ resolvedSecurityGroups, err := awsEnv.SecurityGroupProvider.List(ctx, nodeTemplate)
Expect(err).To(BeNil())
Expect(len(resolvedSecurityGroups)).To(Equal(2))
Expect(resolvedSecurityGroups).To(ConsistOf(
@@ -187,7 +182,7 @@ var _ = Describe("Security Group Provider", func() {
It("should discover security groups by IDs intersected with tags", func() {
nodeTemplate.Spec.SecurityGroupSelector = map[string]string{"aws-ids": "sg-test2", "foo": "bar"}
ExpectApplied(ctx, env.Client, provisioner, nodeTemplate)
- resolvedSecurityGroups, err := securityGroupProvider.List(ctx, nodeTemplate)
+ resolvedSecurityGroups, err := awsEnv.SecurityGroupProvider.List(ctx, nodeTemplate)
Expect(err).To(BeNil())
Expect(len(resolvedSecurityGroups)).To(Equal(1))
Expect(resolvedSecurityGroups).To(ConsistOf(
diff --git a/pkg/providers/subnet/subnet.go b/pkg/providers/subnet/subnet.go
index 2226dd611c10..553f8f11be30 100644
--- a/pkg/providers/subnet/subnet.go
+++ b/pkg/providers/subnet/subnet.go
@@ -34,7 +34,6 @@ import (
"github.com/aws/karpenter-core/pkg/cloudprovider"
"github.com/aws/karpenter-core/pkg/utils/functional"
"github.com/aws/karpenter-core/pkg/utils/pretty"
- awscache "github.com/aws/karpenter/pkg/cache"
)
type Provider struct {
@@ -45,13 +44,13 @@ type Provider struct {
inflightIPs map[string]int64
}
-func NewProvider(ec2api ec2iface.EC2API) *Provider {
+func NewProvider(ec2api ec2iface.EC2API, cache *cache.Cache) *Provider {
return &Provider{
ec2api: ec2api,
cm: pretty.NewChangeMonitor(),
// TODO: Remove cache for v1beta1, utilize resolved subnet from the AWSNodeTemplate.status
// Subnets are sorted on AvailableIpAddressCount, descending order
- cache: cache.New(awscache.DefaultTTL, awscache.DefaultCleanupInterval),
+ cache: cache,
// inflightIPs is used to track IPs from known launched instances
inflightIPs: map[string]int64{},
}
@@ -143,12 +142,15 @@ func (p *Provider) UpdateInflightIPs(createFleetInput *ec2.CreateFleetInput, cre
})))
// Process the CreateFleetOutput to pull out all the fulfilled subnetIDs
- fleetOutputSubnets := lo.Compact(lo.Uniq(lo.Map(createFleetOutput.Instances, func(fleetInstance *ec2.CreateFleetInstance, _ int) string {
- if fleetInstance == nil || fleetInstance.LaunchTemplateAndOverrides == nil || fleetInstance.LaunchTemplateAndOverrides.Overrides == nil {
- return ""
- }
- return lo.FromPtr(fleetInstance.LaunchTemplateAndOverrides.Overrides.SubnetId)
- })))
+ var fleetOutputSubnets []string
+ if createFleetOutput != nil {
+ fleetOutputSubnets = lo.Compact(lo.Uniq(lo.Map(createFleetOutput.Instances, func(fleetInstance *ec2.CreateFleetInstance, _ int) string {
+ if fleetInstance == nil || fleetInstance.LaunchTemplateAndOverrides == nil || fleetInstance.LaunchTemplateAndOverrides.Overrides == nil {
+ return ""
+ }
+ return lo.FromPtr(fleetInstance.LaunchTemplateAndOverrides.Overrides.SubnetId)
+ })))
+ }
// Find the subnets that were included in the input but not chosen by Fleet, so we need to add the inflight IPs back to them
subnetIDsToAddBackIPs, _ := lo.Difference(fleetInputSubnets, fleetOutputSubnets)
@@ -239,8 +241,3 @@ func Pretty(subnets []*ec2.Subnet) []string {
}
return names
}
-
-func (p *Provider) Reset() {
- p.cache.Flush()
- p.inflightIPs = map[string]int64{}
-}
diff --git a/pkg/providers/subnet/suite_test.go b/pkg/providers/subnet/suite_test.go
index df1dd49c42c8..20203ca2b2e6 100644
--- a/pkg/providers/subnet/suite_test.go
+++ b/pkg/providers/subnet/suite_test.go
@@ -29,42 +29,40 @@ import (
. "knative.dev/pkg/logging/testing"
"github.com/aws/karpenter/pkg/apis"
- awssettings "github.com/aws/karpenter/pkg/apis/settings"
+ "github.com/aws/karpenter/pkg/apis/settings"
"github.com/aws/karpenter/pkg/apis/v1alpha1"
"github.com/aws/karpenter/pkg/providers/subnet"
"github.com/aws/karpenter/pkg/test"
- "github.com/aws/karpenter-core/pkg/apis/settings"
+ coresettings "github.com/aws/karpenter-core/pkg/apis/settings"
corev1alpha5 "github.com/aws/karpenter-core/pkg/apis/v1alpha5"
"github.com/aws/karpenter-core/pkg/operator/injection"
"github.com/aws/karpenter-core/pkg/operator/options"
"github.com/aws/karpenter-core/pkg/operator/scheme"
coretest "github.com/aws/karpenter-core/pkg/test"
. "github.com/aws/karpenter-core/pkg/test/expectations"
- "github.com/aws/karpenter/pkg/fake"
)
var ctx context.Context
var stop context.CancelFunc
var opts options.Options
var env *coretest.Environment
-var fakeEC2API *fake.EC2API
+var awsEnv *test.Environment
var provisioner *corev1alpha5.Provisioner
var nodeTemplate *v1alpha1.AWSNodeTemplate
-var subnetProvider *subnet.Provider
func TestAWS(t *testing.T) {
ctx = TestContextWithLogger(t)
RegisterFailHandler(Fail)
- RunSpecs(t, "CloudProvider/AWS")
+ RunSpecs(t, "Provider/AWS")
}
var _ = BeforeSuite(func() {
env = coretest.NewEnvironment(scheme.Scheme, coretest.WithCRDs(apis.CRDs...))
+ ctx = coresettings.ToContext(ctx, coretest.Settings())
+ ctx = settings.ToContext(ctx, test.Settings())
ctx, stop = context.WithCancel(ctx)
-
- fakeEC2API = &fake.EC2API{}
- subnetProvider = subnet.NewProvider(fakeEC2API)
+ awsEnv = test.NewEnvironment(ctx, env)
})
var _ = AfterSuite(func() {
@@ -74,8 +72,8 @@ var _ = AfterSuite(func() {
var _ = BeforeEach(func() {
ctx = injection.WithOptions(ctx, opts)
- ctx = settings.ToContext(ctx, coretest.Settings())
- ctx = awssettings.ToContext(ctx, test.Settings())
+ ctx = coresettings.ToContext(ctx, coretest.Settings())
+ ctx = settings.ToContext(ctx, test.Settings())
nodeTemplate = &v1alpha1.AWSNodeTemplate{
ObjectMeta: metav1.ObjectMeta{
Name: coretest.RandomName(),
@@ -105,19 +103,18 @@ var _ = BeforeEach(func() {
},
})
- fakeEC2API.Reset()
- subnetProvider.Reset()
+ awsEnv.Reset()
})
var _ = AfterEach(func() {
ExpectCleanedUp(ctx, env.Client)
})
-var _ = Describe("Security Group Provider", func() {
+var _ = Describe("Subnet Provider", func() {
It("should discover subnet by ID", func() {
nodeTemplate.Spec.SubnetSelector = map[string]string{"aws-ids": "subnet-test1"}
ExpectApplied(ctx, env.Client, provisioner, nodeTemplate)
- resolvedSubnetProvider, err := subnetProvider.List(ctx, nodeTemplate)
+ resolvedSubnetProvider, err := awsEnv.SubnetProvider.List(ctx, nodeTemplate)
resolvedSubnet := subnet.Pretty(resolvedSubnetProvider)
Expect(err).To(BeNil())
Expect(len(resolvedSubnet)).To(Equal(1))
@@ -128,7 +125,7 @@ var _ = Describe("Security Group Provider", func() {
It("should discover subnets by IDs", func() {
nodeTemplate.Spec.SubnetSelector = map[string]string{"aws-ids": "subnet-test1,subnet-test2"}
ExpectApplied(ctx, env.Client, provisioner, nodeTemplate)
- resolvedSubnetProvider, err := subnetProvider.List(ctx, nodeTemplate)
+ resolvedSubnetProvider, err := awsEnv.SubnetProvider.List(ctx, nodeTemplate)
resolvedSubnet := subnet.Pretty(resolvedSubnetProvider)
Expect(err).To(BeNil())
Expect(len(resolvedSubnet)).To(Equal(2))
@@ -140,7 +137,7 @@ var _ = Describe("Security Group Provider", func() {
It("should discover subnets by IDs and tags", func() {
nodeTemplate.Spec.SubnetSelector = map[string]string{"aws-ids": "subnet-test1,subnet-test2", "foo": "bar"}
ExpectApplied(ctx, env.Client, provisioner, nodeTemplate)
- resolvedSubnetProvider, err := subnetProvider.List(ctx, nodeTemplate)
+ resolvedSubnetProvider, err := awsEnv.SubnetProvider.List(ctx, nodeTemplate)
resolvedSubnet := subnet.Pretty(resolvedSubnetProvider)
Expect(err).To(BeNil())
Expect(len(resolvedSubnet)).To(Equal(2))
@@ -152,7 +149,7 @@ var _ = Describe("Security Group Provider", func() {
It("should discover subnets by a single tag", func() {
nodeTemplate.Spec.SubnetSelector = map[string]string{"Name": "test-subnet-1"}
ExpectApplied(ctx, env.Client, provisioner, nodeTemplate)
- resolvedSubnetProvider, err := subnetProvider.List(ctx, nodeTemplate)
+ resolvedSubnetProvider, err := awsEnv.SubnetProvider.List(ctx, nodeTemplate)
resolvedSubnet := subnet.Pretty(resolvedSubnetProvider)
Expect(err).To(BeNil())
Expect(len(resolvedSubnet)).To(Equal(1))
@@ -163,7 +160,7 @@ var _ = Describe("Security Group Provider", func() {
It("should discover subnets by multiple tag values", func() {
nodeTemplate.Spec.SubnetSelector = map[string]string{"Name": "test-subnet-1,test-subnet-2"}
ExpectApplied(ctx, env.Client, provisioner, nodeTemplate)
- resolvedSubnetProvider, err := subnetProvider.List(ctx, nodeTemplate)
+ resolvedSubnetProvider, err := awsEnv.SubnetProvider.List(ctx, nodeTemplate)
resolvedSubnet := subnet.Pretty(resolvedSubnetProvider)
Expect(err).To(BeNil())
Expect(len(resolvedSubnet)).To(Equal(2))
@@ -175,7 +172,7 @@ var _ = Describe("Security Group Provider", func() {
It("should discover subnets by IDs intersected with tags", func() {
nodeTemplate.Spec.SubnetSelector = map[string]string{"aws-ids": "subnet-test2", "foo": "bar"}
ExpectApplied(ctx, env.Client, provisioner, nodeTemplate)
- resolvedSubnetProvider, err := subnetProvider.List(ctx, nodeTemplate)
+ resolvedSubnetProvider, err := awsEnv.SubnetProvider.List(ctx, nodeTemplate)
resolvedSubnet := subnet.Pretty(resolvedSubnetProvider)
Expect(err).To(BeNil())
Expect(len(resolvedSubnet)).To(Equal(1))
diff --git a/pkg/test/environment.go b/pkg/test/environment.go
new file mode 100644
index 000000000000..36bcc528f675
--- /dev/null
+++ b/pkg/test/environment.go
@@ -0,0 +1,148 @@
+/*
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package test
+
+import (
+ "context"
+ "net"
+
+ "knative.dev/pkg/ptr"
+
+ "github.com/patrickmn/go-cache"
+
+ awscache "github.com/aws/karpenter/pkg/cache"
+ "github.com/aws/karpenter/pkg/fake"
+ "github.com/aws/karpenter/pkg/providers/amifamily"
+ "github.com/aws/karpenter/pkg/providers/instance"
+ "github.com/aws/karpenter/pkg/providers/instancetype"
+ "github.com/aws/karpenter/pkg/providers/launchtemplate"
+ "github.com/aws/karpenter/pkg/providers/pricing"
+ "github.com/aws/karpenter/pkg/providers/securitygroup"
+ "github.com/aws/karpenter/pkg/providers/subnet"
+
+ coretest "github.com/aws/karpenter-core/pkg/test"
+)
+
+type Environment struct {
+ // API
+ EC2API *fake.EC2API
+ SSMAPI *fake.SSMAPI
+ PricingAPI *fake.PricingAPI
+
+ // Cache
+ SSMCache *cache.Cache
+ EC2Cache *cache.Cache
+ KubernetesVersionCache *cache.Cache
+ InstanceTypeCache *cache.Cache
+ UnavailableOfferingsCache *awscache.UnavailableOfferings
+ LaunchTemplateCache *cache.Cache
+ SubnetCache *cache.Cache
+ SecurityGroupCache *cache.Cache
+
+ // Providers
+ InstanceTypesProvider *instancetype.Provider
+ InstanceProvider *instance.Provider
+ SubnetProvider *subnet.Provider
+ SecurityGroupProvider *securitygroup.Provider
+ PricingProvider *pricing.Provider
+ AMIProvider *amifamily.Provider
+ AMIResolver *amifamily.Resolver
+ LaunchTemplateProvider *launchtemplate.Provider
+}
+
+func NewEnvironment(ctx context.Context, env *coretest.Environment) *Environment {
+ // API
+ ec2api := &fake.EC2API{}
+ ssmapi := &fake.SSMAPI{}
+
+ // cache
+ ssmCache := cache.New(awscache.DefaultTTL, awscache.DefaultCleanupInterval)
+ ec2Cache := cache.New(awscache.DefaultTTL, awscache.DefaultCleanupInterval)
+ kubernetesVersionCache := cache.New(awscache.DefaultTTL, awscache.DefaultCleanupInterval)
+ instanceTypeCache := cache.New(awscache.DefaultTTL, awscache.DefaultCleanupInterval)
+ unavailableOfferingsCache := awscache.NewUnavailableOfferings()
+ launchTemplateCache := cache.New(awscache.DefaultTTL, awscache.DefaultCleanupInterval)
+ subnetCache := cache.New(awscache.DefaultTTL, awscache.DefaultCleanupInterval)
+ securityGroupCache := cache.New(awscache.DefaultTTL, awscache.DefaultCleanupInterval)
+ fakePricingAPI := &fake.PricingAPI{}
+
+ // Providers
+ pricingProvider := pricing.NewProvider(ctx, fakePricingAPI, ec2api, "", make(chan struct{}))
+ subnetProvider := subnet.NewProvider(ec2api, subnetCache)
+ securityGroupProvider := securitygroup.NewProvider(ec2api, securityGroupCache)
+ amiProvider := amifamily.NewProvider(env.Client, env.KubernetesInterface, ssmapi, ec2api, ssmCache, ec2Cache, kubernetesVersionCache)
+ amiResolver := amifamily.New(env.Client, amiProvider)
+ instanceTypesProvider := instancetype.NewProvider("", instanceTypeCache, ec2api, subnetProvider, unavailableOfferingsCache, pricingProvider)
+ launchTemplateProvider :=
+ launchtemplate.NewProvider(
+ ctx,
+ launchTemplateCache,
+ ec2api,
+ amiResolver,
+ securityGroupProvider,
+ ptr.String("ca-bundle"),
+ make(chan struct{}),
+ net.ParseIP("10.0.100.10"),
+ "https://test-cluster",
+ )
+ instanceProvider :=
+ instance.NewProvider(ctx,
+ "",
+ ec2api,
+ unavailableOfferingsCache,
+ instanceTypesProvider,
+ subnetProvider,
+ launchTemplateProvider,
+ )
+
+ return &Environment{
+ EC2API: ec2api,
+ SSMAPI: ssmapi,
+ PricingAPI: fakePricingAPI,
+
+ SSMCache: ssmCache,
+ EC2Cache: ec2Cache,
+ KubernetesVersionCache: kubernetesVersionCache,
+ InstanceTypeCache: instanceTypeCache,
+ LaunchTemplateCache: launchTemplateCache,
+ SubnetCache: subnetCache,
+ SecurityGroupCache: securityGroupCache,
+ UnavailableOfferingsCache: unavailableOfferingsCache,
+
+ InstanceTypesProvider: instanceTypesProvider,
+ InstanceProvider: instanceProvider,
+ SubnetProvider: subnetProvider,
+ SecurityGroupProvider: securityGroupProvider,
+ PricingProvider: pricingProvider,
+ AMIProvider: amiProvider,
+ AMIResolver: amiResolver,
+ LaunchTemplateProvider: launchTemplateProvider,
+ }
+}
+
+func (env *Environment) Reset() {
+ env.EC2API.Reset()
+ env.SSMAPI.Reset()
+ env.PricingAPI.Reset()
+
+ env.SSMCache.Flush()
+ env.EC2Cache.Flush()
+ env.KubernetesVersionCache.Flush()
+ env.InstanceTypeCache.Flush()
+ env.UnavailableOfferingsCache.Flush()
+ env.LaunchTemplateCache.Flush()
+ env.SubnetCache.Flush()
+ env.SecurityGroupCache.Flush()
+}
diff --git a/test/go.mod b/test/go.mod
index ed2fd468a363..3edee669e918 100644
--- a/test/go.mod
+++ b/test/go.mod
@@ -4,10 +4,10 @@ go 1.20
require (
github.com/aws/amazon-ec2-spot-interrupter v0.0.10
- github.com/aws/aws-sdk-go v1.44.195
+ github.com/aws/aws-sdk-go v1.44.212
github.com/aws/aws-sdk-go-v2/config v1.18.13
github.com/aws/karpenter v0.22.0
- github.com/aws/karpenter-core v0.25.1-0.20230224225813-3e5ec9b8eb1a
+ github.com/aws/karpenter-core v0.27.0
github.com/onsi/ginkgo/v2 v2.8.1
github.com/onsi/gomega v1.27.1
github.com/samber/lo v1.37.0
@@ -72,6 +72,7 @@ require (
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
github.com/patrickmn/go-cache v2.1.0+incompatible // indirect
+ github.com/pelletier/go-toml/v2 v2.0.6 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/prometheus/client_golang v1.14.0 // indirect
github.com/prometheus/client_model v0.3.0 // indirect
@@ -97,7 +98,7 @@ require (
k8s.io/apiextensions-apiserver v0.25.4 // indirect
k8s.io/component-base v0.25.4 // indirect
k8s.io/klog/v2 v2.80.2-0.20221028030830-9ae4992afb54 // indirect
- k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1 // indirect
+ k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280 // indirect
k8s.io/utils v0.0.0-20221108210102-8e77b1f39fe2 // indirect
sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 // indirect
sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect
diff --git a/test/go.sum b/test/go.sum
index 7cf71bb6e9ea..204dd34c1cac 100644
--- a/test/go.sum
+++ b/test/go.sum
@@ -48,8 +48,8 @@ github.com/avast/retry-go v3.0.0+incompatible h1:4SOWQ7Qs+oroOTQOYnAHqelpCO0biHS
github.com/avast/retry-go v3.0.0+incompatible/go.mod h1:XtSnn+n/sHqQIpZ10K1qAevBhOOCWBLXXy3hyiqqBrY=
github.com/aws/amazon-ec2-spot-interrupter v0.0.10 h1:ROxI1bLXpV/YoV4yoXsxQx9QyzPY7N8KqRqUq3nEJtw=
github.com/aws/amazon-ec2-spot-interrupter v0.0.10/go.mod h1:Av6iKWBQSDB02SPiVQZPcFD04V3uWZBxn0eUxs3jRFM=
-github.com/aws/aws-sdk-go v1.44.195 h1:d5xFL0N83Fpsq2LFiHgtBUHknCRUPGHdOlCWt/jtOJs=
-github.com/aws/aws-sdk-go v1.44.195/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI=
+github.com/aws/aws-sdk-go v1.44.212 h1:IRstlErdeKeQ8qBsCwWt4MG2RihUOcUJVqYwbvqpE28=
+github.com/aws/aws-sdk-go v1.44.212/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI=
github.com/aws/aws-sdk-go-v2 v1.17.4/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw=
github.com/aws/aws-sdk-go-v2 v1.17.5 h1:TzCUW1Nq4H8Xscph5M/skINUitxM5UBAyvm2s7XBzL4=
github.com/aws/aws-sdk-go-v2 v1.17.5/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw=
@@ -83,8 +83,8 @@ github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.2/go.mod h1:O1YSOg3aekZibh2Sn
github.com/aws/aws-sdk-go-v2/service/sts v1.18.3/go.mod h1:b+psTJn33Q4qGoDaM7ZiOVVG8uVjGI6HaZ8WBHdgDgU=
github.com/aws/aws-sdk-go-v2/service/sts v1.18.5 h1:L1600eLr0YvTT7gNh3Ni24yGI7NSHkq9Gp62vijPRCs=
github.com/aws/aws-sdk-go-v2/service/sts v1.18.5/go.mod h1:1mKZHLLpDMHTNSYPJ7qrcnCQdHCWsNQaT0xRvq2u80s=
-github.com/aws/karpenter-core v0.25.1-0.20230224225813-3e5ec9b8eb1a h1:+SrX+qETmZxfGFx0gWiHzUWsZytRbXuq3GGcH2z3AQk=
-github.com/aws/karpenter-core v0.25.1-0.20230224225813-3e5ec9b8eb1a/go.mod h1:szIXYuMzg8kAwAbMIoB1VJBjAM+AdX+cIwsINkmWnpI=
+github.com/aws/karpenter-core v0.27.0 h1:WaJ+7mIkyMH7+wT+g+XJalOc4aSY8+WFh7DoJvcomEc=
+github.com/aws/karpenter-core v0.27.0/go.mod h1:szIXYuMzg8kAwAbMIoB1VJBjAM+AdX+cIwsINkmWnpI=
github.com/aws/smithy-go v1.13.5 h1:hgz0X/DX0dGqTYpGALqXJoRKRj5oQ7150i5FdTePzO8=
github.com/aws/smithy-go v1.13.5/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA=
github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8=
@@ -284,6 +284,8 @@ github.com/onsi/gomega v1.27.1 h1:rfztXRbg6nv/5f+Raen9RcGoSecHIFgBBLQK3Wdj754=
github.com/onsi/gomega v1.27.1/go.mod h1:aHX5xOykVYzWOV4WqQy0sy8BQptgukenXpCXfadcIAw=
github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc=
github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ=
+github.com/pelletier/go-toml/v2 v2.0.6 h1:nrzqCb7j9cDFj2coyLNLaZuJTLjWjlaz6nvTvIwycIU=
+github.com/pelletier/go-toml/v2 v2.0.6/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek=
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
@@ -328,11 +330,16 @@ github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An
github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
+github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
+github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8=
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
@@ -691,8 +698,8 @@ k8s.io/component-base v0.25.4 h1:n1bjg9Yt+G1C0WnIDJmg2fo6wbEU1UGMRiQSjmj7hNQ=
k8s.io/component-base v0.25.4/go.mod h1:nnZJU8OP13PJEm6/p5V2ztgX2oyteIaAGKGMYb2L2cY=
k8s.io/klog/v2 v2.80.2-0.20221028030830-9ae4992afb54 h1:hWRbsoRWt44OEBnYUd4ceLy4ofBoh+p9vauWp/I5Gdg=
k8s.io/klog/v2 v2.80.2-0.20221028030830-9ae4992afb54/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
-k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1 h1:MQ8BAZPZlWk3S9K4a9NCkIFQtZShWqoha7snGixVgEA=
-k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1/go.mod h1:C/N6wCaBHeBHkHUesQOQy2/MZqGgMAFPqGsGQLdbZBU=
+k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280 h1:+70TFaan3hfJzs+7VK2o+OGxg8HsuBr/5f6tVAjDu6E=
+k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280/go.mod h1:+Axhij7bCpeqhklhUTe3xmOn6bWxolyZEeyaFpjGtl4=
k8s.io/utils v0.0.0-20221108210102-8e77b1f39fe2 h1:GfD9OzL11kvZN5iArC6oTS7RTj7oJOIfnislxYlqTj8=
k8s.io/utils v0.0.0-20221108210102-8e77b1f39fe2/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
knative.dev/pkg v0.0.0-20221123154742-05b694ec4d3a h1:mTDxXL+zRBMz7BcdM3WOgw9FVbmkIN/3cvEj4MeS8zI=
diff --git a/test/pkg/environment/common/expectations.go b/test/pkg/environment/common/expectations.go
index 2ede2aa0ee06..b9d625e575e4 100644
--- a/test/pkg/environment/common/expectations.go
+++ b/test/pkg/environment/common/expectations.go
@@ -230,16 +230,22 @@ func (env *Environment) EventuallyExpectNotFoundAssertionWithOffset(offset int,
func (env *Environment) ExpectCreatedNodeCount(comparator string, count int) []*v1.Node {
createdNodes := env.Monitor.CreatedNodes()
ExpectWithOffset(1, len(createdNodes)).To(BeNumerically(comparator, count),
- fmt.Sprintf("expected %d created nodes, had %d", count, len(createdNodes)))
+ fmt.Sprintf("expected %d created nodes, had %d (%v)", count, len(createdNodes), NodeNames(createdNodes)))
return createdNodes
}
+func NodeNames(nodes []*v1.Node) []string {
+ return lo.Map(nodes, func(n *v1.Node, index int) string {
+ return n.Name
+ })
+}
+
func (env *Environment) EventuallyExpectCreatedNodeCount(comparator string, count int) []*v1.Node {
var createdNodes []*v1.Node
EventuallyWithOffset(1, func(g Gomega) {
createdNodes = env.Monitor.CreatedNodes()
g.Expect(len(createdNodes)).To(BeNumerically(comparator, count),
- fmt.Sprintf("expected %d created nodes, had %d", count, len(createdNodes)))
+ fmt.Sprintf("expected %d created nodes, had %d (%v)", count, len(createdNodes), NodeNames(createdNodes)))
}).Should(Succeed())
return createdNodes
}
diff --git a/test/pkg/environment/common/setup.go b/test/pkg/environment/common/setup.go
index 791aa4e9d99e..906025ad5961 100644
--- a/test/pkg/environment/common/setup.go
+++ b/test/pkg/environment/common/setup.go
@@ -135,8 +135,8 @@ func getPodInformation(p *v1.Pod) string {
}
fmt.Fprintf(&containerInfo, "%s restarts=%d", c.Name, c.RestartCount)
}
- return fmt.Sprintf("pods %s/%s provisionable=%v phase=%s nodename=%s [%s]", p.Namespace, p.Name,
- pod.IsProvisionable(p), p.Status.Phase, p.Spec.NodeName, containerInfo.String())
+ return fmt.Sprintf("pods %s/%s provisionable=%v phase=%s nodename=%s owner=%#v [%s]", p.Namespace, p.Name,
+ pod.IsProvisionable(p), p.Status.Phase, p.Spec.NodeName, p.OwnerReferences, containerInfo.String())
}
// Partially copied from
diff --git a/test/suites/consolidation/suite_test.go b/test/suites/consolidation/suite_test.go
index f8bc5a5bd4c8..750f0b2595f0 100644
--- a/test/suites/consolidation/suite_test.go
+++ b/test/suites/consolidation/suite_test.go
@@ -15,6 +15,7 @@ limitations under the License.
package consolidation
import (
+ "fmt"
"strings"
"testing"
"time"
@@ -318,23 +319,24 @@ var _ = Describe("Consolidation", func() {
Eventually(func(g Gomega) {
var nodes v1.NodeList
Expect(env.Client.List(env.Context, &nodes)).To(Succeed())
- numSpotNodes := 0
- numOtherNodes := 0
- for _, n := range nodes.Items {
+ var spotNodes []*v1.Node
+ var otherNodes []*v1.Node
+ for i, n := range nodes.Items {
// only count the nodes created by the provisioner
if n.Labels[v1alpha5.ProvisionerNameLabelKey] != provisioner.Name {
continue
}
if n.Labels[v1alpha5.LabelCapacityType] == v1alpha5.CapacityTypeSpot {
- numSpotNodes++
+ spotNodes = append(spotNodes, &nodes.Items[i])
} else {
- numOtherNodes++
+ otherNodes = append(otherNodes, &nodes.Items[i])
}
}
// all the on-demand nodes should have been replaced with spot nodes
- g.Expect(numSpotNodes).To(BeNumerically("==", numPods))
+ msg := fmt.Sprintf("node names, spot= %v, other = %v", common.NodeNames(spotNodes), common.NodeNames(otherNodes))
+ g.Expect(len(spotNodes)).To(BeNumerically("==", numPods), msg)
// and we should have no other nodes
- g.Expect(numOtherNodes).To(BeNumerically("==", 0))
+ g.Expect(len(otherNodes)).To(BeNumerically("==", 0), msg)
}, time.Minute*10).Should(Succeed())
env.ExpectDeleted(smallDep)
diff --git a/test/suites/integration/daemonset_test.go b/test/suites/integration/daemonset_test.go
index a20b0fed7787..7dfd96556647 100644
--- a/test/suites/integration/daemonset_test.go
+++ b/test/suites/integration/daemonset_test.go
@@ -58,10 +58,9 @@ var _ = Describe("DaemonSet", func() {
ObjectMeta: metav1.ObjectMeta{
Name: "high-priority-daemonsets",
},
- PreemptionPolicy: lo.ToPtr(v1.PreemptNever),
- Value: int32(10000000),
- GlobalDefault: false,
- Description: "This priority class should be used for daemonsets.",
+ Value: int32(10000000),
+ GlobalDefault: false,
+ Description: "This priority class should be used for daemonsets.",
}
limitrange = &v1.LimitRange{
ObjectMeta: metav1.ObjectMeta{
@@ -113,7 +112,7 @@ var _ = Describe("DaemonSet", func() {
g.Expect(deploymentPods).To(HaveLen(1))
daemonSetPods := env.Monitor.RunningPods(daemonSetSelector)
- g.Expect(deploymentPods).To(HaveLen(1))
+ g.Expect(daemonSetPods).To(HaveLen(1))
g.Expect(deploymentPods[0].Spec.NodeName).To(Equal(nodeList.Items[0].Name))
g.Expect(daemonSetPods[0].Spec.NodeName).To(Equal(nodeList.Items[0].Name))
@@ -144,7 +143,7 @@ var _ = Describe("DaemonSet", func() {
g.Expect(deploymentPods).To(HaveLen(1))
daemonSetPods := env.Monitor.RunningPods(daemonSetSelector)
- g.Expect(deploymentPods).To(HaveLen(1))
+ g.Expect(daemonSetPods).To(HaveLen(1))
g.Expect(deploymentPods[0].Spec.NodeName).To(Equal(nodeList.Items[0].Name))
g.Expect(daemonSetPods[0].Spec.NodeName).To(Equal(nodeList.Items[0].Name))
diff --git a/website/config.yaml b/website/config.yaml
index 327ad948e15c..8f1b1e0aea2d 100644
--- a/website/config.yaml
+++ b/website/config.yaml
@@ -66,11 +66,11 @@ params:
url: 'https://slack.k8s.io/'
icon: fab fa-slack
desc: 'Chat with us on Slack in the #aws-provider channel'
- latest_release_version: v0.25.0
+ latest_release_version: v0.26.1
versions:
+ - v0.26.1
- v0.25.0
- v0.24.0
- - v0.23.0
- preview
menu:
main:
@@ -80,5 +80,5 @@ menu:
pre:
- name: Docs
weight: 20
- url: 'v0.25.0'
+ url: 'v0.26.1'
pre:
diff --git a/website/content/en/preview/concepts/instance-types.md b/website/content/en/preview/concepts/instance-types.md
index cf80095fd9d9..98fa31462808 100644
--- a/website/content/en/preview/concepts/instance-types.md
+++ b/website/content/en/preview/concepts/instance-types.md
@@ -3402,30 +3402,6 @@ below are the resources available with some assumptions and after the instance o
|ephemeral-storage|18Gi|
|memory|112679Mi|
|pods|737|
-## cc2 Family
-### `cc2.8xlarge`
-#### Labels
- | Label | Value |
- |--|--|
- |karpenter.k8s.aws/instance-category|cc|
- |karpenter.k8s.aws/instance-cpu|32|
- |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
- |karpenter.k8s.aws/instance-family|cc2|
- |karpenter.k8s.aws/instance-generation|2|
- |karpenter.k8s.aws/instance-hypervisor|xen|
- |karpenter.k8s.aws/instance-memory|61952|
- |karpenter.k8s.aws/instance-pods|234|
- |karpenter.k8s.aws/instance-size|8xlarge|
- |kubernetes.io/arch|amd64|
- |kubernetes.io/os|linux|
- |node.kubernetes.io/instance-type|cc2.8xlarge|
-#### Resources
- | Resource | Quantity |
- |--|--|
- |cpu|31750m|
- |ephemeral-storage|18Gi|
- |memory|54276Mi|
- |pods|234|
## d2 Family
### `d2.xlarge`
#### Labels
diff --git a/website/content/en/preview/concepts/metrics.md b/website/content/en/preview/concepts/metrics.md
index 322ad75395b2..b01090e05ac4 100644
--- a/website/content/en/preview/concepts/metrics.md
+++ b/website/content/en/preview/concepts/metrics.md
@@ -38,6 +38,9 @@ Count of messages received from the SQS queue. Broken down by message type and w
### `karpenter_provisioner_limit`
The Provisioner Limits are the limits specified on the provisioner that restrict the quantity of resources provisioned. Labeled by provisioner name and resource type.
+### `karpenter_provisioner_scheduling_duration_seconds`
+Duration of scheduling process in seconds. Broken down by provisioner and error.
+
### `karpenter_provisioner_usage`
The Provisioner Usage is the amount of resources that have been provisioned by a particular provisioner. Labeled by provisioner name and resource type.
@@ -86,8 +89,3 @@ Pod state is the current state of pods. This metric can be used several ways as
### `karpenter_cloudprovider_duration_seconds`
Duration of cloud provider method calls. Labeled by the controller, method name and provider.
-## Allocation Controller Metrics
-
-### `karpenter_allocation_controller_scheduling_duration_seconds`
-Duration of scheduling process in seconds. Broken down by provisioner and error.
-
diff --git a/website/content/en/preview/concepts/node-templates.md b/website/content/en/preview/concepts/node-templates.md
index 6d8fee9f0713..da76742ccd35 100644
--- a/website/content/en/preview/concepts/node-templates.md
+++ b/website/content/en/preview/concepts/node-templates.md
@@ -177,6 +177,10 @@ EC2 AMI IDs may be specified by using the key `aws::ids` (`aws-ids` is also supp
To ensure that AMIs are owned by the expected owner, use `aws::owners` which expects a comma-separated list of AWS account owners - you can use a combination of account aliases (e.g. `self` `amazon`, `your-aws-account-name`) and account IDs. If this is not set, *and* `aws::ids`/`aws-ids` are not set, it defaults to `self,amazon`.
+{{% alert title="Note" color="primary" %}}
+If you use only `aws::owners`, Karpenter will discover all images that are owned by those specified, selecting the most recently created ones to be used. If you specify `aws::owners`, but nothing else, there is a larger chance that Karpenter could select an image that is not compatible with your instance type. To lower this chance, it is recommended to use `aws::name` or `aws::ids` if you're using `aws::owners` to select a subset of images that you have validated are compatible with your selected instance types.
+{{% /alert %}}
+
### AMI Selection
If an `amiSelector` matches more than one AMI, Karpenter will automatically determine which AMI best fits the workloads on the launched worker node under the following constraints:
@@ -243,7 +247,7 @@ karpenter.sh/provisioner-name:
kubernetes.io/cluster/: owned
```
-Additional tags can be added in the AWSNodeTemplate tags section which are merged with and can override the default tag values.
+Additional tags can be added in the AWSNodeTemplate tags section which are merged with global tags in `aws.tags` (located in karpenter-global-settings ConfigMap) and can override the default tag values.
```yaml
spec:
tags:
diff --git a/website/content/en/preview/concepts/settings.md b/website/content/en/preview/concepts/settings.md
index 78d09c50ebca..575a578c8d93 100644
--- a/website/content/en/preview/concepts/settings.md
+++ b/website/content/en/preview/concepts/settings.md
@@ -67,7 +67,7 @@ data:
# require additional permissions on the controller service account. Additional permissions are outlined in the docs
aws.interruptionQueueName: karpenter-cluster
# Global tags are specified by including a JSON object of string to string from tag key to tag value
- aws.tags: '{"custom-tag1": "custom-tag-value", "custom-tag2": "custom-tag-value"}'
+ aws.tags: '{"custom-tag1-key": "custom-tag-value", "custom-tag2-key": "custom-tag-value"}'
```
### Feature Gates
@@ -98,7 +98,7 @@ This value is expressed as a string value like `10s`, `1m` or `2h45m`. The valid
### AWS Parameters
-#### `aws.tags.`
+#### `aws.tags`
Global tags are applied to __all__ AWS infrastructure resources deployed by Karpenter. These resources include:
@@ -106,6 +106,12 @@ Global tags are applied to __all__ AWS infrastructure resources deployed by Karp
- Volumes
- Instances
+Tags are specified by including a JSON object of string to string from tag key to tag value.
+
+```yaml
+ aws.tags: '{"custom-tag1-key": "custom-tag-value", "custom-tag2-key": "custom-tag-value"}'
+```
+
{{% alert title="Note" color="primary" %}}
Since you can specify tags at the global level and in the `AWSNodeTemplate` resource, if a key is specified in both locations, the `AWSNodeTemplate` tag value will override the global tag.
{{% /alert %}}
diff --git a/website/content/en/preview/upgrade-guide.md b/website/content/en/preview/upgrade-guide.md
index bc32e7d80cb8..eff6f14de50b 100644
--- a/website/content/en/preview/upgrade-guide.md
+++ b/website/content/en/preview/upgrade-guide.md
@@ -41,7 +41,7 @@ Karpenter ships with a few Custom Resource Definitions (CRDs). These CRDs are pu
```
helm upgrade --install karpenter-crd oci://public.ecr.aws/karpenter/karpenter-crd --version vx.y.z --namespace karpenter --create-namespace
```
-* As pa part of the helm chart [karpenter](https://gallery.ecr.aws/karpenter/karpenter) - [source](https://github.com/aws/karpenter/blob/main/charts/karpenter/crds). Helm [does not manage the lifecycle of CRDs using this method](https://helm.sh/docs/chart_best_practices/custom_resource_definitions/), 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. When CRDs are changed, we will make a note in the version's upgrade guide.
+* As part of the helm chart [karpenter](https://gallery.ecr.aws/karpenter/karpenter) - [source](https://github.com/aws/karpenter/blob/main/charts/karpenter/crds). Helm [does not manage the lifecycle of CRDs using this method](https://helm.sh/docs/chart_best_practices/custom_resource_definitions/), 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. When CRDs are changed, we will make a note in the version's upgrade guide.
In general, you can reapply the CRDs in the `crds` directory of the Karpenter helm chart:
diff --git a/website/content/en/v0.24.0/concepts/node-templates.md b/website/content/en/v0.24.0/concepts/node-templates.md
index 7c31bfe93ed9..d99ef764c14b 100644
--- a/website/content/en/v0.24.0/concepts/node-templates.md
+++ b/website/content/en/v0.24.0/concepts/node-templates.md
@@ -241,7 +241,7 @@ karpenter.sh/provisioner-name:
kubernetes.io/cluster/: owned
```
-Additional tags can be added in the AWSNodeTemplate tags section which are merged with and can override the default tag values.
+Additional tags can be added in the AWSNodeTemplate tags section which are merged with global tags in `aws.tags` (located in karpenter-global-settings ConfigMap) and can override the default tag values.
```yaml
spec:
tags:
diff --git a/website/content/en/v0.24.0/concepts/settings.md b/website/content/en/v0.24.0/concepts/settings.md
index 1e4661574439..126ba680b16e 100644
--- a/website/content/en/v0.24.0/concepts/settings.md
+++ b/website/content/en/v0.24.0/concepts/settings.md
@@ -67,7 +67,7 @@ data:
# require additional permissions on the controller service account. Additional permissions are outlined in the docs
aws.interruptionQueueName: karpenter-cluster
# Global tags are specified by including a JSON object of string to string from tag key to tag value
- aws.tags: '{"custom-tag1": "custom-tag-value", "custom-tag2": "custom-tag-value"}'
+ aws.tags: '{"custom-tag1-key": "custom-tag-value", "custom-tag2-key": "custom-tag-value"}'
```
### Feature Gates
@@ -98,7 +98,7 @@ This value is expressed as a string value like `10s`, `1m` or `2h45m`. The valid
### AWS Parameters
-#### `aws.tags.`
+#### `aws.tags`
Global tags are applied to __all__ AWS infrastructure resources deployed by Karpenter. These resources include:
@@ -106,6 +106,12 @@ Global tags are applied to __all__ AWS infrastructure resources deployed by Karp
- Volumes
- Instances
+Tags are specified by including a JSON object of string to string from tag key to tag value.
+
+```yaml
+ aws.tags: '{"custom-tag1-key": "custom-tag-value", "custom-tag2-key": "custom-tag-value"}'
+```
+
{{% alert title="Note" color="primary" %}}
Since you can specify tags at the global level and in the `AWSNodeTemplate` resource, if a key is specified in both locations, the `AWSNodeTemplate` tag value will override the global tag.
{{% /alert %}}
diff --git a/website/content/en/v0.25.0/concepts/node-templates.md b/website/content/en/v0.25.0/concepts/node-templates.md
index 7c31bfe93ed9..d99ef764c14b 100644
--- a/website/content/en/v0.25.0/concepts/node-templates.md
+++ b/website/content/en/v0.25.0/concepts/node-templates.md
@@ -241,7 +241,7 @@ karpenter.sh/provisioner-name:
kubernetes.io/cluster/: owned
```
-Additional tags can be added in the AWSNodeTemplate tags section which are merged with and can override the default tag values.
+Additional tags can be added in the AWSNodeTemplate tags section which are merged with global tags in `aws.tags` (located in karpenter-global-settings ConfigMap) and can override the default tag values.
```yaml
spec:
tags:
diff --git a/website/content/en/v0.25.0/concepts/settings.md b/website/content/en/v0.25.0/concepts/settings.md
index 1e4661574439..126ba680b16e 100644
--- a/website/content/en/v0.25.0/concepts/settings.md
+++ b/website/content/en/v0.25.0/concepts/settings.md
@@ -67,7 +67,7 @@ data:
# require additional permissions on the controller service account. Additional permissions are outlined in the docs
aws.interruptionQueueName: karpenter-cluster
# Global tags are specified by including a JSON object of string to string from tag key to tag value
- aws.tags: '{"custom-tag1": "custom-tag-value", "custom-tag2": "custom-tag-value"}'
+ aws.tags: '{"custom-tag1-key": "custom-tag-value", "custom-tag2-key": "custom-tag-value"}'
```
### Feature Gates
@@ -98,7 +98,7 @@ This value is expressed as a string value like `10s`, `1m` or `2h45m`. The valid
### AWS Parameters
-#### `aws.tags.`
+#### `aws.tags`
Global tags are applied to __all__ AWS infrastructure resources deployed by Karpenter. These resources include:
@@ -106,6 +106,12 @@ Global tags are applied to __all__ AWS infrastructure resources deployed by Karp
- Volumes
- Instances
+Tags are specified by including a JSON object of string to string from tag key to tag value.
+
+```yaml
+ aws.tags: '{"custom-tag1-key": "custom-tag-value", "custom-tag2-key": "custom-tag-value"}'
+```
+
{{% alert title="Note" color="primary" %}}
Since you can specify tags at the global level and in the `AWSNodeTemplate` resource, if a key is specified in both locations, the `AWSNodeTemplate` tag value will override the global tag.
{{% /alert %}}
diff --git a/website/content/en/v0.25.0/upgrade-guide.md b/website/content/en/v0.25.0/upgrade-guide.md
index e1b5fd900c37..339e701f5dc4 100644
--- a/website/content/en/v0.25.0/upgrade-guide.md
+++ b/website/content/en/v0.25.0/upgrade-guide.md
@@ -41,7 +41,7 @@ Karpenter ships with a few Custom Resource Definitions (CRDs). These CRDs are pu
```
helm upgrade --install karpenter-crd oci://public.ecr.aws/karpenter/karpenter-crd --version vx.y.z --namespace karpenter --create-namespace
```
-* As pa part of the helm chart [karpenter](https://gallery.ecr.aws/karpenter/karpenter) - [source](https://github.com/aws/karpenter/blob/main/charts/karpenter/crds). Helm [does not manage the lifecycle of CRDs using this method](https://helm.sh/docs/chart_best_practices/custom_resource_definitions/), 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. When CRDs are changed, we will make a note in the version's upgrade guide.
+* As part of the helm chart [karpenter](https://gallery.ecr.aws/karpenter/karpenter) - [source](https://github.com/aws/karpenter/blob/main/charts/karpenter/crds). Helm [does not manage the lifecycle of CRDs using this method](https://helm.sh/docs/chart_best_practices/custom_resource_definitions/), 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. When CRDs are changed, we will make a note in the version's upgrade guide.
In general, you can reapply the CRDs in the `crds` directory of the Karpenter helm chart:
diff --git a/website/content/en/v0.26.1/_index.md b/website/content/en/v0.26.1/_index.md
new file mode 100755
index 000000000000..93ddf9368a25
--- /dev/null
+++ b/website/content/en/v0.26.1/_index.md
@@ -0,0 +1,40 @@
+
+---
+title: "Documentation"
+linkTitle: "Docs"
+weight: 20
+cascade:
+ type: docs
+ tags:
+ - preview
+---
+Karpenter is an open-source node provisioning project built for Kubernetes.
+Adding Karpenter to a Kubernetes cluster can dramatically improve the efficiency and cost of running workloads on that cluster.
+Karpenter works by:
+
+* **Watching** for pods that the Kubernetes scheduler has marked as unschedulable
+* **Evaluating** scheduling constraints (resource requests, nodeselectors, affinities, tolerations, and topology spread constraints) requested by the pods
+* **Provisioning** nodes that meet the requirements of the pods
+* **Removing** the nodes when the nodes are no longer needed
+
+As someone using Karpenter, once your Kubernetes cluster and the Karpenter controller are up and running (see [Getting Started]({{[}})), you can:
+
+* **Set up provisioners**: By applying a provisioner to Karpenter, you can configure constraints on node provisioning and set timeout values for node expiry or Kubelet configuration values.
+Provisioner-level constraints related to Kubernetes and your cloud provider (AWS, for example) include:
+
+ - Taints (`taints`): Identify taints to add to provisioned nodes. If a pod doesn't have a matching toleration for the taint, the effect set by the taint occurs (NoSchedule, PreferNoSchedule, or NoExecute). See Kubernetes [Taints and Tolerations](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/) for details.
+ - Labels (`labels`): Apply arbitrary key-value pairs to nodes that can be matched by pods.
+ - Requirements (`requirements`): Set acceptable (`In`) and unacceptable (`Out`) Kubernetes and Karpenter values for node provisioning based on [Well-Known Labels](https://kubernetes.io/docs/reference/labels-annotations-taints/) and [cloud-specific settings]({{][}}). These can include [instance types](https://kubernetes.io/docs/reference/labels-annotations-taints/#nodekubernetesioinstance-type), [zones](https://kubernetes.io/docs/reference/labels-annotations-taints/#topologykubernetesiozone), [computer architecture](https://kubernetes.io/docs/reference/labels-annotations-taints/#kubernetes-io-arch), and [capacity type]({{][}}) (such as AWS spot or on-demand).
+ - Limits (`limits`): Lets you set limits on the total CPU and Memory that can be used by the cluster, effectively stopping further node provisioning when those limits have been reached.
+
+* **Deploy workloads**: When deploying workloads, you can request that scheduling constraints be met to direct which nodes Karpenter provisions for those workloads. Use any of the following Pod spec constraints when you deploy pods:
+
+ - Resources (`resources`): Make requests and set limits for memory and CPU for a Pod. See [Requests and limits](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/#requests-and-limits) for details.
+ - Nodes (`nodeSelector`): Use [nodeSelector](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector) to ask to match a node that includes one or more selected key-value pairs. These can be arbitrary labels you define, Kubernetes well-known labels, or Karpenter labels.
+ - Node affinity (`NodeAffinity`): Set [nodeAffinity](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity) to have the Pod run on nodes that have matching `nodeSelectorTerms` set or not set. Matching affinity can be a particular operating system or zone. You can set the node affinity to be required or simply preferred. `NotIn` and `DoesNotExist` allow you to define node anti-affinity behavior.
+ - Pod affinity and anti-affinity (`podAffinity/podAntiAffinity`): Choose to run a pod on a node based on whether certain pods are running (`podAffinity`) or not running (`podAntiAffinity`) on the node. See [Inter-pod affinity and anti-affinity](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity) for details.
+ - Tolerations (`tolerations`): Identify that a pod must match (tolerate) a taint on a node before the pod will run on it. Without the toleration, the effect set by the taint occurs (NoSchedule, PreferNoSchedule, or NoExecute). See Kubernetes [Taints and Tolerations](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/) for details.
+ - Topology spread (`topologySpreadConstraints`): Request that pods be spread across zones (`topology.kubernetes.io/zone`) or hosts (`kubernetes.io/hostname`), or cloud provider capacity types (`karpenter.sh/capacity-type`). See [Pod Topology Spread Constraints](https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/) for details.
+ - Persistent volume topology: Indicate that the Pod has a storage requirement that requires a node running in a particular zone that can make that storage available to the node.
+
+Learn more about Karpenter and how to get started below.
diff --git a/website/content/en/v0.26.1/concepts/_index.md b/website/content/en/v0.26.1/concepts/_index.md
new file mode 100755
index 000000000000..74ec1368b573
--- /dev/null
+++ b/website/content/en/v0.26.1/concepts/_index.md
@@ -0,0 +1,177 @@
+---
+title: "Concepts"
+linkTitle: "Concepts"
+weight: 10
+description: >
+ Understand key concepts of Karpenter
+---
+
+Users fall under two basic roles: Kubernetes cluster administrators and application developers.
+This document describes Karpenter concepts through the lens of those two types of users.
+
+## Cluster administrator
+
+As a Kubernetes cluster administrator, you can engage with Karpenter to:
+
+* Install Karpenter
+* Configure provisioners to set constraints and other features for managing nodes
+* Deprovision nodes
+* Upgrade nodes
+
+Concepts associated with this role are described below.
+
+
+### Installing Karpenter
+
+Karpenter is designed to run on a node in your Kubernetes cluster.
+As part of the installation process, you need credentials from the underlying cloud provider to allow nodes to be started up and added to the cluster as they are needed.
+
+[Getting Started with Karpenter on AWS](../getting-started)
+describes the process of installing Karpenter on an AWS cloud provider.
+Because requests to add and delete nodes and schedule pods are made through Kubernetes, AWS IAM Roles for Service Accounts (IRSA) are needed by your Kubernetes cluster to make privileged requests to AWS.
+For example, Karpenter uses AWS IRSA roles to grant the permissions needed to describe EC2 instance types and create EC2 instances.
+
+Once privileges are in place, Karpenter is deployed with a Helm chart.
+
+### Configuring provisioners
+
+Karpenter's job is to add nodes to handle unschedulable pods, schedule pods on those nodes, and remove the nodes when they are not needed.
+To configure Karpenter, you create *provisioners* that define how Karpenter manages unschedulable pods and expires nodes.
+Here are some things to know about the Karpenter provisioner:
+
+* **Unschedulable pods**: Karpenter only attempts to schedule pods that have a status condition `Unschedulable=True`, which the kube scheduler sets when it fails to schedule the pod to existing capacity.
+
+* **Provisioner CR**: Karpenter defines a Custom Resource called a Provisioner to specify provisioning configuration.
+Each provisioner manages a distinct set of nodes, but pods can be scheduled to any provisioner that supports its scheduling constraints.
+A provisioner contains constraints that impact the nodes that can be provisioned and attributes of those nodes (such timers for removing nodes).
+See [Provisioning]({{][}}) docs for a description of settings and provisioner examples.
+
+* **Well-known labels**: The provisioner can use well-known Kubernetes labels to allow pods to request only certain instance types, architectures, operating systems, or other attributes when creating nodes.
+See [Well-Known Labels, Annotations and Taints](https://kubernetes.io/docs/reference/labels-annotations-taints/) for details.
+Keep in mind that only a subset of these labels are supported in Karpenter, as described later.
+
+* **Deprovisioning nodes**: A provisioner can also include time-to-live values to indicate when nodes should be deprovisioned after a set amount of time from when they were created or after they becomes empty of deployed pods.
+
+* **Multiple provisioners**: Multiple provisioners can be configured on the same cluster.
+For example, you might want to configure different teams on the same cluster to run on completely separate capacity.
+One team could run on nodes using BottleRocket, while another uses EKSOptimizedAMI.
+
+Although most use cases are addressed with a single provisioner for multiple teams, multiple provisioners are useful to isolate nodes for billing, use different node constraints (such as no GPUs for a team), or use different deprovisioning settings.
+
+### Deprovisioning nodes
+
+Karpenter deletes nodes when they are no longer needed.
+
+* **Finalizer**: Karpenter places a finalizer bit on each node it creates.
+When a request comes in to delete one of those nodes (such as a TTL or a manual `kubectl delete node`), Karpenter will cordon the node, drain all the pods, terminate the EC2 instance, and delete the node object.
+Karpenter handles all clean-up work needed to properly delete the node.
+* **Node Expiry**: If a node expiry time-to-live value (`ttlSecondsUntilExpired`) is reached, that node is drained of pods and deleted (even if it is still running workloads).
+* **Empty nodes**: When the last workload pod running on a Karpenter-managed node is gone, the node is annotated with an emptiness timestamp.
+Once that "node empty" time-to-live (`ttlSecondsAfterEmpty`) is reached, finalization is triggered.
+* **Consolidation**: If enabled, Karpenter will work to actively reduce cluster cost by identifying when nodes can be removed as their workloads will run on other nodes in the cluster and when nodes can be replaced with cheaper variants due to a change in the workloads.
+* **Interruption**: If enabled, Karpenter will watch for upcoming involuntary interruption events that could affect your nodes (health events, spot interruption, etc.) and will cordon, drain, and terminate the node(s) ahead of the event to reduce workload disruption.
+
+For more details on how Karpenter deletes nodes, see [Deprovisioning nodes](./deprovisioning) for details.
+
+### Upgrading nodes
+
+A straight-forward way to upgrade nodes is to set `ttlSecondsUntilExpired`.
+Nodes will be terminated after a set period of time and will be replaced with newer nodes using the latest discovered AMI.
+See more in [AWSNodeTemplate](./node-templates).
+
+### Constraints
+
+The concept of layered constraints is key to using Karpenter.
+With no constraints defined in provisioners and none requested from pods being deployed, Karpenter chooses from the entire universe of features available to your cloud provider.
+Nodes can be created using any instance type and run in any zones.
+
+An application developer can tighten the constraints defined in a provisioner by the cluster administrator by defining additional scheduling constraints in their pod spec.
+Refer to the description of Karpenter constraints in the Application Developer section below for details.
+
+### Scheduling
+
+Karpenter launches nodes in response to pods that the Kubernetes scheduler has marked unschedulable. After solving scheduling constraints and launching capacity, Karpenter launches a machine in your chosen cloud provider.
+
+Once Karpenter brings up a node, that node is available for the Kubernetes scheduler to schedule pods on it as well.
+
+### Cloud provider
+Karpenter makes requests to provision new nodes to the associated cloud provider.
+The first supported cloud provider is AWS, although Karpenter is designed to work with other cloud providers.
+Separating Kubernetes and AWS-specific settings allows Karpenter a clean path to integrating with other cloud providers.
+
+While using Kubernetes well-known labels, the provisioner can set some values that are specific to the cloud provider.
+So, for example, to include a certain instance type, you could use the Kubernetes label `node.kubernetes.io/instance-type`, but set its value to an AWS instance type (such as `m5.large` or `m5.2xlarge`).
+
+### Consolidation
+
+If consolidation is enabled for a provisioner, Karpenter attempts to reduce the overall cost of the nodes launched by that provisioner if workloads have changed in two ways:
+- Node Deletion
+- Node Replacement
+
+To perform these actions, Karpenter simulates all pods being evicted from a candidate node and then looks at the results of the scheduling simulation to determine if those pods can run on a combination of existing nodes in the cluster and a new cheaper node. This operation takes into consideration all scheduling constraints placed on your workloads and provisioners (e.g. taints, tolerations, node selectors, inter-pod affinity, etc).
+
+If as a result of the scheduling simulation all pods can run on existing nodes, the candidate node is simply deleted. If all pods can run on a combination of existing nodes and a cheaper node, we launch the cheaper node and delete the candidate node which causes the pods to be evicted and re-created by their controllers in order to be rescheduled.
+
+For Node Replacement to work well, your provisioner must allow selecting from a variety of instance types with varying amounts of allocatable resources. Consolidation will only consider launching nodes using instance types which are allowed by your provisioner.
+
+### Interruption
+
+If interruption-handling is enabled for the controller, Karpenter will watch for upcoming involuntary interruption events that would cause disruption to your workloads. These interruption events include:
+
+* Spot Interruption Warnings
+* Scheduled Change Health Events (Maintenance Events)
+* Instance Terminating Events
+* Instance Stopping Events
+
+When Karpenter detects one of these events will occur to your nodes, it automatically cordons, drains, and terminates the node(s) ahead of the interruption event to give the maximum amount of time for workload cleanup prior to compute disruption. This enables scenarios where the `terminationGracePeriod` for your workloads may be long or cleanup for your workloads is critical, and you want enough time to be able to gracefully clean-up your pods.
+
+{{% alert title="Note" color="warning" %}}
+Karpenter publishes Kubernetes events to the node for all events listed above in addition to __Spot Rebalance Recommendations__. Karpenter does not currently support cordon, drain, and terminate logic for Spot Rebalance Recommendations.
+{{% /alert %}}
+
+### Kubernetes cluster autoscaler
+Like Karpenter, [Kubernetes Cluster Autoscaler](https://github.com/kubernetes/autoscaler/tree/master/cluster-autoscaler) is
+designed to add nodes when requests come in to run pods that cannot be met by current capacity.
+Cluster autoscaler is part of the Kubernetes project, with implementations by most major Kubernetes cloud providers.
+By taking a fresh look at provisioning, Karpenter offers the following improvements:
+
+* **Designed to handle the full flexibility of the cloud**:
+Karpenter has the ability to efficiently address the full range of instance types available through AWS.
+Cluster autoscaler was not originally built with the flexibility to handle hundreds of instance types, zones, and purchase options.
+
+* **Group-less node provisioning**: Karpenter manages each instance directly, without use of additional orchestration mechanisms like node groups.
+This enables it to retry in milliseconds instead of minutes when capacity is unavailable.
+It also allows Karpenter to leverage diverse instance types, availability zones, and purchase options without the creation of hundreds of node groups.
+
+## Application developer
+
+As someone deploying pods that might be evaluated by Karpenter, you should know how to request the properties that your pods need of its compute resources.
+Karpenter's job is to efficiently assess and choose compute assets based on requests from pod deployments.
+These can include basic Kubernetes features or features that are specific to the cloud provider (such as AWS).
+
+Layered *constraints* are applied when a pod makes requests for compute resources that cannot be met by current capacity.
+A pod can specify `nodeAffinity` (to run in a particular zone or instance type) or a `topologySpreadConstraints` spread (to cause a set of pods to be balanced across multiple nodes).
+The pod can specify a `nodeSelector` to run only on nodes with a particular label and `resource.requests` to ensure that the node has enough available memory.
+
+The Kubernetes scheduler tries to match those constraints with available nodes.
+If the pod is unschedulable, Karpenter creates compute resources that match its needs.
+When Karpenter tries to provision a node, it analyzes scheduling constraints before choosing the node to create.
+
+As long as the requests are not outside of the provisioner's constraints,
+Karpenter will look to best match the request, comparing the same well-known labels defined by the pod's scheduling constraints.
+Note that if the constraints are such that a match is not possible, the pod will remain unscheduled.
+
+So, what constraints can you use as an application developer deploying pods that could be managed by Karpenter?
+
+Kubernetes features that Karpenter supports for scheduling pods include nodeAffinity and [nodeSelector](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector).
+It also supports [PodDisruptionBudget](https://kubernetes.io/docs/tasks/run-application/configure-pdb/), [topologySpreadConstraints](https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/), and [inter-pod affinity and anti-affinity](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity).
+
+From the Kubernetes [Well-Known Labels, Annotations and Taints](https://kubernetes.io/docs/reference/labels-annotations-taints/) page,
+you can see a full list of Kubernetes labels, annotations and taints that determine scheduling.
+Those that are implemented in Karpenter include:
+
+* **kubernetes.io/arch**: For example, kubernetes.io/arch=amd64
+* **node.kubernetes.io/instance-type**: For example, node.kubernetes.io/instance-type=m3.medium
+* **topology.kubernetes.io/zone**: For example, topology.kubernetes.io/zone=us-east-1c
+
+For more on how, as a developer, you can add constraints to your pod deployment, see [Scheduling](./scheduling/) for details.
diff --git a/website/content/en/v0.26.1/concepts/deprovisioning.md b/website/content/en/v0.26.1/concepts/deprovisioning.md
new file mode 100644
index 000000000000..c4ff50946891
--- /dev/null
+++ b/website/content/en/v0.26.1/concepts/deprovisioning.md
@@ -0,0 +1,200 @@
+---
+title: "Deprovisioning"
+linkTitle: "Deprovisioning"
+weight: 4
+description: >
+ Understand different ways Karpenter deprovisions nodes
+---
+
+Karpenter sets a Kubernetes [finalizer](https://kubernetes.io/docs/concepts/overview/working-with-objects/finalizers/) on each node it provisions.
+The finalizer specifies additional actions the Karpenter controller will take in response to a node deletion request.
+These include:
+
+* Marking the node as unschedulable, so no further pods can be scheduled there.
+* Evicting all pods other than daemonsets from the node.
+* Terminating the instance from the cloud provider.
+* Deleting the node from the Kubernetes cluster.
+
+## Methods
+
+There are both automated and manual ways of deprovisioning nodes provisioned by Karpenter:
+
+* **Provisioner Deletion**: Nodes are considered to be "owned" by the Provisioner that launched them. Karpenter will gracefully terminate nodes when a provisioner is deleted.
+* **Emptiness**: Karpenter notes when the last workload (non-daemonset) pod stops running on a node. From that point, Karpenter waits the number of seconds set by `ttlSecondsAfterEmpty` in the provisioner, then Karpenter requests to delete the node. This feature can keep costs down by removing nodes that are no longer being used for workloads.
+* **Expiration**: Karpenter requests to delete the node after a set number of seconds, based on the provisioner `ttlSecondsUntilExpired` value, from the time the node was provisioned. One use case for node expiry is to handle node upgrades. Old nodes (with a potentially outdated Kubernetes version or operating system) are deleted, and replaced with nodes on the current version (assuming that you requested the latest version, rather than a specific version).
+* **Consolidation**: Karpenter works to actively reduce cluster cost by identifying when nodes can be removed as their workloads will run on other nodes in the cluster and when nodes can be replaced with cheaper variants due to a change in the workloads.
+* **Interruption**: If enabled, Karpenter will watch for upcoming involuntary interruption events that could affect your nodes (health events, spot interruption, etc.) and will cordon, drain, and terminate the node(s) ahead of the event to reduce workload disruption.
+* **Drift**: Karpenter will deprovision nodes that have drifted from their desired specification. Once the node is annotated as drifted, Karpenter will deprovision the nodes and provision replacement nodes with the correct provisioning requirements when needed. Currently, Karpenter will only automatically mark nodes as drifted in the case of a drifted AMI.
+
+{{% alert title="Note" color="primary" %}}
+- Automated deprovisioning is configured through the ProvisionerSpec `.ttlSecondsAfterEmpty`, `.ttlSecondsUntilExpired` and `.consolidation.enabled` fields. If these are not configured, Karpenter will not default values for them and will not terminate nodes for that purpose.
+
+- Keep in mind that a small NodeExpiry results in a higher churn in cluster activity. So, for example, if a cluster brings up all nodes at once, all the pods on those nodes would fall into the same batching window on expiration.
+
+- Pods without an ownerRef (also called "controllerless" or "naked" pods) will be evicted during voluntary node disruption, such as expiration or consolidation. A pod with the annotation `karpenter.sh/do-not-evict: "true"` will cause its node to be opted out from voluntary node disruption workflows.
+
+- Using preferred anti-affinity and topology spreads can reduce the effectiveness of consolidation. At node launch, Karpenter attempts to satisfy affinity and topology spread preferences. In order to reduce node churn, consolidation must also attempt to satisfy these constraints to avoid immediately consolidating nodes after they launch. This means that consolidation may not deprovision nodes in order to avoid violating preferences, even if kube-scheduler can fit the host pods elsewhere. Karpenter reports these pods via logging to bring awareness to the possible issues they can cause (e.g. `pod default/inflate-anti-self-55894c5d8b-522jd has a preferred Anti-Affinity which can prevent consolidation`).
+
+{{% /alert %}}
+
+* **Node Deletion**: You could use `kubectl` to manually remove a single Karpenter node:
+
+ ```bash
+ # Delete a specific node
+ kubectl delete node $NODE_NAME
+
+ # Delete all nodes owned any provisioner
+ kubectl delete nodes -l karpenter.sh/provisioner-name
+
+ # Delete all nodes owned by a specific provisioner
+ kubectl delete nodes -l karpenter.sh/provisioner-name=$PROVISIONER_NAME
+ ```
+
+Whether through node expiry or manual deletion, Karpenter seeks to follow graceful termination procedures as described in Kubernetes [Graceful node shutdown](https://kubernetes.io/docs/concepts/architecture/nodes/#graceful-node-shutdown) documentation.
+If the Karpenter controller is removed or fails, the finalizers on the nodes are orphaned and will require manual removal.
+
+
+{{% alert title="Note" color="primary" %}}
+By adding the finalizer, Karpenter improves the default Kubernetes process of node deletion.
+When you run `kubectl delete node` on a node without a finalizer, the node is deleted without triggering the finalization logic. The instance will continue running in EC2, even though there is no longer a node object for it.
+The kubelet isn’t watching for its own existence, so if a node is deleted the kubelet doesn’t terminate itself.
+All the pod objects get deleted by a garbage collection process later, because the pods’ node is gone.
+{{% /alert %}}
+
+## Consolidation
+
+Karpenter has two mechanisms for cluster consolidation:
+- Deletion - A node is eligible for deletion if all of its pods can run on free capacity of other nodes in the cluster.
+- Replace - A node can be replaced if all of its pods can run on a combination of free capacity of other nodes in the cluster and a single cheaper replacement node.
+
+Consolidation has three mechanisms that are performed in order to attempt to identify a consolidation action:
+1) Empty Node Consolidation - Delete any entirely empty nodes in parallel
+2) Multi-Node Consolidation - Try to delete two or more nodes in parallel, possibly launching a single replacement that is cheaper than the price of all nodes being removed
+3) Single-Node Consolidation - Try to delete any single node, possibly launching a single replacement that is cheaper than the price of that node
+
+It's impractical to examine all possible consolidation options for multi-node consolidation, so Karpenter uses a heuristic to identify a likely set of nodes that can be consolidated. For single-node consolidation we consider each node in the cluster individually.
+
+When there are multiple nodes that could be potentially deleted or replaced, Karpenter choose to consolidate the node that overall disrupts your workloads the least by preferring to terminate:
+
+* nodes running fewer pods
+* nodes that will expire soon
+* nodes with lower priority pods
+
+{{% alert title="Note" color="primary" %}}
+For spot nodes, Karpenter only uses the deletion consolidation mechanism. It will not replace a spot node with a cheaper spot node. Spot instance types are selected with the `price-capacity-optimized` strategy and often the cheapest spot instance type is not launched due to the likelihood of interruption. Consolidation would then replace the spot instance with a cheaper instance negating the `price-capacity-optimized` strategy entirely and increasing interruption rate.
+{{% /alert %}}
+
+If consolidation is enabled, Karpenter periodically reports events against nodes that indicate why the node can't be consolidated. These events can be used to investigate nodes that you expect to have been consolidated, but still remain in your cluster.
+
+```
+Events:
+ Type Reason Age From Message
+ ---- ------ ---- ---- -------
+ Normal Unconsolidatable 66s karpenter pdb default/inflate-pdb prevents pod evictions
+ Normal Unconsolidatable 33s (x3 over 30m) karpenter can't replace with a cheaper node
+ ```
+
+## Interruption
+
+If interruption-handling is enabled, Karpenter will watch for upcoming involuntary interruption events that would cause disruption to your workloads. These interruption events include:
+
+* Spot Interruption Warnings
+* Scheduled Change Health Events (Maintenance Events)
+* Instance Terminating Events
+* Instance Stopping Events
+
+When Karpenter detects one of these events will occur to your nodes, it automatically cordons, drains, and terminates the node(s) ahead of the interruption event to give the maximum amount of time for workload cleanup prior to compute disruption. This enables scenarios where the `terminationGracePeriod` for your workloads may be long or cleanup for your workloads is critical, and you want enough time to be able to gracefully clean-up your pods.
+
+{{% alert title="Note" color="primary" %}}
+Karpenter publishes Kubernetes events to the node for all events listed above in addition to __Spot Rebalance Recommendations__. Karpenter does not currently support cordon, drain, and terminate logic for Spot Rebalance Recommendations.
+{{% /alert %}}
+
+Karpenter enables this feature by watching an SQS queue which receives critical events from AWS services which may affect your nodes. Karpenter requires that an SQS queue be provisioned and EventBridge rules and targets be added that forward interruption events from AWS services to the SQS queue. Karpenter provides details for provisioning this infrastructure in the [CloudFormation template in the Getting Started Guide](../../getting-started/getting-started-with-eksctl/#create-the-karpenter-infrastructure-and-iam-roles).
+
+To enable the interruption handling feature flag, configure the `karpenter-global-settings` ConfigMap with the following value mapped to the name of the interruption queue that handles interruption events.
+
+```yaml
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: karpenter-global-settings
+ namespace: karpenter
+data:
+ ...
+ aws.interruptionQueueName: karpenter-cluster
+ ...
+```
+
+## Drift
+
+If drift is enabled, Karpenter will deprovision nodes that have been marked as drifted with the annotation `karpenter.sh/voluntary-disruption: "drifted"`. Karpenter will automatically cordon, drain, and terminate nodes, while respecting any PDBs or `do-not-evict` pods that are configured. Karpenter will automatically mark nodes as drifted if the AMI that is used on the instance does not match the AMI set by the AWSNodeTemplate. Check the [AWSNodeTemplate Docs]({{][}}) settings for more.
+
+If users annotate their own nodes with `karpenter.sh/voluntary-disruption: "drifted"`, Karpenter will respect the annotation and deprovision the nodes.
+
+{{% alert title="Note" color="primary" %}}
+Karpenter will only automatically mark nodes as drifted in the case of a drifted AMI. More methods of drift will be implemented in the future. Please cut a feature request if you'd like to see more methods implemented.
+{{% /alert %}}
+
+To enable the drift feature flag, refer to the [Settings Feature Gates]({{][}}).
+
+## Disabling Deprovisioning
+
+### Pod Eviction
+
+Pods can be opted out of eviction by setting the annotation `karpenter.sh/do-not-evict: "true"` on the pod. This is useful for pods that you want to run from start to finish without interruption.
+Examples might include a real-time, interactive game that you don't want to interrupt, or a long batch job (such as you might have with machine learning) that would need to start over if it were interrupted.
+
+```yaml
+apiVersion: apps/v1
+kind: Deployment
+spec:
+ template:
+ metadata:
+ annotations:
+ karpenter.sh/do-not-evict: "true"
+```
+
+By opting pods out of eviction, you are telling Karpenter that it should not voluntarily remove nodes containing this pod.
+
+However, if a do-not-evict pod is added to a node while the node is draining, the remaining pods will still evict, but that pod will block termination until it is removed.
+In either case, the node will be cordoned to prevent additional work from scheduling.
+
+Examples of voluntary node removal that will be prevented by this annotation include:
+- [Consolidation]({{][}})
+- [Drift]({{][}})
+- Emptiness
+- Expiration
+
+{{% alert title="Note" color="primary" %}}
+Voluntary node removal does not include [Interruption]({{][}}) or manual deletion initiated through `kubectl delete node`, both considered involuntary events, since node removal cannot be delayed.
+{{% /alert %}}
+
+{{% alert title="Note" color="primary" %}}
+This annotation will have no effect for static pods, pods that tolerate `NoSchedule`, or pods terminating past their graceful termination period.
+{{% /alert %}}
+
+### Node Consolidation
+
+Nodes can be opted out of consolidation deprovisioning by setting the annotation `karpenter.sh/do-not-consolidate: "true"` on the node.
+
+```yaml
+apiVersion: karpenter.sh/v1alpha5
+kind: Node
+metadata:
+ annotations:
+ karpenter.sh/do-not-consolidate: "true"
+```
+
+#### Example: Disable Consolidation on Provisioner
+
+Provisioner `.spec.annotations` allow you to set annotations that will be applied to all nodes launched by this provisioner. By setting the annotation `karpenter.sh/do-not-consolidate: "true"` on the provisioner, you will selectively prevent all nodes launched by this Provisioner from being considered in consolidation calculations.
+
+```yaml
+apiVersion: karpenter.sh/v1alpha5
+kind: Provisioner
+metadata:
+ name: default
+spec:
+ annotations: # will be applied to all nodes
+ karpenter.sh/do-not-consolidate: "true"
+```
diff --git a/website/content/en/v0.26.1/concepts/instance-types.md b/website/content/en/v0.26.1/concepts/instance-types.md
new file mode 100644
index 000000000000..cf80095fd9d9
--- /dev/null
+++ b/website/content/en/v0.26.1/concepts/instance-types.md
@@ -0,0 +1,15989 @@
+---
+title: "Instance Types"
+linkTitle: "Instance Types"
+weight: 100
+
+description: >
+ Evaluate Instance Type Resources
+---
+
+AWS instance types offer varying resources and can be selected by labels. The values provided
+below are the resources available with some assumptions and after the instance overhead has been subtracted:
+- `blockDeviceMappings` are not configured
+- `aws-eni-limited-pod-density` is assumed to be `true`
+- `amiFamily` is set to the default of `AL2`
+## a1 Family
+### `a1.medium`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|a|
+ |karpenter.k8s.aws/instance-cpu|1|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|a1|
+ |karpenter.k8s.aws/instance-generation|1|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|2048|
+ |karpenter.k8s.aws/instance-network-bandwidth|500|
+ |karpenter.k8s.aws/instance-pods|8|
+ |karpenter.k8s.aws/instance-size|medium|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|a1.medium|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|840m|
+ |ephemeral-storage|18Gi|
+ |memory|1351Mi|
+ |pods|8|
+ |vpc.amazonaws.com/pod-eni|10|
+### `a1.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|a|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|a1|
+ |karpenter.k8s.aws/instance-generation|1|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|4096|
+ |karpenter.k8s.aws/instance-network-bandwidth|750|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|a1.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|3014Mi|
+ |pods|29|
+ |vpc.amazonaws.com/pod-eni|9|
+### `a1.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|a|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|a1|
+ |karpenter.k8s.aws/instance-generation|1|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|8192|
+ |karpenter.k8s.aws/instance-network-bandwidth|1250|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|a1.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|6484Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|18|
+### `a1.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|a|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|a1|
+ |karpenter.k8s.aws/instance-generation|1|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|2500|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|a1.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|14062Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|38|
+### `a1.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|a|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|a1|
+ |karpenter.k8s.aws/instance-generation|1|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|5000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|a1.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|27281Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `a1.metal`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|a|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|a1|
+ |karpenter.k8s.aws/instance-generation|1|
+ |karpenter.k8s.aws/instance-hypervisor||
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|5000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|metal|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|a1.metal|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|27281Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+## c1 Family
+### `c1.medium`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|c1|
+ |karpenter.k8s.aws/instance-generation|1|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|1740|
+ |karpenter.k8s.aws/instance-network-bandwidth|300|
+ |karpenter.k8s.aws/instance-pods|12|
+ |karpenter.k8s.aws/instance-size|medium|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c1.medium|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|1022Mi|
+ |pods|12|
+### `c1.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|c1|
+ |karpenter.k8s.aws/instance-generation|1|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|7168|
+ |karpenter.k8s.aws/instance-network-bandwidth|1000|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c1.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|5537Mi|
+ |pods|58|
+## c3 Family
+### `c3.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|c3|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|3840|
+ |karpenter.k8s.aws/instance-network-bandwidth|500|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c3.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|2778Mi|
+ |pods|29|
+### `c3.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|c3|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|7680|
+ |karpenter.k8s.aws/instance-network-bandwidth|700|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c3.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|6011Mi|
+ |pods|58|
+### `c3.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|c3|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|15360|
+ |karpenter.k8s.aws/instance-network-bandwidth|1000|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c3.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|13115Mi|
+ |pods|58|
+### `c3.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|c3|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|30720|
+ |karpenter.k8s.aws/instance-network-bandwidth|2000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c3.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|25387Mi|
+ |pods|234|
+### `c3.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|c3|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|61440|
+ |karpenter.k8s.aws/instance-network-bandwidth|5000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c3.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|53803Mi|
+ |pods|234|
+## c4 Family
+### `c4.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|c4|
+ |karpenter.k8s.aws/instance-generation|4|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|3840|
+ |karpenter.k8s.aws/instance-network-bandwidth|625|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c4.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|2778Mi|
+ |pods|29|
+### `c4.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|c4|
+ |karpenter.k8s.aws/instance-generation|4|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|7680|
+ |karpenter.k8s.aws/instance-network-bandwidth|1250|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c4.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|6011Mi|
+ |pods|58|
+### `c4.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|c4|
+ |karpenter.k8s.aws/instance-generation|4|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|15360|
+ |karpenter.k8s.aws/instance-network-bandwidth|2500|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c4.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|13115Mi|
+ |pods|58|
+### `c4.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|c4|
+ |karpenter.k8s.aws/instance-generation|4|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|30720|
+ |karpenter.k8s.aws/instance-network-bandwidth|5000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c4.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|25387Mi|
+ |pods|234|
+### `c4.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|36|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|c4|
+ |karpenter.k8s.aws/instance-generation|4|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|61440|
+ |karpenter.k8s.aws/instance-network-bandwidth|5000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c4.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|35740m|
+ |ephemeral-storage|18Gi|
+ |memory|53803Mi|
+ |pods|234|
+## c5 Family
+### `c5.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|c5|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|4096|
+ |karpenter.k8s.aws/instance-network-bandwidth|750|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c5.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|3014Mi|
+ |pods|29|
+ |vpc.amazonaws.com/pod-eni|9|
+### `c5.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|c5|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|8192|
+ |karpenter.k8s.aws/instance-network-bandwidth|1250|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c5.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|6484Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|18|
+### `c5.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|c5|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|2500|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c5.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|14062Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|38|
+### `c5.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|c5|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|5000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c5.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|27281Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `c5.9xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|36|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|c5|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|73728|
+ |karpenter.k8s.aws/instance-network-bandwidth|12000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|9xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c5.9xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|35740m|
+ |ephemeral-storage|18Gi|
+ |memory|65169Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `c5.12xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|48|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|c5|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|98304|
+ |karpenter.k8s.aws/instance-network-bandwidth|12000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|12xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c5.12xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|47710m|
+ |ephemeral-storage|18Gi|
+ |memory|87902Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `c5.18xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|72|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|c5|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|147456|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|18xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c5.18xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|71650m|
+ |ephemeral-storage|18Gi|
+ |memory|127834Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `c5.24xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|96|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|c5|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|196608|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|24xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c5.24xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|95590m|
+ |ephemeral-storage|18Gi|
+ |memory|173300Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `c5.metal`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|96|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|c5|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor||
+ |karpenter.k8s.aws/instance-memory|196608|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|metal|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c5.metal|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|95590m|
+ |ephemeral-storage|18Gi|
+ |memory|173300Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+## c5a Family
+### `c5a.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c5a|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|4096|
+ |karpenter.k8s.aws/instance-network-bandwidth|750|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c5a.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|3014Mi|
+ |pods|29|
+ |vpc.amazonaws.com/pod-eni|9|
+### `c5a.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c5a|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|8192|
+ |karpenter.k8s.aws/instance-network-bandwidth|1250|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c5a.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|6484Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|18|
+### `c5a.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c5a|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|2500|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c5a.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|14062Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|38|
+### `c5a.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c5a|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|5000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c5a.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|27281Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `c5a.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c5a|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|65536|
+ |karpenter.k8s.aws/instance-network-bandwidth|10000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c5a.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|57591Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `c5a.12xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|48|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c5a|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|98304|
+ |karpenter.k8s.aws/instance-network-bandwidth|12000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|12xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c5a.12xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|47710m|
+ |ephemeral-storage|18Gi|
+ |memory|87902Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `c5a.16xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c5a|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|131072|
+ |karpenter.k8s.aws/instance-network-bandwidth|20000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|16xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c5a.16xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|112679Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `c5a.24xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|96|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c5a|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|196608|
+ |karpenter.k8s.aws/instance-network-bandwidth|20000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|24xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c5a.24xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|95590m|
+ |ephemeral-storage|18Gi|
+ |memory|173300Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+## c5ad Family
+### `c5ad.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c5ad|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|75|
+ |karpenter.k8s.aws/instance-memory|4096|
+ |karpenter.k8s.aws/instance-network-bandwidth|750|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c5ad.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|3014Mi|
+ |pods|29|
+ |vpc.amazonaws.com/pod-eni|9|
+### `c5ad.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c5ad|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|150|
+ |karpenter.k8s.aws/instance-memory|8192|
+ |karpenter.k8s.aws/instance-network-bandwidth|1250|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c5ad.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|6484Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|18|
+### `c5ad.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c5ad|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|300|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|2500|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c5ad.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|14062Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|38|
+### `c5ad.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c5ad|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|600|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|5000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c5ad.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|27281Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `c5ad.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c5ad|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|1200|
+ |karpenter.k8s.aws/instance-memory|65536|
+ |karpenter.k8s.aws/instance-network-bandwidth|10000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c5ad.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|57591Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `c5ad.12xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|48|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c5ad|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|1800|
+ |karpenter.k8s.aws/instance-memory|98304|
+ |karpenter.k8s.aws/instance-network-bandwidth|12000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|12xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c5ad.12xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|47710m|
+ |ephemeral-storage|18Gi|
+ |memory|87902Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `c5ad.16xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c5ad|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|2400|
+ |karpenter.k8s.aws/instance-memory|131072|
+ |karpenter.k8s.aws/instance-network-bandwidth|20000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|16xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c5ad.16xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|112679Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `c5ad.24xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|96|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c5ad|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|3800|
+ |karpenter.k8s.aws/instance-memory|196608|
+ |karpenter.k8s.aws/instance-network-bandwidth|20000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|24xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c5ad.24xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|95590m|
+ |ephemeral-storage|18Gi|
+ |memory|173300Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+## c5d Family
+### `c5d.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|c5d|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|50|
+ |karpenter.k8s.aws/instance-memory|4096|
+ |karpenter.k8s.aws/instance-network-bandwidth|750|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c5d.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|3014Mi|
+ |pods|29|
+ |vpc.amazonaws.com/pod-eni|9|
+### `c5d.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|c5d|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|100|
+ |karpenter.k8s.aws/instance-memory|8192|
+ |karpenter.k8s.aws/instance-network-bandwidth|1250|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c5d.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|6484Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|18|
+### `c5d.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|c5d|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|200|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|2500|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c5d.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|14062Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|38|
+### `c5d.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|c5d|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|400|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|5000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c5d.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|27281Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `c5d.9xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|36|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|c5d|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|900|
+ |karpenter.k8s.aws/instance-memory|73728|
+ |karpenter.k8s.aws/instance-network-bandwidth|12000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|9xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c5d.9xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|35740m|
+ |ephemeral-storage|18Gi|
+ |memory|65169Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `c5d.12xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|48|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|c5d|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|1800|
+ |karpenter.k8s.aws/instance-memory|98304|
+ |karpenter.k8s.aws/instance-network-bandwidth|12000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|12xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c5d.12xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|47710m|
+ |ephemeral-storage|18Gi|
+ |memory|87902Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `c5d.18xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|72|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|c5d|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|1800|
+ |karpenter.k8s.aws/instance-memory|147456|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|18xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c5d.18xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|71650m|
+ |ephemeral-storage|18Gi|
+ |memory|127834Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `c5d.24xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|96|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|c5d|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|3600|
+ |karpenter.k8s.aws/instance-memory|196608|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|24xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c5d.24xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|95590m|
+ |ephemeral-storage|18Gi|
+ |memory|173300Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `c5d.metal`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|96|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|c5d|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor||
+ |karpenter.k8s.aws/instance-local-nvme|3600|
+ |karpenter.k8s.aws/instance-memory|196608|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|metal|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c5d.metal|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|95590m|
+ |ephemeral-storage|18Gi|
+ |memory|173300Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+## c5n Family
+### `c5n.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c5n|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|5376|
+ |karpenter.k8s.aws/instance-network-bandwidth|3000|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c5n.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|4198Mi|
+ |pods|29|
+ |vpc.amazonaws.com/pod-eni|9|
+### `c5n.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c5n|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|10752|
+ |karpenter.k8s.aws/instance-network-bandwidth|5000|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c5n.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|8852Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|18|
+### `c5n.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c5n|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|21504|
+ |karpenter.k8s.aws/instance-network-bandwidth|10000|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c5n.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|18798Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|38|
+### `c5n.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c5n|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|43008|
+ |karpenter.k8s.aws/instance-network-bandwidth|15000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c5n.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|36753Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `c5n.9xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|36|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c5n|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|98304|
+ |karpenter.k8s.aws/instance-network-bandwidth|50000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|9xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c5n.9xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|35740m|
+ |ephemeral-storage|18Gi|
+ |memory|87902Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `c5n.18xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|72|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c5n|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|196608|
+ |karpenter.k8s.aws/instance-network-bandwidth|100000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|18xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c5n.18xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|71650m|
+ |ephemeral-storage|18Gi|
+ |memory|173300Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `c5n.metal`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|72|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c5n|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor||
+ |karpenter.k8s.aws/instance-memory|196608|
+ |karpenter.k8s.aws/instance-network-bandwidth|100000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|metal|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c5n.metal|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|71650m|
+ |ephemeral-storage|18Gi|
+ |memory|173300Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+## c6a Family
+### `c6a.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c6a|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|4096|
+ |karpenter.k8s.aws/instance-network-bandwidth|781|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6a.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|3014Mi|
+ |pods|29|
+ |vpc.amazonaws.com/pod-eni|9|
+### `c6a.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c6a|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|8192|
+ |karpenter.k8s.aws/instance-network-bandwidth|1562|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6a.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|6484Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|18|
+### `c6a.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c6a|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|3125|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6a.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|14062Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|38|
+### `c6a.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c6a|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|6250|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6a.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|27281Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `c6a.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c6a|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|65536|
+ |karpenter.k8s.aws/instance-network-bandwidth|12500|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6a.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|57591Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|84|
+### `c6a.12xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|48|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c6a|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|98304|
+ |karpenter.k8s.aws/instance-network-bandwidth|18750|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|12xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6a.12xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|47710m|
+ |ephemeral-storage|18Gi|
+ |memory|87902Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|114|
+### `c6a.16xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c6a|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|131072|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|16xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6a.16xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|112679Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `c6a.24xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|96|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c6a|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|196608|
+ |karpenter.k8s.aws/instance-network-bandwidth|37500|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|24xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6a.24xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|95590m|
+ |ephemeral-storage|18Gi|
+ |memory|173300Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `c6a.32xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|128|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c6a|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|262144|
+ |karpenter.k8s.aws/instance-network-bandwidth|50000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|32xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6a.32xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|127510m|
+ |ephemeral-storage|18Gi|
+ |memory|233921Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `c6a.48xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|192|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c6a|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|393216|
+ |karpenter.k8s.aws/instance-network-bandwidth|50000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|48xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6a.48xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|191350m|
+ |ephemeral-storage|18Gi|
+ |memory|355162Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `c6a.metal`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|192|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c6a|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor||
+ |karpenter.k8s.aws/instance-memory|393216|
+ |karpenter.k8s.aws/instance-network-bandwidth|50000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|metal|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6a.metal|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|191350m|
+ |ephemeral-storage|18Gi|
+ |memory|355162Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+## c6g Family
+### `c6g.medium`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|1|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|c6g|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|2048|
+ |karpenter.k8s.aws/instance-network-bandwidth|500|
+ |karpenter.k8s.aws/instance-pods|8|
+ |karpenter.k8s.aws/instance-size|medium|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6g.medium|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|840m|
+ |ephemeral-storage|18Gi|
+ |memory|1351Mi|
+ |pods|8|
+ |vpc.amazonaws.com/pod-eni|4|
+### `c6g.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|c6g|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|4096|
+ |karpenter.k8s.aws/instance-network-bandwidth|750|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6g.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|3014Mi|
+ |pods|29|
+ |vpc.amazonaws.com/pod-eni|9|
+### `c6g.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|c6g|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|8192|
+ |karpenter.k8s.aws/instance-network-bandwidth|1250|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6g.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|6484Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|18|
+### `c6g.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|c6g|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|2500|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6g.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|14062Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|38|
+### `c6g.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|c6g|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|5000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6g.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|27281Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `c6g.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|c6g|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|65536|
+ |karpenter.k8s.aws/instance-network-bandwidth|12000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6g.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|57591Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `c6g.12xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|48|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|c6g|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|98304|
+ |karpenter.k8s.aws/instance-network-bandwidth|20000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|12xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6g.12xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|47710m|
+ |ephemeral-storage|18Gi|
+ |memory|87902Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `c6g.16xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|c6g|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|131072|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|16xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6g.16xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|112679Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `c6g.metal`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|c6g|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor||
+ |karpenter.k8s.aws/instance-memory|131072|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|metal|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6g.metal|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|112679Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+## c6gd Family
+### `c6gd.medium`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|1|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|c6gd|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|59|
+ |karpenter.k8s.aws/instance-memory|2048|
+ |karpenter.k8s.aws/instance-network-bandwidth|500|
+ |karpenter.k8s.aws/instance-pods|8|
+ |karpenter.k8s.aws/instance-size|medium|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6gd.medium|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|840m|
+ |ephemeral-storage|18Gi|
+ |memory|1351Mi|
+ |pods|8|
+ |vpc.amazonaws.com/pod-eni|4|
+### `c6gd.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|c6gd|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|118|
+ |karpenter.k8s.aws/instance-memory|4096|
+ |karpenter.k8s.aws/instance-network-bandwidth|750|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6gd.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|3014Mi|
+ |pods|29|
+ |vpc.amazonaws.com/pod-eni|9|
+### `c6gd.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|c6gd|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|237|
+ |karpenter.k8s.aws/instance-memory|8192|
+ |karpenter.k8s.aws/instance-network-bandwidth|1250|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6gd.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|6484Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|18|
+### `c6gd.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|c6gd|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|474|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|2500|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6gd.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|14062Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|38|
+### `c6gd.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|c6gd|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|950|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|5000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6gd.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|27281Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `c6gd.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|c6gd|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|1900|
+ |karpenter.k8s.aws/instance-memory|65536|
+ |karpenter.k8s.aws/instance-network-bandwidth|12000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6gd.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|57591Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `c6gd.12xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|48|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|c6gd|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|2850|
+ |karpenter.k8s.aws/instance-memory|98304|
+ |karpenter.k8s.aws/instance-network-bandwidth|20000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|12xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6gd.12xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|47710m|
+ |ephemeral-storage|18Gi|
+ |memory|87902Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `c6gd.16xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|c6gd|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|3800|
+ |karpenter.k8s.aws/instance-memory|131072|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|16xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6gd.16xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|112679Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `c6gd.metal`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|c6gd|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor||
+ |karpenter.k8s.aws/instance-local-nvme|3800|
+ |karpenter.k8s.aws/instance-memory|131072|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|metal|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6gd.metal|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|112679Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+## c6gn Family
+### `c6gn.medium`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|1|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c6gn|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|2048|
+ |karpenter.k8s.aws/instance-network-bandwidth|1600|
+ |karpenter.k8s.aws/instance-pods|8|
+ |karpenter.k8s.aws/instance-size|medium|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6gn.medium|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|840m|
+ |ephemeral-storage|18Gi|
+ |memory|1351Mi|
+ |pods|8|
+ |vpc.amazonaws.com/pod-eni|4|
+### `c6gn.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c6gn|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|4096|
+ |karpenter.k8s.aws/instance-network-bandwidth|3000|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6gn.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|3014Mi|
+ |pods|29|
+ |vpc.amazonaws.com/pod-eni|9|
+### `c6gn.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c6gn|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|8192|
+ |karpenter.k8s.aws/instance-network-bandwidth|6300|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6gn.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|6484Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|18|
+### `c6gn.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c6gn|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|12500|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6gn.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|14062Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|38|
+### `c6gn.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c6gn|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|15000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6gn.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|27281Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `c6gn.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c6gn|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|65536|
+ |karpenter.k8s.aws/instance-network-bandwidth|50000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6gn.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|57591Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `c6gn.12xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|48|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c6gn|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|98304|
+ |karpenter.k8s.aws/instance-network-bandwidth|75000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|12xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6gn.12xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|47710m|
+ |ephemeral-storage|18Gi|
+ |memory|87902Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `c6gn.16xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c6gn|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|131072|
+ |karpenter.k8s.aws/instance-network-bandwidth|100000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|16xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6gn.16xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|112679Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+## c6i Family
+### `c6i.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c6i|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|4096|
+ |karpenter.k8s.aws/instance-network-bandwidth|781|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6i.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|3014Mi|
+ |pods|29|
+ |vpc.amazonaws.com/pod-eni|9|
+### `c6i.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c6i|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|8192|
+ |karpenter.k8s.aws/instance-network-bandwidth|1562|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6i.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|6484Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|18|
+### `c6i.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c6i|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|3125|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6i.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|14062Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|38|
+### `c6i.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c6i|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|6250|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6i.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|27281Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `c6i.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c6i|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|65536|
+ |karpenter.k8s.aws/instance-network-bandwidth|12500|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6i.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|57591Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|84|
+### `c6i.12xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|48|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c6i|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|98304|
+ |karpenter.k8s.aws/instance-network-bandwidth|18750|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|12xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6i.12xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|47710m|
+ |ephemeral-storage|18Gi|
+ |memory|87902Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|114|
+### `c6i.16xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c6i|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|131072|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|16xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6i.16xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|112679Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `c6i.24xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|96|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c6i|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|196608|
+ |karpenter.k8s.aws/instance-network-bandwidth|37500|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|24xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6i.24xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|95590m|
+ |ephemeral-storage|18Gi|
+ |memory|173300Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `c6i.32xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|128|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c6i|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|262144|
+ |karpenter.k8s.aws/instance-network-bandwidth|50000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|32xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6i.32xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|127510m|
+ |ephemeral-storage|18Gi|
+ |memory|233921Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `c6i.metal`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|128|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c6i|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor||
+ |karpenter.k8s.aws/instance-memory|262144|
+ |karpenter.k8s.aws/instance-network-bandwidth|50000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|metal|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6i.metal|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|127510m|
+ |ephemeral-storage|18Gi|
+ |memory|233921Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+## c6id Family
+### `c6id.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c6id|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|118|
+ |karpenter.k8s.aws/instance-memory|4096|
+ |karpenter.k8s.aws/instance-network-bandwidth|781|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6id.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|3014Mi|
+ |pods|29|
+ |vpc.amazonaws.com/pod-eni|9|
+### `c6id.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c6id|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|237|
+ |karpenter.k8s.aws/instance-memory|8192|
+ |karpenter.k8s.aws/instance-network-bandwidth|1562|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6id.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|6484Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|18|
+### `c6id.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c6id|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|474|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|3125|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6id.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|14062Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|38|
+### `c6id.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c6id|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|950|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|6250|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6id.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|27281Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `c6id.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c6id|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|1900|
+ |karpenter.k8s.aws/instance-memory|65536|
+ |karpenter.k8s.aws/instance-network-bandwidth|12500|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6id.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|57591Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|84|
+### `c6id.12xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|48|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c6id|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|2850|
+ |karpenter.k8s.aws/instance-memory|98304|
+ |karpenter.k8s.aws/instance-network-bandwidth|18750|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|12xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6id.12xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|47710m|
+ |ephemeral-storage|18Gi|
+ |memory|87902Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|114|
+### `c6id.16xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c6id|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|3800|
+ |karpenter.k8s.aws/instance-memory|131072|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|16xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6id.16xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|112679Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `c6id.24xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|96|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c6id|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|5700|
+ |karpenter.k8s.aws/instance-memory|196608|
+ |karpenter.k8s.aws/instance-network-bandwidth|37500|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|24xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6id.24xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|95590m|
+ |ephemeral-storage|18Gi|
+ |memory|173300Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `c6id.32xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|128|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c6id|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|7600|
+ |karpenter.k8s.aws/instance-memory|262144|
+ |karpenter.k8s.aws/instance-network-bandwidth|50000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|32xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6id.32xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|127510m|
+ |ephemeral-storage|18Gi|
+ |memory|233921Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `c6id.metal`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|128|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c6id|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor||
+ |karpenter.k8s.aws/instance-local-nvme|7600|
+ |karpenter.k8s.aws/instance-memory|262144|
+ |karpenter.k8s.aws/instance-network-bandwidth|50000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|metal|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6id.metal|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|127510m|
+ |ephemeral-storage|18Gi|
+ |memory|233921Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+## c6in Family
+### `c6in.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c6in|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|4096|
+ |karpenter.k8s.aws/instance-network-bandwidth|3125|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6in.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|3014Mi|
+ |pods|29|
+ |vpc.amazonaws.com/pod-eni|9|
+### `c6in.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c6in|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|8192|
+ |karpenter.k8s.aws/instance-network-bandwidth|6250|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6in.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|6484Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|18|
+### `c6in.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c6in|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|12500|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6in.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|14062Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|38|
+### `c6in.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c6in|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6in.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|27281Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `c6in.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c6in|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|65536|
+ |karpenter.k8s.aws/instance-network-bandwidth|50000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6in.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|57591Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|84|
+### `c6in.12xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|48|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c6in|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|98304|
+ |karpenter.k8s.aws/instance-network-bandwidth|75000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|12xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6in.12xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|47710m|
+ |ephemeral-storage|18Gi|
+ |memory|87902Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|114|
+### `c6in.16xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c6in|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|131072|
+ |karpenter.k8s.aws/instance-network-bandwidth|100000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|16xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6in.16xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|112679Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `c6in.24xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|96|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c6in|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|196608|
+ |karpenter.k8s.aws/instance-network-bandwidth|150000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|24xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6in.24xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|95590m|
+ |ephemeral-storage|18Gi|
+ |memory|173300Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `c6in.32xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|128|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c6in|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|262144|
+ |karpenter.k8s.aws/instance-network-bandwidth|400000|
+ |karpenter.k8s.aws/instance-pods|688|
+ |karpenter.k8s.aws/instance-size|32xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c6in.32xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|127510m|
+ |ephemeral-storage|18Gi|
+ |memory|234460Mi|
+ |pods|688|
+ |vpc.amazonaws.com/pod-eni|108|
+## c7g Family
+### `c7g.medium`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|1|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c7g|
+ |karpenter.k8s.aws/instance-generation|7|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|2048|
+ |karpenter.k8s.aws/instance-network-bandwidth|520|
+ |karpenter.k8s.aws/instance-pods|8|
+ |karpenter.k8s.aws/instance-size|medium|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c7g.medium|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|840m|
+ |ephemeral-storage|18Gi|
+ |memory|1351Mi|
+ |pods|8|
+ |vpc.amazonaws.com/pod-eni|4|
+### `c7g.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c7g|
+ |karpenter.k8s.aws/instance-generation|7|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|4096|
+ |karpenter.k8s.aws/instance-network-bandwidth|937|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c7g.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|3014Mi|
+ |pods|29|
+ |vpc.amazonaws.com/pod-eni|9|
+### `c7g.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c7g|
+ |karpenter.k8s.aws/instance-generation|7|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|8192|
+ |karpenter.k8s.aws/instance-network-bandwidth|1876|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c7g.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|6484Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|18|
+### `c7g.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c7g|
+ |karpenter.k8s.aws/instance-generation|7|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|3750|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c7g.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|14062Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|38|
+### `c7g.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c7g|
+ |karpenter.k8s.aws/instance-generation|7|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|7500|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c7g.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|27281Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `c7g.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c7g|
+ |karpenter.k8s.aws/instance-generation|7|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|65536|
+ |karpenter.k8s.aws/instance-network-bandwidth|15000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c7g.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|57591Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `c7g.12xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|48|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c7g|
+ |karpenter.k8s.aws/instance-generation|7|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|98304|
+ |karpenter.k8s.aws/instance-network-bandwidth|22500|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|12xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c7g.12xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|47710m|
+ |ephemeral-storage|18Gi|
+ |memory|87902Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `c7g.16xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c7g|
+ |karpenter.k8s.aws/instance-generation|7|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|131072|
+ |karpenter.k8s.aws/instance-network-bandwidth|30000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|16xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c7g.16xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|112679Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `c7g.metal`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|c|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|c7g|
+ |karpenter.k8s.aws/instance-generation|7|
+ |karpenter.k8s.aws/instance-hypervisor||
+ |karpenter.k8s.aws/instance-memory|131072|
+ |karpenter.k8s.aws/instance-network-bandwidth|30000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|metal|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|c7g.metal|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|112679Mi|
+ |pods|737|
+## cc2 Family
+### `cc2.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|cc|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|cc2|
+ |karpenter.k8s.aws/instance-generation|2|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|61952|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|cc2.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|54276Mi|
+ |pods|234|
+## d2 Family
+### `d2.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|d|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|d2|
+ |karpenter.k8s.aws/instance-generation|2|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|31232|
+ |karpenter.k8s.aws/instance-network-bandwidth|1250|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|d2.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|27796Mi|
+ |pods|58|
+### `d2.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|d|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|d2|
+ |karpenter.k8s.aws/instance-generation|2|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|62464|
+ |karpenter.k8s.aws/instance-network-bandwidth|2500|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|d2.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|56686Mi|
+ |pods|58|
+### `d2.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|d|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|d2|
+ |karpenter.k8s.aws/instance-generation|2|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|124928|
+ |karpenter.k8s.aws/instance-network-bandwidth|5000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|d2.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|112529Mi|
+ |pods|234|
+### `d2.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|d|
+ |karpenter.k8s.aws/instance-cpu|36|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|d2|
+ |karpenter.k8s.aws/instance-generation|2|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|249856|
+ |karpenter.k8s.aws/instance-network-bandwidth|5000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|d2.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|35740m|
+ |ephemeral-storage|18Gi|
+ |memory|228087Mi|
+ |pods|234|
+## d3 Family
+### `d3.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|d|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|d3|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|5940|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|3000|
+ |karpenter.k8s.aws/instance-pods|10|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|d3.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|29745Mi|
+ |pods|10|
+ |vpc.amazonaws.com/pod-eni|42|
+### `d3.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|d|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|d3|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|11880|
+ |karpenter.k8s.aws/instance-memory|65536|
+ |karpenter.k8s.aws/instance-network-bandwidth|6000|
+ |karpenter.k8s.aws/instance-pods|18|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|d3.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|59967Mi|
+ |pods|18|
+ |vpc.amazonaws.com/pod-eni|92|
+### `d3.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|d|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|d3|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|23760|
+ |karpenter.k8s.aws/instance-memory|131072|
+ |karpenter.k8s.aws/instance-network-bandwidth|12500|
+ |karpenter.k8s.aws/instance-pods|38|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|d3.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|120368Mi|
+ |pods|38|
+ |vpc.amazonaws.com/pod-eni|118|
+### `d3.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|d|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|d3|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|47520|
+ |karpenter.k8s.aws/instance-memory|262144|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|59|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|d3.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|241379Mi|
+ |pods|59|
+ |vpc.amazonaws.com/pod-eni|119|
+## d3en Family
+### `d3en.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|d|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|d3en|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|27960|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|6000|
+ |karpenter.k8s.aws/instance-pods|10|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|d3en.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|14590Mi|
+ |pods|10|
+ |vpc.amazonaws.com/pod-eni|24|
+### `d3en.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|d|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|d3en|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|55920|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|12500|
+ |karpenter.k8s.aws/instance-pods|18|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|d3en.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|29657Mi|
+ |pods|18|
+ |vpc.amazonaws.com/pod-eni|58|
+### `d3en.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|d|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|d3en|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|111840|
+ |karpenter.k8s.aws/instance-memory|65536|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|38|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|d3en.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|59747Mi|
+ |pods|38|
+ |vpc.amazonaws.com/pod-eni|118|
+### `d3en.6xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|d|
+ |karpenter.k8s.aws/instance-cpu|24|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|d3en|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|167760|
+ |karpenter.k8s.aws/instance-memory|98304|
+ |karpenter.k8s.aws/instance-network-bandwidth|40000|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|6xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|d3en.6xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|23770m|
+ |ephemeral-storage|18Gi|
+ |memory|89838Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|118|
+### `d3en.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|d|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|d3en|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|223680|
+ |karpenter.k8s.aws/instance-memory|131072|
+ |karpenter.k8s.aws/instance-network-bandwidth|50000|
+ |karpenter.k8s.aws/instance-pods|78|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|d3en.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|119928Mi|
+ |pods|78|
+ |vpc.amazonaws.com/pod-eni|118|
+### `d3en.12xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|d|
+ |karpenter.k8s.aws/instance-cpu|48|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|d3en|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|335520|
+ |karpenter.k8s.aws/instance-memory|196608|
+ |karpenter.k8s.aws/instance-network-bandwidth|75000|
+ |karpenter.k8s.aws/instance-pods|89|
+ |karpenter.k8s.aws/instance-size|12xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|d3en.12xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|47710m|
+ |ephemeral-storage|18Gi|
+ |memory|180428Mi|
+ |pods|89|
+ |vpc.amazonaws.com/pod-eni|119|
+## dl1 Family
+### `dl1.24xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|dl|
+ |karpenter.k8s.aws/instance-cpu|96|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|dl1|
+ |karpenter.k8s.aws/instance-generation|1|
+ |karpenter.k8s.aws/instance-gpu-count|8|
+ |karpenter.k8s.aws/instance-gpu-manufacturer|habana|
+ |karpenter.k8s.aws/instance-gpu-memory|32768|
+ |karpenter.k8s.aws/instance-gpu-name|gaudi-hl-205|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|4000|
+ |karpenter.k8s.aws/instance-memory|786432|
+ |karpenter.k8s.aws/instance-network-bandwidth|400000|
+ |karpenter.k8s.aws/instance-pods|2942|
+ |karpenter.k8s.aws/instance-size|24xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|dl1.24xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|95590m|
+ |ephemeral-storage|18Gi|
+ |habana.ai/gaudi|8|
+ |memory|694632Mi|
+ |pods|2942|
+ |vpc.amazonaws.com/pod-eni|62|
+## f1 Family
+### `f1.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|f|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|f1|
+ |karpenter.k8s.aws/instance-generation|1|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-local-nvme|470|
+ |karpenter.k8s.aws/instance-memory|124928|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|f1.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|114465Mi|
+ |pods|58|
+### `f1.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|f|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|f1|
+ |karpenter.k8s.aws/instance-generation|1|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-local-nvme|940|
+ |karpenter.k8s.aws/instance-memory|249856|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|f1.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|228087Mi|
+ |pods|234|
+### `f1.16xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|f|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|f1|
+ |karpenter.k8s.aws/instance-generation|1|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-local-nvme|3760|
+ |karpenter.k8s.aws/instance-memory|999424|
+ |karpenter.k8s.aws/instance-pods|394|
+ |karpenter.k8s.aws/instance-size|16xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|f1.16xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|919678Mi|
+ |pods|394|
+## g2 Family
+### `g2.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|g|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|g2|
+ |karpenter.k8s.aws/instance-generation|2|
+ |karpenter.k8s.aws/instance-gpu-count|1|
+ |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|
+ |karpenter.k8s.aws/instance-gpu-memory|4096|
+ |karpenter.k8s.aws/instance-gpu-name|k520|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|15360|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|g2.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|13115Mi|
+ |nvidia.com/gpu|1|
+ |pods|58|
+### `g2.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|g|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|g2|
+ |karpenter.k8s.aws/instance-generation|2|
+ |karpenter.k8s.aws/instance-gpu-count|4|
+ |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|
+ |karpenter.k8s.aws/instance-gpu-memory|4096|
+ |karpenter.k8s.aws/instance-gpu-name|k520|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|61440|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|g2.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|53803Mi|
+ |nvidia.com/gpu|4|
+ |pods|234|
+## g3 Family
+### `g3.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|g|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|g3|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-gpu-count|1|
+ |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|
+ |karpenter.k8s.aws/instance-gpu-memory|8192|
+ |karpenter.k8s.aws/instance-gpu-name|m60|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|124928|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|g3.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|112529Mi|
+ |nvidia.com/gpu|1|
+ |pods|234|
+### `g3.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|g|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|g3|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-gpu-count|2|
+ |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|
+ |karpenter.k8s.aws/instance-gpu-memory|8192|
+ |karpenter.k8s.aws/instance-gpu-name|m60|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|249856|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|g3.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|228087Mi|
+ |nvidia.com/gpu|2|
+ |pods|234|
+### `g3.16xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|g|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|g3|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-gpu-count|4|
+ |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|
+ |karpenter.k8s.aws/instance-gpu-memory|8192|
+ |karpenter.k8s.aws/instance-gpu-name|m60|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|499712|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|16xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|g3.16xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|453671Mi|
+ |nvidia.com/gpu|4|
+ |pods|737|
+## g3s Family
+### `g3s.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|g|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|g3s|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-gpu-count|1|
+ |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|
+ |karpenter.k8s.aws/instance-gpu-memory|8192|
+ |karpenter.k8s.aws/instance-gpu-name|m60|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|31232|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|g3s.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|27796Mi|
+ |nvidia.com/gpu|1|
+ |pods|58|
+## g4ad Family
+### `g4ad.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|g|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|g4ad|
+ |karpenter.k8s.aws/instance-generation|4|
+ |karpenter.k8s.aws/instance-gpu-count|1|
+ |karpenter.k8s.aws/instance-gpu-manufacturer|amd|
+ |karpenter.k8s.aws/instance-gpu-memory|8192|
+ |karpenter.k8s.aws/instance-gpu-name|radeon-pro-v520|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|150|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|2000|
+ |karpenter.k8s.aws/instance-pods|8|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|g4ad.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |amd.com/gpu|1|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|14612Mi|
+ |pods|8|
+ |vpc.amazonaws.com/pod-eni|12|
+### `g4ad.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|g|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|g4ad|
+ |karpenter.k8s.aws/instance-generation|4|
+ |karpenter.k8s.aws/instance-gpu-count|1|
+ |karpenter.k8s.aws/instance-gpu-manufacturer|amd|
+ |karpenter.k8s.aws/instance-gpu-memory|8192|
+ |karpenter.k8s.aws/instance-gpu-name|radeon-pro-v520|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|300|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|4167|
+ |karpenter.k8s.aws/instance-pods|8|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|g4ad.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |amd.com/gpu|1|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|29767Mi|
+ |pods|8|
+ |vpc.amazonaws.com/pod-eni|12|
+### `g4ad.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|g|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|g4ad|
+ |karpenter.k8s.aws/instance-generation|4|
+ |karpenter.k8s.aws/instance-gpu-count|1|
+ |karpenter.k8s.aws/instance-gpu-manufacturer|amd|
+ |karpenter.k8s.aws/instance-gpu-memory|8192|
+ |karpenter.k8s.aws/instance-gpu-name|radeon-pro-v520|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|600|
+ |karpenter.k8s.aws/instance-memory|65536|
+ |karpenter.k8s.aws/instance-network-bandwidth|8333|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|g4ad.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |amd.com/gpu|1|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|59846Mi|
+ |pods|29|
+ |vpc.amazonaws.com/pod-eni|11|
+### `g4ad.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|g|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|g4ad|
+ |karpenter.k8s.aws/instance-generation|4|
+ |karpenter.k8s.aws/instance-gpu-count|2|
+ |karpenter.k8s.aws/instance-gpu-manufacturer|amd|
+ |karpenter.k8s.aws/instance-gpu-memory|8192|
+ |karpenter.k8s.aws/instance-gpu-name|radeon-pro-v520|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|1200|
+ |karpenter.k8s.aws/instance-memory|131072|
+ |karpenter.k8s.aws/instance-network-bandwidth|15000|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|g4ad.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |amd.com/gpu|2|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|120148Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|10|
+### `g4ad.16xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|g|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|g4ad|
+ |karpenter.k8s.aws/instance-generation|4|
+ |karpenter.k8s.aws/instance-gpu-count|4|
+ |karpenter.k8s.aws/instance-gpu-manufacturer|amd|
+ |karpenter.k8s.aws/instance-gpu-memory|8192|
+ |karpenter.k8s.aws/instance-gpu-name|radeon-pro-v520|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|2400|
+ |karpenter.k8s.aws/instance-memory|262144|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|16xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|g4ad.16xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |amd.com/gpu|4|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|239454Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|6|
+## g4dn Family
+### `g4dn.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|g|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|g4dn|
+ |karpenter.k8s.aws/instance-generation|4|
+ |karpenter.k8s.aws/instance-gpu-count|1|
+ |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|
+ |karpenter.k8s.aws/instance-gpu-memory|16384|
+ |karpenter.k8s.aws/instance-gpu-name|t4|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|125|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|5000|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|g4dn.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|14381Mi|
+ |nvidia.com/gpu|1|
+ |pods|29|
+ |vpc.amazonaws.com/pod-eni|39|
+### `g4dn.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|g|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|g4dn|
+ |karpenter.k8s.aws/instance-generation|4|
+ |karpenter.k8s.aws/instance-gpu-count|1|
+ |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|
+ |karpenter.k8s.aws/instance-gpu-memory|16384|
+ |karpenter.k8s.aws/instance-gpu-name|t4|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|225|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|10000|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|g4dn.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|29536Mi|
+ |nvidia.com/gpu|1|
+ |pods|29|
+ |vpc.amazonaws.com/pod-eni|39|
+### `g4dn.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|g|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|g4dn|
+ |karpenter.k8s.aws/instance-generation|4|
+ |karpenter.k8s.aws/instance-gpu-count|1|
+ |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|
+ |karpenter.k8s.aws/instance-gpu-memory|16384|
+ |karpenter.k8s.aws/instance-gpu-name|t4|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|225|
+ |karpenter.k8s.aws/instance-memory|65536|
+ |karpenter.k8s.aws/instance-network-bandwidth|20000|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|g4dn.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|59846Mi|
+ |nvidia.com/gpu|1|
+ |pods|29|
+ |vpc.amazonaws.com/pod-eni|59|
+### `g4dn.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|g|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|g4dn|
+ |karpenter.k8s.aws/instance-generation|4|
+ |karpenter.k8s.aws/instance-gpu-count|1|
+ |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|
+ |karpenter.k8s.aws/instance-gpu-memory|16384|
+ |karpenter.k8s.aws/instance-gpu-name|t4|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|900|
+ |karpenter.k8s.aws/instance-memory|131072|
+ |karpenter.k8s.aws/instance-network-bandwidth|50000|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|g4dn.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|120148Mi|
+ |nvidia.com/gpu|1|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|58|
+### `g4dn.12xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|g|
+ |karpenter.k8s.aws/instance-cpu|48|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|g4dn|
+ |karpenter.k8s.aws/instance-generation|4|
+ |karpenter.k8s.aws/instance-gpu-count|4|
+ |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|
+ |karpenter.k8s.aws/instance-gpu-memory|16384|
+ |karpenter.k8s.aws/instance-gpu-name|t4|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|900|
+ |karpenter.k8s.aws/instance-memory|196608|
+ |karpenter.k8s.aws/instance-network-bandwidth|50000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|12xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|g4dn.12xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|47710m|
+ |ephemeral-storage|18Gi|
+ |memory|178833Mi|
+ |nvidia.com/gpu|4|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `g4dn.16xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|g|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|g4dn|
+ |karpenter.k8s.aws/instance-generation|4|
+ |karpenter.k8s.aws/instance-gpu-count|1|
+ |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|
+ |karpenter.k8s.aws/instance-gpu-memory|16384|
+ |karpenter.k8s.aws/instance-gpu-name|t4|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|900|
+ |karpenter.k8s.aws/instance-memory|262144|
+ |karpenter.k8s.aws/instance-network-bandwidth|50000|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|16xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|g4dn.16xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|241390Mi|
+ |nvidia.com/gpu|1|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|118|
+### `g4dn.metal`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|g|
+ |karpenter.k8s.aws/instance-cpu|96|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|g4dn|
+ |karpenter.k8s.aws/instance-generation|4|
+ |karpenter.k8s.aws/instance-gpu-count|8|
+ |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|
+ |karpenter.k8s.aws/instance-gpu-memory|16384|
+ |karpenter.k8s.aws/instance-gpu-name|t4|
+ |karpenter.k8s.aws/instance-hypervisor||
+ |karpenter.k8s.aws/instance-local-nvme|1800|
+ |karpenter.k8s.aws/instance-memory|393216|
+ |karpenter.k8s.aws/instance-network-bandwidth|100000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|metal|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|g4dn.metal|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|95590m|
+ |ephemeral-storage|18Gi|
+ |memory|355162Mi|
+ |nvidia.com/gpu|8|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+## g5 Family
+### `g5.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|g|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|g5|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-gpu-count|1|
+ |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|
+ |karpenter.k8s.aws/instance-gpu-memory|24576|
+ |karpenter.k8s.aws/instance-gpu-name|a10g|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|250|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|2500|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|g5.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|14062Mi|
+ |nvidia.com/gpu|1|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|4|
+### `g5.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|g|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|g5|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-gpu-count|1|
+ |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|
+ |karpenter.k8s.aws/instance-gpu-memory|24576|
+ |karpenter.k8s.aws/instance-gpu-name|a10g|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|450|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|5000|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|g5.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|29217Mi|
+ |nvidia.com/gpu|1|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|17|
+### `g5.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|g|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|g5|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-gpu-count|1|
+ |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|
+ |karpenter.k8s.aws/instance-gpu-memory|24576|
+ |karpenter.k8s.aws/instance-gpu-name|a10g|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|600|
+ |karpenter.k8s.aws/instance-memory|65536|
+ |karpenter.k8s.aws/instance-network-bandwidth|10000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|g5.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|57591Mi|
+ |nvidia.com/gpu|1|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|34|
+### `g5.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|g|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|g5|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-gpu-count|1|
+ |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|
+ |karpenter.k8s.aws/instance-gpu-memory|24576|
+ |karpenter.k8s.aws/instance-gpu-name|a10g|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|900|
+ |karpenter.k8s.aws/instance-memory|131072|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|g5.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|118212Mi|
+ |nvidia.com/gpu|1|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|84|
+### `g5.12xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|g|
+ |karpenter.k8s.aws/instance-cpu|48|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|g5|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-gpu-count|4|
+ |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|
+ |karpenter.k8s.aws/instance-gpu-memory|24576|
+ |karpenter.k8s.aws/instance-gpu-name|a10g|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|3800|
+ |karpenter.k8s.aws/instance-memory|196608|
+ |karpenter.k8s.aws/instance-network-bandwidth|40000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|12xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|g5.12xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|47710m|
+ |ephemeral-storage|18Gi|
+ |memory|173300Mi|
+ |nvidia.com/gpu|4|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `g5.16xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|g|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|g5|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-gpu-count|1|
+ |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|
+ |karpenter.k8s.aws/instance-gpu-memory|24576|
+ |karpenter.k8s.aws/instance-gpu-name|a10g|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|1900|
+ |karpenter.k8s.aws/instance-memory|262144|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|16xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|g5.16xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|239454Mi|
+ |nvidia.com/gpu|1|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|114|
+### `g5.24xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|g|
+ |karpenter.k8s.aws/instance-cpu|96|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|g5|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-gpu-count|4|
+ |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|
+ |karpenter.k8s.aws/instance-gpu-memory|24576|
+ |karpenter.k8s.aws/instance-gpu-name|a10g|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|3800|
+ |karpenter.k8s.aws/instance-memory|393216|
+ |karpenter.k8s.aws/instance-network-bandwidth|50000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|24xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|g5.24xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|95590m|
+ |ephemeral-storage|18Gi|
+ |memory|355162Mi|
+ |nvidia.com/gpu|4|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `g5.48xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|g|
+ |karpenter.k8s.aws/instance-cpu|192|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|g5|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-gpu-count|8|
+ |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|
+ |karpenter.k8s.aws/instance-gpu-memory|24576|
+ |karpenter.k8s.aws/instance-gpu-name|a10g|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|7600|
+ |karpenter.k8s.aws/instance-memory|786432|
+ |karpenter.k8s.aws/instance-network-bandwidth|100000|
+ |karpenter.k8s.aws/instance-pods|345|
+ |karpenter.k8s.aws/instance-size|48xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|g5.48xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|191350m|
+ |ephemeral-storage|18Gi|
+ |memory|723199Mi|
+ |nvidia.com/gpu|8|
+ |pods|345|
+ |vpc.amazonaws.com/pod-eni|115|
+## g5g Family
+### `g5g.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|g|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|g5g|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-gpu-count|1|
+ |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|
+ |karpenter.k8s.aws/instance-gpu-memory|16384|
+ |karpenter.k8s.aws/instance-gpu-name|t4g|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|8192|
+ |karpenter.k8s.aws/instance-network-bandwidth|1250|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|g5g.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|6484Mi|
+ |nvidia.com/gpu|1|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|18|
+### `g5g.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|g|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|g5g|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-gpu-count|1|
+ |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|
+ |karpenter.k8s.aws/instance-gpu-memory|16384|
+ |karpenter.k8s.aws/instance-gpu-name|t4g|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|2500|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|g5g.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|14062Mi|
+ |nvidia.com/gpu|1|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|38|
+### `g5g.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|g|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|g5g|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-gpu-count|1|
+ |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|
+ |karpenter.k8s.aws/instance-gpu-memory|16384|
+ |karpenter.k8s.aws/instance-gpu-name|t4g|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|5000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|g5g.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|27281Mi|
+ |nvidia.com/gpu|1|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `g5g.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|g|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|g5g|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-gpu-count|1|
+ |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|
+ |karpenter.k8s.aws/instance-gpu-memory|16384|
+ |karpenter.k8s.aws/instance-gpu-name|t4g|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|65536|
+ |karpenter.k8s.aws/instance-network-bandwidth|12000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|g5g.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|57591Mi|
+ |nvidia.com/gpu|1|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `g5g.16xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|g|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|g5g|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-gpu-count|2|
+ |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|
+ |karpenter.k8s.aws/instance-gpu-memory|16384|
+ |karpenter.k8s.aws/instance-gpu-name|t4g|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|131072|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|16xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|g5g.16xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|112679Mi|
+ |nvidia.com/gpu|2|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `g5g.metal`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|g|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|g5g|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-gpu-count|2|
+ |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|
+ |karpenter.k8s.aws/instance-gpu-memory|16384|
+ |karpenter.k8s.aws/instance-gpu-name|t4g|
+ |karpenter.k8s.aws/instance-hypervisor||
+ |karpenter.k8s.aws/instance-memory|131072|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|metal|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|g5g.metal|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|112679Mi|
+ |nvidia.com/gpu|2|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+## h1 Family
+### `h1.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|h|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|h1|
+ |karpenter.k8s.aws/instance-generation|1|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|2500|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|h1.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|29217Mi|
+ |pods|58|
+### `h1.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|h|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|h1|
+ |karpenter.k8s.aws/instance-generation|1|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|65536|
+ |karpenter.k8s.aws/instance-network-bandwidth|5000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|h1.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|57591Mi|
+ |pods|234|
+### `h1.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|h|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|h1|
+ |karpenter.k8s.aws/instance-generation|1|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|131072|
+ |karpenter.k8s.aws/instance-network-bandwidth|12000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|h1.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|118212Mi|
+ |pods|234|
+### `h1.16xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|h|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|h1|
+ |karpenter.k8s.aws/instance-generation|1|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|262144|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|16xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|h1.16xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|233921Mi|
+ |pods|737|
+## i2 Family
+### `i2.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|i|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|i2|
+ |karpenter.k8s.aws/instance-generation|2|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|31232|
+ |karpenter.k8s.aws/instance-network-bandwidth|700|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|i2.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|27796Mi|
+ |pods|58|
+### `i2.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|i|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|i2|
+ |karpenter.k8s.aws/instance-generation|2|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|62464|
+ |karpenter.k8s.aws/instance-network-bandwidth|1000|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|i2.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|56686Mi|
+ |pods|58|
+### `i2.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|i|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|i2|
+ |karpenter.k8s.aws/instance-generation|2|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|124928|
+ |karpenter.k8s.aws/instance-network-bandwidth|2000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|i2.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|112529Mi|
+ |pods|234|
+### `i2.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|i|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|i2|
+ |karpenter.k8s.aws/instance-generation|2|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|249856|
+ |karpenter.k8s.aws/instance-network-bandwidth|5000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|i2.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|228087Mi|
+ |pods|234|
+## i3 Family
+### `i3.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|i|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|i3|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-local-nvme|475|
+ |karpenter.k8s.aws/instance-memory|15616|
+ |karpenter.k8s.aws/instance-network-bandwidth|750|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|i3.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|13670Mi|
+ |pods|29|
+### `i3.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|i|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|i3|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-local-nvme|950|
+ |karpenter.k8s.aws/instance-memory|31232|
+ |karpenter.k8s.aws/instance-network-bandwidth|1250|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|i3.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|27796Mi|
+ |pods|58|
+### `i3.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|i|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|i3|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-local-nvme|1900|
+ |karpenter.k8s.aws/instance-memory|62464|
+ |karpenter.k8s.aws/instance-network-bandwidth|2500|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|i3.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|56686Mi|
+ |pods|58|
+### `i3.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|i|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|i3|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-local-nvme|3800|
+ |karpenter.k8s.aws/instance-memory|124928|
+ |karpenter.k8s.aws/instance-network-bandwidth|5000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|i3.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|112529Mi|
+ |pods|234|
+### `i3.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|i|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|i3|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-local-nvme|7600|
+ |karpenter.k8s.aws/instance-memory|249856|
+ |karpenter.k8s.aws/instance-network-bandwidth|12000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|i3.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|228087Mi|
+ |pods|234|
+### `i3.16xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|i|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|i3|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-local-nvme|15200|
+ |karpenter.k8s.aws/instance-memory|499712|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|16xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|i3.16xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|453671Mi|
+ |pods|737|
+### `i3.metal`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|i|
+ |karpenter.k8s.aws/instance-cpu|72|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|i3|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-hypervisor||
+ |karpenter.k8s.aws/instance-local-nvme|15200|
+ |karpenter.k8s.aws/instance-memory|524288|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|metal|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|i3.metal|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|71650m|
+ |ephemeral-storage|18Gi|
+ |memory|476404Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|120|
+## i3en Family
+### `i3en.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|i|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|i3en|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|1250|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|2100|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|i3en.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|14381Mi|
+ |pods|29|
+ |vpc.amazonaws.com/pod-eni|5|
+### `i3en.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|i|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|i3en|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|2500|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|4200|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|i3en.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|29217Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|12|
+### `i3en.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|i|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|i3en|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|5000|
+ |karpenter.k8s.aws/instance-memory|65536|
+ |karpenter.k8s.aws/instance-network-bandwidth|8400|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|i3en.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|59527Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|28|
+### `i3en.3xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|i|
+ |karpenter.k8s.aws/instance-cpu|12|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|i3en|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|7500|
+ |karpenter.k8s.aws/instance-memory|98304|
+ |karpenter.k8s.aws/instance-network-bandwidth|12500|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|3xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|i3en.3xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|11800m|
+ |ephemeral-storage|18Gi|
+ |memory|89838Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|38|
+### `i3en.6xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|i|
+ |karpenter.k8s.aws/instance-cpu|24|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|i3en|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|15000|
+ |karpenter.k8s.aws/instance-memory|196608|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|6xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|i3en.6xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|23770m|
+ |ephemeral-storage|18Gi|
+ |memory|178833Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `i3en.12xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|i|
+ |karpenter.k8s.aws/instance-cpu|48|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|i3en|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|30000|
+ |karpenter.k8s.aws/instance-memory|393216|
+ |karpenter.k8s.aws/instance-network-bandwidth|50000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|12xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|i3en.12xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|47710m|
+ |ephemeral-storage|18Gi|
+ |memory|360695Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `i3en.24xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|i|
+ |karpenter.k8s.aws/instance-cpu|96|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|i3en|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|60000|
+ |karpenter.k8s.aws/instance-memory|786432|
+ |karpenter.k8s.aws/instance-network-bandwidth|100000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|24xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|i3en.24xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|95590m|
+ |ephemeral-storage|18Gi|
+ |memory|718887Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `i3en.metal`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|i|
+ |karpenter.k8s.aws/instance-cpu|96|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|i3en|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-hypervisor||
+ |karpenter.k8s.aws/instance-local-nvme|60000|
+ |karpenter.k8s.aws/instance-memory|786432|
+ |karpenter.k8s.aws/instance-network-bandwidth|100000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|metal|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|i3en.metal|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|95590m|
+ |ephemeral-storage|18Gi|
+ |memory|718887Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+## i4i Family
+### `i4i.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|i|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|i4i|
+ |karpenter.k8s.aws/instance-generation|4|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|468|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|781|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|i4i.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|14381Mi|
+ |pods|29|
+### `i4i.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|i|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|i4i|
+ |karpenter.k8s.aws/instance-generation|4|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|937|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|1875|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|i4i.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|29217Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|6|
+### `i4i.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|i|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|i4i|
+ |karpenter.k8s.aws/instance-generation|4|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|1875|
+ |karpenter.k8s.aws/instance-memory|65536|
+ |karpenter.k8s.aws/instance-network-bandwidth|4687|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|i4i.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|59527Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|26|
+### `i4i.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|i|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|i4i|
+ |karpenter.k8s.aws/instance-generation|4|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|3750|
+ |karpenter.k8s.aws/instance-memory|131072|
+ |karpenter.k8s.aws/instance-network-bandwidth|9375|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|i4i.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|118212Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|52|
+### `i4i.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|i|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|i4i|
+ |karpenter.k8s.aws/instance-generation|4|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|7500|
+ |karpenter.k8s.aws/instance-memory|262144|
+ |karpenter.k8s.aws/instance-network-bandwidth|18750|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|i4i.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|239454Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|112|
+### `i4i.16xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|i|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|i4i|
+ |karpenter.k8s.aws/instance-generation|4|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|15000|
+ |karpenter.k8s.aws/instance-memory|524288|
+ |karpenter.k8s.aws/instance-network-bandwidth|37500|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|16xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|i4i.16xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|476404Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|120|
+### `i4i.32xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|i|
+ |karpenter.k8s.aws/instance-cpu|128|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|i4i|
+ |karpenter.k8s.aws/instance-generation|4|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|30000|
+ |karpenter.k8s.aws/instance-memory|1048576|
+ |karpenter.k8s.aws/instance-network-bandwidth|75000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|32xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|i4i.32xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|127510m|
+ |ephemeral-storage|18Gi|
+ |memory|961370Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|120|
+### `i4i.metal`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|i|
+ |karpenter.k8s.aws/instance-cpu|128|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|i4i|
+ |karpenter.k8s.aws/instance-generation|4|
+ |karpenter.k8s.aws/instance-hypervisor||
+ |karpenter.k8s.aws/instance-local-nvme|30000|
+ |karpenter.k8s.aws/instance-memory|1048576|
+ |karpenter.k8s.aws/instance-network-bandwidth|75000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|metal|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|i4i.metal|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|127510m|
+ |ephemeral-storage|18Gi|
+ |memory|961370Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|120|
+## im4gn Family
+### `im4gn.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|im|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|im4gn|
+ |karpenter.k8s.aws/instance-generation|4|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|937|
+ |karpenter.k8s.aws/instance-memory|8192|
+ |karpenter.k8s.aws/instance-network-bandwidth|3125|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|im4gn.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|6803Mi|
+ |pods|29|
+ |vpc.amazonaws.com/pod-eni|9|
+### `im4gn.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|im|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|im4gn|
+ |karpenter.k8s.aws/instance-generation|4|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|1875|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|6250|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|im4gn.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|14062Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|18|
+### `im4gn.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|im|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|im4gn|
+ |karpenter.k8s.aws/instance-generation|4|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|3750|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|12500|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|im4gn.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|29217Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|38|
+### `im4gn.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|im|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|im4gn|
+ |karpenter.k8s.aws/instance-generation|4|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|7500|
+ |karpenter.k8s.aws/instance-memory|65536|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|im4gn.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|57591Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `im4gn.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|im|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|im4gn|
+ |karpenter.k8s.aws/instance-generation|4|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|15000|
+ |karpenter.k8s.aws/instance-memory|131072|
+ |karpenter.k8s.aws/instance-network-bandwidth|50000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|im4gn.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|118212Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `im4gn.16xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|im|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|im4gn|
+ |karpenter.k8s.aws/instance-generation|4|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|30000|
+ |karpenter.k8s.aws/instance-memory|262144|
+ |karpenter.k8s.aws/instance-network-bandwidth|100000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|16xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|im4gn.16xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|233921Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+## inf1 Family
+### `inf1.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|inf|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|inf1|
+ |karpenter.k8s.aws/instance-generation|1|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|8192|
+ |karpenter.k8s.aws/instance-network-bandwidth|5000|
+ |karpenter.k8s.aws/instance-pods|38|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|inf1.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |aws.amazon.com/neuron|1|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|6704Mi|
+ |pods|38|
+ |vpc.amazonaws.com/pod-eni|38|
+### `inf1.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|inf|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|inf1|
+ |karpenter.k8s.aws/instance-generation|1|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|5000|
+ |karpenter.k8s.aws/instance-pods|38|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|inf1.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |aws.amazon.com/neuron|1|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|14282Mi|
+ |pods|38|
+ |vpc.amazonaws.com/pod-eni|38|
+### `inf1.6xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|inf|
+ |karpenter.k8s.aws/instance-cpu|24|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|inf1|
+ |karpenter.k8s.aws/instance-generation|1|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|49152|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|6xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|inf1.6xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |aws.amazon.com/neuron|4|
+ |cpu|23770m|
+ |ephemeral-storage|18Gi|
+ |memory|42436Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `inf1.24xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|inf|
+ |karpenter.k8s.aws/instance-cpu|96|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|inf1|
+ |karpenter.k8s.aws/instance-generation|1|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|196608|
+ |karpenter.k8s.aws/instance-network-bandwidth|100000|
+ |karpenter.k8s.aws/instance-pods|321|
+ |karpenter.k8s.aws/instance-size|24xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|inf1.24xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |aws.amazon.com/neuron|16|
+ |cpu|95590m|
+ |ephemeral-storage|18Gi|
+ |memory|177876Mi|
+ |pods|321|
+ |vpc.amazonaws.com/pod-eni|111|
+## is4gen Family
+### `is4gen.medium`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|is|
+ |karpenter.k8s.aws/instance-cpu|1|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|is4gen|
+ |karpenter.k8s.aws/instance-generation|4|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|937|
+ |karpenter.k8s.aws/instance-memory|6144|
+ |karpenter.k8s.aws/instance-network-bandwidth|1562|
+ |karpenter.k8s.aws/instance-pods|8|
+ |karpenter.k8s.aws/instance-size|medium|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|is4gen.medium|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|840m|
+ |ephemeral-storage|18Gi|
+ |memory|5140Mi|
+ |pods|8|
+ |vpc.amazonaws.com/pod-eni|4|
+### `is4gen.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|is|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|is4gen|
+ |karpenter.k8s.aws/instance-generation|4|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|1875|
+ |karpenter.k8s.aws/instance-memory|12288|
+ |karpenter.k8s.aws/instance-network-bandwidth|3125|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|is4gen.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|10592Mi|
+ |pods|29|
+ |vpc.amazonaws.com/pod-eni|9|
+### `is4gen.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|is|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|is4gen|
+ |karpenter.k8s.aws/instance-generation|4|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|3750|
+ |karpenter.k8s.aws/instance-memory|24576|
+ |karpenter.k8s.aws/instance-network-bandwidth|6250|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|is4gen.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|21639Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|18|
+### `is4gen.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|is|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|is4gen|
+ |karpenter.k8s.aws/instance-generation|4|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|7500|
+ |karpenter.k8s.aws/instance-memory|49152|
+ |karpenter.k8s.aws/instance-network-bandwidth|12500|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|is4gen.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|44372Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|38|
+### `is4gen.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|is|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|is4gen|
+ |karpenter.k8s.aws/instance-generation|4|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|15000|
+ |karpenter.k8s.aws/instance-memory|98304|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|is4gen.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|87902Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `is4gen.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|is|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|is4gen|
+ |karpenter.k8s.aws/instance-generation|4|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|30000|
+ |karpenter.k8s.aws/instance-memory|196608|
+ |karpenter.k8s.aws/instance-network-bandwidth|50000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|is4gen.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|178833Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+## m1 Family
+### `m1.small`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|1|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m1|
+ |karpenter.k8s.aws/instance-generation|1|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|1740|
+ |karpenter.k8s.aws/instance-network-bandwidth|300|
+ |karpenter.k8s.aws/instance-pods|8|
+ |karpenter.k8s.aws/instance-size|small|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m1.small|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|840m|
+ |ephemeral-storage|18Gi|
+ |memory|1066Mi|
+ |pods|8|
+### `m1.medium`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|1|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m1|
+ |karpenter.k8s.aws/instance-generation|1|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|3788|
+ |karpenter.k8s.aws/instance-network-bandwidth|300|
+ |karpenter.k8s.aws/instance-pods|12|
+ |karpenter.k8s.aws/instance-size|medium|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m1.medium|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|840m|
+ |ephemeral-storage|18Gi|
+ |memory|2916Mi|
+ |pods|12|
+### `m1.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m1|
+ |karpenter.k8s.aws/instance-generation|1|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|7680|
+ |karpenter.k8s.aws/instance-network-bandwidth|700|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m1.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|6330Mi|
+ |pods|29|
+### `m1.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m1|
+ |karpenter.k8s.aws/instance-generation|1|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|15360|
+ |karpenter.k8s.aws/instance-network-bandwidth|1000|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m1.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|13115Mi|
+ |pods|58|
+## m2 Family
+### `m2.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m2|
+ |karpenter.k8s.aws/instance-generation|2|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|17510|
+ |karpenter.k8s.aws/instance-network-bandwidth|300|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m2.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|15103Mi|
+ |pods|58|
+### `m2.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m2|
+ |karpenter.k8s.aws/instance-generation|2|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|35020|
+ |karpenter.k8s.aws/instance-network-bandwidth|700|
+ |karpenter.k8s.aws/instance-pods|118|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m2.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|30640Mi|
+ |pods|118|
+### `m2.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m2|
+ |karpenter.k8s.aws/instance-generation|2|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|70041|
+ |karpenter.k8s.aws/instance-network-bandwidth|1000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m2.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|61758Mi|
+ |pods|234|
+## m3 Family
+### `m3.medium`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|1|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m3|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|3840|
+ |karpenter.k8s.aws/instance-network-bandwidth|300|
+ |karpenter.k8s.aws/instance-pods|12|
+ |karpenter.k8s.aws/instance-size|medium|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m3.medium|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|840m|
+ |ephemeral-storage|18Gi|
+ |memory|2965Mi|
+ |pods|12|
+### `m3.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m3|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|7680|
+ |karpenter.k8s.aws/instance-network-bandwidth|700|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m3.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|6330Mi|
+ |pods|29|
+### `m3.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m3|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|15360|
+ |karpenter.k8s.aws/instance-network-bandwidth|1000|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m3.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|13115Mi|
+ |pods|58|
+### `m3.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m3|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|30720|
+ |karpenter.k8s.aws/instance-network-bandwidth|1000|
+ |karpenter.k8s.aws/instance-pods|118|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m3.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|26663Mi|
+ |pods|118|
+## m4 Family
+### `m4.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m4|
+ |karpenter.k8s.aws/instance-generation|4|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|8192|
+ |karpenter.k8s.aws/instance-network-bandwidth|450|
+ |karpenter.k8s.aws/instance-pods|20|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m4.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|6902Mi|
+ |pods|20|
+### `m4.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m4|
+ |karpenter.k8s.aws/instance-generation|4|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|750|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m4.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|14062Mi|
+ |pods|58|
+### `m4.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m4|
+ |karpenter.k8s.aws/instance-generation|4|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|1000|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m4.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|29217Mi|
+ |pods|58|
+### `m4.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m4|
+ |karpenter.k8s.aws/instance-generation|4|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|65536|
+ |karpenter.k8s.aws/instance-network-bandwidth|2000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m4.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|57591Mi|
+ |pods|234|
+### `m4.10xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|40|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m4|
+ |karpenter.k8s.aws/instance-generation|4|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|163840|
+ |karpenter.k8s.aws/instance-network-bandwidth|5000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|10xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m4.10xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|39730m|
+ |ephemeral-storage|18Gi|
+ |memory|148523Mi|
+ |pods|234|
+### `m4.16xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m4|
+ |karpenter.k8s.aws/instance-generation|4|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|262144|
+ |karpenter.k8s.aws/instance-network-bandwidth|5000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|16xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m4.16xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|239454Mi|
+ |pods|234|
+## m5 Family
+### `m5.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m5|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|8192|
+ |karpenter.k8s.aws/instance-network-bandwidth|750|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|6803Mi|
+ |pods|29|
+ |vpc.amazonaws.com/pod-eni|9|
+### `m5.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m5|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|1250|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|14062Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|18|
+### `m5.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m5|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|2500|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|29217Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|38|
+### `m5.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m5|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|65536|
+ |karpenter.k8s.aws/instance-network-bandwidth|5000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|57591Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `m5.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m5|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|131072|
+ |karpenter.k8s.aws/instance-network-bandwidth|10000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|118212Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `m5.12xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|48|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m5|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|196608|
+ |karpenter.k8s.aws/instance-network-bandwidth|12000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|12xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5.12xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|47710m|
+ |ephemeral-storage|18Gi|
+ |memory|178833Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `m5.16xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m5|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|262144|
+ |karpenter.k8s.aws/instance-network-bandwidth|20000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|16xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5.16xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|233921Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `m5.24xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|96|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m5|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|393216|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|24xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5.24xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|95590m|
+ |ephemeral-storage|18Gi|
+ |memory|355162Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `m5.metal`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|96|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m5|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor||
+ |karpenter.k8s.aws/instance-memory|393216|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|metal|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5.metal|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|95590m|
+ |ephemeral-storage|18Gi|
+ |memory|355162Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|120|
+## m5a Family
+### `m5a.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m5a|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|8192|
+ |karpenter.k8s.aws/instance-network-bandwidth|750|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5a.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|6803Mi|
+ |pods|29|
+ |vpc.amazonaws.com/pod-eni|9|
+### `m5a.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m5a|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|1250|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5a.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|14062Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|18|
+### `m5a.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m5a|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|2500|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5a.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|29217Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|38|
+### `m5a.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m5a|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|65536|
+ |karpenter.k8s.aws/instance-network-bandwidth|5000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5a.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|57591Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `m5a.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m5a|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|131072|
+ |karpenter.k8s.aws/instance-network-bandwidth|7500|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5a.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|118212Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `m5a.12xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|48|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m5a|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|196608|
+ |karpenter.k8s.aws/instance-network-bandwidth|10000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|12xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5a.12xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|47710m|
+ |ephemeral-storage|18Gi|
+ |memory|178833Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `m5a.16xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m5a|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|262144|
+ |karpenter.k8s.aws/instance-network-bandwidth|12000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|16xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5a.16xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|233921Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `m5a.24xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|96|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m5a|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|393216|
+ |karpenter.k8s.aws/instance-network-bandwidth|20000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|24xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5a.24xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|95590m|
+ |ephemeral-storage|18Gi|
+ |memory|355162Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+## m5ad Family
+### `m5ad.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m5ad|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|75|
+ |karpenter.k8s.aws/instance-memory|8192|
+ |karpenter.k8s.aws/instance-network-bandwidth|750|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5ad.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|6803Mi|
+ |pods|29|
+ |vpc.amazonaws.com/pod-eni|9|
+### `m5ad.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m5ad|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|150|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|1250|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5ad.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|14062Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|18|
+### `m5ad.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m5ad|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|300|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|2500|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5ad.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|29217Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|38|
+### `m5ad.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m5ad|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|600|
+ |karpenter.k8s.aws/instance-memory|65536|
+ |karpenter.k8s.aws/instance-network-bandwidth|5000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5ad.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|57591Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `m5ad.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m5ad|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|1200|
+ |karpenter.k8s.aws/instance-memory|131072|
+ |karpenter.k8s.aws/instance-network-bandwidth|7500|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5ad.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|118212Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `m5ad.12xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|48|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m5ad|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|1800|
+ |karpenter.k8s.aws/instance-memory|196608|
+ |karpenter.k8s.aws/instance-network-bandwidth|10000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|12xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5ad.12xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|47710m|
+ |ephemeral-storage|18Gi|
+ |memory|178833Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `m5ad.16xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m5ad|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|2400|
+ |karpenter.k8s.aws/instance-memory|262144|
+ |karpenter.k8s.aws/instance-network-bandwidth|12000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|16xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5ad.16xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|233921Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `m5ad.24xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|96|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m5ad|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|3600|
+ |karpenter.k8s.aws/instance-memory|393216|
+ |karpenter.k8s.aws/instance-network-bandwidth|20000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|24xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5ad.24xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|95590m|
+ |ephemeral-storage|18Gi|
+ |memory|355162Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+## m5d Family
+### `m5d.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m5d|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|75|
+ |karpenter.k8s.aws/instance-memory|8192|
+ |karpenter.k8s.aws/instance-network-bandwidth|750|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5d.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|6803Mi|
+ |pods|29|
+ |vpc.amazonaws.com/pod-eni|9|
+### `m5d.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m5d|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|150|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|1250|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5d.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|14062Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|18|
+### `m5d.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m5d|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|300|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|2500|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5d.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|29217Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|38|
+### `m5d.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m5d|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|600|
+ |karpenter.k8s.aws/instance-memory|65536|
+ |karpenter.k8s.aws/instance-network-bandwidth|5000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5d.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|57591Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `m5d.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m5d|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|1200|
+ |karpenter.k8s.aws/instance-memory|131072|
+ |karpenter.k8s.aws/instance-network-bandwidth|10000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5d.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|118212Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `m5d.12xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|48|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m5d|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|1800|
+ |karpenter.k8s.aws/instance-memory|196608|
+ |karpenter.k8s.aws/instance-network-bandwidth|12000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|12xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5d.12xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|47710m|
+ |ephemeral-storage|18Gi|
+ |memory|178833Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `m5d.16xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m5d|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|2400|
+ |karpenter.k8s.aws/instance-memory|262144|
+ |karpenter.k8s.aws/instance-network-bandwidth|20000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|16xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5d.16xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|233921Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `m5d.24xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|96|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m5d|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|3600|
+ |karpenter.k8s.aws/instance-memory|393216|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|24xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5d.24xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|95590m|
+ |ephemeral-storage|18Gi|
+ |memory|355162Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `m5d.metal`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|96|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m5d|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor||
+ |karpenter.k8s.aws/instance-local-nvme|3600|
+ |karpenter.k8s.aws/instance-memory|393216|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|metal|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5d.metal|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|95590m|
+ |ephemeral-storage|18Gi|
+ |memory|355162Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+## m5dn Family
+### `m5dn.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m5dn|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|75|
+ |karpenter.k8s.aws/instance-memory|8192|
+ |karpenter.k8s.aws/instance-network-bandwidth|2100|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5dn.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|6803Mi|
+ |pods|29|
+ |vpc.amazonaws.com/pod-eni|9|
+### `m5dn.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m5dn|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|150|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|4100|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5dn.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|14062Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|18|
+### `m5dn.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m5dn|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|300|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|8125|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5dn.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|29217Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|38|
+### `m5dn.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m5dn|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|600|
+ |karpenter.k8s.aws/instance-memory|65536|
+ |karpenter.k8s.aws/instance-network-bandwidth|16250|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5dn.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|57591Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `m5dn.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m5dn|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|1200|
+ |karpenter.k8s.aws/instance-memory|131072|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5dn.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|118212Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `m5dn.12xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|48|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m5dn|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|1800|
+ |karpenter.k8s.aws/instance-memory|196608|
+ |karpenter.k8s.aws/instance-network-bandwidth|50000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|12xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5dn.12xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|47710m|
+ |ephemeral-storage|18Gi|
+ |memory|178833Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `m5dn.16xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m5dn|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|2400|
+ |karpenter.k8s.aws/instance-memory|262144|
+ |karpenter.k8s.aws/instance-network-bandwidth|75000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|16xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5dn.16xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|233921Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `m5dn.24xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|96|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m5dn|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|3600|
+ |karpenter.k8s.aws/instance-memory|393216|
+ |karpenter.k8s.aws/instance-network-bandwidth|100000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|24xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5dn.24xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|95590m|
+ |ephemeral-storage|18Gi|
+ |memory|355162Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `m5dn.metal`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|96|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m5dn|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor||
+ |karpenter.k8s.aws/instance-local-nvme|3600|
+ |karpenter.k8s.aws/instance-memory|393216|
+ |karpenter.k8s.aws/instance-network-bandwidth|100000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|metal|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5dn.metal|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|95590m|
+ |ephemeral-storage|18Gi|
+ |memory|355162Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+## m5n Family
+### `m5n.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m5n|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|8192|
+ |karpenter.k8s.aws/instance-network-bandwidth|2100|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5n.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|6803Mi|
+ |pods|29|
+ |vpc.amazonaws.com/pod-eni|9|
+### `m5n.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m5n|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|4100|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5n.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|14062Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|18|
+### `m5n.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m5n|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|8125|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5n.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|29217Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|38|
+### `m5n.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m5n|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|65536|
+ |karpenter.k8s.aws/instance-network-bandwidth|16250|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5n.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|57591Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `m5n.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m5n|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|131072|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5n.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|118212Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `m5n.12xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|48|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m5n|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|196608|
+ |karpenter.k8s.aws/instance-network-bandwidth|50000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|12xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5n.12xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|47710m|
+ |ephemeral-storage|18Gi|
+ |memory|178833Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `m5n.16xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m5n|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|262144|
+ |karpenter.k8s.aws/instance-network-bandwidth|75000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|16xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5n.16xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|233921Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `m5n.24xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|96|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m5n|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|393216|
+ |karpenter.k8s.aws/instance-network-bandwidth|100000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|24xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5n.24xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|95590m|
+ |ephemeral-storage|18Gi|
+ |memory|355162Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `m5n.metal`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|96|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m5n|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor||
+ |karpenter.k8s.aws/instance-memory|393216|
+ |karpenter.k8s.aws/instance-network-bandwidth|100000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|metal|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5n.metal|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|95590m|
+ |ephemeral-storage|18Gi|
+ |memory|355162Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+## m5zn Family
+### `m5zn.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m5zn|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|8192|
+ |karpenter.k8s.aws/instance-network-bandwidth|3000|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5zn.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|6803Mi|
+ |pods|29|
+ |vpc.amazonaws.com/pod-eni|13|
+### `m5zn.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m5zn|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|5000|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5zn.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|14062Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|29|
+### `m5zn.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m5zn|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|10000|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5zn.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|29217Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|62|
+### `m5zn.3xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|12|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m5zn|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|49152|
+ |karpenter.k8s.aws/instance-network-bandwidth|15000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|3xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5zn.3xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|11800m|
+ |ephemeral-storage|18Gi|
+ |memory|42436Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|92|
+### `m5zn.6xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|24|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m5zn|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|98304|
+ |karpenter.k8s.aws/instance-network-bandwidth|50000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|6xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5zn.6xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|23770m|
+ |ephemeral-storage|18Gi|
+ |memory|87902Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|114|
+### `m5zn.12xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|48|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m5zn|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|196608|
+ |karpenter.k8s.aws/instance-network-bandwidth|100000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|12xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5zn.12xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|47710m|
+ |ephemeral-storage|18Gi|
+ |memory|173300Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `m5zn.metal`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|48|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m5zn|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor||
+ |karpenter.k8s.aws/instance-memory|196608|
+ |karpenter.k8s.aws/instance-network-bandwidth|100000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|metal|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m5zn.metal|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|47710m|
+ |ephemeral-storage|18Gi|
+ |memory|173300Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+## m6a Family
+### `m6a.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m6a|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|8192|
+ |karpenter.k8s.aws/instance-network-bandwidth|781|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6a.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|6803Mi|
+ |pods|29|
+ |vpc.amazonaws.com/pod-eni|9|
+### `m6a.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m6a|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|1562|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6a.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|14062Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|18|
+### `m6a.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m6a|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|3125|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6a.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|29217Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|38|
+### `m6a.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m6a|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|65536|
+ |karpenter.k8s.aws/instance-network-bandwidth|6250|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6a.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|57591Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `m6a.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m6a|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|131072|
+ |karpenter.k8s.aws/instance-network-bandwidth|12500|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6a.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|118212Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|84|
+### `m6a.12xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|48|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m6a|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|196608|
+ |karpenter.k8s.aws/instance-network-bandwidth|18750|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|12xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6a.12xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|47710m|
+ |ephemeral-storage|18Gi|
+ |memory|178833Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|114|
+### `m6a.16xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m6a|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|262144|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|16xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6a.16xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|233921Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `m6a.24xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|96|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m6a|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|393216|
+ |karpenter.k8s.aws/instance-network-bandwidth|37500|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|24xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6a.24xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|95590m|
+ |ephemeral-storage|18Gi|
+ |memory|355162Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `m6a.32xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|128|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m6a|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|524288|
+ |karpenter.k8s.aws/instance-network-bandwidth|50000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|32xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6a.32xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|127510m|
+ |ephemeral-storage|18Gi|
+ |memory|476404Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `m6a.48xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|192|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m6a|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|786432|
+ |karpenter.k8s.aws/instance-network-bandwidth|50000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|48xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6a.48xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|191350m|
+ |ephemeral-storage|18Gi|
+ |memory|718887Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `m6a.metal`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|192|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m6a|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor||
+ |karpenter.k8s.aws/instance-memory|786432|
+ |karpenter.k8s.aws/instance-network-bandwidth|50000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|metal|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6a.metal|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|191350m|
+ |ephemeral-storage|18Gi|
+ |memory|718887Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+## m6g Family
+### `m6g.medium`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|1|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m6g|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|4096|
+ |karpenter.k8s.aws/instance-network-bandwidth|500|
+ |karpenter.k8s.aws/instance-pods|8|
+ |karpenter.k8s.aws/instance-size|medium|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6g.medium|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|840m|
+ |ephemeral-storage|18Gi|
+ |memory|3245Mi|
+ |pods|8|
+ |vpc.amazonaws.com/pod-eni|4|
+### `m6g.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m6g|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|8192|
+ |karpenter.k8s.aws/instance-network-bandwidth|750|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6g.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|6803Mi|
+ |pods|29|
+ |vpc.amazonaws.com/pod-eni|9|
+### `m6g.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m6g|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|1250|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6g.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|14062Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|18|
+### `m6g.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m6g|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|2500|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6g.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|29217Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|38|
+### `m6g.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m6g|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|65536|
+ |karpenter.k8s.aws/instance-network-bandwidth|5000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6g.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|57591Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `m6g.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m6g|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|131072|
+ |karpenter.k8s.aws/instance-network-bandwidth|12000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6g.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|118212Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `m6g.12xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|48|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m6g|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|196608|
+ |karpenter.k8s.aws/instance-network-bandwidth|20000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|12xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6g.12xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|47710m|
+ |ephemeral-storage|18Gi|
+ |memory|178833Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `m6g.16xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m6g|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|262144|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|16xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6g.16xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|233921Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `m6g.metal`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m6g|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor||
+ |karpenter.k8s.aws/instance-memory|262144|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|metal|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6g.metal|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|233921Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+## m6gd Family
+### `m6gd.medium`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|1|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m6gd|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|59|
+ |karpenter.k8s.aws/instance-memory|4096|
+ |karpenter.k8s.aws/instance-network-bandwidth|500|
+ |karpenter.k8s.aws/instance-pods|8|
+ |karpenter.k8s.aws/instance-size|medium|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6gd.medium|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|840m|
+ |ephemeral-storage|18Gi|
+ |memory|3245Mi|
+ |pods|8|
+ |vpc.amazonaws.com/pod-eni|4|
+### `m6gd.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m6gd|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|118|
+ |karpenter.k8s.aws/instance-memory|8192|
+ |karpenter.k8s.aws/instance-network-bandwidth|750|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6gd.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|6803Mi|
+ |pods|29|
+ |vpc.amazonaws.com/pod-eni|9|
+### `m6gd.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m6gd|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|237|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|1250|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6gd.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|14062Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|18|
+### `m6gd.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m6gd|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|474|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|2500|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6gd.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|29217Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|38|
+### `m6gd.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m6gd|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|950|
+ |karpenter.k8s.aws/instance-memory|65536|
+ |karpenter.k8s.aws/instance-network-bandwidth|5000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6gd.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|57591Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `m6gd.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m6gd|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|1900|
+ |karpenter.k8s.aws/instance-memory|131072|
+ |karpenter.k8s.aws/instance-network-bandwidth|12000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6gd.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|118212Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `m6gd.12xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|48|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m6gd|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|2850|
+ |karpenter.k8s.aws/instance-memory|196608|
+ |karpenter.k8s.aws/instance-network-bandwidth|20000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|12xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6gd.12xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|47710m|
+ |ephemeral-storage|18Gi|
+ |memory|178833Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `m6gd.16xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m6gd|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|3800|
+ |karpenter.k8s.aws/instance-memory|262144|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|16xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6gd.16xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|233921Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `m6gd.metal`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|m6gd|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor||
+ |karpenter.k8s.aws/instance-local-nvme|3800|
+ |karpenter.k8s.aws/instance-memory|262144|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|metal|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6gd.metal|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|233921Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+## m6i Family
+### `m6i.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m6i|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|8192|
+ |karpenter.k8s.aws/instance-network-bandwidth|781|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6i.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|6803Mi|
+ |pods|29|
+ |vpc.amazonaws.com/pod-eni|9|
+### `m6i.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m6i|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|1562|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6i.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|14062Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|18|
+### `m6i.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m6i|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|3125|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6i.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|29217Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|38|
+### `m6i.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m6i|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|65536|
+ |karpenter.k8s.aws/instance-network-bandwidth|6250|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6i.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|57591Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `m6i.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m6i|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|131072|
+ |karpenter.k8s.aws/instance-network-bandwidth|12500|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6i.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|118212Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|84|
+### `m6i.12xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|48|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m6i|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|196608|
+ |karpenter.k8s.aws/instance-network-bandwidth|18750|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|12xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6i.12xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|47710m|
+ |ephemeral-storage|18Gi|
+ |memory|178833Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|114|
+### `m6i.16xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m6i|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|262144|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|16xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6i.16xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|233921Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `m6i.24xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|96|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m6i|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|393216|
+ |karpenter.k8s.aws/instance-network-bandwidth|37500|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|24xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6i.24xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|95590m|
+ |ephemeral-storage|18Gi|
+ |memory|355162Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `m6i.32xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|128|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m6i|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|524288|
+ |karpenter.k8s.aws/instance-network-bandwidth|50000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|32xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6i.32xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|127510m|
+ |ephemeral-storage|18Gi|
+ |memory|476404Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `m6i.metal`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|128|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m6i|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor||
+ |karpenter.k8s.aws/instance-memory|524288|
+ |karpenter.k8s.aws/instance-network-bandwidth|50000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|metal|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6i.metal|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|127510m|
+ |ephemeral-storage|18Gi|
+ |memory|476404Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+## m6id Family
+### `m6id.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m6id|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|118|
+ |karpenter.k8s.aws/instance-memory|8192|
+ |karpenter.k8s.aws/instance-network-bandwidth|781|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6id.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|6803Mi|
+ |pods|29|
+ |vpc.amazonaws.com/pod-eni|9|
+### `m6id.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m6id|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|237|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|1562|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6id.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|14062Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|18|
+### `m6id.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m6id|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|474|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|3125|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6id.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|29217Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|38|
+### `m6id.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m6id|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|950|
+ |karpenter.k8s.aws/instance-memory|65536|
+ |karpenter.k8s.aws/instance-network-bandwidth|6250|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6id.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|57591Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `m6id.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m6id|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|1900|
+ |karpenter.k8s.aws/instance-memory|131072|
+ |karpenter.k8s.aws/instance-network-bandwidth|12500|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6id.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|118212Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|84|
+### `m6id.12xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|48|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m6id|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|2850|
+ |karpenter.k8s.aws/instance-memory|196608|
+ |karpenter.k8s.aws/instance-network-bandwidth|18750|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|12xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6id.12xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|47710m|
+ |ephemeral-storage|18Gi|
+ |memory|178833Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|114|
+### `m6id.16xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m6id|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|3800|
+ |karpenter.k8s.aws/instance-memory|262144|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|16xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6id.16xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|233921Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `m6id.24xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|96|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m6id|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|5700|
+ |karpenter.k8s.aws/instance-memory|393216|
+ |karpenter.k8s.aws/instance-network-bandwidth|37500|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|24xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6id.24xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|95590m|
+ |ephemeral-storage|18Gi|
+ |memory|355162Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `m6id.32xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|128|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m6id|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|7600|
+ |karpenter.k8s.aws/instance-memory|524288|
+ |karpenter.k8s.aws/instance-network-bandwidth|50000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|32xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6id.32xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|127510m|
+ |ephemeral-storage|18Gi|
+ |memory|476404Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `m6id.metal`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|128|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m6id|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor||
+ |karpenter.k8s.aws/instance-local-nvme|7600|
+ |karpenter.k8s.aws/instance-memory|524288|
+ |karpenter.k8s.aws/instance-network-bandwidth|50000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|metal|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6id.metal|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|127510m|
+ |ephemeral-storage|18Gi|
+ |memory|476404Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+## m6idn Family
+### `m6idn.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m6idn|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|118|
+ |karpenter.k8s.aws/instance-memory|8192|
+ |karpenter.k8s.aws/instance-network-bandwidth|3125|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6idn.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|6803Mi|
+ |pods|29|
+ |vpc.amazonaws.com/pod-eni|9|
+### `m6idn.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m6idn|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|237|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|6250|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6idn.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|14062Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|18|
+### `m6idn.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m6idn|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|474|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|12500|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6idn.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|29217Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|38|
+### `m6idn.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m6idn|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|950|
+ |karpenter.k8s.aws/instance-memory|65536|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6idn.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|57591Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `m6idn.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m6idn|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|1900|
+ |karpenter.k8s.aws/instance-memory|131072|
+ |karpenter.k8s.aws/instance-network-bandwidth|50000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6idn.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|118212Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|84|
+### `m6idn.12xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|48|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m6idn|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|2850|
+ |karpenter.k8s.aws/instance-memory|196608|
+ |karpenter.k8s.aws/instance-network-bandwidth|75000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|12xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6idn.12xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|47710m|
+ |ephemeral-storage|18Gi|
+ |memory|178833Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|114|
+### `m6idn.16xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m6idn|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|3800|
+ |karpenter.k8s.aws/instance-memory|262144|
+ |karpenter.k8s.aws/instance-network-bandwidth|100000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|16xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6idn.16xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|233921Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `m6idn.24xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|96|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m6idn|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|5700|
+ |karpenter.k8s.aws/instance-memory|393216|
+ |karpenter.k8s.aws/instance-network-bandwidth|150000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|24xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6idn.24xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|95590m|
+ |ephemeral-storage|18Gi|
+ |memory|355162Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `m6idn.32xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|128|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m6idn|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|7600|
+ |karpenter.k8s.aws/instance-memory|524288|
+ |karpenter.k8s.aws/instance-network-bandwidth|400000|
+ |karpenter.k8s.aws/instance-pods|688|
+ |karpenter.k8s.aws/instance-size|32xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6idn.32xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|127510m|
+ |ephemeral-storage|18Gi|
+ |memory|476943Mi|
+ |pods|688|
+ |vpc.amazonaws.com/pod-eni|108|
+## m6in Family
+### `m6in.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m6in|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|8192|
+ |karpenter.k8s.aws/instance-network-bandwidth|3125|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6in.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|6803Mi|
+ |pods|29|
+ |vpc.amazonaws.com/pod-eni|9|
+### `m6in.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m6in|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|6250|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6in.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|14062Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|18|
+### `m6in.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m6in|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|12500|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6in.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|29217Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|38|
+### `m6in.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m6in|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|65536|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6in.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|57591Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `m6in.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m6in|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|131072|
+ |karpenter.k8s.aws/instance-network-bandwidth|50000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6in.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|118212Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|84|
+### `m6in.12xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|48|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m6in|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|196608|
+ |karpenter.k8s.aws/instance-network-bandwidth|75000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|12xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6in.12xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|47710m|
+ |ephemeral-storage|18Gi|
+ |memory|178833Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|114|
+### `m6in.16xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m6in|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|262144|
+ |karpenter.k8s.aws/instance-network-bandwidth|100000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|16xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6in.16xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|233921Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `m6in.24xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|96|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m6in|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|393216|
+ |karpenter.k8s.aws/instance-network-bandwidth|150000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|24xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6in.24xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|95590m|
+ |ephemeral-storage|18Gi|
+ |memory|355162Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `m6in.32xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|128|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m6in|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|524288|
+ |karpenter.k8s.aws/instance-network-bandwidth|400000|
+ |karpenter.k8s.aws/instance-pods|688|
+ |karpenter.k8s.aws/instance-size|32xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m6in.32xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|127510m|
+ |ephemeral-storage|18Gi|
+ |memory|476943Mi|
+ |pods|688|
+ |vpc.amazonaws.com/pod-eni|108|
+## m7g Family
+### `m7g.medium`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|1|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m7g|
+ |karpenter.k8s.aws/instance-generation|7|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|4096|
+ |karpenter.k8s.aws/instance-network-bandwidth|520|
+ |karpenter.k8s.aws/instance-pods|8|
+ |karpenter.k8s.aws/instance-size|medium|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m7g.medium|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|840m|
+ |ephemeral-storage|18Gi|
+ |memory|3245Mi|
+ |pods|8|
+### `m7g.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m7g|
+ |karpenter.k8s.aws/instance-generation|7|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|8192|
+ |karpenter.k8s.aws/instance-network-bandwidth|937|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m7g.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|6803Mi|
+ |pods|29|
+### `m7g.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m7g|
+ |karpenter.k8s.aws/instance-generation|7|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|1876|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m7g.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|14062Mi|
+ |pods|58|
+### `m7g.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m7g|
+ |karpenter.k8s.aws/instance-generation|7|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|3750|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m7g.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|29217Mi|
+ |pods|58|
+### `m7g.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m7g|
+ |karpenter.k8s.aws/instance-generation|7|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|65536|
+ |karpenter.k8s.aws/instance-network-bandwidth|7500|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m7g.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|57591Mi|
+ |pods|234|
+### `m7g.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m7g|
+ |karpenter.k8s.aws/instance-generation|7|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|131072|
+ |karpenter.k8s.aws/instance-network-bandwidth|15000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m7g.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|118212Mi|
+ |pods|234|
+### `m7g.12xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|48|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m7g|
+ |karpenter.k8s.aws/instance-generation|7|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|196608|
+ |karpenter.k8s.aws/instance-network-bandwidth|22500|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|12xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m7g.12xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|47710m|
+ |ephemeral-storage|18Gi|
+ |memory|178833Mi|
+ |pods|234|
+### `m7g.16xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m7g|
+ |karpenter.k8s.aws/instance-generation|7|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|262144|
+ |karpenter.k8s.aws/instance-network-bandwidth|30000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|16xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m7g.16xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|233921Mi|
+ |pods|737|
+### `m7g.metal`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|m|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|m7g|
+ |karpenter.k8s.aws/instance-generation|7|
+ |karpenter.k8s.aws/instance-hypervisor||
+ |karpenter.k8s.aws/instance-memory|262144|
+ |karpenter.k8s.aws/instance-network-bandwidth|30000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|metal|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|m7g.metal|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|233921Mi|
+ |pods|737|
+## p2 Family
+### `p2.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|p|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|p2|
+ |karpenter.k8s.aws/instance-generation|2|
+ |karpenter.k8s.aws/instance-gpu-count|1|
+ |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|
+ |karpenter.k8s.aws/instance-gpu-memory|12288|
+ |karpenter.k8s.aws/instance-gpu-name|k80|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|62464|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|p2.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|56686Mi|
+ |nvidia.com/gpu|1|
+ |pods|58|
+### `p2.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|p|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|p2|
+ |karpenter.k8s.aws/instance-generation|2|
+ |karpenter.k8s.aws/instance-gpu-count|8|
+ |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|
+ |karpenter.k8s.aws/instance-gpu-memory|12288|
+ |karpenter.k8s.aws/instance-gpu-name|k80|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|499712|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|p2.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|459204Mi|
+ |nvidia.com/gpu|8|
+ |pods|234|
+### `p2.16xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|p|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|p2|
+ |karpenter.k8s.aws/instance-generation|2|
+ |karpenter.k8s.aws/instance-gpu-count|16|
+ |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|
+ |karpenter.k8s.aws/instance-gpu-memory|12288|
+ |karpenter.k8s.aws/instance-gpu-name|k80|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|749568|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|16xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|p2.16xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|690321Mi|
+ |nvidia.com/gpu|16|
+ |pods|234|
+## p3 Family
+### `p3.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|p|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|p3|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-gpu-count|1|
+ |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|
+ |karpenter.k8s.aws/instance-gpu-memory|16384|
+ |karpenter.k8s.aws/instance-gpu-name|v100|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|62464|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|p3.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|56686Mi|
+ |nvidia.com/gpu|1|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|38|
+### `p3.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|p|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|p3|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-gpu-count|4|
+ |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|
+ |karpenter.k8s.aws/instance-gpu-memory|16384|
+ |karpenter.k8s.aws/instance-gpu-name|v100|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|249856|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|p3.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|228087Mi|
+ |nvidia.com/gpu|4|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `p3.16xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|p|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|p3|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-gpu-count|8|
+ |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|
+ |karpenter.k8s.aws/instance-gpu-memory|16384|
+ |karpenter.k8s.aws/instance-gpu-name|v100|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|499712|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|16xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|p3.16xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|459204Mi|
+ |nvidia.com/gpu|8|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|114|
+## p3dn Family
+### `p3dn.24xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|p|
+ |karpenter.k8s.aws/instance-cpu|96|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|p3dn|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-gpu-count|8|
+ |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|
+ |karpenter.k8s.aws/instance-gpu-memory|32768|
+ |karpenter.k8s.aws/instance-gpu-name|v100|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|1800|
+ |karpenter.k8s.aws/instance-memory|786432|
+ |karpenter.k8s.aws/instance-network-bandwidth|100000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|24xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|p3dn.24xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|95590m|
+ |ephemeral-storage|18Gi|
+ |memory|718887Mi|
+ |nvidia.com/gpu|8|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+## p4d Family
+### `p4d.24xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|p|
+ |karpenter.k8s.aws/instance-cpu|96|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|p4d|
+ |karpenter.k8s.aws/instance-generation|4|
+ |karpenter.k8s.aws/instance-gpu-count|8|
+ |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|
+ |karpenter.k8s.aws/instance-gpu-memory|40960|
+ |karpenter.k8s.aws/instance-gpu-name|a100|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|8000|
+ |karpenter.k8s.aws/instance-memory|1179648|
+ |karpenter.k8s.aws/instance-network-bandwidth|400000|
+ |karpenter.k8s.aws/instance-pods|2942|
+ |karpenter.k8s.aws/instance-size|24xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|p4d.24xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|95590m|
+ |ephemeral-storage|18Gi|
+ |memory|1058357Mi|
+ |nvidia.com/gpu|8|
+ |pods|2942|
+ |vpc.amazonaws.com/pod-eni|62|
+## r3 Family
+### `r3.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r3|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|15360|
+ |karpenter.k8s.aws/instance-network-bandwidth|500|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r3.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|13434Mi|
+ |pods|29|
+### `r3.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r3|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|31232|
+ |karpenter.k8s.aws/instance-network-bandwidth|700|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r3.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|27796Mi|
+ |pods|58|
+### `r3.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r3|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|62464|
+ |karpenter.k8s.aws/instance-network-bandwidth|1000|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r3.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|56686Mi|
+ |pods|58|
+### `r3.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r3|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|124928|
+ |karpenter.k8s.aws/instance-network-bandwidth|2000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r3.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|112529Mi|
+ |pods|234|
+### `r3.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r3|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|249856|
+ |karpenter.k8s.aws/instance-network-bandwidth|5000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r3.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|228087Mi|
+ |pods|234|
+## r4 Family
+### `r4.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r4|
+ |karpenter.k8s.aws/instance-generation|4|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|15616|
+ |karpenter.k8s.aws/instance-network-bandwidth|750|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r4.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|13670Mi|
+ |pods|29|
+### `r4.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r4|
+ |karpenter.k8s.aws/instance-generation|4|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|31232|
+ |karpenter.k8s.aws/instance-network-bandwidth|1250|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r4.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|27796Mi|
+ |pods|58|
+### `r4.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r4|
+ |karpenter.k8s.aws/instance-generation|4|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|62464|
+ |karpenter.k8s.aws/instance-network-bandwidth|2500|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r4.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|56686Mi|
+ |pods|58|
+### `r4.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r4|
+ |karpenter.k8s.aws/instance-generation|4|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|124928|
+ |karpenter.k8s.aws/instance-network-bandwidth|5000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r4.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|112529Mi|
+ |pods|234|
+### `r4.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r4|
+ |karpenter.k8s.aws/instance-generation|4|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|249856|
+ |karpenter.k8s.aws/instance-network-bandwidth|12000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r4.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|228087Mi|
+ |pods|234|
+### `r4.16xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r4|
+ |karpenter.k8s.aws/instance-generation|4|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|499712|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|16xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r4.16xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|453671Mi|
+ |pods|737|
+## r5 Family
+### `r5.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r5|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|750|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|14381Mi|
+ |pods|29|
+ |vpc.amazonaws.com/pod-eni|9|
+### `r5.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r5|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|1250|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|29217Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|18|
+### `r5.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r5|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|65536|
+ |karpenter.k8s.aws/instance-network-bandwidth|2500|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|59527Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|38|
+### `r5.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r5|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|131072|
+ |karpenter.k8s.aws/instance-network-bandwidth|5000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|118212Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `r5.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r5|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|262144|
+ |karpenter.k8s.aws/instance-network-bandwidth|10000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|239454Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `r5.12xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|48|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r5|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|393216|
+ |karpenter.k8s.aws/instance-network-bandwidth|12000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|12xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5.12xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|47710m|
+ |ephemeral-storage|18Gi|
+ |memory|360695Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `r5.16xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r5|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|524288|
+ |karpenter.k8s.aws/instance-network-bandwidth|20000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|16xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5.16xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|476404Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `r5.24xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|96|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r5|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|786432|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|24xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5.24xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|95590m|
+ |ephemeral-storage|18Gi|
+ |memory|718887Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `r5.metal`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|96|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r5|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor||
+ |karpenter.k8s.aws/instance-memory|786432|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|metal|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5.metal|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|95590m|
+ |ephemeral-storage|18Gi|
+ |memory|718887Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|120|
+## r5a Family
+### `r5a.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r5a|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|750|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5a.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|14381Mi|
+ |pods|29|
+ |vpc.amazonaws.com/pod-eni|9|
+### `r5a.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r5a|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|1250|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5a.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|29217Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|18|
+### `r5a.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r5a|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|65536|
+ |karpenter.k8s.aws/instance-network-bandwidth|2500|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5a.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|59527Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|38|
+### `r5a.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r5a|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|131072|
+ |karpenter.k8s.aws/instance-network-bandwidth|5000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5a.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|118212Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `r5a.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r5a|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|262144|
+ |karpenter.k8s.aws/instance-network-bandwidth|7500|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5a.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|239454Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `r5a.12xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|48|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r5a|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|393216|
+ |karpenter.k8s.aws/instance-network-bandwidth|10000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|12xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5a.12xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|47710m|
+ |ephemeral-storage|18Gi|
+ |memory|360695Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `r5a.16xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r5a|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|524288|
+ |karpenter.k8s.aws/instance-network-bandwidth|12000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|16xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5a.16xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|476404Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `r5a.24xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|96|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r5a|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|786432|
+ |karpenter.k8s.aws/instance-network-bandwidth|20000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|24xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5a.24xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|95590m|
+ |ephemeral-storage|18Gi|
+ |memory|718887Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+## r5ad Family
+### `r5ad.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r5ad|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|75|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|750|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5ad.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|14381Mi|
+ |pods|29|
+ |vpc.amazonaws.com/pod-eni|9|
+### `r5ad.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r5ad|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|150|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|1250|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5ad.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|29217Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|18|
+### `r5ad.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r5ad|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|300|
+ |karpenter.k8s.aws/instance-memory|65536|
+ |karpenter.k8s.aws/instance-network-bandwidth|2500|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5ad.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|59527Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|38|
+### `r5ad.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r5ad|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|600|
+ |karpenter.k8s.aws/instance-memory|131072|
+ |karpenter.k8s.aws/instance-network-bandwidth|5000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5ad.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|118212Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `r5ad.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r5ad|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|1200|
+ |karpenter.k8s.aws/instance-memory|262144|
+ |karpenter.k8s.aws/instance-network-bandwidth|7500|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5ad.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|239454Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `r5ad.12xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|48|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r5ad|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|1800|
+ |karpenter.k8s.aws/instance-memory|393216|
+ |karpenter.k8s.aws/instance-network-bandwidth|10000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|12xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5ad.12xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|47710m|
+ |ephemeral-storage|18Gi|
+ |memory|360695Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `r5ad.16xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r5ad|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|2400|
+ |karpenter.k8s.aws/instance-memory|524288|
+ |karpenter.k8s.aws/instance-network-bandwidth|12000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|16xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5ad.16xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|476404Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `r5ad.24xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|96|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r5ad|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|3600|
+ |karpenter.k8s.aws/instance-memory|786432|
+ |karpenter.k8s.aws/instance-network-bandwidth|20000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|24xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5ad.24xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|95590m|
+ |ephemeral-storage|18Gi|
+ |memory|718887Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+## r5b Family
+### `r5b.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r5b|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|750|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5b.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|14381Mi|
+ |pods|29|
+ |vpc.amazonaws.com/pod-eni|9|
+### `r5b.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r5b|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|1250|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5b.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|29217Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|18|
+### `r5b.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r5b|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|65536|
+ |karpenter.k8s.aws/instance-network-bandwidth|2500|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5b.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|59527Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|38|
+### `r5b.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r5b|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|131072|
+ |karpenter.k8s.aws/instance-network-bandwidth|5000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5b.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|118212Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `r5b.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r5b|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|262144|
+ |karpenter.k8s.aws/instance-network-bandwidth|10000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5b.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|239454Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `r5b.12xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|48|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r5b|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|393216|
+ |karpenter.k8s.aws/instance-network-bandwidth|12000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|12xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5b.12xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|47710m|
+ |ephemeral-storage|18Gi|
+ |memory|360695Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `r5b.16xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r5b|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|524288|
+ |karpenter.k8s.aws/instance-network-bandwidth|20000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|16xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5b.16xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|476404Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `r5b.24xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|96|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r5b|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|786432|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|24xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5b.24xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|95590m|
+ |ephemeral-storage|18Gi|
+ |memory|718887Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `r5b.metal`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|96|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r5b|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor||
+ |karpenter.k8s.aws/instance-memory|786432|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|metal|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5b.metal|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|95590m|
+ |ephemeral-storage|18Gi|
+ |memory|718887Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+## r5d Family
+### `r5d.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r5d|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|75|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|750|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5d.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|14381Mi|
+ |pods|29|
+ |vpc.amazonaws.com/pod-eni|9|
+### `r5d.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r5d|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|150|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|1250|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5d.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|29217Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|18|
+### `r5d.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r5d|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|300|
+ |karpenter.k8s.aws/instance-memory|65536|
+ |karpenter.k8s.aws/instance-network-bandwidth|2500|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5d.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|59527Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|38|
+### `r5d.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r5d|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|600|
+ |karpenter.k8s.aws/instance-memory|131072|
+ |karpenter.k8s.aws/instance-network-bandwidth|5000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5d.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|118212Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `r5d.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r5d|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|1200|
+ |karpenter.k8s.aws/instance-memory|262144|
+ |karpenter.k8s.aws/instance-network-bandwidth|10000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5d.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|239454Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `r5d.12xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|48|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r5d|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|1800|
+ |karpenter.k8s.aws/instance-memory|393216|
+ |karpenter.k8s.aws/instance-network-bandwidth|12000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|12xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5d.12xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|47710m|
+ |ephemeral-storage|18Gi|
+ |memory|360695Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `r5d.16xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r5d|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|2400|
+ |karpenter.k8s.aws/instance-memory|524288|
+ |karpenter.k8s.aws/instance-network-bandwidth|20000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|16xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5d.16xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|476404Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `r5d.24xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|96|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r5d|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|3600|
+ |karpenter.k8s.aws/instance-memory|786432|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|24xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5d.24xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|95590m|
+ |ephemeral-storage|18Gi|
+ |memory|718887Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `r5d.metal`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|96|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r5d|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor||
+ |karpenter.k8s.aws/instance-local-nvme|3600|
+ |karpenter.k8s.aws/instance-memory|786432|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|metal|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5d.metal|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|95590m|
+ |ephemeral-storage|18Gi|
+ |memory|718887Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+## r5dn Family
+### `r5dn.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r5dn|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|75|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|2100|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5dn.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|14381Mi|
+ |pods|29|
+ |vpc.amazonaws.com/pod-eni|9|
+### `r5dn.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r5dn|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|150|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|4100|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5dn.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|29217Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|18|
+### `r5dn.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r5dn|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|300|
+ |karpenter.k8s.aws/instance-memory|65536|
+ |karpenter.k8s.aws/instance-network-bandwidth|8125|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5dn.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|59527Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|38|
+### `r5dn.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r5dn|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|600|
+ |karpenter.k8s.aws/instance-memory|131072|
+ |karpenter.k8s.aws/instance-network-bandwidth|16250|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5dn.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|118212Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `r5dn.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r5dn|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|1200|
+ |karpenter.k8s.aws/instance-memory|262144|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5dn.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|239454Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `r5dn.12xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|48|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r5dn|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|1800|
+ |karpenter.k8s.aws/instance-memory|393216|
+ |karpenter.k8s.aws/instance-network-bandwidth|50000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|12xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5dn.12xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|47710m|
+ |ephemeral-storage|18Gi|
+ |memory|360695Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `r5dn.16xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r5dn|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|2400|
+ |karpenter.k8s.aws/instance-memory|524288|
+ |karpenter.k8s.aws/instance-network-bandwidth|75000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|16xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5dn.16xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|476404Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `r5dn.24xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|96|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r5dn|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|3600|
+ |karpenter.k8s.aws/instance-memory|786432|
+ |karpenter.k8s.aws/instance-network-bandwidth|100000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|24xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5dn.24xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|95590m|
+ |ephemeral-storage|18Gi|
+ |memory|718887Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `r5dn.metal`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|96|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r5dn|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor||
+ |karpenter.k8s.aws/instance-local-nvme|3600|
+ |karpenter.k8s.aws/instance-memory|786432|
+ |karpenter.k8s.aws/instance-network-bandwidth|100000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|metal|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5dn.metal|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|95590m|
+ |ephemeral-storage|18Gi|
+ |memory|718887Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+## r5n Family
+### `r5n.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r5n|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|2100|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5n.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|14381Mi|
+ |pods|29|
+ |vpc.amazonaws.com/pod-eni|9|
+### `r5n.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r5n|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|4100|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5n.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|29217Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|18|
+### `r5n.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r5n|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|65536|
+ |karpenter.k8s.aws/instance-network-bandwidth|8125|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5n.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|59527Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|38|
+### `r5n.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r5n|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|131072|
+ |karpenter.k8s.aws/instance-network-bandwidth|16250|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5n.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|118212Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `r5n.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r5n|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|262144|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5n.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|239454Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `r5n.12xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|48|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r5n|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|393216|
+ |karpenter.k8s.aws/instance-network-bandwidth|50000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|12xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5n.12xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|47710m|
+ |ephemeral-storage|18Gi|
+ |memory|360695Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `r5n.16xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r5n|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|524288|
+ |karpenter.k8s.aws/instance-network-bandwidth|75000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|16xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5n.16xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|476404Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `r5n.24xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|96|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r5n|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|786432|
+ |karpenter.k8s.aws/instance-network-bandwidth|100000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|24xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5n.24xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|95590m|
+ |ephemeral-storage|18Gi|
+ |memory|718887Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `r5n.metal`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|96|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r5n|
+ |karpenter.k8s.aws/instance-generation|5|
+ |karpenter.k8s.aws/instance-hypervisor||
+ |karpenter.k8s.aws/instance-memory|786432|
+ |karpenter.k8s.aws/instance-network-bandwidth|100000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|metal|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r5n.metal|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|95590m|
+ |ephemeral-storage|18Gi|
+ |memory|718887Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+## r6a Family
+### `r6a.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r6a|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|781|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6a.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|14381Mi|
+ |pods|29|
+ |vpc.amazonaws.com/pod-eni|9|
+### `r6a.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r6a|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|1562|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6a.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|29217Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|18|
+### `r6a.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r6a|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|65536|
+ |karpenter.k8s.aws/instance-network-bandwidth|3125|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6a.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|59527Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|38|
+### `r6a.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r6a|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|131072|
+ |karpenter.k8s.aws/instance-network-bandwidth|6250|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6a.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|118212Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `r6a.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r6a|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|262144|
+ |karpenter.k8s.aws/instance-network-bandwidth|12500|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6a.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|239454Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|84|
+### `r6a.12xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|48|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r6a|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|393216|
+ |karpenter.k8s.aws/instance-network-bandwidth|18750|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|12xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6a.12xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|47710m|
+ |ephemeral-storage|18Gi|
+ |memory|360695Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|114|
+### `r6a.16xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r6a|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|524288|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|16xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6a.16xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|476404Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `r6a.24xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|96|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r6a|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|786432|
+ |karpenter.k8s.aws/instance-network-bandwidth|37500|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|24xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6a.24xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|95590m|
+ |ephemeral-storage|18Gi|
+ |memory|718887Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `r6a.32xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|128|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r6a|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|1048576|
+ |karpenter.k8s.aws/instance-network-bandwidth|50000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|32xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6a.32xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|127510m|
+ |ephemeral-storage|18Gi|
+ |memory|961370Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `r6a.48xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|192|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r6a|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|1572864|
+ |karpenter.k8s.aws/instance-network-bandwidth|50000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|48xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6a.48xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|191350m|
+ |ephemeral-storage|18Gi|
+ |memory|1446337Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `r6a.metal`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|192|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r6a|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor||
+ |karpenter.k8s.aws/instance-memory|1572864|
+ |karpenter.k8s.aws/instance-network-bandwidth|50000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|metal|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6a.metal|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|191350m|
+ |ephemeral-storage|18Gi|
+ |memory|1446337Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+## r6g Family
+### `r6g.medium`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|1|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r6g|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|8192|
+ |karpenter.k8s.aws/instance-network-bandwidth|500|
+ |karpenter.k8s.aws/instance-pods|8|
+ |karpenter.k8s.aws/instance-size|medium|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6g.medium|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|840m|
+ |ephemeral-storage|18Gi|
+ |memory|7034Mi|
+ |pods|8|
+ |vpc.amazonaws.com/pod-eni|4|
+### `r6g.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r6g|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|750|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6g.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|14381Mi|
+ |pods|29|
+ |vpc.amazonaws.com/pod-eni|9|
+### `r6g.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r6g|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|1250|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6g.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|29217Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|18|
+### `r6g.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r6g|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|65536|
+ |karpenter.k8s.aws/instance-network-bandwidth|2500|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6g.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|59527Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|38|
+### `r6g.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r6g|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|131072|
+ |karpenter.k8s.aws/instance-network-bandwidth|5000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6g.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|118212Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `r6g.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r6g|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|262144|
+ |karpenter.k8s.aws/instance-network-bandwidth|12000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6g.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|239454Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `r6g.12xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|48|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r6g|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|393216|
+ |karpenter.k8s.aws/instance-network-bandwidth|20000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|12xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6g.12xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|47710m|
+ |ephemeral-storage|18Gi|
+ |memory|360695Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `r6g.16xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r6g|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|524288|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|16xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6g.16xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|476404Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `r6g.metal`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r6g|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor||
+ |karpenter.k8s.aws/instance-memory|524288|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|metal|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6g.metal|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|476404Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+## r6gd Family
+### `r6gd.medium`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|1|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r6gd|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|59|
+ |karpenter.k8s.aws/instance-memory|8192|
+ |karpenter.k8s.aws/instance-network-bandwidth|500|
+ |karpenter.k8s.aws/instance-pods|8|
+ |karpenter.k8s.aws/instance-size|medium|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6gd.medium|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|840m|
+ |ephemeral-storage|18Gi|
+ |memory|7034Mi|
+ |pods|8|
+ |vpc.amazonaws.com/pod-eni|4|
+### `r6gd.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r6gd|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|118|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|750|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6gd.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|14381Mi|
+ |pods|29|
+ |vpc.amazonaws.com/pod-eni|9|
+### `r6gd.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r6gd|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|237|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|1250|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6gd.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|29217Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|18|
+### `r6gd.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r6gd|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|474|
+ |karpenter.k8s.aws/instance-memory|65536|
+ |karpenter.k8s.aws/instance-network-bandwidth|2500|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6gd.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|59527Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|38|
+### `r6gd.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r6gd|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|950|
+ |karpenter.k8s.aws/instance-memory|131072|
+ |karpenter.k8s.aws/instance-network-bandwidth|5000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6gd.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|118212Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `r6gd.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r6gd|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|1900|
+ |karpenter.k8s.aws/instance-memory|262144|
+ |karpenter.k8s.aws/instance-network-bandwidth|12000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6gd.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|239454Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `r6gd.12xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|48|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r6gd|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|2850|
+ |karpenter.k8s.aws/instance-memory|393216|
+ |karpenter.k8s.aws/instance-network-bandwidth|20000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|12xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6gd.12xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|47710m|
+ |ephemeral-storage|18Gi|
+ |memory|360695Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `r6gd.16xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r6gd|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|3800|
+ |karpenter.k8s.aws/instance-memory|524288|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|16xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6gd.16xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|476404Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `r6gd.metal`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|r6gd|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor||
+ |karpenter.k8s.aws/instance-local-nvme|3800|
+ |karpenter.k8s.aws/instance-memory|524288|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|metal|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6gd.metal|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|476404Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+## r6i Family
+### `r6i.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r6i|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|781|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6i.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|14381Mi|
+ |pods|29|
+ |vpc.amazonaws.com/pod-eni|9|
+### `r6i.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r6i|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|1562|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6i.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|29217Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|18|
+### `r6i.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r6i|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|65536|
+ |karpenter.k8s.aws/instance-network-bandwidth|3125|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6i.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|59527Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|38|
+### `r6i.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r6i|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|131072|
+ |karpenter.k8s.aws/instance-network-bandwidth|6250|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6i.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|118212Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `r6i.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r6i|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|262144|
+ |karpenter.k8s.aws/instance-network-bandwidth|12500|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6i.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|239454Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|84|
+### `r6i.12xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|48|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r6i|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|393216|
+ |karpenter.k8s.aws/instance-network-bandwidth|18750|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|12xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6i.12xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|47710m|
+ |ephemeral-storage|18Gi|
+ |memory|360695Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|114|
+### `r6i.16xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r6i|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|524288|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|16xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6i.16xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|476404Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `r6i.24xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|96|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r6i|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|786432|
+ |karpenter.k8s.aws/instance-network-bandwidth|37500|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|24xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6i.24xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|95590m|
+ |ephemeral-storage|18Gi|
+ |memory|718887Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `r6i.32xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|128|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r6i|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|1048576|
+ |karpenter.k8s.aws/instance-network-bandwidth|50000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|32xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6i.32xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|127510m|
+ |ephemeral-storage|18Gi|
+ |memory|961370Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `r6i.metal`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|128|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r6i|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor||
+ |karpenter.k8s.aws/instance-memory|1048576|
+ |karpenter.k8s.aws/instance-network-bandwidth|50000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|metal|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6i.metal|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|127510m|
+ |ephemeral-storage|18Gi|
+ |memory|961370Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+## r6id Family
+### `r6id.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r6id|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|118|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|781|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6id.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|14381Mi|
+ |pods|29|
+ |vpc.amazonaws.com/pod-eni|9|
+### `r6id.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r6id|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|237|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|1562|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6id.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|29217Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|18|
+### `r6id.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r6id|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|474|
+ |karpenter.k8s.aws/instance-memory|65536|
+ |karpenter.k8s.aws/instance-network-bandwidth|3125|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6id.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|59527Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|38|
+### `r6id.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r6id|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|950|
+ |karpenter.k8s.aws/instance-memory|131072|
+ |karpenter.k8s.aws/instance-network-bandwidth|6250|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6id.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|118212Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `r6id.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r6id|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|1900|
+ |karpenter.k8s.aws/instance-memory|262144|
+ |karpenter.k8s.aws/instance-network-bandwidth|12500|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6id.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|239454Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|84|
+### `r6id.12xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|48|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r6id|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|2850|
+ |karpenter.k8s.aws/instance-memory|393216|
+ |karpenter.k8s.aws/instance-network-bandwidth|18750|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|12xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6id.12xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|47710m|
+ |ephemeral-storage|18Gi|
+ |memory|360695Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|114|
+### `r6id.16xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r6id|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|3800|
+ |karpenter.k8s.aws/instance-memory|524288|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|16xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6id.16xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|476404Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `r6id.24xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|96|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r6id|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|5700|
+ |karpenter.k8s.aws/instance-memory|786432|
+ |karpenter.k8s.aws/instance-network-bandwidth|37500|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|24xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6id.24xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|95590m|
+ |ephemeral-storage|18Gi|
+ |memory|718887Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `r6id.32xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|128|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r6id|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|7600|
+ |karpenter.k8s.aws/instance-memory|1048576|
+ |karpenter.k8s.aws/instance-network-bandwidth|50000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|32xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6id.32xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|127510m|
+ |ephemeral-storage|18Gi|
+ |memory|961370Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `r6id.metal`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|128|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r6id|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor||
+ |karpenter.k8s.aws/instance-local-nvme|7600|
+ |karpenter.k8s.aws/instance-memory|1048576|
+ |karpenter.k8s.aws/instance-network-bandwidth|50000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|metal|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6id.metal|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|127510m|
+ |ephemeral-storage|18Gi|
+ |memory|961370Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+## r6idn Family
+### `r6idn.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r6idn|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|118|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|3125|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6idn.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|14381Mi|
+ |pods|29|
+ |vpc.amazonaws.com/pod-eni|9|
+### `r6idn.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r6idn|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|237|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|6250|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6idn.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|29217Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|18|
+### `r6idn.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r6idn|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|474|
+ |karpenter.k8s.aws/instance-memory|65536|
+ |karpenter.k8s.aws/instance-network-bandwidth|12500|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6idn.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|59527Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|38|
+### `r6idn.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r6idn|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|950|
+ |karpenter.k8s.aws/instance-memory|131072|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6idn.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|118212Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `r6idn.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r6idn|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|1900|
+ |karpenter.k8s.aws/instance-memory|262144|
+ |karpenter.k8s.aws/instance-network-bandwidth|50000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6idn.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|239454Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|84|
+### `r6idn.12xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|48|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r6idn|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|2850|
+ |karpenter.k8s.aws/instance-memory|393216|
+ |karpenter.k8s.aws/instance-network-bandwidth|75000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|12xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6idn.12xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|47710m|
+ |ephemeral-storage|18Gi|
+ |memory|360695Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|114|
+### `r6idn.16xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r6idn|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|3800|
+ |karpenter.k8s.aws/instance-memory|524288|
+ |karpenter.k8s.aws/instance-network-bandwidth|100000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|16xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6idn.16xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|476404Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `r6idn.24xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|96|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r6idn|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|5700|
+ |karpenter.k8s.aws/instance-memory|786432|
+ |karpenter.k8s.aws/instance-network-bandwidth|150000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|24xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6idn.24xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|95590m|
+ |ephemeral-storage|18Gi|
+ |memory|718887Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `r6idn.32xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|128|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r6idn|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|7600|
+ |karpenter.k8s.aws/instance-memory|1048576|
+ |karpenter.k8s.aws/instance-network-bandwidth|400000|
+ |karpenter.k8s.aws/instance-pods|688|
+ |karpenter.k8s.aws/instance-size|32xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6idn.32xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|127510m|
+ |ephemeral-storage|18Gi|
+ |memory|961909Mi|
+ |pods|688|
+ |vpc.amazonaws.com/pod-eni|108|
+## r6in Family
+### `r6in.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r6in|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|3125|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6in.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|14381Mi|
+ |pods|29|
+ |vpc.amazonaws.com/pod-eni|9|
+### `r6in.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r6in|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|6250|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6in.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|29217Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|18|
+### `r6in.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r6in|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|65536|
+ |karpenter.k8s.aws/instance-network-bandwidth|12500|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6in.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|59527Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|38|
+### `r6in.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r6in|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|131072|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6in.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|118212Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `r6in.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r6in|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|262144|
+ |karpenter.k8s.aws/instance-network-bandwidth|50000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6in.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|239454Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|84|
+### `r6in.12xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|48|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r6in|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|393216|
+ |karpenter.k8s.aws/instance-network-bandwidth|75000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|12xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6in.12xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|47710m|
+ |ephemeral-storage|18Gi|
+ |memory|360695Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|114|
+### `r6in.16xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r6in|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|524288|
+ |karpenter.k8s.aws/instance-network-bandwidth|100000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|16xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6in.16xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|476404Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `r6in.24xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|96|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r6in|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|786432|
+ |karpenter.k8s.aws/instance-network-bandwidth|150000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|24xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6in.24xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|95590m|
+ |ephemeral-storage|18Gi|
+ |memory|718887Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `r6in.32xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|128|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r6in|
+ |karpenter.k8s.aws/instance-generation|6|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|1048576|
+ |karpenter.k8s.aws/instance-network-bandwidth|400000|
+ |karpenter.k8s.aws/instance-pods|688|
+ |karpenter.k8s.aws/instance-size|32xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r6in.32xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|127510m|
+ |ephemeral-storage|18Gi|
+ |memory|961909Mi|
+ |pods|688|
+ |vpc.amazonaws.com/pod-eni|108|
+## r7g Family
+### `r7g.medium`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|1|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r7g|
+ |karpenter.k8s.aws/instance-generation|7|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|8192|
+ |karpenter.k8s.aws/instance-network-bandwidth|520|
+ |karpenter.k8s.aws/instance-pods|8|
+ |karpenter.k8s.aws/instance-size|medium|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r7g.medium|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|840m|
+ |ephemeral-storage|18Gi|
+ |memory|7034Mi|
+ |pods|8|
+### `r7g.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r7g|
+ |karpenter.k8s.aws/instance-generation|7|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|937|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r7g.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|14381Mi|
+ |pods|29|
+### `r7g.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r7g|
+ |karpenter.k8s.aws/instance-generation|7|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|1876|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r7g.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|29217Mi|
+ |pods|58|
+### `r7g.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r7g|
+ |karpenter.k8s.aws/instance-generation|7|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|65536|
+ |karpenter.k8s.aws/instance-network-bandwidth|3750|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r7g.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|59527Mi|
+ |pods|58|
+### `r7g.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r7g|
+ |karpenter.k8s.aws/instance-generation|7|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|131072|
+ |karpenter.k8s.aws/instance-network-bandwidth|7500|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r7g.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|118212Mi|
+ |pods|234|
+### `r7g.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r7g|
+ |karpenter.k8s.aws/instance-generation|7|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|262144|
+ |karpenter.k8s.aws/instance-network-bandwidth|15000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r7g.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|239454Mi|
+ |pods|234|
+### `r7g.12xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|48|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r7g|
+ |karpenter.k8s.aws/instance-generation|7|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|393216|
+ |karpenter.k8s.aws/instance-network-bandwidth|22500|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|12xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r7g.12xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|47710m|
+ |ephemeral-storage|18Gi|
+ |memory|360695Mi|
+ |pods|234|
+### `r7g.16xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r7g|
+ |karpenter.k8s.aws/instance-generation|7|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|524288|
+ |karpenter.k8s.aws/instance-network-bandwidth|30000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|16xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r7g.16xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|476404Mi|
+ |pods|737|
+### `r7g.metal`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|r|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|r7g|
+ |karpenter.k8s.aws/instance-generation|7|
+ |karpenter.k8s.aws/instance-hypervisor||
+ |karpenter.k8s.aws/instance-memory|524288|
+ |karpenter.k8s.aws/instance-network-bandwidth|30000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|metal|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|r7g.metal|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|476404Mi|
+ |pods|737|
+## t1 Family
+### `t1.micro`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|t|
+ |karpenter.k8s.aws/instance-cpu|1|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|t1|
+ |karpenter.k8s.aws/instance-generation|1|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|627|
+ |karpenter.k8s.aws/instance-network-bandwidth|70|
+ |karpenter.k8s.aws/instance-pods|4|
+ |karpenter.k8s.aws/instance-size|micro|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|t1.micro|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|840m|
+ |ephemeral-storage|18Gi|
+ |memory|80Mi|
+ |pods|4|
+## t2 Family
+### `t2.nano`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|t|
+ |karpenter.k8s.aws/instance-cpu|1|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|t2|
+ |karpenter.k8s.aws/instance-generation|2|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|512|
+ |karpenter.k8s.aws/instance-network-bandwidth|32|
+ |karpenter.k8s.aws/instance-pods|4|
+ |karpenter.k8s.aws/instance-size|nano|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|t2.nano|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|840m|
+ |ephemeral-storage|18Gi|
+ |memory|-26Mi|
+ |pods|4|
+### `t2.micro`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|t|
+ |karpenter.k8s.aws/instance-cpu|1|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|t2|
+ |karpenter.k8s.aws/instance-generation|2|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|1024|
+ |karpenter.k8s.aws/instance-network-bandwidth|64|
+ |karpenter.k8s.aws/instance-pods|4|
+ |karpenter.k8s.aws/instance-size|micro|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|t2.micro|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|840m|
+ |ephemeral-storage|18Gi|
+ |memory|448Mi|
+ |pods|4|
+### `t2.small`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|t|
+ |karpenter.k8s.aws/instance-cpu|1|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|t2|
+ |karpenter.k8s.aws/instance-generation|2|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|2048|
+ |karpenter.k8s.aws/instance-network-bandwidth|128|
+ |karpenter.k8s.aws/instance-pods|11|
+ |karpenter.k8s.aws/instance-size|small|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|t2.small|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|840m|
+ |ephemeral-storage|18Gi|
+ |memory|1318Mi|
+ |pods|11|
+### `t2.medium`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|t|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|t2|
+ |karpenter.k8s.aws/instance-generation|2|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|4096|
+ |karpenter.k8s.aws/instance-network-bandwidth|256|
+ |karpenter.k8s.aws/instance-pods|17|
+ |karpenter.k8s.aws/instance-size|medium|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|t2.medium|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|3146Mi|
+ |pods|17|
+### `t2.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|t|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|t2|
+ |karpenter.k8s.aws/instance-generation|2|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|8192|
+ |karpenter.k8s.aws/instance-network-bandwidth|512|
+ |karpenter.k8s.aws/instance-pods|35|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|t2.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|6737Mi|
+ |pods|35|
+### `t2.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|t|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|t2|
+ |karpenter.k8s.aws/instance-generation|2|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|750|
+ |karpenter.k8s.aws/instance-pods|44|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|t2.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|14216Mi|
+ |pods|44|
+### `t2.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|t|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|t2|
+ |karpenter.k8s.aws/instance-generation|2|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|1000|
+ |karpenter.k8s.aws/instance-pods|44|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|t2.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|29371Mi|
+ |pods|44|
+## t3 Family
+### `t3.nano`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|t|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|t3|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|512|
+ |karpenter.k8s.aws/instance-network-bandwidth|32|
+ |karpenter.k8s.aws/instance-pods|4|
+ |karpenter.k8s.aws/instance-size|nano|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|t3.nano|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|-26Mi|
+ |pods|4|
+### `t3.micro`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|t|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|t3|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|1024|
+ |karpenter.k8s.aws/instance-network-bandwidth|64|
+ |karpenter.k8s.aws/instance-pods|4|
+ |karpenter.k8s.aws/instance-size|micro|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|t3.micro|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|448Mi|
+ |pods|4|
+### `t3.small`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|t|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|t3|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|2048|
+ |karpenter.k8s.aws/instance-network-bandwidth|128|
+ |karpenter.k8s.aws/instance-pods|11|
+ |karpenter.k8s.aws/instance-size|small|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|t3.small|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|1318Mi|
+ |pods|11|
+### `t3.medium`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|t|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|t3|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|4096|
+ |karpenter.k8s.aws/instance-network-bandwidth|256|
+ |karpenter.k8s.aws/instance-pods|17|
+ |karpenter.k8s.aws/instance-size|medium|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|t3.medium|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|3146Mi|
+ |pods|17|
+### `t3.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|t|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|t3|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|8192|
+ |karpenter.k8s.aws/instance-network-bandwidth|512|
+ |karpenter.k8s.aws/instance-pods|35|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|t3.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|6737Mi|
+ |pods|35|
+### `t3.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|t|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|t3|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|1024|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|t3.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|14062Mi|
+ |pods|58|
+### `t3.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|t|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|t3|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|2048|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|t3.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|29217Mi|
+ |pods|58|
+## t3a Family
+### `t3a.nano`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|t|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|t3a|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|512|
+ |karpenter.k8s.aws/instance-network-bandwidth|32|
+ |karpenter.k8s.aws/instance-pods|4|
+ |karpenter.k8s.aws/instance-size|nano|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|t3a.nano|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|-26Mi|
+ |pods|4|
+### `t3a.micro`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|t|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|t3a|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|1024|
+ |karpenter.k8s.aws/instance-network-bandwidth|64|
+ |karpenter.k8s.aws/instance-pods|4|
+ |karpenter.k8s.aws/instance-size|micro|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|t3a.micro|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|448Mi|
+ |pods|4|
+### `t3a.small`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|t|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|t3a|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|2048|
+ |karpenter.k8s.aws/instance-network-bandwidth|128|
+ |karpenter.k8s.aws/instance-pods|8|
+ |karpenter.k8s.aws/instance-size|small|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|t3a.small|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|1351Mi|
+ |pods|8|
+### `t3a.medium`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|t|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|t3a|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|4096|
+ |karpenter.k8s.aws/instance-network-bandwidth|256|
+ |karpenter.k8s.aws/instance-pods|17|
+ |karpenter.k8s.aws/instance-size|medium|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|t3a.medium|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|3146Mi|
+ |pods|17|
+### `t3a.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|t|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|t3a|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|8192|
+ |karpenter.k8s.aws/instance-network-bandwidth|512|
+ |karpenter.k8s.aws/instance-pods|35|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|t3a.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|6737Mi|
+ |pods|35|
+### `t3a.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|t|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|t3a|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|1024|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|t3a.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|14062Mi|
+ |pods|58|
+### `t3a.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|t|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|t3a|
+ |karpenter.k8s.aws/instance-generation|3|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|2048|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|t3a.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|29217Mi|
+ |pods|58|
+## t4g Family
+### `t4g.nano`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|t|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|t4g|
+ |karpenter.k8s.aws/instance-generation|4|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|512|
+ |karpenter.k8s.aws/instance-network-bandwidth|32|
+ |karpenter.k8s.aws/instance-pods|4|
+ |karpenter.k8s.aws/instance-size|nano|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|t4g.nano|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|-26Mi|
+ |pods|4|
+### `t4g.micro`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|t|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|t4g|
+ |karpenter.k8s.aws/instance-generation|4|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|1024|
+ |karpenter.k8s.aws/instance-network-bandwidth|64|
+ |karpenter.k8s.aws/instance-pods|4|
+ |karpenter.k8s.aws/instance-size|micro|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|t4g.micro|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|448Mi|
+ |pods|4|
+### `t4g.small`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|t|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|t4g|
+ |karpenter.k8s.aws/instance-generation|4|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|2048|
+ |karpenter.k8s.aws/instance-network-bandwidth|128|
+ |karpenter.k8s.aws/instance-pods|11|
+ |karpenter.k8s.aws/instance-size|small|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|t4g.small|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|1318Mi|
+ |pods|11|
+### `t4g.medium`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|t|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|t4g|
+ |karpenter.k8s.aws/instance-generation|4|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|4096|
+ |karpenter.k8s.aws/instance-network-bandwidth|256|
+ |karpenter.k8s.aws/instance-pods|17|
+ |karpenter.k8s.aws/instance-size|medium|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|t4g.medium|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|3146Mi|
+ |pods|17|
+### `t4g.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|t|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|t4g|
+ |karpenter.k8s.aws/instance-generation|4|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|8192|
+ |karpenter.k8s.aws/instance-network-bandwidth|512|
+ |karpenter.k8s.aws/instance-pods|35|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|t4g.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|6737Mi|
+ |pods|35|
+### `t4g.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|t|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|t4g|
+ |karpenter.k8s.aws/instance-generation|4|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|1024|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|t4g.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|14062Mi|
+ |pods|58|
+### `t4g.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|t|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|t4g|
+ |karpenter.k8s.aws/instance-generation|4|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|2048|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|t4g.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|29217Mi|
+ |pods|58|
+## trn1 Family
+### `trn1.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|trn|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|trn1|
+ |karpenter.k8s.aws/instance-generation|1|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|474|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|3125|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|trn1.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|29217Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|17|
+### `trn1.32xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|trn|
+ |karpenter.k8s.aws/instance-cpu|128|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|trn1|
+ |karpenter.k8s.aws/instance-generation|1|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|7600|
+ |karpenter.k8s.aws/instance-memory|524288|
+ |karpenter.k8s.aws/instance-network-bandwidth|800000|
+ |karpenter.k8s.aws/instance-pods|1962|
+ |karpenter.k8s.aws/instance-size|32xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|trn1.32xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|127510m|
+ |ephemeral-storage|18Gi|
+ |memory|462929Mi|
+ |pods|1962|
+ |vpc.amazonaws.com/pod-eni|82|
+## u-12tb1 Family
+### `u-12tb1.112xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|u|
+ |karpenter.k8s.aws/instance-cpu|448|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|u-12tb1|
+ |karpenter.k8s.aws/instance-generation|1|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|12582912|
+ |karpenter.k8s.aws/instance-network-bandwidth|100000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|112xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|u-12tb1.112xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|446710m|
+ |ephemeral-storage|18Gi|
+ |memory|11630631Mi|
+ |pods|737|
+## u-18tb1 Family
+### `u-18tb1.112xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|u|
+ |karpenter.k8s.aws/instance-cpu|448|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|u-18tb1|
+ |karpenter.k8s.aws/instance-generation|1|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|18874368|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|112xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|u-18tb1.112xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|446710m|
+ |ephemeral-storage|18Gi|
+ |memory|17450228Mi|
+ |pods|737|
+## u-24tb1 Family
+### `u-24tb1.112xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|u|
+ |karpenter.k8s.aws/instance-cpu|448|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|u-24tb1|
+ |karpenter.k8s.aws/instance-generation|1|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|25165824|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|112xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|u-24tb1.112xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|446710m|
+ |ephemeral-storage|18Gi|
+ |memory|23269825Mi|
+ |pods|737|
+## u-3tb1 Family
+### `u-3tb1.56xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|u|
+ |karpenter.k8s.aws/instance-cpu|224|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|u-3tb1|
+ |karpenter.k8s.aws/instance-generation|1|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|3145728|
+ |karpenter.k8s.aws/instance-network-bandwidth|50000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|56xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|u-3tb1.56xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|223270m|
+ |ephemeral-storage|18Gi|
+ |memory|2906769Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|6|
+## u-6tb1 Family
+### `u-6tb1.56xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|u|
+ |karpenter.k8s.aws/instance-cpu|224|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|u-6tb1|
+ |karpenter.k8s.aws/instance-generation|1|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|6291456|
+ |karpenter.k8s.aws/instance-network-bandwidth|100000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|56xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|u-6tb1.56xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|223270m|
+ |ephemeral-storage|18Gi|
+ |memory|5811034Mi|
+ |pods|737|
+### `u-6tb1.112xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|u|
+ |karpenter.k8s.aws/instance-cpu|448|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|u-6tb1|
+ |karpenter.k8s.aws/instance-generation|1|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|6291456|
+ |karpenter.k8s.aws/instance-network-bandwidth|100000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|112xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|u-6tb1.112xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|446710m|
+ |ephemeral-storage|18Gi|
+ |memory|5811034Mi|
+ |pods|737|
+## u-9tb1 Family
+### `u-9tb1.112xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|u|
+ |karpenter.k8s.aws/instance-cpu|448|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|u-9tb1|
+ |karpenter.k8s.aws/instance-generation|1|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|9437184|
+ |karpenter.k8s.aws/instance-network-bandwidth|100000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|112xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|u-9tb1.112xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|446710m|
+ |ephemeral-storage|18Gi|
+ |memory|8720833Mi|
+ |pods|737|
+## vt1 Family
+### `vt1.3xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|vt|
+ |karpenter.k8s.aws/instance-cpu|12|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|vt1|
+ |karpenter.k8s.aws/instance-generation|1|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|24576|
+ |karpenter.k8s.aws/instance-network-bandwidth|3125|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|3xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|vt1.3xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|11800m|
+ |ephemeral-storage|18Gi|
+ |memory|21639Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|38|
+### `vt1.6xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|vt|
+ |karpenter.k8s.aws/instance-cpu|24|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|vt1|
+ |karpenter.k8s.aws/instance-generation|1|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|49152|
+ |karpenter.k8s.aws/instance-network-bandwidth|6250|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|6xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|vt1.6xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|23770m|
+ |ephemeral-storage|18Gi|
+ |memory|42436Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `vt1.24xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|vt|
+ |karpenter.k8s.aws/instance-cpu|96|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|vt1|
+ |karpenter.k8s.aws/instance-generation|1|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|196608|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|24xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|vt1.24xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|95590m|
+ |ephemeral-storage|18Gi|
+ |memory|173300Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+## x1 Family
+### `x1.16xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|x|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|x1|
+ |karpenter.k8s.aws/instance-generation|1|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|999424|
+ |karpenter.k8s.aws/instance-network-bandwidth|12000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|16xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|x1.16xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|921438Mi|
+ |pods|234|
+### `x1.32xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|x|
+ |karpenter.k8s.aws/instance-cpu|128|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|x1|
+ |karpenter.k8s.aws/instance-generation|1|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|1998848|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|32xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|x1.32xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|127510m|
+ |ephemeral-storage|18Gi|
+ |memory|1845905Mi|
+ |pods|234|
+## x1e Family
+### `x1e.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|x|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|x1e|
+ |karpenter.k8s.aws/instance-generation|1|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|124928|
+ |karpenter.k8s.aws/instance-network-bandwidth|625|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|x1e.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|114784Mi|
+ |pods|29|
+### `x1e.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|x|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|x1e|
+ |karpenter.k8s.aws/instance-generation|1|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|249856|
+ |karpenter.k8s.aws/instance-network-bandwidth|1250|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|x1e.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|230023Mi|
+ |pods|58|
+### `x1e.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|x|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|x1e|
+ |karpenter.k8s.aws/instance-generation|1|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|499712|
+ |karpenter.k8s.aws/instance-network-bandwidth|2500|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|x1e.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|461140Mi|
+ |pods|58|
+### `x1e.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|x|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|x1e|
+ |karpenter.k8s.aws/instance-generation|1|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|999424|
+ |karpenter.k8s.aws/instance-network-bandwidth|5000|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|x1e.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|923374Mi|
+ |pods|58|
+### `x1e.16xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|x|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|x1e|
+ |karpenter.k8s.aws/instance-generation|1|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|1998848|
+ |karpenter.k8s.aws/instance-network-bandwidth|12000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|16xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|x1e.16xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|1845905Mi|
+ |pods|234|
+### `x1e.32xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|x|
+ |karpenter.k8s.aws/instance-cpu|128|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|x1e|
+ |karpenter.k8s.aws/instance-generation|1|
+ |karpenter.k8s.aws/instance-hypervisor|xen|
+ |karpenter.k8s.aws/instance-memory|3997696|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|32xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|x1e.32xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|127510m|
+ |ephemeral-storage|18Gi|
+ |memory|3694839Mi|
+ |pods|234|
+## x2gd Family
+### `x2gd.medium`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|x|
+ |karpenter.k8s.aws/instance-cpu|1|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|x2gd|
+ |karpenter.k8s.aws/instance-generation|2|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|59|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|500|
+ |karpenter.k8s.aws/instance-pods|8|
+ |karpenter.k8s.aws/instance-size|medium|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|x2gd.medium|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|840m|
+ |ephemeral-storage|18Gi|
+ |memory|14612Mi|
+ |pods|8|
+ |vpc.amazonaws.com/pod-eni|10|
+### `x2gd.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|x|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|x2gd|
+ |karpenter.k8s.aws/instance-generation|2|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|118|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|750|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|x2gd.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|29536Mi|
+ |pods|29|
+ |vpc.amazonaws.com/pod-eni|9|
+### `x2gd.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|x|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|x2gd|
+ |karpenter.k8s.aws/instance-generation|2|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|237|
+ |karpenter.k8s.aws/instance-memory|65536|
+ |karpenter.k8s.aws/instance-network-bandwidth|1250|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|x2gd.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|59527Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|18|
+### `x2gd.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|x|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|x2gd|
+ |karpenter.k8s.aws/instance-generation|2|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|475|
+ |karpenter.k8s.aws/instance-memory|131072|
+ |karpenter.k8s.aws/instance-network-bandwidth|2500|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|x2gd.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|120148Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|38|
+### `x2gd.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|x|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|x2gd|
+ |karpenter.k8s.aws/instance-generation|2|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|950|
+ |karpenter.k8s.aws/instance-memory|262144|
+ |karpenter.k8s.aws/instance-network-bandwidth|5000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|x2gd.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|239454Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `x2gd.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|x|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|x2gd|
+ |karpenter.k8s.aws/instance-generation|2|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|1900|
+ |karpenter.k8s.aws/instance-memory|524288|
+ |karpenter.k8s.aws/instance-network-bandwidth|12000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|x2gd.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|481937Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `x2gd.12xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|x|
+ |karpenter.k8s.aws/instance-cpu|48|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|x2gd|
+ |karpenter.k8s.aws/instance-generation|2|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|2850|
+ |karpenter.k8s.aws/instance-memory|786432|
+ |karpenter.k8s.aws/instance-network-bandwidth|20000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|12xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|x2gd.12xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|47710m|
+ |ephemeral-storage|18Gi|
+ |memory|724420Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `x2gd.16xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|x|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|x2gd|
+ |karpenter.k8s.aws/instance-generation|2|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|3800|
+ |karpenter.k8s.aws/instance-memory|1048576|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|16xlarge|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|x2gd.16xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|961370Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `x2gd.metal`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|x|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|x2gd|
+ |karpenter.k8s.aws/instance-generation|2|
+ |karpenter.k8s.aws/instance-hypervisor||
+ |karpenter.k8s.aws/instance-local-nvme|3800|
+ |karpenter.k8s.aws/instance-memory|1048576|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|metal|
+ |kubernetes.io/arch|arm64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|x2gd.metal|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|961370Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+## x2idn Family
+### `x2idn.16xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|x|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|x2idn|
+ |karpenter.k8s.aws/instance-generation|2|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|1900|
+ |karpenter.k8s.aws/instance-memory|1048576|
+ |karpenter.k8s.aws/instance-network-bandwidth|50000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|16xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|x2idn.16xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|961370Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `x2idn.24xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|x|
+ |karpenter.k8s.aws/instance-cpu|96|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|x2idn|
+ |karpenter.k8s.aws/instance-generation|2|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|2850|
+ |karpenter.k8s.aws/instance-memory|1572864|
+ |karpenter.k8s.aws/instance-network-bandwidth|75000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|24xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|x2idn.24xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|95590m|
+ |ephemeral-storage|18Gi|
+ |memory|1446337Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `x2idn.32xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|x|
+ |karpenter.k8s.aws/instance-cpu|128|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|x2idn|
+ |karpenter.k8s.aws/instance-generation|2|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|3800|
+ |karpenter.k8s.aws/instance-memory|2097152|
+ |karpenter.k8s.aws/instance-network-bandwidth|100000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|32xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|x2idn.32xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|127510m|
+ |ephemeral-storage|18Gi|
+ |memory|1931303Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `x2idn.metal`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|x|
+ |karpenter.k8s.aws/instance-cpu|128|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|x2idn|
+ |karpenter.k8s.aws/instance-generation|2|
+ |karpenter.k8s.aws/instance-hypervisor||
+ |karpenter.k8s.aws/instance-local-nvme|3800|
+ |karpenter.k8s.aws/instance-memory|2097152|
+ |karpenter.k8s.aws/instance-network-bandwidth|100000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|metal|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|x2idn.metal|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|127510m|
+ |ephemeral-storage|18Gi|
+ |memory|1931303Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+## x2iedn Family
+### `x2iedn.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|x|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|x2iedn|
+ |karpenter.k8s.aws/instance-generation|2|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|118|
+ |karpenter.k8s.aws/instance-memory|131072|
+ |karpenter.k8s.aws/instance-network-bandwidth|1875|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|x2iedn.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|120148Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|11|
+### `x2iedn.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|x|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|x2iedn|
+ |karpenter.k8s.aws/instance-generation|2|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|237|
+ |karpenter.k8s.aws/instance-memory|262144|
+ |karpenter.k8s.aws/instance-network-bandwidth|5000|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|x2iedn.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|241390Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|27|
+### `x2iedn.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|x|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|x2iedn|
+ |karpenter.k8s.aws/instance-generation|2|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|475|
+ |karpenter.k8s.aws/instance-memory|524288|
+ |karpenter.k8s.aws/instance-network-bandwidth|12500|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|x2iedn.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|481937Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `x2iedn.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|x|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|x2iedn|
+ |karpenter.k8s.aws/instance-generation|2|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|950|
+ |karpenter.k8s.aws/instance-memory|1048576|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|x2iedn.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|966903Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|114|
+### `x2iedn.16xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|x|
+ |karpenter.k8s.aws/instance-cpu|64|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|x2iedn|
+ |karpenter.k8s.aws/instance-generation|2|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|1900|
+ |karpenter.k8s.aws/instance-memory|2097152|
+ |karpenter.k8s.aws/instance-network-bandwidth|50000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|16xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|x2iedn.16xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|63670m|
+ |ephemeral-storage|18Gi|
+ |memory|1931303Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `x2iedn.24xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|x|
+ |karpenter.k8s.aws/instance-cpu|96|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|x2iedn|
+ |karpenter.k8s.aws/instance-generation|2|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|2850|
+ |karpenter.k8s.aws/instance-memory|3145728|
+ |karpenter.k8s.aws/instance-network-bandwidth|75000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|24xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|x2iedn.24xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|95590m|
+ |ephemeral-storage|18Gi|
+ |memory|2901236Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `x2iedn.32xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|x|
+ |karpenter.k8s.aws/instance-cpu|128|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|x2iedn|
+ |karpenter.k8s.aws/instance-generation|2|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|3800|
+ |karpenter.k8s.aws/instance-memory|4194304|
+ |karpenter.k8s.aws/instance-network-bandwidth|100000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|32xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|x2iedn.32xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|127510m|
+ |ephemeral-storage|18Gi|
+ |memory|3871169Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `x2iedn.metal`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|x|
+ |karpenter.k8s.aws/instance-cpu|128|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|x2iedn|
+ |karpenter.k8s.aws/instance-generation|2|
+ |karpenter.k8s.aws/instance-hypervisor||
+ |karpenter.k8s.aws/instance-local-nvme|3800|
+ |karpenter.k8s.aws/instance-memory|4194304|
+ |karpenter.k8s.aws/instance-network-bandwidth|100000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|metal|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|x2iedn.metal|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|127510m|
+ |ephemeral-storage|18Gi|
+ |memory|3871169Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+## x2iezn Family
+### `x2iezn.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|x|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|x2iezn|
+ |karpenter.k8s.aws/instance-generation|2|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|262144|
+ |karpenter.k8s.aws/instance-network-bandwidth|12500|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|x2iezn.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|241390Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|62|
+### `x2iezn.4xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|x|
+ |karpenter.k8s.aws/instance-cpu|16|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|x2iezn|
+ |karpenter.k8s.aws/instance-generation|2|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|524288|
+ |karpenter.k8s.aws/instance-network-bandwidth|15000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|4xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|x2iezn.4xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|15790m|
+ |ephemeral-storage|18Gi|
+ |memory|481937Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|114|
+### `x2iezn.6xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|x|
+ |karpenter.k8s.aws/instance-cpu|24|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|x2iezn|
+ |karpenter.k8s.aws/instance-generation|2|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|786432|
+ |karpenter.k8s.aws/instance-network-bandwidth|50000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|6xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|x2iezn.6xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|23770m|
+ |ephemeral-storage|18Gi|
+ |memory|724420Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|114|
+### `x2iezn.8xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|x|
+ |karpenter.k8s.aws/instance-cpu|32|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|x2iezn|
+ |karpenter.k8s.aws/instance-generation|2|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|1048576|
+ |karpenter.k8s.aws/instance-network-bandwidth|75000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|8xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|x2iezn.8xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|31750m|
+ |ephemeral-storage|18Gi|
+ |memory|966903Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|114|
+### `x2iezn.12xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|x|
+ |karpenter.k8s.aws/instance-cpu|48|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|x2iezn|
+ |karpenter.k8s.aws/instance-generation|2|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-memory|1572864|
+ |karpenter.k8s.aws/instance-network-bandwidth|100000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|12xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|x2iezn.12xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|47710m|
+ |ephemeral-storage|18Gi|
+ |memory|1446337Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `x2iezn.metal`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|x|
+ |karpenter.k8s.aws/instance-cpu|48|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|
+ |karpenter.k8s.aws/instance-family|x2iezn|
+ |karpenter.k8s.aws/instance-generation|2|
+ |karpenter.k8s.aws/instance-hypervisor||
+ |karpenter.k8s.aws/instance-memory|1572864|
+ |karpenter.k8s.aws/instance-network-bandwidth|100000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|metal|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|x2iezn.metal|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|47710m|
+ |ephemeral-storage|18Gi|
+ |memory|1446337Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+## z1d Family
+### `z1d.large`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|z|
+ |karpenter.k8s.aws/instance-cpu|2|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|z1d|
+ |karpenter.k8s.aws/instance-generation|1|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|75|
+ |karpenter.k8s.aws/instance-memory|16384|
+ |karpenter.k8s.aws/instance-network-bandwidth|750|
+ |karpenter.k8s.aws/instance-pods|29|
+ |karpenter.k8s.aws/instance-size|large|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|z1d.large|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|1830m|
+ |ephemeral-storage|18Gi|
+ |memory|14381Mi|
+ |pods|29|
+ |vpc.amazonaws.com/pod-eni|13|
+### `z1d.xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|z|
+ |karpenter.k8s.aws/instance-cpu|4|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|z1d|
+ |karpenter.k8s.aws/instance-generation|1|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|150|
+ |karpenter.k8s.aws/instance-memory|32768|
+ |karpenter.k8s.aws/instance-network-bandwidth|1250|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|z1d.xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|3820m|
+ |ephemeral-storage|18Gi|
+ |memory|29217Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|28|
+### `z1d.2xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|z|
+ |karpenter.k8s.aws/instance-cpu|8|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|z1d|
+ |karpenter.k8s.aws/instance-generation|1|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|300|
+ |karpenter.k8s.aws/instance-memory|65536|
+ |karpenter.k8s.aws/instance-network-bandwidth|2500|
+ |karpenter.k8s.aws/instance-pods|58|
+ |karpenter.k8s.aws/instance-size|2xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|z1d.2xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|7810m|
+ |ephemeral-storage|18Gi|
+ |memory|59527Mi|
+ |pods|58|
+ |vpc.amazonaws.com/pod-eni|58|
+### `z1d.3xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|z|
+ |karpenter.k8s.aws/instance-cpu|12|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|z1d|
+ |karpenter.k8s.aws/instance-generation|1|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|450|
+ |karpenter.k8s.aws/instance-memory|98304|
+ |karpenter.k8s.aws/instance-network-bandwidth|5000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|3xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|z1d.3xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|11800m|
+ |ephemeral-storage|18Gi|
+ |memory|87902Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `z1d.6xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|z|
+ |karpenter.k8s.aws/instance-cpu|24|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|z1d|
+ |karpenter.k8s.aws/instance-generation|1|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|900|
+ |karpenter.k8s.aws/instance-memory|196608|
+ |karpenter.k8s.aws/instance-network-bandwidth|12000|
+ |karpenter.k8s.aws/instance-pods|234|
+ |karpenter.k8s.aws/instance-size|6xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|z1d.6xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|23770m|
+ |ephemeral-storage|18Gi|
+ |memory|178833Mi|
+ |pods|234|
+ |vpc.amazonaws.com/pod-eni|54|
+### `z1d.12xlarge`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|z|
+ |karpenter.k8s.aws/instance-cpu|48|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|z1d|
+ |karpenter.k8s.aws/instance-generation|1|
+ |karpenter.k8s.aws/instance-hypervisor|nitro|
+ |karpenter.k8s.aws/instance-local-nvme|1800|
+ |karpenter.k8s.aws/instance-memory|393216|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|12xlarge|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|z1d.12xlarge|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|47710m|
+ |ephemeral-storage|18Gi|
+ |memory|355162Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
+### `z1d.metal`
+#### Labels
+ | Label | Value |
+ |--|--|
+ |karpenter.k8s.aws/instance-category|z|
+ |karpenter.k8s.aws/instance-cpu|48|
+ |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|
+ |karpenter.k8s.aws/instance-family|z1d|
+ |karpenter.k8s.aws/instance-generation|1|
+ |karpenter.k8s.aws/instance-hypervisor||
+ |karpenter.k8s.aws/instance-local-nvme|1800|
+ |karpenter.k8s.aws/instance-memory|393216|
+ |karpenter.k8s.aws/instance-network-bandwidth|25000|
+ |karpenter.k8s.aws/instance-pods|737|
+ |karpenter.k8s.aws/instance-size|metal|
+ |kubernetes.io/arch|amd64|
+ |kubernetes.io/os|linux|
+ |node.kubernetes.io/instance-type|z1d.metal|
+#### Resources
+ | Resource | Quantity |
+ |--|--|
+ |cpu|47710m|
+ |ephemeral-storage|18Gi|
+ |memory|355162Mi|
+ |pods|737|
+ |vpc.amazonaws.com/pod-eni|107|
diff --git a/website/content/en/v0.26.1/concepts/metrics.md b/website/content/en/v0.26.1/concepts/metrics.md
new file mode 100644
index 000000000000..322ad75395b2
--- /dev/null
+++ b/website/content/en/v0.26.1/concepts/metrics.md
@@ -0,0 +1,93 @@
+---
+title: "Metrics"
+linkTitle: "Metrics"
+weight: 7
+
+description: >
+ Inspect Karpenter Metrics
+---
+
+Karpenter makes several metrics available in Prometheus format to allow monitoring cluster provisioning status. These metrics are available by default at `karpenter.karpenter.svc.cluster.local:8080/metrics` configurable via the `METRICS_PORT` environment variable documented [here](../settings)
+## Deprovisioning Metrics
+
+### `karpenter_deprovisioning_actions_performed`
+Number of deprovisioning actions performed. Labeled by action.
+
+### `karpenter_deprovisioning_evaluation_duration_seconds`
+Duration of the deprovisioning evaluation process in seconds.
+
+### `karpenter_deprovisioning_replacement_node_initialized_seconds`
+Amount of time required for a replacement node to become initialized.
+
+## Interruption Metrics
+
+### `karpenter_interruption_actions_performed`
+Number of notification actions performed. Labeled by action
+
+### `karpenter_interruption_deleted_messages`
+Count of messages deleted from the SQS queue.
+
+### `karpenter_interruption_message_latency_time_seconds`
+Length of time between message creation in queue and an action taken on the message by the controller.
+
+### `karpenter_interruption_received_messages`
+Count of messages received from the SQS queue. Broken down by message type and whether the message was actionable.
+
+## Provisioner Metrics
+
+### `karpenter_provisioner_limit`
+The Provisioner Limits are the limits specified on the provisioner that restrict the quantity of resources provisioned. Labeled by provisioner name and resource type.
+
+### `karpenter_provisioner_usage`
+The Provisioner Usage is the amount of resources that have been provisioned by a particular provisioner. Labeled by provisioner name and resource type.
+
+### `karpenter_provisioner_usage_pct`
+The Provisioner Usage Percentage is the percentage of each resource used based on the resources provisioned and the limits that have been configured in the range [0,100]. Labeled by provisioner name and resource type.
+
+## Nodes Metrics
+
+### `karpenter_nodes_allocatable`
+Node allocatable are the resources allocatable by nodes.
+
+### `karpenter_nodes_created`
+Number of nodes created in total by Karpenter. Labeled by reason the node was created and the owning provisioner.
+
+### `karpenter_nodes_system_overhead`
+Node system daemon overhead are the resources reserved for system overhead, the difference between the node's capacity and allocatable values are reported by the status.
+
+### `karpenter_nodes_terminated`
+Number of nodes terminated in total by Karpenter. Labeled by reason the node was terminated and the owning provisioner.
+
+### `karpenter_nodes_termination_time_seconds`
+The time taken between a node's deletion request and the removal of its finalizer
+
+### `karpenter_nodes_total_daemon_limits`
+Node total daemon limits are the resources specified by DaemonSet pod limits.
+
+### `karpenter_nodes_total_daemon_requests`
+Node total daemon requests are the resource requested by DaemonSet pods bound to nodes.
+
+### `karpenter_nodes_total_pod_limits`
+Node total pod limits are the resources specified by non-DaemonSet pod limits.
+
+### `karpenter_nodes_total_pod_requests`
+Node total pod requests are the resources requested by non-DaemonSet pods bound to nodes.
+
+## Pods Metrics
+
+### `karpenter_pods_startup_time_seconds`
+The time from pod creation until the pod is running.
+
+### `karpenter_pods_state`
+Pod state is the current state of pods. This metric can be used several ways as it is labeled by the pod name, namespace, owner, node, provisioner name, zone, architecture, capacity type, instance type and pod phase.
+
+## Cloudprovider Metrics
+
+### `karpenter_cloudprovider_duration_seconds`
+Duration of cloud provider method calls. Labeled by the controller, method name and provider.
+
+## Allocation Controller Metrics
+
+### `karpenter_allocation_controller_scheduling_duration_seconds`
+Duration of scheduling process in seconds. Broken down by provisioner and error.
+
diff --git a/website/content/en/v0.26.1/concepts/node-templates.md b/website/content/en/v0.26.1/concepts/node-templates.md
new file mode 100644
index 000000000000..da76742ccd35
--- /dev/null
+++ b/website/content/en/v0.26.1/concepts/node-templates.md
@@ -0,0 +1,512 @@
+---
+title: "Node Templates"
+linkTitle: "Node Templates"
+weight: 2
+description: >
+ Configure AWS specific settings
+---
+
+Node Templates enable configuration of AWS specific settings.
+Each provisioner must reference an AWSNodeTemplate using `spec.providerRef`.
+Multiple provisioners may point to the same AWSNodeTemplate.
+
+```yaml
+apiVersion: karpenter.sh/v1alpha5
+kind: Provisioner
+metadata:
+ name: default
+spec:
+ providerRef:
+ name: default
+---
+apiVersion: karpenter.k8s.aws/v1alpha1
+kind: AWSNodeTemplate
+metadata:
+ name: default
+spec:
+ subnetSelector: { ... } # required, discovers tagged subnets to attach to instances
+ securityGroupSelector: { ... } # required, discovers tagged security groups to attach to instances
+ instanceProfile: "..." # optional, overrides the node's identity from global settings
+ amiFamily: "..." # optional, resolves a default ami and userdata
+ amiSelector: { ... } # optional, discovers tagged amis to override the amiFamily's default
+ userData: "..." # optional, overrides autogenerated userdata with a merge semantic
+ tags: { ... } # optional, propagates tags to underlying EC2 resources
+ metadataOptions: { ... } # optional, configures IMDS for the instance
+ blockDeviceMappings: [ ... ] # optional, configures storage devices for the instance
+ detailedMonitoring: "..." # optional, configures detailed monitoring for the instance
+status:
+ subnets: { ... } # resolved subnets
+ securityGroups: { ... } # resolved security groups
+```
+Refer to the [Provisioner docs]({{][}}) for settings applicable to all providers.
+See below for other AWS provider-specific parameters.
+
+## spec.subnetSelector
+
+The `AWSNodeTemplate` discovers subnets using [AWS tags](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html).
+Subnets may be specified by any AWS tag, including `Name`. Selecting tag values using wildcards (`*`) is supported.
+Subnet IDs may be specified by using the key `aws-ids` and then passing the IDs as a comma-separated string value.
+When launching nodes, a subnet is automatically chosen that matches the desired zone.
+If multiple subnets exist for a zone, the one with the most available IP addresses will be used.
+
+**Examples**
+
+Select all with a specified tag key:
+```yaml
+spec:
+ subnetSelector:
+ karpenter.sh/discovery/MyClusterName: '*'
+```
+
+Select by name and tag (all criteria must match)::
+```yaml
+spec:
+ subnetSelector:
+ Name: my-subnet
+ MyTag: '' # matches all resources with the tag
+```
+
+Select using comma separated tag values:
+```yaml
+spec:
+ subnetSelector:
+ Name: "my-subnet-1,my-subnet-2"
+```
+
+Select using wildcards:
+```yaml
+spec:
+ subnetSelector:
+ Name: "*Public*"
+
+```
+
+Select by ID:
+```yaml
+spec:
+ subnetSelector:
+ aws-ids: "subnet-09fa4a0a8f233a921,subnet-0471ca205b8a129ae"
+```
+
+## spec.securityGroupSelector
+
+The security group of an instance is comparable to a set of firewall rules.
+EKS creates at least two security groups by default, [review the documentation](https://docs.aws.amazon.com/eks/latest/userguide/sec-group-reqs.html) for more info.
+Security groups may be specified by any AWS tag, including "Name". Selecting tags using wildcards (`*`) is supported.
+
+{{% alert title="Note" color="primary" %}}
+When launching nodes, Karpenter uses all of the security groups that match the selector. If multiple security groups with the tag `karpenter.sh/discovery/MyClusterName` match the selector, this may result in failures using the AWS Load Balancer controller. The Load Balancer controller only supports a single security group having that tag key. See this [issue](https://github.com/kubernetes-sigs/aws-load-balancer-controller/issues/2367) for more details.
+{{% /alert %}}
+
+To verify if this restriction affects you, run the following commands.
+```bash
+CLUSTER_VPC_ID="$(aws eks describe-cluster --name $CLUSTER_NAME --query cluster.resourcesVpcConfig.vpcId --output text)"
+
+aws ec2 describe-security-groups --filters Name=vpc-id,Values=$CLUSTER_VPC_ID Name=tag-key,Values=karpenter.sh/discovery/$CLUSTER_NAME --query 'SecurityGroups[].[GroupName]' --output text
+```
+
+If multiple securityGroups are printed, you will need a more specific securityGroupSelector.
+
+**Examples**
+
+Select all with a specified tag key:
+```yaml
+spec:
+ securityGroupSelector:
+ karpenter.sh/discovery/MyClusterName: '*'
+```
+
+Select by name and tag (all criteria must match):
+```yaml
+spec:
+ securityGroupSelector:
+ Name: my-security-group
+ MyTag: '' # matches all resources with the tag
+```
+
+Select by comma-separated tag values:
+```yaml
+spec:
+ securityGroupSelector:
+ Name: "my-security-group-1,my-security-group-2"
+```
+
+Select by name using a wildcard:
+```yaml
+spec:
+ securityGroupSelector:
+ Name: "*Public*"
+```
+
+Select by ID:
+```yaml
+spec:
+ securityGroupSelector:
+ aws-ids: "sg-063d7acfb4b06c82c,sg-06e0cf9c198874591"
+```
+
+## spec.instanceProfile
+
+An `InstanceProfile` is a way to pass a single IAM role to EC2 instance launched the provisioner.
+A default profile is configured in global settings, but may be overridden here.
+The `AWSNodeTemplate` will not create an `InstanceProfile` automatically.
+The `InstanceProfile` must refer to a `Role` that has permission to connect to the cluster.
+```yaml
+spec:
+ instanceProfile: MyInstanceProfile
+```
+
+## spec.amiFamily
+
+The AMI used when provisioning nodes can be controlled by the `amiFamily` field. Based on the value set for `amiFamily`, Karpenter will automatically query for the appropriate [EKS optimized AMI](https://docs.aws.amazon.com/eks/latest/userguide/eks-optimized-amis.html) via AWS Systems Manager (SSM). When an `amiFamily` of `Custom` is chosen, then an `amiSelector` must be specified that informs Karpenter on which custom AMIs are to be used.
+
+Currently, Karpenter supports `amiFamily` values `AL2`, `Bottlerocket`, `Ubuntu` and `Custom`. GPUs are only supported with `AL2` and `Bottlerocket`.
+
+```yaml
+spec:
+ amiFamily: Bottlerocket
+```
+
+## spec.amiSelector
+
+AMISelector is used to configure custom AMIs for Karpenter to use, where the AMIs are discovered through `aws::` prefixed filters (`aws::ids`, `aws::owners` and `aws::name`) and [AWS tags](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html). This field is optional, and Karpenter will use the latest EKS-optimized AMIs if an amiSelector is not specified.
+
+To select an AMI by name, use `aws::name`. EC2 AMIs may be specified by any AWS tag, including `Name`. Selecting tag values using wildcards (`*`) is supported.
+
+EC2 AMI IDs may be specified by using the key `aws::ids` (`aws-ids` is also supported) and then passing the IDs as a comma-separated string value.
+
+To ensure that AMIs are owned by the expected owner, use `aws::owners` which expects a comma-separated list of AWS account owners - you can use a combination of account aliases (e.g. `self` `amazon`, `your-aws-account-name`) and account IDs. If this is not set, *and* `aws::ids`/`aws-ids` are not set, it defaults to `self,amazon`.
+
+{{% alert title="Note" color="primary" %}}
+If you use only `aws::owners`, Karpenter will discover all images that are owned by those specified, selecting the most recently created ones to be used. If you specify `aws::owners`, but nothing else, there is a larger chance that Karpenter could select an image that is not compatible with your instance type. To lower this chance, it is recommended to use `aws::name` or `aws::ids` if you're using `aws::owners` to select a subset of images that you have validated are compatible with your selected instance types.
+{{% /alert %}}
+
+### AMI Selection
+
+If an `amiSelector` matches more than one AMI, Karpenter will automatically determine which AMI best fits the workloads on the launched worker node under the following constraints:
+
+* When launching nodes, Karpenter automatically determines which architecture a custom AMI is compatible with and will use images that match an instanceType's requirements.
+* If multiple AMIs are found that can be used, Karpenter will choose the latest one.
+* If no AMIs are found that can be used, then no nodes will be provisioned.
+
+If you need to express other constraints for an AMI beyond architecture, you can express these constraints as tags on the AMI. For example, if you want to limit an EC2 AMI to only be used with instanceTypes that have an `nvidia` GPU, you can specify an EC2 tag with a key of `karpenter.k8s.aws/instance-gpu-manufacturer` and value `nvidia` on that AMI.
+
+All labels defined [in the scheduling documentation](./scheduling#supported-labels) can be used as requirements for an EC2 AMI.
+
+```bash
+> aws ec2 describe-images --image-id ami-123 --query Images[0].Tags
+[
+ {
+ "Key": "karpenter.sh/discovery",
+ "Value": "my-cluster"
+ },
+ {
+ "Key": "Name",
+ "Value": "amazon-eks-node-1.21-customized-v0"
+ },
+ {
+ "Key": "karpenter.k8s.aws/instance-gpu-manufacturer",
+ "Value": "nvidia"
+ }
+]
+```
+
+#### Examples
+
+Select all AMIs with a specified tag:
+```yaml
+ amiSelector:
+ karpenter.sh/discovery/MyClusterName: '*'
+```
+
+Select AMIs by name:
+```yaml
+ amiSelector:
+ Name: my-ami
+```
+
+Select AMIs by an arbitrary AWS tag key/value pair:
+```yaml
+ amiSelector:
+ MyAMITag: value
+```
+
+Specify AMIs explicitly by ID:
+```yaml
+ amiSelector:
+ aws-ids: "ami-123,ami-456"
+```
+
+## spec.tags
+
+Karpenter adds tags to all resources it creates, including EC2 Instances, EBS volumes, and Launch Templates. The default set of AWS tags are listed below.
+
+```
+Name: karpenter.sh/provisioner-name/
+karpenter.sh/provisioner-name:
+kubernetes.io/cluster/: owned
+```
+
+Additional tags can be added in the AWSNodeTemplate tags section which are merged with global tags in `aws.tags` (located in karpenter-global-settings ConfigMap) and can override the default tag values.
+```yaml
+spec:
+ tags:
+ InternalAccountingTag: 1234
+ dev.corp.net/app: Calculator
+ dev.corp.net/team: MyTeam
+```
+
+## spec.metadataOptions
+
+Control the exposure of [Instance Metadata Service](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html) on EC2 Instances launched by this provisioner using a generated launch template.
+
+Refer to [recommended, security best practices](https://aws.github.io/aws-eks-best-practices/security/docs/iam/#restrict-access-to-the-instance-profile-assigned-to-the-worker-node) for limiting exposure of Instance Metadata and User Data to pods.
+
+If metadataOptions are omitted from this provisioner, the following default settings will be used.
+
+```yaml
+spec:
+ metadataOptions:
+ httpEndpoint: enabled
+ httpProtocolIPv6: disabled
+ httpPutResponseHopLimit: 2
+ httpTokens: required
+```
+
+## spec.blockDeviceMappings
+
+The `blockDeviceMappings` field in an AWSNodeTemplate can be used to control the Elastic Block Storage (EBS) volumes that Karpenter attaches to provisioned nodes. Karpenter uses default block device mappings for the AMI Family specified. For example, the `Bottlerocket` AMI Family defaults with two block device mappings, one for Bottlerocket's control volume and the other for container resources such as images and logs.
+
+Learn more about [block device mappings](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html).
+
+```yaml
+apiVersion: karpenter.k8s.aws/v1alpha1
+kind: AWSNodeTemplate
+spec:
+ blockDeviceMappings:
+ - deviceName: /dev/xvda
+ ebs:
+ volumeSize: 100Gi
+ volumeType: gp3
+ iops: 10000
+ encrypted: true
+ kmsKeyID: "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
+ deleteOnTermination: true
+ throughput: 125
+ snapshotID: snap-0123456789
+```
+
+## spec.userData
+
+You can control the UserData that is applied to your worker nodes via this field.
+
+```yaml
+apiVersion: karpenter.k8s.aws/v1alpha1
+kind: AWSNodeTemplate
+metadata:
+ name: bottlerocket-example
+spec:
+ amiFamily: Bottlerocket
+ instanceProfile: MyInstanceProfile
+ subnetSelector:
+ karpenter.sh/discovery: my-cluster
+ securityGroupSelector:
+ karpenter.sh/discovery: my-cluster
+ userData: |
+ [settings.kubernetes]
+ kube-api-qps = 30
+ [settings.kubernetes.eviction-hard]
+ "memory.available" = "20%"
+ amiSelector:
+ karpenter.sh/discovery: my-cluster
+```
+
+This example adds SSH keys to allow remote login to the node (replace *my-authorized_keys* with your key file):
+
+{{% alert title="Note" color="primary" %}}
+Instead of using SSH as set up in this example, you can use Session Manager (SSM) or EC2 Instance Connect to gain shell access to Karpenter nodes.
+See [Node NotReady]({{< ref "../troubleshooting/#node-notready" >}}) troubleshooting for an example of starting an SSM session from the command line or [EC2 Instance Connect](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-connect-set-up.html) documentation to connect to nodes using SSH.
+{{% /alert %}}
+
+```yaml
+apiVersion: karpenter.k8s.aws/v1alpha1
+kind: AWSNodeTemplate
+metadata:
+ name: al2-example
+spec:
+ amiFamily: AL2
+ instanceProfile: MyInstanceProfile
+ subnetSelector:
+ karpenter.sh/discovery: my-cluster
+ securityGroupSelector:
+ karpenter.sh/discovery: my-cluster
+ userData: |
+ #!/bin/bash
+ mkdir -p ~ec2-user/.ssh/
+ touch ~ec2-user/.ssh/authorized_keys
+ cat >> ~ec2-user/.ssh/authorized_keys < >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1
+/etc/eks/bootstrap.sh 'test-cluster' --apiserver-endpoint 'https://test-cluster' --b64-cluster-ca 'ca-bundle' \
+--use-max-pods false \
+--container-runtime containerd \
+--kubelet-extra-args '--node-labels=karpenter.sh/capacity-type=on-demand,karpenter.sh/provisioner-name=test --max-pods=110'
+--//--
+```
+
+You can also set kubelet-config properties by modifying the kubelet-config.json file before the EKS bootstrap script starts the kubelet:
+
+```
+apiVersion: karpenter.k8s.aws/v1alpha1
+kind: AWSNodeTemplate
+metadata:
+ name: kubelet-config-example
+spec:
+ subnetSelector:
+ karpenter.sh/discovery: my-cluster
+ securityGroupSelector:
+ karpenter.sh/discovery: my-cluster
+ userData: |
+ #!/bin/bash
+ echo "$(jq '.kubeAPIQPS=50' /etc/kubernetes/kubelet/kubelet-config.json)" > /etc/kubernetes/kubelet/kubelet-config.json
+```
+## status.subnets
+`status.subnets` contains the `id` and `zone` of the subnets utilized during node launch. The subnets are sorted by the available IP address count in decreasing order.
+
+**Examples**
+
+```yaml
+status:
+ subnets:
+ - id: subnet-0a462d98193ff9fac
+ zone: us-east-2b
+ - id: subnet-0322dfafd76a609b6
+ zone: us-east-2c
+ - id: subnet-0727ef01daf4ac9fe
+ zone: us-east-2b
+ - id: subnet-00c99aeafe2a70304
+ zone: us-east-2a
+ - id: subnet-023b232fd5eb0028e
+ zone: us-east-2c
+ - id: subnet-03941e7ad6afeaa72
+ zone: us-east-2a
+```
+
+## status.securityGroups
+`status.securityGroups` contains the `id` of the security groups utilized during node launch.
+
+**Examples**
+
+```yaml
+ status:
+ securityGroups:
+ - id: sg-041513b454818610b
+ - id: sg-0286715698b894bca
+```
diff --git a/website/content/en/v0.26.1/concepts/pod-density.md b/website/content/en/v0.26.1/concepts/pod-density.md
new file mode 100644
index 000000000000..6530945e5f63
--- /dev/null
+++ b/website/content/en/v0.26.1/concepts/pod-density.md
@@ -0,0 +1,78 @@
+---
+title: "Control Pod Density"
+linkTitle: "Control Pod Density"
+weight: 6
+description: >
+ Learn ways to specify pod density with Karpenter
+---
+
+Pod density is the number of pods per node.
+
+Kubernetes has a default limit of 110 pods per node. If you are using the EKS Optimized AMI on AWS, the [number of pods is limited by instance type](https://github.com/awslabs/amazon-eks-ami/blob/master/files/eni-max-pods.txt) in the default configuration.
+
+## Increase Pod Density
+
+### Networking Limitations
+
+*☁️ AWS Specific*
+
+By default, the number of pods on a node is limited by both the number of networking interfaces (ENIs) that may be attached to an instance type and the number of IP addresses that can be assigned to each ENI. See [IP addresses per network interface per instance type](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html#AvailableIpPerENI) for a more detailed information on these instance types' limits.
+
+Karpenter can be configured to disable nodes' ENI-based pod density. This is especially useful for small to medium instance types which have a lower ENI-based pod density.
+
+{{% alert title="Note" color="primary" %}}
+When using small instance types, it may be necessary to enable [prefix assignment mode](https://aws.amazon.com/blogs/containers/amazon-vpc-cni-increases-pods-per-node-limits/) in the AWS VPC CNI plugin to more pods per node. Prefix assignment mode was introduced in AWS VPC CNI v1.9 and allows ENIs to manage a broader set of IP addresses. Much higher pod densities are supported as a result.
+{{% /alert %}}
+
+### Provisioner-Specific Pod Density
+
+#### Static Pod Density
+
+Static pod density can be configured at the provisioner level by specifying `maxPods` within the `.spec.kubeletConfiguration`. All nodes spawned by this provisioner will set this `maxPods` value on their kubelet and will account for this value during scheduling.
+
+See [Provisioner API Kubelet Configuration](../provisioners/#max-pods) for more details.
+
+#### Dynamic Pod Density
+
+Dynamic pod density (density that scales with the instance size) can be configured at the provisioner level by specifying `podsPerCore` within the `.spec.kubeletConfiguration`. Karpenter will calculate the expected pod density for each instance based on the instance's number of logical cores (vCPUs) and will account for this during scheduling.
+
+See [Provisioner API Kubelet Configuration](../provisioners/#pod-density) for more details.
+
+### Controller-Wide Pod Density
+
+{{% alert title="Deprecation Warning" color="warning" %}}
+`AWS_ENI_LIMITED_POD_DENSITY` is deprecated in favor of the `.spec.kubeletConfiguration.maxPods` set at the Provisioner-level
+{{% /alert %}}
+
+Set the environment variable `AWS_ENI_LIMITED_POD_DENSITY: "false"` (or the argument `--aws-eni-limited-pod-density=false`) in the Karpenter controller to allow nodes to host up to 110 pods by default.
+
+Environment variables for the Karpenter controller may be specified as [helm chart values](https://github.com/aws/karpenter/blob/c73f425e924bb64c3f898f30ca5035a1d8591183/charts/karpenter/values.yaml#L15).
+
+
+## Limit Pod Density
+
+Generally, increasing pod density is more efficient. However, some use cases exist for limiting pod density.
+
+### Topology Spread
+
+You can use [topology spread]({{< relref "scheduling.md#topology-spread" >}}) features to reduce blast radius. For example, spreading workloads across EC2 Availability Zones.
+
+
+### Restrict Instance Types
+
+Exclude large instance sizes to reduce the blast radius of an EC2 instance failure.
+
+Consider setting up upper or lower boundaries on target instance sizes with the node.kubernetes.io/instance-type key.
+
+The following example shows how to avoid provisioning large Graviton instances in order to reduce the impact of individual instance failures:
+
+```
+-key: node.kubernetes.io/instance-type
+ operator: NotIn
+ values:
+ 'm6g.16xlarge'
+ 'm6gd.16xlarge'
+ 'r6g.16xlarge'
+ 'r6gd.16xlarge'
+ 'c6g.16xlarge'
+```
diff --git a/website/content/en/v0.26.1/concepts/provisioners.md b/website/content/en/v0.26.1/concepts/provisioners.md
new file mode 100644
index 000000000000..5e9cd21e1450
--- /dev/null
+++ b/website/content/en/v0.26.1/concepts/provisioners.md
@@ -0,0 +1,470 @@
+---
+title: "Provisioners"
+linkTitle: "Provisioners"
+weight: 1
+description: >
+ Learn about Karpenter Provisioners
+---
+
+When you first installed Karpenter, you set up a default Provisioner.
+The Provisioner sets constraints on the nodes that can be created by Karpenter and the pods that can run on those nodes.
+The Provisioner can be set to do things like:
+
+* Define taints to limit the pods that can run on nodes Karpenter creates
+* Define any startup taints to inform Karpenter that it should taint the node initially, but that the taint is temporary.
+* Limit node creation to certain zones, instance types, and computer architectures
+* Set defaults for node expiration
+
+You can change your Provisioner or add other Provisioners to Karpenter.
+Here are things you should know about Provisioners:
+
+* Karpenter won't do anything if there is not at least one Provisioner configured.
+* Each Provisioner that is configured is looped through by Karpenter.
+* If Karpenter encounters a taint in the Provisioner that is not tolerated by a Pod, Karpenter won't use that Provisioner to provision the pod.
+* If Karpenter encounters a startup taint in the Provisioner it will be applied to nodes that are provisioned, but pods do not need to tolerate the taint. Karpenter assumes that the taint is temporary and some other system will remove the taint.
+* It is recommended to create Provisioners that are mutually exclusive. So no Pod should match multiple Provisioners. If multiple Provisioners are matched, Karpenter will use the Provisioner with the highest [weight](#specweight).
+
+```yaml
+apiVersion: karpenter.sh/v1alpha5
+kind: Provisioner
+metadata:
+ name: default
+spec:
+ # References cloud provider-specific custom resource, see your cloud provider specific documentation
+ providerRef:
+ name: default
+
+ # Provisioned nodes will have these taints
+ # Taints may prevent pods from scheduling if they are not tolerated by the pod.
+ taints:
+ - key: example.com/special-taint
+ effect: NoSchedule
+
+ # Provisioned nodes will have these taints, but pods do not need to tolerate these taints to be provisioned by this
+ # provisioner. These taints are expected to be temporary and some other entity (e.g. a DaemonSet) is responsible for
+ # removing the taint after it has finished initializing the node.
+ startupTaints:
+ - key: example.com/another-taint
+ effect: NoSchedule
+
+ # Labels are arbitrary key-values that are applied to all nodes
+ labels:
+ billing-team: my-team
+
+ # Annotations are arbitrary key-values that are applied to all nodes
+ annotations:
+ example.com/owner: "my-team"
+
+ # Requirements that constrain the parameters of provisioned nodes.
+ # These requirements are combined with pod.spec.affinity.nodeAffinity rules.
+ # Operators { In, NotIn } are supported to enable including or excluding values
+ requirements:
+ - key: "karpenter.k8s.aws/instance-category"
+ operator: In
+ values: ["c", "m", "r"]
+ - key: "karpenter.k8s.aws/instance-cpu"
+ operator: In
+ values: ["4", "8", "16", "32"]
+ - key: "karpenter.k8s.aws/instance-hypervisor"
+ operator: In
+ values: ["nitro"]
+ - key: "topology.kubernetes.io/zone"
+ operator: In
+ values: ["us-west-2a", "us-west-2b"]
+ - key: "kubernetes.io/arch"
+ operator: In
+ values: ["arm64", "amd64"]
+ - key: "karpenter.sh/capacity-type" # If not included, the webhook for the AWS cloud provider will default to on-demand
+ operator: In
+ values: ["spot", "on-demand"]
+
+ # Karpenter provides the ability to specify a few additional Kubelet args.
+ # These are all optional and provide support for additional customization and use cases.
+ kubeletConfiguration:
+ clusterDNS: ["10.0.1.100"]
+ containerRuntime: containerd
+ systemReserved:
+ cpu: 100m
+ memory: 100Mi
+ ephemeral-storage: 1Gi
+ kubeReserved:
+ cpu: 200m
+ memory: 100Mi
+ ephemeral-storage: 3Gi
+ evictionHard:
+ memory.available: 5%
+ nodefs.available: 10%
+ nodefs.inodesFree: 10%
+ evictionSoft:
+ memory.available: 500Mi
+ nodefs.available: 15%
+ nodefs.inodesFree: 15%
+ evictionSoftGracePeriod:
+ memory.available: 1m
+ nodefs.available: 1m30s
+ nodefs.inodesFree: 2m
+ evictionMaxPodGracePeriod: 60
+ podsPerCore: 2
+ maxPods: 20
+
+ # Resource limits constrain the total size of the cluster.
+ # Limits prevent Karpenter from creating new instances once the limit is exceeded.
+ limits:
+ resources:
+ cpu: "1000"
+ memory: 1000Gi
+
+ # Enables consolidation which attempts to reduce cluster cost by both removing un-needed nodes and down-sizing those
+ # that can't be removed. Mutually exclusive with the ttlSecondsAfterEmpty parameter.
+ consolidation:
+ enabled: true
+
+ # If omitted, the feature is disabled and nodes will never expire. If set to less time than it requires for a node
+ # to become ready, the node may expire before any pods successfully start.
+ ttlSecondsUntilExpired: 2592000 # 30 Days = 60 * 60 * 24 * 30 Seconds;
+
+ # If omitted, the feature is disabled, nodes will never scale down due to low utilization
+ ttlSecondsAfterEmpty: 30
+
+ # Priority given to the provisioner when the scheduler considers which provisioner
+ # to select. Higher weights indicate higher priority when comparing provisioners.
+ # Specifying no weight is equivalent to specifying a weight of 0.
+ weight: 10
+```
+
+## spec.requirements
+
+Kubernetes defines the following [Well-Known Labels](https://kubernetes.io/docs/reference/labels-annotations-taints/), and cloud providers (e.g., AWS) implement them. They are defined at the "spec.requirements" section of the Provisioner API.
+
+In addition to the well-known labels from Kubernetes, Karpenter supports AWS-specific labels for more advanced scheduling. See the full list [here](../scheduling/#well-known-labels).
+
+These well-known labels may be specified at the provisioner level, or in a workload definition (e.g., nodeSelector on a pod.spec). Nodes are chosen using both the provisioner's and pod's requirements. If there is no overlap, nodes will not be launched. In other words, a pod's requirements must be within the provisioner's requirements. If a requirement is not defined for a well known label, any value available to the cloud provider may be chosen.
+
+For example, an instance type may be specified using a nodeSelector in a pod spec. If the instance type requested is not included in the provisioner list and the provisioner has instance type requirements, Karpenter will not create a node or schedule the pod.
+
+📝 None of these values are required.
+
+### Instance Types
+
+- key: `node.kubernetes.io/instance-type`
+- key: `karpenter.k8s.aws/instance-family`
+- key: `karpenter.k8s.aws/instance-category`
+- key: `karpenter.k8s.aws/instance-generation`
+
+Generally, instance types should be a list and not a single value. Leaving these requirements undefined is recommended, as it maximizes choices for efficiently placing pods.
+
+Review [AWS instance types](../instance-types). Most instance types are supported with the exclusion of [non-HVM](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/virtualization_types.html).
+
+{{% alert title="Defaults" color="secondary" %}}
+If no instance type constraints are defined, Karpenter will set default instance type constraints on your Provisioner that supports most common user workloads:
+
+```yaml
+requirements:
+ - key: karpenter.k8s.aws/instance-category
+ operator: In
+ values: ["c", "m", "r"]
+ - key: karpenter.k8s.aws/instance-generation
+ operator: Gt
+ values: ["2"]
+```
+{{% /alert %}}
+
+### Availability Zones
+
+- key: `topology.kubernetes.io/zone`
+- value example: `us-east-1c`
+- value list: `aws ec2 describe-availability-zones --region `
+
+Karpenter can be configured to create nodes in a particular zone. Note that the Availability Zone `us-east-1a` for your AWS account might not have the same location as `us-east-1a` for another AWS account.
+
+[Learn more about Availability Zone
+IDs.](https://docs.aws.amazon.com/ram/latest/userguide/working-with-az-ids.html)
+
+### Architecture
+
+- key: `kubernetes.io/arch`
+- values
+ - `amd64`
+ - `arm64`
+
+Karpenter supports `amd64` nodes, and `arm64` nodes.
+
+{{% alert title="Defaults" color="secondary" %}}
+If no architecture constraint is defined, Karpenter will set the default architecture constraint on your Provisioner that supports most common user workloads:
+
+```yaml
+requirements:
+ - key: kubernetes.io/arch
+ operator: In
+ values: ["amd64"]
+```
+{{% /alert %}}
+
+### Operating System
+ - key: `kubernetes.io/os`
+ - values
+ - `linux`
+
+Karpenter supports only `linux` nodes at this time.
+
+{{% alert title="Defaults" color="secondary" %}}
+If no operating system constraint is defined, Karpenter will set the default operating system constraint on your Provisioner that supports most common user workloads:
+
+```yaml
+requirements:
+ - key: kubernetes.io/os
+ operator: In
+ values: ["linux"]
+```
+{{% /alert %}}
+
+### Capacity Type
+
+- key: `karpenter.sh/capacity-type`
+- values
+ - `spot`
+ - `on-demand`
+
+Karpenter supports specifying capacity type, which is analogous to [EC2 purchase options](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-purchasing-options.html).
+
+Karpenter prioritizes Spot offerings if the provisioner allows Spot and on-demand instances. If the provider API (e.g. EC2 Fleet's API) indicates Spot capacity is unavailable, Karpenter caches that result across all attempts to provision EC2 capacity for that instance type and zone for the next 45 seconds. If there are no other possible offerings available for Spot, Karpenter will attempt to provision on-demand instances, generally within milliseconds.
+
+Karpenter also allows `karpenter.sh/capacity-type` to be used as a topology key for enforcing topology-spread.
+
+{{% alert title="Defaults" color="secondary" %}}
+If no capacity type constraint is defined, Karpenter will set the default capacity type constraint on your Provisioner that supports most common user workloads:
+
+```yaml
+requirements:
+ - key: karpenter.sh/capacity-type
+ operator: In
+ values: ["on-demand"]
+```
+{{% /alert %}}
+
+## spec.weight
+
+Karpenter allows you to describe provisioner preferences through a `weight` mechanism similar to how weight is described with [pod and node affinities](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#affinity-and-anti-affinity).
+
+For more information on weighting Provisioners, see the [Weighting Provisioners section](../scheduling#weighting-provisioners) in the scheduling details.
+
+## spec.kubeletConfiguration
+
+Karpenter provides the ability to specify a few additional Kubelet args. These are all optional and provide support for
+additional customization and use cases. Adjust these only if you know you need to do so.
+
+```yaml
+spec:
+ ...
+ kubeletConfiguration:
+ clusterDNS: ["10.0.1.100"]
+ containerRuntime: containerd
+ systemReserved:
+ cpu: 100m
+ memory: 100Mi
+ ephemeral-storage: 1Gi
+ kubeReserved:
+ cpu: 200m
+ memory: 100Mi
+ ephemeral-storage: 3Gi
+ evictionHard:
+ memory.available: 5%
+ nodefs.available: 10%
+ nodefs.inodesFree: 10%
+ evictionSoft:
+ memory.available: 500Mi
+ nodefs.available: 15%
+ nodefs.inodesFree: 15%
+ evictionSoftGracePeriod:
+ memory.available: 1m
+ nodefs.available: 1m30s
+ nodefs.inodesFree: 2m
+ evictionMaxPodGracePeriod: 60
+ podsPerCore: 2
+ maxPods: 20
+```
+
+☁️ **AWS**
+
+You can specify the container runtime to be either `dockerd` or `containerd`. By default, `containerd` is used.
+
+* `containerd` is the only valid container runtime when using the Bottlerocket AMI Family or when using the AL2 AMI Family and K8s version 1.24+
+
+### Reserved Resources
+
+Karpenter will automatically configure the system and kube reserved resource requests on the fly on your behalf. These requests are used to configure your node and to make scheduling decisions for your pods. If you have specific requirements or know that you will have additional capacity requirements, you can optionally override the `--system-reserved` configuration defaults with the `.spec.kubeletConfiguration.systemReserved` values and the `--kube-reserved` configuration defaults with the `.spec.kubeletConfiguration.kubeReserved` values.
+
+For more information on the default `--system-reserved` and `--kube-reserved` configuration refer to the [Kubelet Docs](https://kubernetes.io/docs/tasks/administer-cluster/reserve-compute-resources/#kube-reserved)
+
+### Eviction Thresholds
+
+The kubelet supports eviction thresholds by default. When enough memory or file system pressure is exerted on the node, the kubelet will begin to evict pods to ensure that system daemons and other system processes can continue to run in a healthy manner.
+
+Kubelet has the notion of [hard evictions](https://kubernetes.io/docs/concepts/scheduling-eviction/node-pressure-eviction/#hard-eviction-thresholds) and [soft evictions](https://kubernetes.io/docs/concepts/scheduling-eviction/node-pressure-eviction/#soft-eviction-thresholds). In hard evictions, pods are evicted as soon as a threshold is met, with no grace period to terminate. Soft evictions, on the other hand, provide an opportunity for pods to be terminated gracefully. They do so by sending a termination signal to pods that are planning to be evicted and allowing those pods to terminate up to their grace period.
+
+Karpenter supports [hard evictions](https://kubernetes.io/docs/concepts/scheduling-eviction/node-pressure-eviction/#hard-eviction-thresholds) through the `.spec.kubeletConfiguration.evictionHard` field and [soft evictions](https://kubernetes.io/docs/concepts/scheduling-eviction/node-pressure-eviction/#soft-eviction-thresholds) through the `.spec.kubeletConfiguration.evictionSoft` field. `evictionHard` and `evictionSoft` are configured by listing [signal names](https://kubernetes.io/docs/concepts/scheduling-eviction/node-pressure-eviction/#eviction-signals) with either percentage values or resource values.
+
+```yaml
+spec:
+ ...
+ kubeletConfiguration:
+ evictionHard:
+ memory.available: 500Mi
+ nodefs.available: 10%
+ nodefs.inodesFree: 10%
+ imagefs.available: 5%
+ imagefs.inodesFree: 5%
+ pid.available: 7%
+ evictionSoft:
+ memory.available: 1Gi
+ nodefs.available: 15%
+ nodefs.inodesFree: 15%
+ imagefs.available: 10%
+ imagefs.inodesFree: 10%
+ pid.available: 10%
+```
+
+#### Supported Eviction Signals
+
+| Eviction Signal | Description |
+| --------------- | ----------- |
+| memory.available | memory.available := node.status.capacity[memory] - node.stats.memory.workingSet |
+| nodefs.available | nodefs.available := node.stats.fs.available |
+| nodefs.inodesFree | nodefs.inodesFree := node.stats.fs.inodesFree |
+| imagefs.available | imagefs.available := node.stats.runtime.imagefs.available |
+| imagefs.inodesFree | imagefs.inodesFree := node.stats.runtime.imagefs.inodesFree |
+| pid.available | pid.available := node.stats.rlimit.maxpid - node.stats.rlimit.curproc |
+
+For more information on eviction thresholds, view the [Node-pressure Eviction](https://kubernetes.io/docs/concepts/scheduling-eviction/node-pressure-eviction) section of the official Kubernetes docs.
+
+#### Soft Eviction Grace Periods
+
+Soft eviction pairs an eviction threshold with a specified grace period. With soft eviction thresholds, the kubelet will only begin evicting pods when the node exceeds its soft eviction threshold over the entire duration of its grace period. For example, if you specify `evictionSoft[memory.available]` of `500Mi` and a `evictionSoftGracePeriod[memory.available]` of `1m30`, the node must have less than `500Mi` of available memory over a minute and a half in order for the kubelet to begin evicting pods.
+
+Optionally, you can specify an `evictionMaxPodGracePeriod` which defines the administrator-specified maximum pod termination grace period to use during soft eviction. If a namespace-owner had specified a pod `terminationGracePeriodInSeconds` on pods in their namespace, the minimum of `evictionPodGracePeriod` and `terminationGracePeriodInSeconds` would be used.
+
+```yaml
+spec:
+ ...
+ kubeletConfiguration:
+ evictionSoftGracePeriod:
+ memory.available: 1m
+ nodefs.available: 1m30s
+ nodefs.inodesFree: 2m
+ imagefs.available: 1m30s
+ imagefs.inodesFree: 2m
+ pid.available: 2m
+ evictionMaxPodGracePeriod: 60
+```
+
+### Pod Density
+
+#### Max Pods
+
+By default, AWS will configure the maximum density of pods on a node [based on the node instance type](https://github.com/awslabs/amazon-eks-ami/blob/master/files/eni-max-pods.txt). For small instances that require an increased pod density or large instances that require a reduced pod density, you can override this default value with `.spec.kubeletConfiguration.maxPods`. This value will be used during Karpenter pod scheduling and passed through to `--max-pods` on kubelet startup.
+
+{{% alert title="Note" color="primary" %}}
+When using small instance types, it may be necessary to enable [prefix assignment mode](https://aws.amazon.com/blogs/containers/amazon-vpc-cni-increases-pods-per-node-limits/) in the AWS VPC CNI plugin to support a higher pod density per node. Prefix assignment mode was introduced in AWS VPC CNI v1.9 and allows ENIs to manage a broader set of IP addresses. Much higher pod densities are supported as a result.
+{{% /alert %}}
+
+#### Pods Per Core
+
+An alternative way to dynamically set the maximum density of pods on a node is to use the `.spec.kubeletConfiguration.podsPerCore` value. Karpenter will calculate the pod density during scheduling by multiplying this value by the number of logical cores (vCPUs) on an instance type. This value will also be passed through to the `--pods-per-core` value on kubelet startup to configure the number of allocatable pods the kubelet can assign to the node instance.
+
+The value generated from `podsPerCore` cannot exceed `maxPods`, meaning, if both are set, the minimum of the `podsPerCore` dynamic pod density and the static `maxPods` value will be used for scheduling.
+
+{{% alert title="Note" color="primary" %}}
+`maxPods` may not be set in the `kubeletConfiguration` of a Provisioner, but may still be restricted by the `ENI_LIMITED_POD_DENSITY` value. You may want to ensure that the `podsPerCore` value that will be used for instance families associated with the Provisioner will not cause unexpected behavior by exceeding the `maxPods` value.
+{{% /alert %}}
+
+{{% alert title="Pods Per Core on Bottlerocket" color="warning" %}}
+Bottlerocket AMIFamily currently does not support `podsPerCore` configuration. If a Provisioner contains a `provider` or `providerRef` to a node template that will launch a Bottlerocket instance, the `podsPerCore` value will be ignored for scheduling and for configuring the kubelet.
+{{% /alert %}}
+
+## spec.limits.resources
+
+The provisioner spec includes a limits section (`spec.limits.resources`), which constrains the maximum amount of resources that the provisioner will manage.
+
+Karpenter supports limits of any resource type reported by your cloudprovider. It limits instance types when scheduling to those that will not exceed the specified limits. If a limit has been exceeded, nodes provisioning is prevented until some nodes have been terminated.
+
+```yaml
+apiVersion: karpenter.sh/v1alpha5
+kind: Provisioner
+metadata:
+ name: default
+spec:
+ requirements:
+ - key: karpenter.sh/capacity-type
+ operator: In
+ values: ["spot"]
+ limits:
+ resources:
+ cpu: 1000
+ memory: 1000Gi
+ nvidia.com/gpu: 2
+```
+
+{{% alert title="Note" color="primary" %}}
+Karpenter provisioning is highly parallel. Because of this, limit checking is eventually consistent, which can result in overrun during rapid scale outs.
+{{% /alert %}}
+
+CPU limits are described with a `DecimalSI` value. Note that the Kubernetes API will coerce this into a string, so we recommend against using integers to avoid GitOps skew.
+
+Memory limits are described with a [`BinarySI` value, such as 1000Gi.](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/#meaning-of-memory)
+
+You can view the current consumption of cpu and memory on your cluster by running:
+```
+kubectl get provisioner -o=jsonpath='{.items[0].status}'
+```
+
+Review the [Kubernetes core API](https://github.com/kubernetes/api/blob/37748cca582229600a3599b40e9a82a951d8bbbf/core/v1/resource.go#L23) (`k8s.io/api/core/v1`) for more information on `resources`.
+
+## spec.providerRef
+
+This field points to the cloud provider-specific custom resource. Learn more about [AWSNodeTemplates](../node-templates/).
+
+## spec.consolidation
+
+You can configure Karpenter to deprovision instances through your Provisioner in multiple ways. You can use `spec.TTLSecondsAfterEmpty`, `spec.ttlSecondsUntilExpired` or `spec.consolidation.enabled`. Read [Deprovisioning](../deprovisioning/) for more.
+
+## Example Use-Cases
+
+### Isolating Expensive Hardware
+
+A provisioner can be set up to only provision nodes on particular processor types.
+The following example sets a taint that only allows pods with tolerations for Nvidia GPUs to be scheduled:
+
+```yaml
+apiVersion: karpenter.sh/v1alpha5
+kind: Provisioner
+metadata:
+ name: gpu
+spec:
+ ttlSecondsAfterEmpty: 60
+ requirements:
+ - key: node.kubernetes.io/instance-type
+ operator: In
+ values: ["p3.8xlarge", "p3.16xlarge"]
+ taints:
+ - key: nvidia.com/gpu
+ value: "true"
+ effect: NoSchedule
+```
+In order for a pod to run on a node defined in this provisioner, it must tolerate `nvidia.com/gpu` in its pod spec.
+
+### Cilium Startup Taint
+
+Per the Cilium [docs](https://docs.cilium.io/en/stable/gettingstarted/taints/), it's recommended to place a taint of `node.cilium.io/agent-not-ready=true:NoExecute` on nodes to allow Cilium to configure networking prior to other pods starting. This can be accomplished via the use of Karpenter `startupTaints`. These taints are placed on the node, but pods aren't required to tolerate these taints to be considered for provisioning.
+
+```yaml
+apiVersion: karpenter.sh/v1alpha5
+kind: Provisioner
+metadata:
+ name: cilium-startup
+spec:
+ ttlSecondsAfterEmpty: 60
+ startupTaints:
+ - key: node.cilium.io/agent-not-ready
+ value: "true"
+ effect: NoExecute
+```
diff --git a/website/content/en/v0.26.1/concepts/scheduling.md b/website/content/en/v0.26.1/concepts/scheduling.md
new file mode 100755
index 000000000000..bbad18477355
--- /dev/null
+++ b/website/content/en/v0.26.1/concepts/scheduling.md
@@ -0,0 +1,595 @@
+---
+title: "Scheduling"
+linkTitle: "Scheduling"
+weight: 3
+description: >
+ Learn about scheduling workloads with Karpenter
+---
+
+If your pods have no requirements for how or where to run, you can let Karpenter choose nodes from the full range of available cloud provider resources.
+However, by taking advantage of Karpenter's model of layered constraints, you can be sure that the precise type and amount of resources needed are available to your pods.
+Reasons for constraining where your pods run could include:
+
+* Needing to run in zones where dependent applications or storage are available
+* Requiring certain kinds of processors or other hardware
+* Wanting to use techniques like topology spread to help ensure high availability
+
+Your Cloud Provider defines the first layer of constraints, including all instance types, architectures, zones, and purchase types available to its cloud.
+The cluster administrator adds the next layer of constraints by creating one or more provisioners.
+The final layer comes from you adding specifications to your Kubernetes pod deployments.
+Pod scheduling constraints must fall within a provisioner's constraints or the pods will not deploy.
+For example, if the provisioner sets limits that allow only a particular zone to be used, and a pod asks for a different zone, it will not be scheduled.
+
+Constraints you can request include:
+
+* **Resource requests**: Request that certain amount of memory or CPU be available.
+* **Node selection**: Choose to run on a node that is has a particular label (`nodeSelector`).
+* **Node affinity**: Draws a pod to run on nodes with particular attributes (affinity).
+* **Topology spread**: Use topology spread to help ensure availability of the application.
+* **Pod affinity/anti-affinity**: Draws pods towards or away from topology domains based on the scheduling of other pods.
+
+Karpenter supports standard Kubernetes scheduling constraints.
+This allows you to define a single set of rules that apply to both existing and provisioned capacity.
+
+{{% alert title="Note" color="primary" %}}
+Karpenter supports specific [Well-Known Labels, Annotations and Taints](https://kubernetes.io/docs/reference/labels-annotations-taints/) that are useful for scheduling.
+{{% /alert %}}
+
+## Resource requests
+
+Within a Pod spec, you can both make requests and set limits on resources a pod needs, such as CPU and memory.
+For example:
+
+```yaml
+apiVersion: v1
+kind: Pod
+metadata:
+ name: myapp
+spec:
+ containers:
+ - name: app
+ image: myimage
+ resources:
+ requests:
+ memory: "128Mi"
+ cpu: "500m"
+ limits:
+ memory: "256Mi"
+ cpu: "1000m"
+```
+In this example, the container is requesting 128MiB of memory and .5 CPU.
+Its limits are set to 256MiB of memory and 1 CPU.
+Instance type selection math only uses `requests`, but `limits` may be configured to enable resource oversubscription.
+
+
+See [Managing Resources for Containers](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/) for details on resource types supported by Kubernetes, [Specify a memory request and a memory limit](https://kubernetes.io/docs/tasks/configure-pod-container/assign-memory-resource/#specify-a-memory-request-and-a-memory-limit) for examples of memory requests, and [Provisioner Configuration]({{][}}) for a list of supported resources.
+
+### Accelerators/GPU Resources
+
+Accelerator (e.g., GPU) values include
+- `nvidia.com/gpu`
+- `amd.com/gpu`
+- `aws.amazon.com/neuron`
+- `habana.ai/gaudi`
+
+Karpenter supports accelerators, such as GPUs.
+
+Additionally, include a resource requirement in the workload manifest. This will cause the GPU dependent pod to be scheduled onto the appropriate node.
+
+Here is an example of an accelerator resource in a workload manifest (e.g., pod):
+
+```yaml
+spec:
+ template:
+ spec:
+ containers:
+ - resources:
+ limits:
+ nvidia.com/gpu: "1"
+```
+{{% alert title="Note" color="primary" %}}
+If you are provisioning GPU nodes, you need to deploy an appropriate GPU device plugin daemonset for those nodes.
+Without the daemonset running, Karpenter will not see those nodes as initialized.
+Refer to general [Kubernetes GPU](https://kubernetes.io/docs/tasks/manage-gpus/scheduling-gpus/#deploying-amd-gpu-device-plugin) docs and the following specific GPU docs:
+* `nvidia.com/gpu`: [NVIDIA device plugin for Kubernetes](https://github.com/NVIDIA/k8s-device-plugin)
+* `amd.com/gpu`: [AMD GPU device plugin for Kubernetes](https://github.com/RadeonOpenCompute/k8s-device-plugin)
+* `aws.amazon.com/neuron`: [Kubernetes environment setup for Neuron](https://github.com/aws-neuron/aws-neuron-sdk/tree/master/src/k8)
+* `habana.ai/gaudi`: [Habana device plugin for Kubernetes](https://docs.habana.ai/en/latest/Orchestration/Gaudi_Kubernetes/Habana_Device_Plugin_for_Kubernetes.html)
+ {{% /alert %}}
+
+### Pod ENI Resources (Security Groups for Pods)
+[Pod ENI](https://github.com/aws/amazon-vpc-cni-k8s#enable_pod_eni-v170) is a feature of the AWS VPC CNI Plugin which allows an Elastic Network Interface (ENI) to be allocated directly to a Pod. When enabled, the `vpc.amazonaws.com/pod-eni` extended resource is added to supported nodes. The Pod ENI feature can be used independently, but is most often used in conjunction with Security Groups for Pods. Follow the below instructions to enable support for Pod ENI and/or Security Groups for Pods in Karpenter.
+
+{{% alert title="Note" color="primary" %}}
+You must enable Pod ENI support in the AWS VPC CNI Plugin before enabling Pod ENI support in Karpenter. Please refer to the [Security Groups for Pods documentation](https://docs.aws.amazon.com/eks/latest/userguide/security-groups-for-pods.html) for instructions.
+{{% /alert %}}
+
+Now that Pod ENI support is enabled in the AWS VPC CNI Plugin, you can enable Pod ENI support in Karpenter by setting the `settings.aws.enablePodENI` Helm chart value to `true`.
+
+Here is an example of a pod-eni resource defined in a deployment manifest:
+```
+spec:
+ template:
+ spec:
+ containers:
+ - resources:
+ limits:
+ vpc.amazonaws.com/pod-eni: "1"
+```
+
+## Selecting nodes
+
+With `nodeSelector` you can ask for a node that matches selected key-value pairs.
+This can include well-known labels or custom labels you create yourself.
+
+You can use `affinity` to define more complicated constraints, see [Node Affinity](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity) for the complete specification.
+
+### Labels
+Well-known labels may be specified as provisioner requirements or pod scheduling constraints. You can also define your own custom labels by specifying `requirements` or `labels` on your Provisioner and select them using `nodeAffinity` or `nodeSelectors` on your Pods.
+
+{{% alert title="Warning" color="warning" %}}
+Take care to ensure the label domains are correct. A well known label like `karpenter.k8s.aws/instance-family` will enforce node properties, but may be confused with `node.kubernetes.io/instance-family`, which is unknown to Karpenter, and treated as a custom label which will not enforce node properties.
+{{% /alert %}}
+
+#### Well-Known Labels
+
+| Label | Example | Description |
+| ----------------------------------------------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
+| topology.kubernetes.io/zone | us-east-2a | Zones are defined by your cloud provider ([aws](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html)) |
+| node.kubernetes.io/instance-type | g4dn.8xlarge| Instance types are defined by your cloud provider ([aws](https://aws.amazon.com/ec2/instance-types/)) |
+| kubernetes.io/os | linux | Operating systems are defined by [GOOS values](https://github.com/golang/go/blob/master/src/go/build/syslist.go#L10) on the instance |
+| kubernetes.io/arch | amd64 | Architectures are defined by [GOARCH values](https://github.com/golang/go/blob/master/src/go/build/syslist.go#L50) on the instance |
+| karpenter.sh/capacity-type | spot | Capacity types include `spot`, `on-demand` |
+| karpenter.k8s.aws/instance-hypervisor | nitro | [AWS Specific] Instance types that use a specific hypervisor |
+| karpenter.k8s.aws/encryption-in-transit-supported | true | [AWS Specific] Instance types that support (or not) in-transit encryption |
+| karpenter.k8s.aws/instance-category | g | [AWS Specific] Instance types of the same category, usually the string before the generation number |
+| karpenter.k8s.aws/instance-generation | 4 | [AWS Specific] Instance type generation number within an instance category |
+| karpenter.k8s.aws/instance-family | g4dn | [AWS Specific] Instance types of similar properties but different resource quantities |
+| karpenter.k8s.aws/instance-size | 8xlarge | [AWS Specific] Instance types of similar resource quantities but different properties |
+| karpenter.k8s.aws/instance-cpu | 32 | [AWS Specific] Number of CPUs on the instance |
+| karpenter.k8s.aws/instance-memory | 131072 | [AWS Specific] Number of mebibytes of memory on the instance |
+| karpenter.k8s.aws/instance-network-bandwidth | 131072 | [AWS Specific] Number of [baseline megabits](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-network-bandwidth.html) available on the instance |
+| karpenter.k8s.aws/instance-pods | 110 | [AWS Specific] Number of pods the instance supports |
+| karpenter.k8s.aws/instance-gpu-name | t4 | [AWS Specific] Name of the GPU on the instance, if available |
+| karpenter.k8s.aws/instance-gpu-manufacturer | nvidia | [AWS Specific] Name of the GPU manufacturer |
+| karpenter.k8s.aws/instance-gpu-count | 1 | [AWS Specific] Number of GPUs on the instance |
+| karpenter.k8s.aws/instance-gpu-memory | 16384 | [AWS Specific] Number of mebibytes of memory on the GPU |
+| karpenter.k8s.aws/instance-local-nvme | 900 | [AWS Specific] Number of gibibytes of local nvme storage on the instance |
+
+#### User-Defined Labels
+
+Karpenter is aware of several well-known labels, deriving them from instance type details. If you specify a `nodeSelector` or a required `nodeAffinity` using a label that is not well-known to Karpenter, it will not launch nodes with these labels and pods will remain pending. For Karpenter to become aware that it can schedule for these labels, you must specify the label in the Provisioner requirements with the `Exists` operator:
+
+```yaml
+requirements:
+ - key: user.defined.label/type
+ operator: Exists
+```
+
+#### Node selectors
+
+Here is an example of a `nodeSelector` for selecting nodes:
+
+```yaml
+nodeSelector:
+ topology.kubernetes.io/zone: us-west-2a
+ karpenter.sh/capacity-type: spot
+```
+This example features a well-known label (`topology.kubernetes.io/zone`) and a label that is well known to Karpenter (`karpenter.sh/capacity-type`).
+
+If you want to create a custom label, you should do that at the provisioner level.
+Then the pod can declare that custom label.
+
+
+See [nodeSelector](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector) in the Kubernetes documentation for details.
+
+### Node affinity
+
+Examples below illustrate how to use Node affinity to include (`In`) and exclude (`NotIn`) objects.
+See [Node affinity](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity) for details.
+When setting rules, the following Node affinity types define how hard or soft each rule is:
+
+* **requiredDuringSchedulingIgnoredDuringExecution**: This is a hard rule that must be met.
+* **preferredDuringSchedulingIgnoredDuringExecution**: This is a preference, but the pod can run on a node where it is not guaranteed.
+
+The `IgnoredDuringExecution` part of each tells the pod to keep running, even if conditions change on the node so the rules no longer matched.
+You can think of these concepts as `required` and `preferred`, since Kubernetes never implemented other variants of these rules.
+
+All examples below assume that the provisioner doesn't have constraints to prevent those zones from being used.
+The first constraint says you could use `us-west-2a` or `us-west-2b`, the second constraint makes it so only `us-west-2b` can be used.
+
+```yaml
+ affinity:
+ nodeAffinity:
+ requiredDuringSchedulingIgnoredDuringExecution:
+ nodeSelectorTerms:
+ - matchExpressions:
+ - key: "topology.kubernetes.io/zone"
+ operator: "In"
+ values: ["us-west-2a, us-west-2b"]
+ - key: "topology.kubernetes.io/zone"
+ operator: "In"
+ values: ["us-west-2b"]
+```
+
+Changing the second operator to `NotIn` would allow the pod to run in `us-west-2a` only:
+
+```yaml
+ - key: "topology.kubernetes.io/zone"
+ operator: "In"
+ values: ["us-west-2a, us-west-2b"]
+ - key: "topology.kubernetes.io/zone"
+ operator: "NotIn"
+ values: ["us-west-2b"]
+```
+
+Continuing to add to the example, `nodeAffinity` lets you define terms so if one term doesn't work it goes to the next one.
+Here, if `us-west-2a` is not available, the second term will cause the pod to run on a spot instance in `us-west-2d`.
+
+
+```yaml
+ affinity:
+ nodeAffinity:
+ requiredDuringSchedulingIgnoredDuringExecution:
+ nodeSelectorTerms:
+ - matchExpressions: # OR
+ - key: "topology.kubernetes.io/zone" # AND
+ operator: "In"
+ values: ["us-west-2a, us-west-2b"]
+ - key: "topology.kubernetes.io/zone" # AND
+ operator: "NotIn"
+ values: ["us-west-2b"]
+ - matchExpressions: # OR
+ - key: "karpenter.sh/capacity-type" # AND
+ operator: "In"
+ values: ["spot"]
+ - key: "topology.kubernetes.io/zone" # AND
+ operator: "In"
+ values: ["us-west-2d"]
+```
+In general, Karpenter will go through each of the `nodeSelectorTerms` in order and take the first one that works.
+However, if Karpenter fails to provision on the first `nodeSelectorTerms`, it will try again using the second one.
+If they all fail, Karpenter will fail to provision the pod.
+Karpenter will backoff and retry over time.
+So if capacity becomes available, it will schedule the pod without user intervention.
+
+## Taints and tolerations
+
+Taints are the opposite of affinity.
+Setting a taint on a node tells the scheduler to not run a pod on it unless the pod has explicitly said it can tolerate that taint.
+This example shows a Provisioner that was set up with a taint for only running pods that require a GPU, such as the following:
+
+
+```yaml
+apiVersion: karpenter.sh/v1alpha5
+kind: Provisioner
+metadata:
+ name: gpu
+spec:
+ requirements:
+ - key: karpenter.k8s.aws/instance-family
+ operator: In
+ values:
+ - p3
+ taints:
+ - key: nvidia.com/gpu
+ value: true
+ effect: "NoSchedule"
+```
+
+For a pod to request to run on a node that has provisioner, it could set a toleration as follows:
+
+```yaml
+apiVersion: v1
+kind: Pod
+metadata:
+ name: mygpupod
+spec:
+ containers:
+ - name: gpuapp
+ resources:
+ requests:
+ nvidia.com/gpu: 1
+ limits:
+ nvidia.com/gpu: 1
+ image: mygpucontainer
+ tolerations:
+ - key: "nvidia.com/gpu"
+ operator: "Exists"
+ effect: "NoSchedule"
+```
+See [Taints and Tolerations](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/) in the Kubernetes documentation for details.
+
+## Topology Spread
+
+By using the Kubernetes `topologySpreadConstraints` you can ask the provisioner to have pods push away from each other to limit the blast radius of an outage.
+Think of it as the Kubernetes evolution for pod affinity: it lets you relate pods with respect to nodes while still allowing spread.
+For example:
+
+```yaml
+spec:
+ topologySpreadConstraints:
+ - maxSkew: 1
+ topologyKey: "topology.kubernetes.io/zone"
+ whenUnsatisfiable: ScheduleAnyway
+ labelSelector:
+ matchLabels:
+ dev: jjones
+ - maxSkew: 1
+ topologyKey: "kubernetes.io/hostname"
+ whenUnsatisfiable: ScheduleAnyway
+ labelSelector:
+ matchLabels:
+ dev: jjones
+ - maxSkew: 1
+ topologyKey: "karpenter.sh/capacity-type"
+ whenUnsatisfiable: ScheduleAnyway
+ labelSelector:
+ matchLabels:
+ dev: jjones
+
+```
+Adding this to your podspec would result in:
+
+* Pods being spread across zones, hosts, and capacity-type (`topologyKey`).
+* The `dev` `labelSelector` will include all pods with the label of `dev=jjones` in topology calculations. It is recommended to use a selector to match all pods in a deployment.
+* No more than one pod difference in the number of pods on each host (`maxSkew`).
+For example, if there were three nodes and five pods the pods could be spread 1, 2, 2 or 2, 1, 2 and so on.
+If instead the spread were 5, pods could be 5, 0, 0 or 3, 2, 0, or 2, 1, 2 and so on.
+
+The three supported `topologyKey` values that Karpenter supports are:
+- `topology.kubernetes.io/zone`
+- `kubernetes.io/hostname`
+- `karpenter.sh/capacity-type`
+
+
+See [Pod Topology Spread Constraints](https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/) for details.
+
+## Pod affinity/anti-affinity
+
+By using the `podAffinity` and `podAntiAffinity` configuration on a pod spec, you can inform the provisioner of your desire for pods to schedule together or apart with respect to different topology domains. For example:
+
+```yaml
+spec:
+ affinity:
+ podAffinity:
+ requiredDuringSchedulingIgnoredDuringExecution:
+ - labelSelector:
+ matchExpressions:
+ - key: system
+ operator: In
+ values:
+ - backend
+ topologyKey: topology.kubernetes.io/zone
+ podAntiAffinity:
+ requiredDuringSchedulingIgnoredDuringExecution:
+ - labelSelector:
+ matchLabels:
+ app: inflate
+ topologyKey: kubernetes.io/hostname
+```
+
+The above pod affinity rule would cause the pod to only schedule in zones where a pod with the label `system=backend` is already running.
+
+The anti-affinity rule would cause it to avoid running on any node with a pod labeled `app=inflate`. If this anti-affinity term was on a deployment pod spec along with a matching `app=inflate` label, it would prevent more than one pod from the deployment from running on any single node.
+
+See [Inter-pod affinity and anti-affinity](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity) in the Kubernetes documentation for details.
+
+## Persistent Volume Topology
+
+Karpenter automatically detects storage scheduling requirements and includes them in node launch decisions.
+
+In the following example, the `StorageClass` defines zonal topologies for `us-west-2a` and `us-west-2b` and [binding mode `WaitForFirstConsumer`](https://kubernetes.io/docs/concepts/storage/storage-classes/#volume-binding-mode).
+When the pod is created, Karpenter follows references from the `Pod` to `PersistentVolumeClaim` to `StorageClass` and identifies that this pod requires storage in `us-west-2a` and `us-west-2b`.
+It randomly selects `us-west-2a`, provisions a node in that zone, and waits for kube-scheduler to bind the pod to the node.
+The CSI driver creates a `PersistentVolume` according to the `PersistentVolumeClaim` and gives it a node affinity rule for `us-west-2a`.
+
+Later on, the pod is deleted and a new pod is created that requests the same claim. This time, Karpenter identifies that a `PersistentVolume` already exists for the `PersistentVolumeClaim`, and includes its zone `us-west-2a` in the pod's scheduling requirements.
+
+```yaml
+apiVersion: v1
+kind: Pod
+metadata:
+ name: app
+spec:
+ containers: ...
+ volumes:
+ - name: storage
+ persistentVolumeClaim:
+ claimName: ebs-claim
+---
+kind: StorageClass
+apiVersion: storage.k8s.io/v1
+metadata:
+ name: ebs
+provisioner: ebs.csi.aws.com
+volumeBindingMode: WaitForFirstConsumer
+allowedTopologies:
+- matchLabelExpressions:
+ - key: topology.ebs.csi.aws.com/zone
+ values: ["us-west-2a", "us-west-2b"]
+---
+apiVersion: v1
+kind: PersistentVolumeClaim
+metadata:
+ name: ebs-claim
+spec:
+ accessModes:
+ - ReadWriteOnce
+ storageClassName: ebs
+ resources:
+ requests:
+ storage: 4Gi
+```
+
+{{% alert title="Note" color="primary" %}}
+☁️ AWS Specific
+
+The EBS CSI driver uses `topology.ebs.csi.aws.com/zone` instead of the standard `topology.kubernetes.io/zone` label. Karpenter is aware of label aliasing and translates this label into `topology.kubernetes.io/zone` in memory. When configuring a `StorageClass` for the EBS CSI Driver, you must use `topology.ebs.csi.aws.com/zone`.
+{{% /alert %}}
+
+{{% alert title="Note" color="primary" %}}
+The topology key `topology.kubernetes.io/region` is not supported. Legacy in-tree CSI providers specify this label. Instead, install an out-of-tree CSI provider. [Learn more about moving to CSI providers.](https://kubernetes.io/blog/2021/12/10/storage-in-tree-to-csi-migration-status-update/#quick-recap-what-is-csi-migration-and-why-migrate)
+{{% /alert %}}
+
+## Weighting Provisioners
+
+Karpenter allows you to order your provisioners using the `.spec.weight` field so that the node scheduler will deterministically attempt to schedule with one provisioner before another. Below are a few example use-cases that are now supported with the provisioner weighting semantic.
+
+### Savings Plans and Reserved Instances
+
+If you have purchased a [Savings Plan](https://aws.amazon.com/savingsplans/) or [Reserved Instances](https://aws.amazon.com/ec2/pricing/reserved-instances/), you may want to tell Karpenter to prioritize this reserved capacity ahead of other instance types.
+
+To enable this, you will need to tell the Karpenter controllers which instance types to prioritize and what is the maximum amount of capacity that should be provisioned using those instance types. We can set the `.spec.limits` on the provisioner to limit the capacity that can be launched by this provisioner. Combined with the `.spec.weight` value, we can tell Karpenter to pull from instance types in the reserved provisioner before defaulting to generic instance types.
+
+#### Reserved Instance Provisioner
+
+```yaml
+apiVersion: karpenter.sh/v1alpha5
+kind: Provisioner
+metadata:
+ name: reserved-instance
+spec:
+ weight: 50
+ requirements:
+ - key: "node.kubernetes.io/instance-type"
+ operator: In
+ values: ["c4.large"]
+ limits:
+ cpu: 100
+```
+
+#### Default Provisioner
+
+```yaml
+apiVersion: karpenter.sh/v1alpha5
+kind: Provisioner
+metadata:
+ name: default
+spec:
+ requirements:
+ - key: karpenter.sh/capacity-type
+ operator: In
+ values: ["spot", "on-demand"]
+ - key: kubernetes.io/arch
+ operator: In
+ values: ["amd64"]
+```
+
+### Default Node Configuration
+
+Pods that do not specify node selectors or affinities can potentially be assigned to any node with any configuration. There may be cases where you require these pods to schedule to a specific capacity type or architecture but assigning the relevant node selectors or affinities to all these workload pods may be too tedious or infeasible. Instead, we want to define a cluster-wide default configuration for nodes launched using Karpenter.
+
+By assigning a higher `.spec.weight` value and restricting a provisioner to a specific capacity type or architecture, we can set default configuration for the nodes launched by pods that don't have node configuration restrictions.
+
+#### Default Provisioner
+
+```yaml
+apiVersion: karpenter.sh/v1alpha5
+kind: Provisioner
+metadata:
+ name: default
+spec:
+ weight: 50
+ requirements:
+ - key: karpenter.sh/capacity-type
+ operator: In
+ values: ["spot", "on-demand"]
+ - key: kubernetes.io/arch
+ operator: In
+ values: ["amd64"]
+```
+
+#### ARM-64 Specific Provisioner
+
+```yaml
+apiVersion: karpenter.sh/v1alpha5
+kind: Provisioner
+metadata:
+ name: arm64-specific
+spec:
+ requirements:
+ - key: karpenter.sh/capacity-type
+ operator: In
+ values: ["spot", "on-demand"]
+ - key: kubernetes.io/arch
+ operator: In
+ values: ["arm64"]
+ - key: node.kubernetes.io/instance-type
+ operator: In
+ values: ["a1.large", "a1.xlarge"]
+```
+
+{{% alert title="Note" color="primary" %}}
+Based on the way that Karpenter performs pod batching and bin packing, it is not guaranteed that Karpenter will always choose the highest priority provisioner given specific requirements. For example, if a pod can't be scheduled with the highest priority provisioner it will force creation of a node using a lower priority provisioner which may allow other pods from that batch to also schedule on that node. The behavior may also occur if existing capacity is available, as the kube-scheduler will schedule the pods instead of allowing Karpenter to provision a new node.
+{{% /alert %}}
+
+## Advanced Scheduling Techniques
+
+### `Exists` Operator
+
+The `Exists` operator can be used on a provisioner to provide workload segregation across nodes.
+
+```yaml
+...
+ requirements:
+ - key: company.com/team
+ operator: Exists
+...
+```
+
+With the requirement on the provisioner in place, workloads can optionally specify a custom value as a required node affinity or node selector. Karpenter will then label the nodes it launches for these pods which prevents `kube-scheduler` from scheduling conflicting pods to those nodes. This provides a way to more dynamically isolate workloads without requiring a unique provisioner for each workload subset.
+
+```yaml
+ nodeSelector:
+ company.com/team: team-a
+```
+{{% alert title="Note" color="primary" %}}
+If a workload matches the provisioner but doesn't specify a label, Karpenter will generate a random label for the node.
+{{% /alert %}}
+
+### On-Demand/Spot Ratio Split
+
+Taking advantage of Karpenter's ability to assign labels to node and using a topology spread across those labels enables a crude method for splitting a workload across on-demand and spot instances in a desired ratio.
+
+To do this, we create a provisioner each for spot and on-demand with disjoint values for a unique new label called `capacity-spread`. In the example below, we provide four unique values for the spot provisioner and one value for the on-demand provisioner. When we spread across our new label evenly, we'll end up with a ratio of 4:1 spot to on-demand nodes.
+
+{{% alert title="Warning" color="warning" %}}
+This is not identical to a topology spread with a specified ratio. We are constructing 'virtual domains' to spread evenly across and the ratio of those 'virtual domains' to spot and on-demand happen to coincide with the desired spot to on-demand ratio. As an example, if you launch pods using the provided example, Karpenter will launch nodes with `capacity-spread` labels of 1, 2, 3, 4, and 5. `kube-scheduler` will then schedule evenly across those nodes to give the desired ratio.
+{{% /alert %}}
+
+#### Spot Provisioner
+```yaml
+ requirements:
+ - key: "karpenter.sh/capacity-type"
+ operator: In
+ values: [ "spot"]
+ - key: capacity-spread
+ operator: In
+ values:
+ - "2"
+ - "3"
+ - "4"
+ - "5"
+```
+
+#### On-Demand Provisioner
+```yaml
+ requirements:
+ - key: "karpenter.sh/capacity-type"
+ operator: In
+ values: [ "on-demand"]
+ - key: capacity-spread
+ operator: In
+ values:
+ - "1"
+```
+
+#### Workload Topology Spread Constraint
+
+```yaml
+ topologySpreadConstraints:
+ - maxSkew: 1
+ topologyKey: capacity-spread
+ whenUnsatisfiable: DoNotSchedule
+```
diff --git a/website/content/en/v0.26.1/concepts/settings.md b/website/content/en/v0.26.1/concepts/settings.md
new file mode 100644
index 000000000000..575a578c8d93
--- /dev/null
+++ b/website/content/en/v0.26.1/concepts/settings.md
@@ -0,0 +1,117 @@
+---
+title: "Settings"
+linkTitle: "Settings"
+weight: 5
+description: >
+ Configure Karpenter
+---
+
+There are two main configuration mechanisms that can be used to configure Karpenter: Environment Variables / CLI parameters to the controller and webhook binaries and the `karpenter-global-settings` config-map.
+
+## Environment Variables / CLI Flags
+
+[comment]: <> (the content below is generated from hack/docs/configuration_gen_docs.go)
+
+| Environment Variable | CLI Flag | Description |
+|--|--|--|
+| DISABLE_WEBHOOK | \-\-disable-webhook | Disable the admission and validation webhooks (default = false)|
+| ENABLE_PROFILING | \-\-enable-profiling | Enable the profiling on the metric endpoint (default = false)|
+| HEALTH_PROBE_PORT | \-\-health-probe-port | The port the health probe endpoint binds to for reporting controller health (default = 8081)|
+| KARPENTER_SERVICE | \-\-karpenter-service | The Karpenter Service name for the dynamic webhook certificate|
+| KUBE_CLIENT_BURST | \-\-kube-client-burst | The maximum allowed burst of queries to the kube-apiserver (default = 300)|
+| KUBE_CLIENT_QPS | \-\-kube-client-qps | The smoothed rate of qps to kube-apiserver (default = 200)|
+| LEADER_ELECT | \-\-leader-elect | Start leader election client and gain leadership before executing the main loop. Enable this when running replicated components for high availability. (default = true)|
+| MEMORY_LIMIT | \-\-memory-limit | Memory limit on the container running the controller. The GC soft memory limit is set to 90% of this value. (default = -1)|
+| METRICS_PORT | \-\-metrics-port | The port the metric endpoint binds to for operating metrics about the controller itself (default = 8080)|
+| WEBHOOK_PORT | \-\-webhook-port | The port the webhook endpoint binds to for validation and mutation of resources (default = 8443)|
+
+[comment]: <> (end docs generated content from hack/docs/configuration_gen_docs.go)
+
+## ConfigMap
+
+Karpenter installs a default configuration via its Helm chart that should work for most. Additional configuration can be performed by editing the `karpenter-global-settings` configmap within the namespace that Karpenter was installed in.
+
+```yaml
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: karpenter-global-settings
+ namespace: karpenter
+data:
+ # The maximum length of a batch window. The longer this is, the more pods we can consider for provisioning at one
+ # time which usually results in fewer but larger nodes.
+ batchMaxDuration: 10s
+ # The maximum amount of time with no new ending pods that if exceeded ends the current batching window. If pods arrive
+ # faster than this time, the batching window will be extended up to the maxDuration. If they arrive slower, the pods
+ # will be batched separately.
+ batchIdleDuration: 1s
+ # [REQUIRED] The kubernetes cluster name for resource discovery
+ aws.clusterName: karpenter-cluster
+ # [REQUIRED] The external kubernetes cluster endpoint for new nodes to connect with
+ aws.clusterEndpoint: https://00000000000000000000000000000000.gr7.us-west-2.eks.amazonaws.com
+ # The default instance profile to use when provisioning nodes
+ aws.defaultInstanceProfile: karpenter-instance-profile
+ # If true, then instances that support pod ENI will report a vpc.amazonaws.com/pod-eni resource
+ aws.enablePodENI: "false"
+ # Indicates whether new nodes should use ENI-based pod density. DEPRECATED: Use `.spec.kubeletConfiguration.maxPods` to set pod density on a per-provisioner basis
+ aws.enableENILimitedPodDensity: "true"
+ # If true, then assume we can't reach AWS services which don't have a VPC endpoint
+ # This also has the effect of disabling look-ups to the AWS pricing endpoint
+ aws.isolatedVPC: "false"
+ # The node naming convention (either "ip-name" or "resource-name"; use "ip-name" for resource DNS names such as i-0123456789.ec2.internal and "resource-name" when using the external cloud provider)
+ aws.nodeNameConvention: ip-name
+ # The VM memory overhead as a percent that will be subtracted
+ # from the total memory for all instance types
+ aws.vmMemoryOverheadPercent: "0.075"
+ # aws.interruptionQueueName is disabled if not specified. Enabling interruption handling may
+ # require additional permissions on the controller service account. Additional permissions are outlined in the docs
+ aws.interruptionQueueName: karpenter-cluster
+ # Global tags are specified by including a JSON object of string to string from tag key to tag value
+ aws.tags: '{"custom-tag1-key": "custom-tag-value", "custom-tag2-key": "custom-tag-value"}'
+```
+
+### Feature Gates
+Karpenter uses [feature gates](https://kubernetes.io/docs/reference/command-line-tools-reference/feature-gates/#feature-gates-for-alpha-or-beta-features). You can add a feature gate's ConfigKey to the `karpenter-global-settings` ConfigMap above with the desired value.
+
+| Feature | Default | Config Key | Stage | Since | Until |
+|---------|---------|---------------------------|-------|---------|-------|
+| Drift | false | featureGates.driftEnabled | Alpha | v0.21.0 | |
+
+
+### Batching Parameters
+
+The batching parameters control how Karpenter batches an incoming stream of pending pods. Reducing these values may trade off a slightly faster time from pending pod to node launch, in exchange for launching smaller nodes. Increasing the values can do the inverse. Karpenter provides reasonable defaults for these values, but if you have specific knowledge about your workloads you can tweak these parameters to match the expected rate of incoming pods.
+
+For a standard deployment scale-up, the pods arrive at the QPS setting of the `kube-controller-manager`, and the default values are typically fine. These settings are intended for use cases where other systems may create large numbers of pods over a period of many seconds or minutes and there is a desire to batch them together.
+
+#### `batchIdleDuration`
+
+The `batchIdleDuration` is the period of time that a new pending pod extends the current batching window. This can be increased to handle scenarios where pods arrive slower than one second part, but it would be preferable if they were batched together onto a single larger node.
+
+This value is expressed as a string value like `10s`, `1m` or `2h45m`. The valid time units are `ns`, `us` (or `µs`), `ms`, `s`, `m`, `h`.
+
+#### `batchMaxDuration`
+
+The `batchMaxDuration` is the maximum period of time a batching window can be extended to. Increasing this value will allow the maximum batch window size to increase to collect more pending pods into a single batch at the expense of a longer delay from when the first pending pod was created.
+
+This value is expressed as a string value like `10s`, `1m` or `2h45m`. The valid time units are `ns`, `us` (or `µs`), `ms`, `s`, `m`, `h`.
+
+### AWS Parameters
+
+#### `aws.tags`
+
+Global tags are applied to __all__ AWS infrastructure resources deployed by Karpenter. These resources include:
+
+- Launch Templates
+- Volumes
+- Instances
+
+Tags are specified by including a JSON object of string to string from tag key to tag value.
+
+```yaml
+ aws.tags: '{"custom-tag1-key": "custom-tag-value", "custom-tag2-key": "custom-tag-value"}'
+```
+
+{{% alert title="Note" color="primary" %}}
+Since you can specify tags at the global level and in the `AWSNodeTemplate` resource, if a key is specified in both locations, the `AWSNodeTemplate` tag value will override the global tag.
+{{% /alert %}}
diff --git a/website/content/en/v0.26.1/contributing/_index.md b/website/content/en/v0.26.1/contributing/_index.md
new file mode 100644
index 000000000000..10bb749d39dc
--- /dev/null
+++ b/website/content/en/v0.26.1/contributing/_index.md
@@ -0,0 +1,7 @@
+---
+title: "Contributing"
+linkTitle: "Contributing"
+weight: 100
+description: >
+ Learn about how to contribute to Karpenter
+---
diff --git a/website/content/en/v0.26.1/contributing/design-guide.md b/website/content/en/v0.26.1/contributing/design-guide.md
new file mode 100644
index 000000000000..b95b992c1f4c
--- /dev/null
+++ b/website/content/en/v0.26.1/contributing/design-guide.md
@@ -0,0 +1,85 @@
+---
+title: "Design Guide"
+linkTitle: "Design Guide"
+weight: 20
+description: >
+ Read this before making large changes to Karpenter
+---
+
+Technical designs are essential to building robust, intuitive, and performant products that delight users. Writing a design can accelerate decision making and avoid wasting time on an implementation that never lands. But what makes a good design? These guidelines were authored with the Karpenter community in mind, but apply broadly to the development of Kubernetes Operators.
+
+Designs don’t have to be long or formal, and should match the scope of the problem they’re trying to solve.
+
+* Are there multiple potential solutions?
+* Will users need to be aware of the changes?
+* Would it be painful to discard a rejected implementation?
+* When in doubt, write a 1 pager.
+
+## Tell a Story
+
+A design is a story that connects a user need with a technical direction that solves the need. Designs come in all shapes and sizes, and this document intentionally avoids prescribing a one-size-fits-all template. There’s no substitute for an author thinking deeply about a problem space, and mapping that to a clear story that walks readers through the ideas and helps them reason about a solution space. Keep readers engaged with concise language and make every word count.
+
+Your story should include,
+
+* [Context] Include some technical background that helps readers think about your idea in context
+* [Problem] Clearly identify the problem to be solved and some guiding principles to help think about the solutions
+* [Solutions] Talk through different potential solutions and their tradeoffs. Include diagrams to clarify concepts
+* [Recommendation] Make a recommendation, but don’t be overly invested in it
+
+The best way to improve your story telling skills is to write and review designs. Seek inspiration from recent designs in the project as well as from other domains. Focus on your audience and continuously reread and refine your design with their perspective in mind.
+
+## Gather Broad Feedback
+
+The bigger the change, the more likely your design will have broader implications than intended. Be vocal about design ideas as they’re explored and run them by engineering leaders in relevant systems. Surface your design ideas at the Karpenter working group, or asynchronously on the [Kubernetes Slack channel for Karpenter](https://kubernetes.slack.com/archives/C02SFFZSA2K).
+
+The Kubernetes community is also a valuable source of feedback from both users and Kubernetes developers. Does your design touch scoped owned by any Kubernetes SIGs? Consider discussing the design ideas at the SIG or in their slack channel. Socializing high level ideas before the review gives your audience more time to think about possible interactions with existing and future systems.
+
+It can be tempting to rush to solutions that unblock user adoption or ease user pain, but the wrong solution can have a greater negative impact on users than it solves. It’s impossible to know all future use cases and how your design choices may impact them, but the more thorough your investigation, the more likely your solution is to deliver long term value.
+
+## Simple Solutions to Complex Problems
+
+The best solutions are invisible to users and “Just Work™”. It’s easy to forget that users have business problems to focus on and each parameter and behavior your design introduces increases user cognitive load. Pragmatically, it’s not always possible to meet the broad requirements of Kubernetes without providing options, but solution spaces typically include a spectrum of configuration complexity. Recognize that a solution for one user segment may be directly at odds with another or create long term technical debt for the project. Often, requirements only exist to workaround bugs or missing features in related systems. Deep dive requirements until you’re certain they’re necessary and ensure each bit of complexity justifies its existence.
+
+## Common Gotchas
+
+### Does your change introduce new APIs?
+
+APIs are notoriously hard to get right and even harder to change. Kubernetes defines an [api deprecation policy](https://kubernetes.io/docs/reference/using-api/deprecation-policy/) that helps systems make backwards incompatible changes to APIs before graduating to a stable API with compatibility guarantees. Once an API is stable, features are typically via [feature gates](https://kubernetes.io/docs/reference/command-line-tools-reference/feature-gates/), which allows for experimentation and deprecation.
+
+Think about how your API changes impact existing parameters and their deprecation policies. Consider how the user interacts with the product as a whole and if the feature supersedes or overlaps with existing concepts. Weigh the costs of deprecating existing features to the benefit of simplifying the product for all future users. The answer will change depending on the maturity of the product and breadth of adoption.
+
+Build minimal and maintainable APIs by:
+
+* Push back on requirements that introduces concepts for all users to solve problems for a few.
+* Identify an opinionated default that solves the majority of use cases.
+* Delay introducing a parameter into your API surface until users demand it; you can always add it later.
+* Rely on existing concepts and idioms from the Kubernetes ecosystem. Look to [Kubernetes APIs](https://pkg.go.dev/k8s.io/api/core/v1) and projects like [Tekton](https://github.com/tektoncd/cli), [Knative](https://github.com/knative/serving), and [ACK](https://github.com/aws-controllers-k8s) and find concepts that will be familiar to users.
+* Take advantage of opportunities to refine APIs while the impact of backwards incompatibility is small
+
+### Does your change behave differently with different cloud providers?
+
+Kubernetes is an open standard that users rely on to work across vendors. Users care deeply about this, as it minimizes the technical complexity to operate in different environments. Identify whether or not your feature varies across cloud providers or are bespoke to a specific provider. For some features, it’s possible to rely on existing vendor neutral abstractions. For others, it’s possible to define a neutral abstraction that cloud providers can implement.
+
+Achieving consensus for new neutral concepts is hard. Often, the best path is to demonstrate value on a single vendor, and work to achieve neutrality as a followup effort. Be cautious about introducing or changing vendor neutral interfaces, as it will require changes from all providers. Similarly, invest heavily in getting these interfaces right in the early stages. As projects mature, these interfaces are rarely changed.
+
+### Does your change expose details users may rely on?
+
+Kubernetes based systems often use a layered architectural pattern that exposes underlying layers of abstraction. This approach enables broad extensibility and allows other systems to integrate at multiple layers of the stack. For example, Karpenter creates EC2 instances in your AWS account. This enables you to view logs or react to their creation with other automation without requiring any features from Karpenter. However, Karpenter also applies specific EC2 tags to the EC2 instances. Are the tags an implementation detail or an interface? What can you change without breaking compatibility?
+
+Be intentional and explicit about the interface and implementation of your design and ensure that this is communicated to users. If implementation details are exposed through other APIs, expect users to rely on them as an interface unless told otherwise. In general, aim to minimize the project’s interface to maximize future flexibility.
+
+### Does your change have a risk of breaking an undocumented invariant?
+
+Systems often contain mechanisms that are implicitly assumed as invariant, but may not be obvious, especially over time. Existing mechanisms may not be extensible enough to support your design, and may require them to be rewritten as part of the design scope. Be aware that regression tests never have complete coverage and well intentioned engineers thought carefully about how things were done before your requirements.
+
+* Identify the fundamental reason the existing mechanism is insufficient and be able to explain it in plain terms.
+* Separate the new mechanism from the new feature that relies on it.
+* Clean up after yourself and avoid getting stuck halfway between old and new mechanisms.
+
+### Does your change impact performance?
+
+Users have high expectations for performance on Kubernetes. Karpenter is especially sensitive, as it has the potential to impact application availability during traffic spikes. Think about how your solution scales, and look for opportunities to improve performance at the design level. Often, good designs don’t require trading-off a great UX for performance. Make it work, make it fast, make it pretty.
+
+* Beware code that scales linearly with pods or nodes. Milliseconds in testing turn into seconds at scale.
+* Cloud provider read APIs can have surprisingly high latency and low limits, use caching to minimize calls.
+* Increases to memory and CPU usage increase capex cost for operators. Profile and optimize your implementations.
diff --git a/website/content/en/v0.26.1/contributing/development-guide.md b/website/content/en/v0.26.1/contributing/development-guide.md
new file mode 100644
index 000000000000..5d8804e4ddd8
--- /dev/null
+++ b/website/content/en/v0.26.1/contributing/development-guide.md
@@ -0,0 +1,153 @@
+---
+title: "Development Guide"
+linkTitle: "Development Guide"
+weight: 80
+description: >
+ Set up a Karpenter development environment
+---
+
+## Dependencies
+
+The following tools are required for contributing to the Karpenter project.
+
+| Package | Version | Install |
+| ------------------------------------------------------------------ | -------- | ---------------------------------------------- |
+| [go](https://golang.org/dl/) | v1.19+ | [Instructions](https://golang.org/doc/install) |
+| [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) | | `brew install kubectl` |
+| [helm](https://helm.sh/docs/intro/install/) | | `brew install helm` |
+| Other tools | | `make toolchain` |
+
+## Developing
+
+### Setup / Teardown
+
+Based on how you are running your Kubernetes cluster, follow the [Environment specific setup](#environment-specific-setup) to configure your environment before you continue. You can choose to either run the Karpenter controller locally on your machine, pointing to the Kubernetes cluster specified in your `~/.kube/config` or inside the Kubernetes cluster specified in your `~/.kube/config` deployed with [Helm](https://helm.sh/).
+
+#### Locally
+
+Once you have your environment set up, run the following commands to run the Karpenter Go binary against the Kubernetes cluster specified in your `~/.kube/config`
+
+```bash
+make run
+```
+
+#### Inside a Kubernetes Cluster
+
+Once you have your environment set up, to install Karpenter in the Kubernetes cluster specified in your `~/.kube/config` run the following commands.
+
+```bash
+make apply # Install Karpenter
+make delete # Uninstall Karpenter
+```
+
+### Developer Loop
+
+* Make sure dependencies are installed
+ * Run `make codegen` to make sure yaml manifests are generated
+ * Run `make toolchain` to install cli tools for building and testing the project
+* You will need a personal development image repository (e.g. ECR)
+ * Make sure you have valid credentials to your development repository.
+ * `$KO_DOCKER_REPO` must point to your development repository
+ * Your cluster must have permissions to read from the repository
+
+### Build and Deploy
+
+*Note: these commands do not rely on each other and may be executed independently*
+
+```bash
+make apply # quickly deploy changes to your cluster
+make presubmit # run codegen, lint, and tests
+```
+
+If you are only interested in building the Karpenter images and not deploying the updated release to your cluster immediately with Helm, you can run
+
+```bash
+make build # build and push the karpenter images
+```
+
+### Testing
+
+```bash
+make test # E2E correctness tests
+make battletest # More rigorous tests run in CI environment
+```
+
+### Change Log Level
+
+```bash
+kubectl patch configmap config-logging -n karpenter --patch '{"data":{"loglevel.controller":"debug"}}' # Debug Level
+kubectl patch configmap config-logging -n karpenter --patch '{"data":{"loglevel.controller":"info"}}' # Info Level
+```
+
+### Debugging Metrics
+
+OSX:
+
+```bash
+open http://localhost:8080/metrics && kubectl port-forward service/karpenter -n karpenter 8080
+```
+
+Linux:
+
+```bash
+gio open http://localhost:8080/metrics && kubectl port-forward service/karpenter -n karpenter 8080
+```
+
+### Tailing Logs
+
+While you can tail Karpenter's logs with kubectl, there's a number of tools out there that enhance the experience. We recommend [Stern](https://pkg.go.dev/github.com/planetscale/stern#section-readme):
+
+```bash
+stern -n karpenter -l app.kubernetes.io/name=karpenter
+```
+
+## Environment specific setup
+
+### AWS
+
+For local development on Karpenter you will need a Docker repo which can manage your images for Karpenter components.
+You can use the following command to provision an ECR repository.
+
+```bash
+aws ecr create-repository \
+ --repository-name karpenter/controller \
+ --image-scanning-configuration scanOnPush=true \
+ --region "${AWS_DEFAULT_REGION}"
+aws ecr create-repository \
+ --repository-name karpenter/webhook \
+ --image-scanning-configuration scanOnPush=true \
+ --region "${AWS_DEFAULT_REGION}"
+```
+
+Once you have your ECR repository provisioned, configure your Docker daemon to authenticate with your newly created repository.
+
+```bash
+export KO_DOCKER_REPO="${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com/karpenter"
+aws ecr get-login-password --region "${AWS_DEFAULT_REGION}" | docker login --username AWS --password-stdin "${KO_DOCKER_REPO}"
+```
+
+Finally, to deploy the correct IAM permissions, including the instance profile for provisioned nodes, run
+
+```bash
+make setup
+```
+
+## Profiling memory
+Karpenter exposes a pprof endpoint on its metrics port.
+
+Learn about profiling with pprof: https://jvns.ca/blog/2017/09/24/profiling-go-with-pprof/
+
+### Prerequisites
+```
+brew install graphviz
+go install github.com/google/pprof@latest
+```
+
+### Get a profile
+```
+# Connect to the metrics endpoint
+kubectl port-forward service/karpenter -n karpenter 8080
+open http://localhost:8080/debug/pprof/
+# Visualize the memory
+go tool pprof -http 0.0.0.0:9000 localhost:8080/debug/pprof/heap
+```
diff --git a/website/content/en/v0.26.1/contributing/working-group.md b/website/content/en/v0.26.1/contributing/working-group.md
new file mode 100644
index 000000000000..c0910e6e9657
--- /dev/null
+++ b/website/content/en/v0.26.1/contributing/working-group.md
@@ -0,0 +1,13 @@
+---
+title: "Working Group"
+linkTitle: "Working Group"
+weight: 10
+description: >
+ Join the Karpenter Working Group
+---
+
+Karpenter's community is open to everyone.
+
+- All invites are managed through our [Calendar](https://calendar.google.com/calendar/u/0?cid=N3FmZGVvZjVoZWJkZjZpMnJrMmplZzVqYmtAZ3JvdXAuY2FsZW5kYXIuZ29vZ2xlLmNvbQ).
+- Alternatively, you can use our [iCal Export](https://calendar.google.com/calendar/ical/7qfdeof5hebdf6i2rk2jeg5jbk%40group.calendar.google.com/public/basic.ics) to add the events to Outlook or other email providers.
+- Add future questions or read past discussions in our [Working Group Log](https://docs.google.com/document/d/18BT0AIMugpNpiSPJNlcAL2rv69yAE6Z06gUVj7v_clg).
diff --git a/website/content/en/v0.26.1/faq.md b/website/content/en/v0.26.1/faq.md
new file mode 100644
index 000000000000..1e3fe1dfa041
--- /dev/null
+++ b/website/content/en/v0.26.1/faq.md
@@ -0,0 +1,220 @@
+---
+title: "FAQs"
+linkTitle: "FAQs"
+weight: 90
+description: >
+ Review Karpenter Frequently Asked Questions
+---
+## General
+
+### How does a provisioner decide to manage a particular node?
+See [Configuring provisioners]({{< ref "./concepts/#configuring-provisioners" >}}) for information on how Karpenter provisions and manages nodes.
+
+### What cloud providers are supported?
+AWS is the first cloud provider supported by Karpenter, although it is designed to be used with other cloud providers as well.
+
+### Can I write my own cloud provider for Karpenter?
+Yes, but there is no documentation yet for it.
+Start with Karpenter's GitHub [cloudprovider](https://github.com/aws/karpenter-core/tree{{< githubRelRef >}}pkg/cloudprovider) documentation to see how the AWS provider is built, but there are other sections of the code that will require changes too.
+
+### What operating system nodes does Karpenter deploy?
+By default, Karpenter uses Amazon Linux 2 images.
+
+### Can I provide my own custom operating system images?
+Karpenter has multiple mechanisms for configuring the [operating system]({{< ref "./concepts/node-templates/#spec-amiselector" >}}) for your nodes.
+
+### Can Karpenter deal with workloads for mixed architecture cluster (arm vs. amd)?
+Karpenter is flexible to multi architecture configurations using [well known labels]({{< ref "./concepts/scheduling/#supported-labels">}}).
+
+### What RBAC access is required?
+All of the required RBAC rules can be found in the helm chart template.
+See [clusterrolebinding.yaml](https://github.com/aws/karpenter/blob{{< githubRelRef >}}charts/karpenter/templates/clusterrolebinding.yaml), [clusterrole.yaml](https://github.com/aws/karpenter/blob{{< githubRelRef >}}charts/karpenter/templates/clusterrole.yaml), [rolebinding.yaml](https://github.com/aws/karpenter/blob{{< githubRelRef >}}charts/karpenter/templates/rolebinding.yaml), and [role.yaml](https://github.com/aws/karpenter/blob{{< githubRelRef >}}charts/karpenter/templates/role.yaml) files for details.
+
+### Can I run Karpenter outside of a Kubernetes cluster?
+Yes, as long as the controller has network and IAM/RBAC access to the Kubernetes API and your provider API.
+
+## Compatibility
+
+### Which versions of Kubernetes does Karpenter support?
+Karpenter is tested with Kubernetes v1.20-v1.24.
+
+### What Kubernetes distributions are supported?
+Karpenter documents integration with a fresh install of the latest AWS Elastic Kubernetes Service (EKS).
+Existing EKS distributions can be used, but this use case has not yet been documented.
+Other Kubernetes distributions (KOPs, etc.) can be used, but setting up cloud provider permissions for those distributions has not been documented.
+
+### How does Karpenter interact with AWS node group features?
+Provisioners are designed to work alongside static capacity management solutions like EKS Managed Node Groups and EC2 Auto Scaling Groups.
+You can manage all capacity using provisioners, use a mixed model with dynamic and statically managed capacity, or use a fully static approach.
+We expect most users will use a mixed approach in the near term and provisioner-managed in the long term.
+
+
+### How does Karpenter interact with Kubernetes features?
+* Kubernetes Cluster Autoscaler: Karpenter can work alongside cluster autoscaler.
+See [Kubernetes cluster autoscaler]({{< ref "./concepts/#kubernetes-cluster-autoscaler" >}}) for details.
+* Kubernetes Scheduler: Karpenter focuses on scheduling pods that the Kubernetes scheduler has marked as unschedulable.
+See [Scheduling]({{< ref "./concepts/scheduling" >}}) for details on how Karpenter interacts with the Kubernetes scheduler.
+
+## Provisioning
+
+### What features does the Karpenter provisioner support?
+See [Provisioner API]({{< ref "./concepts/provisioners" >}}) for provisioner examples and descriptions of features.
+
+### Can I create multiple (team-based) provisioners on a cluster?
+Yes, provisioners can identify multiple teams based on labels.
+See [Provisioner API]({{< ref "./concepts/provisioners" >}}) for details.
+
+### If multiple provisioners are defined, which will my pod use?
+
+Pending pods will be handled by any Provisioner that matches the requirements of the pod.
+There is no ordering guarantee if multiple provisioners match pod requirements.
+We recommend that Provisioners are setup to be mutually exclusive.
+Read more about this recommendation in the [EKS Best Practices Guide for Karpenter](https://aws.github.io/aws-eks-best-practices/karpenter/#create-provisioners-that-are-mutually-exclusive).
+To select a specific provisioner, use the node selector `karpenter.sh/provisioner-name: my-provisioner`.
+
+### How can I configure Karpenter to only provision pods for a particular namespace?
+
+There is no native support for namespaced based provisioning.
+Karpenter can be configured to provision a subset of pods based on a combination of taints/tolerations and node selectors.
+This allows Karpenter to work in concert with the `kube-scheduler` in that the same mechanisms that `kube-scheduler` uses to determine if a pod can schedule to an existing node are also used for provisioning new nodes.
+This avoids scenarios where pods are bound to nodes that were provisioned by Karpenter which Karpenter would not have bound itself.
+If this were to occur, a node could remain non-empty and have its lifetime extended due to a pod that wouldn't have caused the node to be provisioned had the pod been unschedulable.
+
+We recommend using Kubernetes native scheduling constraints to achieve namespace based scheduling segregation. Using native scheduling constraints ensures that Karpenter, `kube-scheduler` and any other scheduling or auto-provisioning mechanism all have an identical understanding of which pods can be scheduled on which nodes. This can be enforced via policy agents, an example of which can be seen [here](https://blog.mikesir87.io/2022/01/creating-tenant-node-pools-with-karpenter/).
+
+### Can I add SSH keys to a provisioner?
+
+Karpenter does not offer a way to add SSH keys via provisioners or secrets to the nodes it manages.
+However, you can use Session Manager (SSM) or EC2 Instance Connect to gain shell access to Karpenter nodes.
+See [Node NotReady]({{< ref "./troubleshooting/#node-notready" >}}) troubleshooting for an example of starting an SSM session from the command line or [EC2 Instance Connect](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-connect-set-up.html) documentation to connect to nodes using SSH.
+
+Though not recommended, if you need to access Karpenter-managed nodes without AWS credentials, you can add SSH keys using AWSNodeTemplate.
+See [Custom User Data]({{< ref "./concepts/node-templates/#spec-userdata" >}}) for details.
+
+### Can I set total limits of CPU and memory for a provisioner?
+Yes, the setting is provider-specific.
+See examples in [Accelerators, GPU]({{< ref "./concepts/scheduling/#accelerators-gpu-resources" >}}) Karpenter documentation.
+
+### Can I mix spot and on-demand EC2 run types?
+Yes, see [Provisioning]({{< ref "./concepts/provisioners#examples" >}}) for an example.
+
+### Can I restrict EC2 instance types?
+
+* Attribute-based requests are currently not possible.
+* You can select instances with special hardware, such as gpu.
+
+### Can I use Bare Metal instance types?
+
+Yes, Karpenter supports provisioning metal instance types when a Provisioner's `node.kubernetes.io/instance-type` Requirements only include `metal` instance types. If other instance types fulfill pod requirements, then Karpenter will prioritize all non-metal instance types before metal ones are provisioned.
+
+### How does Karpenter dynamically select instance types?
+
+Karpenter batches pending pods and then binpacks them based on CPU, memory, and GPUs required, taking into account node overhead, VPC CNI resources required, and daemonsets that will be packed when bringing up a new node.
+By default Karpenter uses C, M, and R >= Gen 3 instance types, but it can be constrained in the provisioner spec with the [instance-type](https://kubernetes.io/docs/reference/labels-annotations-taints/#nodekubernetesioinstance-type) well-known label in the requirements section.
+After the pods are binpacked on the most efficient instance type (i.e. the smallest instance type that can fit the pod batch), Karpenter takes 59 other instance types that are larger than the most efficient packing, and passes all 60 instance type options to an API called Amazon EC2 Fleet.
+The EC2 fleet API attempts to provision the instance type based on an allocation strategy.
+If you are using the on-demand capacity type, then Karpenter uses the `lowest-price` allocation strategy.
+So fleet will provision the lowest priced instance type it can get from the 60 instance types Karpenter passed to the EC2 fleet API.
+If the instance type is unavailable for some reason, then fleet will move on to the next cheapest instance type.
+If you are using the spot capacity type, Karpenter uses the price-capacity-optimized allocation strategy. This tells fleet to find the instance type that EC2 has the most capacity for while also considering price. This allocation strategy will balance cost and decrease the probability of a spot interruption happening in the near term.
+See [Choose the appropriate allocation strategy](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-allocation-strategy.html#ec2-fleet-allocation-use-cases) for information on fleet optimization.
+
+### What if there is no Spot capacity? Will Karpenter use On-Demand?
+
+The best defense against running out of Spot capacity is to allow Karpenter to provision as many different instance types as possible.
+Even instance types that have higher specs, e.g. vCPU, memory, etc., than what you need can still be cheaper in the Spot market than using On-Demand instances.
+When Spot capacity is constrained, On-Demand capacity can also be constrained since Spot is fundamentally spare On-Demand capacity.
+Allowing Karpenter to provision nodes from a large, diverse set of instance types will help you to stay on Spot longer and lower your costs due to Spot’s discounted pricing.
+Moreover, if Spot capacity becomes constrained, this diversity will also increase the chances that you’ll be able to continue to launch On-Demand capacity for your workloads.
+
+If your Karpenter Provisioner specifies flexibility to both Spot and On-Demand capacity, Karpenter will attempt to provision On-Demand capacity if there is no Spot capacity available.
+However, it’s strongly recommended that you specify at least 20 instance types in your Provisioner (or none and allow Karpenter to pick the best instance types) as our research indicates that this additional diversity increases the chances that your workloads will not need to launch On-Demand capacity at all.
+Today, Karpenter will warn you if the number of instances in your Provisioner isn’t sufficiently diverse.
+
+Technically, Karpenter has a concept of an “offering” for each instance type, which is a combination of zone and capacity type (equivalent in the AWS cloud provider to an EC2 purchase option – Spot or On-Demand).
+Whenever the Fleet API returns an insufficient capacity error for Spot instances, those particular offerings are temporarily removed from consideration (across the entire provisioner) so that Karpenter can make forward progress with different options.
+
+### Does Karpenter support IPv6?
+
+Yes! Karpenter dynamically discovers if you are running in an IPv6 cluster by checking the kube-dns service's cluster-ip. When using an AMI Family such as `AL2`, Karpenter will automatically configure the EKS Bootstrap script for IPv6. Some EC2 instance types do not support IPv6 and the Amazon VPC CNI only supports instance types that run on the Nitro hypervisor. It's best to add a requirement to your Provisioner to only allow Nitro instance types:
+
+```
+kind: Provisioner
+...
+spec:
+ requirements:
+ - key: karpenter.k8s.aws/instance-hypervisor
+ operator: In
+ values:
+ - nitro
+```
+
+For more documentation on enabling IPv6 with the Amazon VPC CNI, see the [docs](https://docs.aws.amazon.com/eks/latest/userguide/cni-ipv6.html).
+
+## Scheduling
+
+### When using preferred scheduling constraints, Karpenter launches the correct number of nodes at first. Why do they then sometimes get consolidated immediately?
+
+`kube-scheduler` is responsible for the scheduling of pods, while Karpenter launches the capacity. When using any sort of preferred scheduling constraint, `kube-scheduler` will schedule pods to nodes anytime it is possible.
+
+As an example, suppose you scale up a deployment with a preferred zonal topology spread and none of the newly created pods can run on your existing cluster. Karpenter will then launch multiple nodes to satisfy that preference. If a) one of the nodes becomes ready slightly faster than other nodes and b) has enough capacity for multiple pods, `kube-scheduler` will schedule as many pods as possible to the single ready node so they won't remain unschedulable. It doesn't consider the in-flight capacity that will be ready in a few seconds. If all of the pods fit on the single node, the remaining nodes that Karpenter has launched aren't needed when they become ready and consolidation will delete them.
+
+## Workloads
+
+### How can someone deploying pods take advantage of Karpenter?
+
+See [Application developer]({{< ref "./concepts/#application-developer" >}}) for descriptions of how Karpenter matches nodes with pod requests.
+
+### Can I use Karpenter with EBS disks per availability zone?
+Yes. See [Persistent Volume Topology]({{< ref "./concepts/scheduling#persistent-volume-topology" >}}) for details.
+
+### Can I set `--max-pods` on my nodes?
+Not yet.
+
+## Deprovisioning
+### How does Karpenter deprovision nodes?
+See [Deprovisioning nodes]({{< ref "./concepts/deprovisioning" >}}) for information on how Karpenter deprovisions nodes.
+
+## Upgrading
+
+### How do I upgrade Karpenter?
+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.
+
+Karpenter requires proper permissions in the `KarpenterNode IAM Role` and the `KarpenterController IAM Role`.
+To upgrade Karpenter to version `$VERSION`, make sure that the `KarpenterNode IAM Role` and the `KarpenterController IAM Role` have the right permission described in `https://karpenter.sh/$VERSION/getting-started/getting-started-with-eksctl/cloudformation.yaml`.
+Next, locate `KarpenterController IAM Role` ARN (i.e., ARN of the resource created in [Create the KarpenterController IAM Role](../getting-started/getting-started-with-eksctl/#create-the-karpentercontroller-iam-role)) and pass them to the helm upgrade command.
+{{% script file="./content/en/preview/getting-started/getting-started-with-eksctl/scripts/step08-apply-helm-chart.sh" language="bash"%}}
+
+For information on upgrading Karpenter, see the [Upgrade Guide]({{< ref "./upgrade-guide/" >}}).
+
+### Why do I get an `unknown field "startupTaints"` error when creating a provisioner with startupTaints?
+
+```bash
+error: error validating "provisioner.yaml": error validating data: ValidationError(Provisioner.spec): unknown field "startupTaints" in sh.karpenter.v1alpha5.Provisioner.spec; if you choose to ignore these errors, turn validation off with --validate=false
+```
+
+The `startupTaints` parameter was added in v0.10.0. Helm upgrades do not upgrade the CRD describing the provisioner, so it must be done manually. For specific details, see the [Upgrade Guide]({{< ref "./upgrade-guide/#upgrading-to-v0100" >}})
+
+## Interruption Handling
+
+### Should I use Karpenter interruption handling alongside Node Termination Handler?
+No. We recommend against using Node Termination Handler alongside Karpenter due to conflicts that could occur from the two components handling the same events.
+
+### Why should I migrate from Node Termination Handler?
+Karpenter's native interruption handling offers two main benefits over the standalone Node Termination Handler component:
+1. You don't have to manage and maintain a separate component to exclusively handle interruption events.
+2. Karpenter's native interruption handling coordinates with other deprovisioning so that consolidation, expiration, etc. can be aware of interruption events and vice-versa.
+
+### Why am I receiving QueueNotFound errors when I set `aws.interruptionQueueName`?
+Karpenter requires a queue to exist that receives event messages from EC2 and health services in order to handle interruption messages properly for nodes.
+
+Details on the types of events that Karpenter handles can be found in the [Interruption Handling Docs]({{< ref "./concepts/deprovisioning/#interruption" >}}).
+
+Details on provisioning the SQS queue and EventBridge rules can be found in the [Getting Started Guide]({{< ref "./getting-started/getting-started-with-eksctl/#create-the-karpenter-infrastructure-and-iam-roles" >}}).
+
+## Consolidation
+
+### Why do I sometimes see an extra node get launched when updating a deployment that remains empty and is later removed?
+
+Consolidation packs pods tightly onto nodes which can leave little free allocatable CPU/memory on your nodes. If a deployment uses a deployment strategy with a non-zero `maxSurge`, such as the default 25%, those surge pods may not have anywhere to run. In this case, Karpenter will launch a new node so that the surge pods can run and then remove it soon after if it's not needed.
diff --git a/website/content/en/v0.26.1/getting-started/_index.md b/website/content/en/v0.26.1/getting-started/_index.md
new file mode 100644
index 000000000000..7196ca898c5a
--- /dev/null
+++ b/website/content/en/v0.26.1/getting-started/_index.md
@@ -0,0 +1,25 @@
+---
+title: "Getting Started"
+linkTitle: "Getting Started"
+weight: 1
+description: >
+ Choose from different methods to get started with Karpenter
+cascade:
+ type: docs
+---
+
+
+To get started with Karpenter, the [Getting Started with Karpenter]({{< relref "getting-started-with-eksctl" >}}) guide provides an end-to-end procedure for creating a cluster (with `eksctl`) and adding Karpenter.
+If you prefer, the following instructions use Terraform to create a cluster and add Karpenter:
+
+* [Amazon EKS Blueprints for Terraform](https://aws-ia.github.io/terraform-aws-eks-blueprints): Follow a basic [Getting Started](https://aws-ia.github.io/terraform-aws-eks-blueprints/v4.18.0/getting-started/) guide and also add modules and add-ons. This includes a [Karpenter](https://aws-ia.github.io/terraform-aws-eks-blueprints/v4.18.0/add-ons/karpenter/) add-on that lets you bypass the instructions in this guide for setting up Karpenter.
+
+Although not supported, you could also try Karpenter on other Kubernetes distributions running on AWS. For example:
+
+* [kOps](https://kops.sigs.k8s.io/operations/karpenter/): These instructions describe how to create a kOps Kubernetes cluster in AWS that includes Karpenter.
+
+Learn more about Karpenter and how to get started below.
+
+* [Karpenter EKS Best Practices](https://aws.github.io/aws-eks-best-practices/karpenter/) guide
+* [EC2 Spot Workshop for Karpenter](https://ec2spotworkshops.com/karpenter.html)
+* [EKS Karpenter Workshop](https://www.eksworkshop.com/beginner/085_scaling_karpenter/set_up_the_provisioner/)
diff --git a/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/_index.md b/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/_index.md
new file mode 100644
index 000000000000..1bd290691c8c
--- /dev/null
+++ b/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/_index.md
@@ -0,0 +1,153 @@
+
+---
+title: "Getting Started with Karpenter"
+linkTitle: "Getting Started with Karpenter"
+weight: 10
+description: >
+ Set up a cluster and add Karpenter
+---
+
+Karpenter automatically provisions new nodes in response to unschedulable pods. Karpenter does this by observing events within the Kubernetes cluster, and then sending commands to the underlying cloud provider.
+
+This guide shows how to get started with Karpenter by creating a Kubernetes cluster and installing Karpenter.
+To use Karpenter, you must be running a supported Kubernetes cluster on a supported cloud provider.
+Currently, only EKS on AWS is supported.
+
+## Create a cluster and add Karpenter
+
+This guide uses `eksctl` to create the cluster.
+It should take less than 1 hour to complete, and cost less than $0.25.
+Follow the clean-up instructions to reduce any charges.
+
+### 1. Install utilities
+
+Karpenter is installed in clusters with a Helm chart.
+
+Karpenter requires cloud provider permissions to provision nodes, for AWS IAM
+Roles for Service Accounts (IRSA) should be used. IRSA permits Karpenter
+(within the cluster) to make privileged requests to AWS (as the cloud provider)
+via a ServiceAccount.
+
+Install these tools before proceeding:
+
+1. [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2-linux.html)
+2. `kubectl` - [the Kubernetes CLI](https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/)
+3. `eksctl` - [the CLI for AWS EKS](https://docs.aws.amazon.com/eks/latest/userguide/eksctl.html)
+4. `helm` - [the package manager for Kubernetes](https://helm.sh/docs/intro/install/)
+
+[Configure the AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html)
+with a user that has sufficient privileges to create an EKS cluster. Verify that the CLI can
+authenticate properly by running `aws sts get-caller-identity`.
+
+### 2. Set environment variables
+
+After setting up the tools, set the Karpenter version number:
+
+```bash
+export KARPENTER_VERSION=v0.26.1
+```
+
+Then set the following environment variable:
+
+{{% script file="./content/en/{VERSION}/getting-started/getting-started-with-eksctl/scripts/step01-config.sh" language="bash"%}}
+
+{{% alert title="Warning" color="warning" %}}
+If you open a new shell to run steps in this procedure, you need to set some or all of the environment variables again.
+To remind yourself of these values, type:
+
+```bash
+echo $KARPENTER_VERSION $CLUSTER_NAME $AWS_DEFAULT_REGION $AWS_ACCOUNT_ID $TEMPOUT
+```
+
+{{% /alert %}}
+
+
+### 3. Create a Cluster
+
+Create a basic cluster with `eksctl`.
+The following cluster configuration will:
+
+* Use CloudFormation to set up the infrastructure needed by the EKS cluster.
+* Create a Kubernetes service account and AWS IAM Role, and associate them using IRSA to let Karpenter launch instances.
+* Add the Karpenter node role to the aws-auth configmap to allow nodes to connect.
+* Use [AWS EKS managed node groups](https://docs.aws.amazon.com/eks/latest/userguide/managed-node-groups.html) for the kube-system and karpenter namespaces. Uncomment fargateProfiles settings (and comment out managedNodeGroups settings) to use Fargate for both namespaces instead.
+* Set KARPENTER_IAM_ROLE_ARN variables.
+* Create a role to allow spot instances.
+* Run helm to install karpenter
+
+{{% script file="./content/en/{VERSION}/getting-started/getting-started-with-eksctl/scripts/step02-create-cluster.sh" language="bash"%}}
+
+
+### 4. Create Provisioner
+
+A single Karpenter provisioner is capable of handling many different pod
+shapes. Karpenter makes scheduling and provisioning decisions based on pod
+attributes such as labels and affinity. In other words, Karpenter eliminates
+the need to manage many different node groups.
+
+Create a default provisioner using the command below.
+This provisioner uses `securityGroupSelector` and `subnetSelector` to discover resources used to launch nodes.
+We applied the tag `karpenter.sh/discovery` in the `eksctl` command above.
+Depending how these resources are shared between clusters, you may need to use different tagging schemes.
+
+The `ttlSecondsAfterEmpty` value configures Karpenter to terminate empty nodes.
+This behavior can be disabled by leaving the value undefined.
+
+Review the [provisioner CRD]({{][}}) for more information. For example,
+`ttlSecondsUntilExpired` configures Karpenter to terminate nodes when a maximum age is reached.
+
+Note: This provisioner will create capacity as long as the sum of all created capacity is less than the specified limit.
+
+{{% script file="./content/en/{VERSION}/getting-started/getting-started-with-eksctl/scripts/step12-add-provisioner.sh" language="bash"%}}
+
+Karpenter is now active and ready to begin provisioning nodes.
+
+## First Use
+
+Create some pods using a deployment and watch Karpenter provision nodes in response.
+
+### Scale up deployment
+
+This deployment uses the [pause image](https://www.ianlewis.org/en/almighty-pause-container) and starts with zero replicas.
+
+{{% script file="./content/en/{VERSION}/getting-started/getting-started-with-eksctl/scripts/step13-automatic-node-provisioning.sh" language="bash"%}}
+
+### Scale down deployment
+
+Now, delete the deployment. After 30 seconds (`ttlSecondsAfterEmpty`),
+Karpenter should terminate the now empty nodes.
+
+{{% script file="./content/en/{VERSION}/getting-started/getting-started-with-eksctl/scripts/step14-deprovisioning.sh" language="bash"%}}
+
+## Add optional monitoring with Grafana
+
+This section describes optional ways to configure Karpenter to enhance its capabilities.
+In particular, the following commands deploy a Prometheus and Grafana stack that is suitable for this guide but does not include persistent storage or other configurations that would be necessary for monitoring a production deployment of Karpenter.
+This deployment includes two Karpenter dashboards that are automatically onboarded to Grafana.They provide a variety of visualization examples on Karpenter metrics.
+
+{{% script file="./content/en/{VERSION}/getting-started/getting-started-with-eksctl/scripts/step09-add-prometheus-grafana.sh" language="bash"%}}
+
+The Grafana instance may be accessed using port forwarding.
+
+{{% script file="./content/en/{VERSION}/getting-started/getting-started-with-eksctl/scripts/step10-add-grafana-port-forward.sh" language="bash"%}}
+
+The new stack has only one user, `admin`, and the password is stored in a secret. The following command will retrieve the password.
+
+{{% script file="./content/en/{VERSION}/getting-started/getting-started-with-eksctl/scripts/step11-grafana-get-password.sh" language="bash"%}}
+
+## Cleanup
+
+### Delete Karpenter nodes manually
+
+If you delete a node with kubectl, Karpenter will gracefully cordon, drain,
+and shutdown the corresponding instance. Under the hood, Karpenter adds a
+finalizer to the node object, which blocks deletion until all pods are
+drained and the instance is terminated. Keep in mind, this only works for
+nodes provisioned by Karpenter.
+
+{{% script file="./content/en/{VERSION}/getting-started/getting-started-with-eksctl/scripts/step15-delete-node.sh" language="bash"%}}
+
+### Delete the cluster
+To avoid additional charges, remove the demo infrastructure from your AWS account.
+
+{{% script file="./content/en/{VERSION}/getting-started/getting-started-with-eksctl/scripts/step16-cleanup.sh" language="bash"%}}
diff --git a/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/cloudformation.yaml b/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/cloudformation.yaml
new file mode 100644
index 000000000000..f993eb884703
--- /dev/null
+++ b/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/cloudformation.yaml
@@ -0,0 +1,143 @@
+AWSTemplateFormatVersion: "2010-09-09"
+Description: Resources used by https://github.com/aws/karpenter
+Parameters:
+ ClusterName:
+ Type: String
+ Description: "EKS cluster name"
+Resources:
+ KarpenterNodeInstanceProfile:
+ Type: "AWS::IAM::InstanceProfile"
+ Properties:
+ InstanceProfileName: !Sub "KarpenterNodeInstanceProfile-${ClusterName}"
+ Path: "/"
+ Roles:
+ - Ref: "KarpenterNodeRole"
+ KarpenterNodeRole:
+ Type: "AWS::IAM::Role"
+ Properties:
+ RoleName: !Sub "KarpenterNodeRole-${ClusterName}"
+ Path: /
+ AssumeRolePolicyDocument:
+ Version: "2012-10-17"
+ Statement:
+ - Effect: Allow
+ Principal:
+ Service:
+ !Sub "ec2.${AWS::URLSuffix}"
+ Action:
+ - "sts:AssumeRole"
+ ManagedPolicyArns:
+ - !Sub "arn:${AWS::Partition}:iam::aws:policy/AmazonEKS_CNI_Policy"
+ - !Sub "arn:${AWS::Partition}:iam::aws:policy/AmazonEKSWorkerNodePolicy"
+ - !Sub "arn:${AWS::Partition}:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly"
+ - !Sub "arn:${AWS::Partition}:iam::aws:policy/AmazonSSMManagedInstanceCore"
+ KarpenterControllerPolicy:
+ Type: AWS::IAM::ManagedPolicy
+ Properties:
+ ManagedPolicyName: !Sub "KarpenterControllerPolicy-${ClusterName}"
+ PolicyDocument:
+ Version: "2012-10-17"
+ Statement:
+ - Effect: Allow
+ Resource: "*"
+ Action:
+ # Write Operations
+ - ec2:CreateFleet
+ - ec2:CreateLaunchTemplate
+ - ec2:CreateTags
+ - ec2:DeleteLaunchTemplate
+ - ec2:RunInstances
+ - ec2:TerminateInstances
+ # Read Operations
+ - ec2:DescribeAvailabilityZones
+ - ec2:DescribeImages
+ - ec2:DescribeInstances
+ - ec2:DescribeInstanceTypeOfferings
+ - ec2:DescribeInstanceTypes
+ - ec2:DescribeLaunchTemplates
+ - ec2:DescribeSecurityGroups
+ - ec2:DescribeSpotPriceHistory
+ - ec2:DescribeSubnets
+ - pricing:GetProducts
+ - ssm:GetParameter
+ - Effect: Allow
+ Action:
+ # Write Operations
+ - sqs:DeleteMessage
+ # Read Operations
+ - sqs:GetQueueAttributes
+ - sqs:GetQueueUrl
+ - sqs:ReceiveMessage
+ Resource: !GetAtt KarpenterInterruptionQueue.Arn
+ - Effect: Allow
+ Action:
+ - iam:PassRole
+ Resource: !Sub "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/KarpenterNodeRole-${ClusterName}"
+ - Effect: Allow
+ Action:
+ - eks:DescribeCluster
+ Resource: !Sub "arn:${AWS::Partition}:eks:${AWS::Region}:${AWS::AccountId}:cluster/${ClusterName}"
+ KarpenterInterruptionQueue:
+ Type: AWS::SQS::Queue
+ Properties:
+ QueueName: !Sub "${ClusterName}"
+ MessageRetentionPeriod: 300
+ KarpenterInterruptionQueuePolicy:
+ Type: AWS::SQS::QueuePolicy
+ Properties:
+ Queues:
+ - !Ref KarpenterInterruptionQueue
+ PolicyDocument:
+ Id: EC2InterruptionPolicy
+ Statement:
+ - Effect: Allow
+ Principal:
+ Service:
+ - events.amazonaws.com
+ - sqs.amazonaws.com
+ Action: sqs:SendMessage
+ Resource: !GetAtt KarpenterInterruptionQueue.Arn
+ ScheduledChangeRule:
+ Type: 'AWS::Events::Rule'
+ Properties:
+ EventPattern:
+ source:
+ - aws.health
+ detail-type:
+ - AWS Health Event
+ Targets:
+ - Id: KarpenterInterruptionQueueTarget
+ Arn: !GetAtt KarpenterInterruptionQueue.Arn
+ SpotInterruptionRule:
+ Type: 'AWS::Events::Rule'
+ Properties:
+ EventPattern:
+ source:
+ - aws.ec2
+ detail-type:
+ - EC2 Spot Instance Interruption Warning
+ Targets:
+ - Id: KarpenterInterruptionQueueTarget
+ Arn: !GetAtt KarpenterInterruptionQueue.Arn
+ RebalanceRule:
+ Type: 'AWS::Events::Rule'
+ Properties:
+ EventPattern:
+ source:
+ - aws.ec2
+ detail-type:
+ - EC2 Instance Rebalance Recommendation
+ Targets:
+ - Id: KarpenterInterruptionQueueTarget
+ Arn: !GetAtt KarpenterInterruptionQueue.Arn
+ InstanceStateChangeRule:
+ Type: 'AWS::Events::Rule'
+ Properties:
+ EventPattern:
+ source:
+ - aws.ec2
+ detail-type:
+ - EC2 Instance State-change Notification
+ Targets:
+ - Id: KarpenterInterruptionQueueTarget
+ Arn: !GetAtt KarpenterInterruptionQueue.Arn
diff --git a/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/grafana-values.yaml b/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/grafana-values.yaml
new file mode 100644
index 000000000000..160daf657eb9
--- /dev/null
+++ b/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/grafana-values.yaml
@@ -0,0 +1,27 @@
+datasources:
+ datasources.yaml:
+ apiVersion: 1
+ datasources:
+ - name: Prometheus
+ type: prometheus
+ version: 1
+ url: http://prometheus-server:80
+ access: proxy
+dashboardProviders:
+ dashboardproviders.yaml:
+ apiVersion: 1
+ providers:
+ - name: 'default'
+ orgId: 1
+ folder: ''
+ type: file
+ disableDeletion: false
+ editable: true
+ options:
+ path: /var/lib/grafana/dashboards/default
+dashboards:
+ default:
+ capacity-dashboard:
+ url: https://karpenter.sh/v0.26.1/getting-started/getting-started-with-eksctl/karpenter-capacity-dashboard.json
+ performance-dashboard:
+ url: https://karpenter.sh/v0.26.1/getting-started/getting-started-with-eksctl/karpenter-performance-dashboard.json
diff --git a/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/karpenter-capacity-dashboard.json b/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/karpenter-capacity-dashboard.json
new file mode 100644
index 000000000000..177344b3c5ce
--- /dev/null
+++ b/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/karpenter-capacity-dashboard.json
@@ -0,0 +1,1440 @@
+{
+ "annotations": {
+ "list": [
+ {
+ "builtIn": 1,
+ "datasource": "-- Grafana --",
+ "enable": true,
+ "hide": true,
+ "iconColor": "rgba(0, 211, 255, 1)",
+ "name": "Annotations & Alerts",
+ "target": {
+ "limit": 100,
+ "matchAny": false,
+ "tags": [],
+ "type": "dashboard"
+ },
+ "type": "dashboard"
+ }
+ ]
+ },
+ "editable": true,
+ "fiscalYearStartMonth": 0,
+ "graphTooltip": 2,
+ "id": 6,
+ "links": [],
+ "liveNow": true,
+ "panels": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 10,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "mappings": [],
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "none"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 5,
+ "w": 24,
+ "x": 0,
+ "y": 0
+ },
+ "id": 13,
+ "options": {
+ "legend": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right"
+ },
+ "tooltip": {
+ "mode": "multi",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "9.0.5",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "editorMode": "builder",
+ "exemplar": false,
+ "expr": "sum by(action, cluster) (karpenter_deprovisioning_actions_performed)",
+ "format": "time_series",
+ "instant": false,
+ "legendFormat": "{{cluster}}: {{action}}",
+ "range": true,
+ "refId": "A"
+ }
+ ],
+ "title": "Deprovisioning Actions Performed",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 10,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "mappings": [],
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "none"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 5,
+ "w": 24,
+ "x": 0,
+ "y": 5
+ },
+ "id": 14,
+ "options": {
+ "legend": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right"
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "editorMode": "builder",
+ "expr": "sum by(cluster) (karpenter_nodes_created)",
+ "format": "time_series",
+ "legendFormat": "{{cluster}}",
+ "range": true,
+ "refId": "A"
+ }
+ ],
+ "title": "Nodes Created",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 10,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "mappings": [],
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "none"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 5,
+ "w": 24,
+ "x": 0,
+ "y": 10
+ },
+ "id": 15,
+ "options": {
+ "legend": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "table",
+ "placement": "right"
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "editorMode": "builder",
+ "expr": "sum by(cluster) (karpenter_nodes_terminated)",
+ "format": "time_series",
+ "legendFormat": "{{cluster}}",
+ "range": true,
+ "refId": "A"
+ }
+ ],
+ "title": "Nodes Terminated",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 10,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "normal"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ }
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 6,
+ "w": 24,
+ "x": 0,
+ "y": 15
+ },
+ "id": 12,
+ "options": {
+ "legend": {
+ "calcs": [
+ "last"
+ ],
+ "displayMode": "table",
+ "placement": "right"
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "editorMode": "code",
+ "expr": "sum by(phase)(karpenter_pods_state)",
+ "legendFormat": "{{label_name}}",
+ "range": true,
+ "refId": "A"
+ }
+ ],
+ "title": "Pod Phase",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 10,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "normal"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ }
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 8,
+ "w": 24,
+ "x": 0,
+ "y": 21
+ },
+ "id": 6,
+ "options": {
+ "legend": {
+ "calcs": [],
+ "displayMode": "table",
+ "placement": "right"
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "editorMode": "code",
+ "expr": "sum by ($distribution_filter)(\n karpenter_pods_state{arch=~\"$arch\", capacity_type=~\"$capacity_type\", instance_type=~\"$instance_type\", provisioner=~\"$provisioner\"}\n)",
+ "legendFormat": "{{label_name}}",
+ "range": true,
+ "refId": "A"
+ }
+ ],
+ "title": "Pod Distribution: $distribution_filter",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "custom": {
+ "align": "left",
+ "displayMode": "auto",
+ "inspect": false
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ }
+ },
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byRegexp",
+ "options": ".*Utilization$"
+ },
+ "properties": [
+ {
+ "id": "custom.displayMode",
+ "value": "gradient-gauge"
+ },
+ {
+ "id": "min",
+ "value": 0
+ },
+ {
+ "id": "max",
+ "value": 1
+ },
+ {
+ "id": "unit",
+ "value": "percentunit"
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Memory Provisioned"
+ },
+ "properties": [
+ {
+ "id": "unit",
+ "value": "bytes"
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 11,
+ "w": 18,
+ "x": 0,
+ "y": 29
+ },
+ "id": 10,
+ "options": {
+ "footer": {
+ "fields": "",
+ "reducer": [
+ "sum"
+ ],
+ "show": false
+ },
+ "showHeader": true
+ },
+ "pluginVersion": "9.0.5",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "karpenter_provisioner_usage{resource_type=\"cpu\"} / karpenter_provisioner_limit{resource_type=\"cpu\"}",
+ "format": "table",
+ "instant": true,
+ "legendFormat": "CPU Limit Utilization",
+ "range": false,
+ "refId": "CPU Limit Utilization"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "count by (provisioner)(karpenter_nodes_allocatable{provisioner!=\"N/A\",resource_type=\"cpu\"}) # Selects a single resource type to get node count",
+ "format": "table",
+ "hide": false,
+ "instant": true,
+ "range": false,
+ "refId": "Node Count"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "(karpenter_provisioner_usage{resource_type=\"memory\"} / karpenter_provisioner_limit{resource_type=\"memory\"}) or karpenter_provisioner_limit*0",
+ "format": "table",
+ "hide": false,
+ "instant": true,
+ "legendFormat": "Memory Limit Utilization",
+ "range": false,
+ "refId": "Memory Limit Utilization"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "sum by (provisioner)(karpenter_nodes_allocatable{provisioner!=\"N/A\",resource_type=\"cpu\"})",
+ "format": "table",
+ "hide": false,
+ "instant": true,
+ "range": false,
+ "refId": "CPU Capacity"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "sum by (provisioner)(karpenter_nodes_allocatable{provisioner!=\"N/A\",resource_type=\"memory\"})",
+ "format": "table",
+ "hide": false,
+ "instant": true,
+ "range": false,
+ "refId": "Memory Capacity"
+ }
+ ],
+ "title": "Provisioner Summary",
+ "transformations": [
+ {
+ "id": "seriesToColumns",
+ "options": {
+ "byField": "provisioner"
+ }
+ },
+ {
+ "id": "organize",
+ "options": {
+ "excludeByName": {
+ "Time": true,
+ "Time 1": true,
+ "Time 2": true,
+ "Time 3": true,
+ "Time 4": true,
+ "Time 5": true,
+ "__name__": true,
+ "instance": true,
+ "instance 1": true,
+ "instance 2": true,
+ "job": true,
+ "job 1": true,
+ "job 2": true,
+ "resource_type": true,
+ "resource_type 1": true,
+ "resource_type 2": true
+ },
+ "indexByName": {
+ "Time 1": 6,
+ "Time 2": 7,
+ "Time 3": 11,
+ "Time 4": 15,
+ "Time 5": 16,
+ "Value #CPU Capacity": 2,
+ "Value #CPU Limit Utilization": 3,
+ "Value #Memory Capacity": 4,
+ "Value #Memory Limit Utilization": 5,
+ "Value #Node Count": 1,
+ "instance 1": 8,
+ "instance 2": 12,
+ "job 1": 9,
+ "job 2": 13,
+ "provisioner": 0,
+ "resource_type 1": 10,
+ "resource_type 2": 14
+ },
+ "renameByName": {
+ "Time 1": "",
+ "Value": "CPU Utilization",
+ "Value #CPU Capacity": "CPU Provisioned",
+ "Value #CPU Limit Utilization": "CPU Limit Utilization",
+ "Value #CPU Utilization": "CPU Limit Utilization",
+ "Value #Memory Capacity": "Memory Provisioned",
+ "Value #Memory Limit Utilization": "Memory Limit Utilization",
+ "Value #Memory Utilization": "Memory Utilization",
+ "Value #Node Count": "Node Count",
+ "instance": "",
+ "instance 1": "",
+ "job": "",
+ "provisioner": "Provisioner"
+ }
+ }
+ }
+ ],
+ "type": "table"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "mappings": [],
+ "max": 1,
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "percentunit"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 11,
+ "w": 6,
+ "x": 18,
+ "y": 29
+ },
+ "id": 8,
+ "options": {
+ "legend": {
+ "calcs": [],
+ "displayMode": "hidden",
+ "placement": "bottom"
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "editorMode": "code",
+ "expr": "(count(karpenter_nodes_allocatable{arch=~\"$arch\",capacity_type=\"spot\",instance_type=~\"$instance_type\",provisioner=~\"$provisioner\",zone=~\"$zone\"}) or vector(0)) / count(karpenter_nodes_allocatable{arch=~\"$arch\",instance_type=~\"$instance_type\",provisioner=~\"$provisioner\",zone=~\"$zone\"})",
+ "legendFormat": "Percentage",
+ "range": true,
+ "refId": "A"
+ }
+ ],
+ "title": "Spot Node Percentage",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "custom": {
+ "align": "left",
+ "displayMode": "auto",
+ "inspect": false
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ }
+ },
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "node_name"
+ },
+ "properties": [
+ {
+ "id": "custom.width",
+ "value": 333
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byRegexp",
+ "options": ".*Utilization"
+ },
+ "properties": [
+ {
+ "id": "custom.displayMode",
+ "value": "gradient-gauge"
+ },
+ {
+ "id": "unit",
+ "value": "percentunit"
+ },
+ {
+ "id": "min",
+ "value": 0
+ },
+ {
+ "id": "thresholds",
+ "value": {
+ "mode": "percentage",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 75
+ }
+ ]
+ }
+ },
+ {
+ "id": "max",
+ "value": 1
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Uptime"
+ },
+ "properties": [
+ {
+ "id": "unit",
+ "value": "s"
+ },
+ {
+ "id": "decimals",
+ "value": 0
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 9,
+ "w": 24,
+ "x": 0,
+ "y": 40
+ },
+ "id": 4,
+ "options": {
+ "footer": {
+ "fields": "",
+ "reducer": [
+ "sum"
+ ],
+ "show": false
+ },
+ "showHeader": true,
+ "sortBy": [
+ {
+ "desc": true,
+ "displayName": "Uptime"
+ }
+ ]
+ },
+ "pluginVersion": "9.0.5",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "((karpenter_nodes_total_daemon_requests{resource_type=\"cpu\",arch=~\"$arch\",capacity_type=~\"$capacity_type\",instance_type=~\"$instance_type\",provisioner=~\"$provisioner\",zone=~\"$zone\"} or karpenter_nodes_allocatable*0) + \n(karpenter_nodes_total_pod_requests{resource_type=\"cpu\",arch=~\"$arch\",capacity_type=~\"$capacity_type\",instance_type=~\"$instance_type\",provisioner=~\"$provisioner\",zone=~\"$zone\"} or karpenter_nodes_allocatable*0)) / \nkarpenter_nodes_allocatable{resource_type=\"cpu\",arch=~\"$arch\",capacity_type=~\"$capacity_type\",instance_type=~\"$instance_type\",provisioner=~\"$provisioner\",zone=~\"$zone\"}",
+ "format": "table",
+ "hide": false,
+ "instant": true,
+ "legendFormat": "CPU Utilization",
+ "range": false,
+ "refId": "CPU Utilization"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "((karpenter_nodes_total_daemon_requests{resource_type=\"memory\",arch=~\"$arch\",capacity_type=~\"$capacity_type\",instance_type=~\"$instance_type\",provisioner=~\"$provisioner\",zone=~\"$zone\"} or karpenter_nodes_allocatable*0) + \n(karpenter_nodes_total_pod_requests{resource_type=\"memory\",arch=~\"$arch\",capacity_type=~\"$capacity_type\",instance_type=~\"$instance_type\",provisioner=~\"$provisioner\",zone=~\"$zone\"} or karpenter_nodes_allocatable*0)) / \nkarpenter_nodes_allocatable{resource_type=\"memory\",arch=~\"$arch\",capacity_type=~\"$capacity_type\",instance_type=~\"$instance_type\",provisioner=~\"$provisioner\",zone=~\"$zone\"}",
+ "format": "table",
+ "hide": false,
+ "instant": true,
+ "legendFormat": "Memory Utilization",
+ "range": false,
+ "refId": "Memory Utilization"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "karpenter_nodes_total_daemon_requests{resource_type=\"pods\",arch=~\"$arch\",capacity_type=~\"$capacity_type\",instance_type=~\"$instance_type\",provisioner=~\"$provisioner\",zone=~\"$zone\"} + \nkarpenter_nodes_total_pod_requests{resource_type=\"pods\",arch=~\"$arch\",capacity_type=~\"$capacity_type\",instance_type=~\"$instance_type\",provisioner=~\"$provisioner\",zone=~\"$zone\"}",
+ "format": "table",
+ "hide": false,
+ "instant": true,
+ "legendFormat": "Memory Utilization",
+ "range": false,
+ "refId": "Pod Count"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "label_replace(\n sum by (node)(node_time_seconds) - sum by (node)(node_boot_time_seconds),\n \"node_name\", \"$1\", \"node\", \"(.+)\"\n)",
+ "format": "table",
+ "hide": false,
+ "instant": true,
+ "legendFormat": "Uptime",
+ "range": false,
+ "refId": "Uptime"
+ }
+ ],
+ "title": "Node Summary",
+ "transformations": [
+ {
+ "id": "seriesToColumns",
+ "options": {
+ "byField": "node_name"
+ }
+ },
+ {
+ "id": "organize",
+ "options": {
+ "excludeByName": {
+ "Time": true,
+ "Time 1": true,
+ "Time 2": true,
+ "Time 3": true,
+ "Time 4": true,
+ "Value": false,
+ "Value #Pod Count": false,
+ "__name__": true,
+ "arch": true,
+ "arch 1": true,
+ "arch 2": true,
+ "arch 3": true,
+ "capacity_type 2": true,
+ "capacity_type 3": true,
+ "instance": true,
+ "instance 1": true,
+ "instance 2": true,
+ "instance 3": true,
+ "instance_category 1": true,
+ "instance_category 2": true,
+ "instance_category 3": true,
+ "instance_cpu": true,
+ "instance_cpu 1": true,
+ "instance_cpu 2": true,
+ "instance_cpu 3": true,
+ "instance_family": true,
+ "instance_family 1": true,
+ "instance_family 2": true,
+ "instance_family 3": true,
+ "instance_generation 1": true,
+ "instance_generation 2": true,
+ "instance_generation 3": true,
+ "instance_gpu_count": true,
+ "instance_gpu_count 1": true,
+ "instance_gpu_count 2": true,
+ "instance_gpu_count 3": true,
+ "instance_gpu_manufacturer": true,
+ "instance_gpu_manufacturer 1": true,
+ "instance_gpu_manufacturer 2": true,
+ "instance_gpu_manufacturer 3": true,
+ "instance_gpu_memory": true,
+ "instance_gpu_memory 1": true,
+ "instance_gpu_memory 2": true,
+ "instance_gpu_memory 3": true,
+ "instance_gpu_name": true,
+ "instance_gpu_name 1": true,
+ "instance_gpu_name 2": true,
+ "instance_gpu_name 3": true,
+ "instance_hypervisor": true,
+ "instance_hypervisor 1": true,
+ "instance_hypervisor 2": true,
+ "instance_hypervisor 3": true,
+ "instance_local_nvme 1": true,
+ "instance_local_nvme 2": true,
+ "instance_local_nvme 3": true,
+ "instance_memory": true,
+ "instance_memory 1": true,
+ "instance_memory 2": true,
+ "instance_memory 3": true,
+ "instance_pods": true,
+ "instance_pods 1": true,
+ "instance_pods 2": true,
+ "instance_pods 3": true,
+ "instance_size": true,
+ "instance_size 1": true,
+ "instance_size 2": true,
+ "instance_size 3": true,
+ "instance_type 1": false,
+ "instance_type 2": true,
+ "instance_type 3": true,
+ "job": true,
+ "job 1": true,
+ "job 2": true,
+ "job 3": true,
+ "node": true,
+ "os": true,
+ "os 1": true,
+ "os 2": true,
+ "os 3": true,
+ "provisioner 1": false,
+ "provisioner 2": true,
+ "provisioner 3": true,
+ "resource_type": true,
+ "resource_type 1": true,
+ "resource_type 2": true,
+ "resource_type 3": true,
+ "zone 1": false,
+ "zone 2": true,
+ "zone 3": true
+ },
+ "indexByName": {
+ "Time 1": 1,
+ "Time 2": 25,
+ "Time 3": 45,
+ "Time 4": 65,
+ "Value #CPU Utilization": 10,
+ "Value #Memory Utilization": 11,
+ "Value #Pod Count": 9,
+ "Value #Uptime": 8,
+ "arch 1": 5,
+ "arch 2": 26,
+ "arch 3": 46,
+ "capacity_type 1": 6,
+ "capacity_type 2": 27,
+ "capacity_type 3": 47,
+ "instance 1": 4,
+ "instance 2": 28,
+ "instance 3": 48,
+ "instance_cpu 1": 12,
+ "instance_cpu 2": 29,
+ "instance_cpu 3": 49,
+ "instance_family 1": 13,
+ "instance_family 2": 30,
+ "instance_family 3": 50,
+ "instance_gpu_count 1": 14,
+ "instance_gpu_count 2": 31,
+ "instance_gpu_count 3": 51,
+ "instance_gpu_manufacturer 1": 15,
+ "instance_gpu_manufacturer 2": 32,
+ "instance_gpu_manufacturer 3": 52,
+ "instance_gpu_memory 1": 16,
+ "instance_gpu_memory 2": 33,
+ "instance_gpu_memory 3": 53,
+ "instance_gpu_name 1": 17,
+ "instance_gpu_name 2": 34,
+ "instance_gpu_name 3": 54,
+ "instance_hypervisor 1": 18,
+ "instance_hypervisor 2": 35,
+ "instance_hypervisor 3": 55,
+ "instance_memory 1": 19,
+ "instance_memory 2": 36,
+ "instance_memory 3": 56,
+ "instance_pods 1": 20,
+ "instance_pods 2": 37,
+ "instance_pods 3": 57,
+ "instance_size 1": 21,
+ "instance_size 2": 38,
+ "instance_size 3": 58,
+ "instance_type 1": 3,
+ "instance_type 2": 39,
+ "instance_type 3": 59,
+ "job 1": 22,
+ "job 2": 40,
+ "job 3": 60,
+ "node": 66,
+ "node_name": 0,
+ "os 1": 23,
+ "os 2": 41,
+ "os 3": 61,
+ "provisioner 1": 2,
+ "provisioner 2": 42,
+ "provisioner 3": 62,
+ "resource_type 1": 24,
+ "resource_type 2": 43,
+ "resource_type 3": 63,
+ "zone 1": 7,
+ "zone 2": 44,
+ "zone 3": 64
+ },
+ "renameByName": {
+ "Time": "",
+ "Time 1": "",
+ "Value": "CPU Utilization",
+ "Value #Allocatable": "",
+ "Value #CPU Utilization": "CPU Utilization",
+ "Value #Memory Utilization": "Memory Utilization",
+ "Value #Pod CPU": "",
+ "Value #Pod Count": "Pods",
+ "Value #Uptime": "Uptime",
+ "arch": "Architecture",
+ "arch 1": "Arch",
+ "capacity_type": "Capacity Type",
+ "capacity_type 1": "Capacity Type",
+ "instance 1": "Instance",
+ "instance_cpu 1": "vCPU",
+ "instance_type": "Instance Type",
+ "instance_type 1": "Instance Type",
+ "node_name": "Node Name",
+ "provisioner 1": "Provisioner",
+ "zone 1": "Zone"
+ }
+ }
+ }
+ ],
+ "type": "table"
+ }
+ ],
+ "refresh": false,
+ "schemaVersion": 36,
+ "style": "dark",
+ "tags": [],
+ "templating": {
+ "list": [
+ {
+ "current": {
+ "selected": true,
+ "text": [
+ "All"
+ ],
+ "value": [
+ "$__all"
+ ]
+ },
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "definition": "label_values(karpenter_nodes_allocatable, provisioner)",
+ "hide": 0,
+ "includeAll": true,
+ "multi": true,
+ "name": "provisioner",
+ "options": [],
+ "query": {
+ "query": "label_values(karpenter_nodes_allocatable, provisioner)",
+ "refId": "StandardVariableQuery"
+ },
+ "refresh": 2,
+ "regex": "",
+ "skipUrlSync": false,
+ "sort": 1,
+ "type": "query"
+ },
+ {
+ "current": {
+ "selected": true,
+ "text": [
+ "All"
+ ],
+ "value": [
+ "$__all"
+ ]
+ },
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "definition": "label_values(karpenter_nodes_allocatable, zone)",
+ "hide": 0,
+ "includeAll": true,
+ "multi": true,
+ "name": "zone",
+ "options": [],
+ "query": {
+ "query": "label_values(karpenter_nodes_allocatable, zone)",
+ "refId": "StandardVariableQuery"
+ },
+ "refresh": 2,
+ "regex": "",
+ "skipUrlSync": false,
+ "sort": 1,
+ "type": "query"
+ },
+ {
+ "current": {
+ "selected": true,
+ "text": [
+ "All"
+ ],
+ "value": [
+ "$__all"
+ ]
+ },
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "definition": "label_values(karpenter_nodes_allocatable, arch)",
+ "hide": 0,
+ "includeAll": true,
+ "multi": true,
+ "name": "arch",
+ "options": [],
+ "query": {
+ "query": "label_values(karpenter_nodes_allocatable, arch)",
+ "refId": "StandardVariableQuery"
+ },
+ "refresh": 2,
+ "regex": "",
+ "skipUrlSync": false,
+ "sort": 1,
+ "type": "query"
+ },
+ {
+ "current": {
+ "selected": true,
+ "text": [
+ "All"
+ ],
+ "value": [
+ "$__all"
+ ]
+ },
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "definition": "label_values(karpenter_nodes_allocatable, capacity_type)",
+ "hide": 0,
+ "includeAll": true,
+ "multi": true,
+ "name": "capacity_type",
+ "options": [],
+ "query": {
+ "query": "label_values(karpenter_nodes_allocatable, capacity_type)",
+ "refId": "StandardVariableQuery"
+ },
+ "refresh": 2,
+ "regex": "",
+ "skipUrlSync": false,
+ "sort": 1,
+ "type": "query"
+ },
+ {
+ "current": {
+ "selected": true,
+ "text": [
+ "All"
+ ],
+ "value": [
+ "$__all"
+ ]
+ },
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "definition": "label_values(karpenter_nodes_allocatable, instance_type)",
+ "hide": 0,
+ "includeAll": true,
+ "multi": true,
+ "name": "instance_type",
+ "options": [],
+ "query": {
+ "query": "label_values(karpenter_nodes_allocatable, instance_type)",
+ "refId": "StandardVariableQuery"
+ },
+ "refresh": 2,
+ "regex": "",
+ "skipUrlSync": false,
+ "sort": 1,
+ "type": "query"
+ },
+ {
+ "current": {
+ "selected": true,
+ "text": "provisioner",
+ "value": "provisioner"
+ },
+ "hide": 0,
+ "includeAll": false,
+ "multi": false,
+ "name": "distribution_filter",
+ "options": [
+ {
+ "selected": false,
+ "text": "arch",
+ "value": "arch"
+ },
+ {
+ "selected": false,
+ "text": "capacity_type",
+ "value": "capacity_type"
+ },
+ {
+ "selected": false,
+ "text": "instance_type",
+ "value": "instance_type"
+ },
+ {
+ "selected": false,
+ "text": "namespace",
+ "value": "namespace"
+ },
+ {
+ "selected": false,
+ "text": "node",
+ "value": "node"
+ },
+ {
+ "selected": true,
+ "text": "provisioner",
+ "value": "provisioner"
+ },
+ {
+ "selected": false,
+ "text": "zone",
+ "value": "zone"
+ }
+ ],
+ "query": "arch,capacity_type,instance_type,namespace,node,provisioner,zone",
+ "queryValue": "",
+ "skipUrlSync": false,
+ "type": "custom"
+ },
+ {
+ "current": {
+ "selected": false,
+ "text": "Prometheus",
+ "value": "Prometheus"
+ },
+ "hide": 2,
+ "includeAll": false,
+ "label": "Data Source",
+ "multi": false,
+ "name": "datasource",
+ "options": [],
+ "query": "prometheus",
+ "refresh": 1,
+ "regex": "",
+ "skipUrlSync": false,
+ "type": "datasource"
+ }
+ ]
+ },
+ "time": {
+ "from": "now-6h",
+ "to": "now"
+ },
+ "timepicker": {},
+ "timezone": "",
+ "title": "Karpenter Capacity",
+ "uid": "ta8I9Q67z",
+ "version": 4,
+ "weekStart": ""
+}
\ No newline at end of file
diff --git a/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/karpenter-controllers-allocation.json b/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/karpenter-controllers-allocation.json
new file mode 100644
index 000000000000..a2fbaaa6e3ed
--- /dev/null
+++ b/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/karpenter-controllers-allocation.json
@@ -0,0 +1,330 @@
+{
+ "__inputs": [
+ {
+ "name": "DS_PROMETHEUS",
+ "label": "Prometheus",
+ "description": "",
+ "type": "datasource",
+ "pluginId": "prometheus",
+ "pluginName": "Prometheus"
+ }
+ ],
+ "__requires": [
+ {
+ "type": "grafana",
+ "id": "grafana",
+ "name": "Grafana",
+ "version": "8.1.6"
+ },
+ {
+ "type": "panel",
+ "id": "heatmap",
+ "name": "Heatmap",
+ "version": ""
+ },
+ {
+ "type": "datasource",
+ "id": "prometheus",
+ "name": "Prometheus",
+ "version": "1.0.0"
+ },
+ {
+ "type": "panel",
+ "id": "text",
+ "name": "Text",
+ "version": ""
+ }
+ ],
+ "annotations": {
+ "list": [
+ {
+ "builtIn": 1,
+ "datasource": "-- Grafana --",
+ "enable": true,
+ "hide": true,
+ "iconColor": "rgba(0, 211, 255, 1)",
+ "name": "Annotations & Alerts",
+ "target": {
+ "limit": 100,
+ "matchAny": false,
+ "tags": [],
+ "type": "dashboard"
+ },
+ "type": "dashboard"
+ }
+ ]
+ },
+ "editable": true,
+ "gnetId": null,
+ "graphTooltip": 0,
+ "id": null,
+ "iteration": 1636732403925,
+ "links": [],
+ "panels": [
+ {
+ "datasource": null,
+ "gridPos": {
+ "h": 4,
+ "w": 24,
+ "x": 0,
+ "y": 0
+ },
+ "id": 5,
+ "options": {
+ "content": "Displays information about Allocation controller processes.\n\nSee the information icon of each panel for a description.\n\nSuggest improvements and additions [here](https://github.com/aws/karpenter/issues/new?labels=dashboard).",
+ "mode": "markdown"
+ },
+ "pluginVersion": "8.1.6",
+ "targets": [
+ {
+ "queryType": "randomWalk",
+ "refId": "A"
+ }
+ ],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "About this dashboard",
+ "type": "text"
+ },
+ {
+ "cards": {
+ "cardPadding": null,
+ "cardRound": null
+ },
+ "color": {
+ "cardColor": "#b4ff00",
+ "colorScale": "sqrt",
+ "colorScheme": "interpolateMagma",
+ "exponent": 0.5,
+ "min": null,
+ "mode": "spectrum"
+ },
+ "dataFormat": "tsbuckets",
+ "datasource": "${DS_PROMETHEUS}",
+ "description": "Aggregates the duration of all bind operations of the Allocation controller.\n\nThe color of each \"bucket\" is a visual clue to the number of bind operations that completed within that duration range.\n\nMouse-over a bucket to display exact values.",
+ "gridPos": {
+ "h": 8,
+ "w": 24,
+ "x": 0,
+ "y": 4
+ },
+ "heatmap": {},
+ "hideZeroBuckets": false,
+ "highlightCards": true,
+ "id": 2,
+ "legend": {
+ "show": true
+ },
+ "maxDataPoints": 25,
+ "pluginVersion": "7.5.0",
+ "reverseYBuckets": false,
+ "targets": [
+ {
+ "exemplar": true,
+ "expr": "sum(increase(karpenter_allocation_controller_bind_duration_seconds_bucket[$__interval])) by (le)",
+ "format": "heatmap",
+ "instant": false,
+ "interval": "",
+ "legendFormat": "{{le}}",
+ "queryType": "randomWalk",
+ "refId": "All Binds"
+ }
+ ],
+ "title": "Bind duration",
+ "tooltip": {
+ "show": true,
+ "showHistogram": false
+ },
+ "type": "heatmap",
+ "xAxis": {
+ "show": true
+ },
+ "xBucketNumber": null,
+ "xBucketSize": null,
+ "yAxis": {
+ "decimals": 0,
+ "format": "s",
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true,
+ "splitFactor": null
+ },
+ "yBucketBound": "auto",
+ "yBucketNumber": null,
+ "yBucketSize": null
+ },
+ {
+ "cards": {
+ "cardPadding": null,
+ "cardRound": null
+ },
+ "color": {
+ "cardColor": "#b4ff00",
+ "colorScale": "sqrt",
+ "colorScheme": "interpolateMagma",
+ "exponent": 0.5,
+ "mode": "spectrum"
+ },
+ "dataFormat": "tsbuckets",
+ "datasource": "${DS_PROMETHEUS}",
+ "description": "Aggregates the duration of all binpack operations of the Allocation controller.\n\nThe color of each \"bucket\" is a visual clue to the number of binpack operations that completed within that duration range.\n\nMouse-over a bucket to display exact values.",
+ "gridPos": {
+ "h": 8,
+ "w": 24,
+ "x": 0,
+ "y": 12
+ },
+ "heatmap": {},
+ "hideZeroBuckets": false,
+ "highlightCards": true,
+ "id": 7,
+ "legend": {
+ "show": true
+ },
+ "maxDataPoints": 25,
+ "pluginVersion": "7.5.0",
+ "reverseYBuckets": false,
+ "targets": [
+ {
+ "exemplar": true,
+ "expr": "sum(increase(karpenter_allocation_controller_binpacking_duration_seconds_bucket[$__interval])) by (le)",
+ "format": "heatmap",
+ "interval": "",
+ "legendFormat": "{{le}}",
+ "queryType": "randomWalk",
+ "refId": "Binpacking Duration"
+ }
+ ],
+ "title": "Binpack duration",
+ "tooltip": {
+ "show": true,
+ "showHistogram": false
+ },
+ "type": "heatmap",
+ "xAxis": {
+ "show": true
+ },
+ "xBucketNumber": null,
+ "xBucketSize": null,
+ "yAxis": {
+ "decimals": 0,
+ "format": "s",
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true,
+ "splitFactor": null
+ },
+ "yBucketBound": "auto",
+ "yBucketNumber": null,
+ "yBucketSize": null
+ },
+ {
+ "cards": {
+ "cardPadding": null,
+ "cardRound": null
+ },
+ "color": {
+ "cardColor": "#b4ff00",
+ "colorScale": "sqrt",
+ "colorScheme": "interpolateInferno",
+ "exponent": 0.5,
+ "mode": "spectrum"
+ },
+ "dataFormat": "tsbuckets",
+ "datasource": "${DS_PROMETHEUS}",
+ "description": "Aggregates the duration of all scheduling operations of the Allocation controller for provisioner $provisioner.\n\nThe color of each \"bucket\" is a visual clue to the number of scheduling operations that completed within that duration range.\n\nMouse-over a bucket to display exact values.",
+ "gridPos": {
+ "h": 8,
+ "w": 24,
+ "x": 0,
+ "y": 20
+ },
+ "heatmap": {},
+ "hideZeroBuckets": false,
+ "highlightCards": true,
+ "id": 9,
+ "legend": {
+ "show": true
+ },
+ "maxDataPoints": 25,
+ "pluginVersion": "7.5.0",
+ "reverseYBuckets": false,
+ "targets": [
+ {
+ "exemplar": true,
+ "expr": "sum(increase(karpenter_allocation_controller_scheduling_duration_seconds_bucket{provisioner=\"$provisioner\"}[$__interval])) by (le)",
+ "format": "heatmap",
+ "interval": "",
+ "legendFormat": "{{le}}",
+ "queryType": "randomWalk",
+ "refId": "Scheduling Duration"
+ }
+ ],
+ "title": "Scheduling duration",
+ "tooltip": {
+ "show": true,
+ "showHistogram": false
+ },
+ "type": "heatmap",
+ "xAxis": {
+ "show": true
+ },
+ "xBucketNumber": null,
+ "xBucketSize": null,
+ "yAxis": {
+ "decimals": 0,
+ "format": "s",
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true,
+ "splitFactor": null
+ },
+ "yBucketBound": "auto",
+ "yBucketNumber": null,
+ "yBucketSize": null
+ }
+ ],
+ "refresh": "1m",
+ "schemaVersion": 30,
+ "style": "dark",
+ "tags": [],
+ "templating": {
+ "list": [
+ {
+ "allValue": null,
+ "current": {},
+ "datasource": "${DS_PROMETHEUS}",
+ "definition": "label_values(karpenter_allocation_controller_scheduling_duration_seconds_bucket, provisioner)",
+ "description": "Karpenter provisioner",
+ "error": null,
+ "hide": 0,
+ "includeAll": false,
+ "label": "Provisioner",
+ "multi": false,
+ "name": "provisioner",
+ "options": [],
+ "query": {
+ "query": "label_values(karpenter_allocation_controller_scheduling_duration_seconds_bucket, provisioner)",
+ "refId": "StandardVariableQuery"
+ },
+ "refresh": 2,
+ "regex": "",
+ "skipUrlSync": false,
+ "sort": 1,
+ "type": "query"
+ }
+ ]
+ },
+ "time": {
+ "from": "now-3h",
+ "to": "now"
+ },
+ "timepicker": {},
+ "timezone": "",
+ "title": "Controllers / Allocation",
+ "uid": "fs47R-Dnz",
+ "version": 9
+}
diff --git a/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/karpenter-controllers.json b/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/karpenter-controllers.json
new file mode 100644
index 000000000000..ca7c44862ecf
--- /dev/null
+++ b/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/karpenter-controllers.json
@@ -0,0 +1,446 @@
+{
+ "__inputs": [
+ {
+ "name": "DS_PROMETHEUS",
+ "label": "Prometheus",
+ "description": "",
+ "type": "datasource",
+ "pluginId": "prometheus",
+ "pluginName": "Prometheus"
+ }
+ ],
+ "__requires": [
+ {
+ "type": "grafana",
+ "id": "grafana",
+ "name": "Grafana",
+ "version": "8.1.6"
+ },
+ {
+ "type": "panel",
+ "id": "graph",
+ "name": "Graph (old)",
+ "version": ""
+ },
+ {
+ "type": "panel",
+ "id": "heatmap",
+ "name": "Heatmap",
+ "version": ""
+ },
+ {
+ "type": "datasource",
+ "id": "prometheus",
+ "name": "Prometheus",
+ "version": "1.0.0"
+ },
+ {
+ "type": "panel",
+ "id": "text",
+ "name": "Text",
+ "version": ""
+ }
+ ],
+ "annotations": {
+ "list": [
+ {
+ "builtIn": 1,
+ "datasource": "-- Grafana --",
+ "enable": true,
+ "hide": true,
+ "iconColor": "rgba(0, 211, 255, 1)",
+ "name": "Annotations & Alerts",
+ "target": {
+ "limit": 100,
+ "matchAny": false,
+ "tags": [],
+ "type": "dashboard"
+ },
+ "type": "dashboard"
+ }
+ ]
+ },
+ "editable": true,
+ "gnetId": null,
+ "graphTooltip": 0,
+ "id": null,
+ "iteration": 1636733515850,
+ "links": [],
+ "panels": [
+ {
+ "datasource": null,
+ "description": "",
+ "gridPos": {
+ "h": 4,
+ "w": 24,
+ "x": 0,
+ "y": 0
+ },
+ "id": 99,
+ "options": {
+ "content": "Displays information collected by the Kubernetes controller-runtime.\n\nSee the information icon of each panel for a description.\n\nSuggest improvements and additions [here](https://github.com/aws/karpenter/issues/new?labels=dashboard).",
+ "mode": "markdown"
+ },
+ "pluginVersion": "8.1.6",
+ "title": "About this dashboard",
+ "type": "text"
+ },
+ {
+ "aliasColors": {
+ "items": "light-blue"
+ },
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PROMETHEUS}",
+ "description": "",
+ "fill": 1,
+ "fillGradient": 2,
+ "gridPos": {
+ "h": 8,
+ "w": 8,
+ "x": 0,
+ "y": 4
+ },
+ "hiddenSeries": false,
+ "id": 14,
+ "legend": {
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.1.6",
+ "pointradius": 2,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "exemplar": true,
+ "expr": "workqueue_depth{name=\"$controller\"}",
+ "interval": "",
+ "legendFormat": "items",
+ "queryType": "randomWalk",
+ "refId": "Work Queue Depth"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeRegions": [],
+ "timeShift": null,
+ "title": "Items in Work Queue",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "decimals": 0,
+ "format": "short",
+ "label": "",
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ],
+ "yaxis": {
+ "align": false,
+ "alignLevel": null
+ }
+ },
+ {
+ "aliasColors": {
+ "error": "red",
+ "requeue": "orange",
+ "requeue_after": "semi-dark-purple",
+ "success": "green"
+ },
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PROMETHEUS}",
+ "description": "The rate of completed reconciliations per minute broken out by result status.",
+ "fill": 1,
+ "fillGradient": 1,
+ "gridPos": {
+ "h": 8,
+ "w": 8,
+ "x": 8,
+ "y": 4
+ },
+ "hiddenSeries": false,
+ "id": 76,
+ "legend": {
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.1.6",
+ "pointradius": 2,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "exemplar": true,
+ "expr": "rate(controller_runtime_reconcile_total{controller=\"$controller\"}[$trailing]) * 60",
+ "interval": "",
+ "legendFormat": "{{result}}",
+ "queryType": "randomWalk",
+ "refId": "Reconciliations per minute"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeRegions": [],
+ "timeShift": null,
+ "title": "Reconciliations per minute",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "$$hashKey": "object:566",
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "$$hashKey": "object:567",
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ],
+ "yaxis": {
+ "align": false,
+ "alignLevel": null
+ }
+ },
+ {
+ "cards": {
+ "cardPadding": null,
+ "cardRound": null
+ },
+ "color": {
+ "cardColor": "#b4ff00",
+ "colorScale": "sqrt",
+ "colorScheme": "interpolateMagma",
+ "exponent": 0.5,
+ "mode": "spectrum"
+ },
+ "dataFormat": "tsbuckets",
+ "datasource": "${DS_PROMETHEUS}",
+ "description": "Aggregates the duration of the reconciliation process.\n\nThe color of each \"bucket\" is a visual clue to the number of reconciliations that completed within that time range.\n\nMouse-over a bucket to display exact values.",
+ "gridPos": {
+ "h": 8,
+ "w": 8,
+ "x": 16,
+ "y": 4
+ },
+ "heatmap": {},
+ "hideZeroBuckets": false,
+ "highlightCards": true,
+ "id": 126,
+ "legend": {
+ "show": true
+ },
+ "maxDataPoints": 25,
+ "pluginVersion": "8.1.6",
+ "reverseYBuckets": false,
+ "targets": [
+ {
+ "exemplar": true,
+ "expr": "sum(increase(controller_runtime_reconcile_time_seconds_bucket{controller=\"$controller\"}[$__interval])) by (le)",
+ "format": "heatmap",
+ "hide": false,
+ "interval": "",
+ "legendFormat": "{{le}}",
+ "queryType": "randomWalk",
+ "refId": "p100"
+ }
+ ],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Reconciliation duration",
+ "tooltip": {
+ "show": true,
+ "showHistogram": false
+ },
+ "type": "heatmap",
+ "xAxis": {
+ "show": true
+ },
+ "xBucketNumber": null,
+ "xBucketSize": null,
+ "yAxis": {
+ "decimals": 0,
+ "format": "s",
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true,
+ "splitFactor": null
+ },
+ "yBucketBound": "auto",
+ "yBucketNumber": null,
+ "yBucketSize": null
+ }
+ ],
+ "refresh": "1m",
+ "schemaVersion": 30,
+ "style": "dark",
+ "tags": [],
+ "templating": {
+ "list": [
+ {
+ "allValue": "",
+ "current": {},
+ "datasource": "${DS_PROMETHEUS}",
+ "definition": "label_values(controller_runtime_reconcile_errors_total, controller)",
+ "description": "Kubernetes controller",
+ "error": null,
+ "hide": 0,
+ "includeAll": false,
+ "label": "Controller",
+ "multi": false,
+ "name": "controller",
+ "options": [],
+ "query": {
+ "query": "label_values(controller_runtime_reconcile_errors_total, controller)",
+ "refId": "StandardVariableQuery"
+ },
+ "refresh": 2,
+ "regex": "",
+ "skipUrlSync": false,
+ "sort": 0,
+ "tagValuesQuery": "",
+ "tagsQuery": "",
+ "type": "query",
+ "useTags": false
+ },
+ {
+ "allValue": null,
+ "current": {
+ "selected": true,
+ "text": "10m",
+ "value": "10m"
+ },
+ "description": "Trailing aggregation window",
+ "error": null,
+ "hide": 0,
+ "includeAll": false,
+ "label": "Trailing",
+ "multi": false,
+ "name": "trailing",
+ "options": [
+ {
+ "selected": false,
+ "text": "30s",
+ "value": "30s"
+ },
+ {
+ "selected": false,
+ "text": "1m",
+ "value": "1m"
+ },
+ {
+ "selected": false,
+ "text": "5m",
+ "value": "5m"
+ },
+ {
+ "selected": true,
+ "text": "10m",
+ "value": "10m"
+ },
+ {
+ "selected": false,
+ "text": "30m",
+ "value": "30m"
+ },
+ {
+ "selected": false,
+ "text": "1h",
+ "value": "1h"
+ }
+ ],
+ "query": "30s,1m,5m,10m,30m,1h",
+ "queryValue": "",
+ "skipUrlSync": false,
+ "type": "custom"
+ }
+ ]
+ },
+ "time": {
+ "from": "now-1h",
+ "to": "now"
+ },
+ "timepicker": {},
+ "timezone": "",
+ "title": "Controllers",
+ "uid": "-Yw9ShDnz",
+ "version": 15
+}
diff --git a/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/karpenter-performance-dashboard.json b/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/karpenter-performance-dashboard.json
new file mode 100644
index 000000000000..74c75216e058
--- /dev/null
+++ b/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/karpenter-performance-dashboard.json
@@ -0,0 +1,573 @@
+{
+ "annotations": {
+ "list": [
+ {
+ "builtIn": 1,
+ "datasource": "-- Grafana --",
+ "enable": true,
+ "hide": true,
+ "iconColor": "rgba(0, 211, 255, 1)",
+ "name": "Annotations & Alerts",
+ "target": {
+ "limit": 100,
+ "matchAny": false,
+ "tags": [],
+ "type": "dashboard"
+ },
+ "type": "dashboard"
+ }
+ ]
+ },
+ "editable": true,
+ "fiscalYearStartMonth": 0,
+ "graphTooltip": 0,
+ "id": 7,
+ "links": [],
+ "liveNow": true,
+ "panels": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "never",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "s"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 9,
+ "w": 24,
+ "x": 0,
+ "y": 0
+ },
+ "id": 4,
+ "options": {
+ "legend": {
+ "calcs": [],
+ "displayMode": "list",
+ "placement": "bottom"
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "editorMode": "code",
+ "expr": "karpenter_nodes_termination_time_seconds{quantile=\"0\"}",
+ "legendFormat": "Min",
+ "range": true,
+ "refId": "A"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "editorMode": "code",
+ "expr": "karpenter_nodes_termination_time_seconds{quantile=\"0.5\"}",
+ "hide": false,
+ "legendFormat": "P50",
+ "range": true,
+ "refId": "B"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "editorMode": "code",
+ "expr": "karpenter_nodes_termination_time_seconds{quantile=\"0.9\"}",
+ "hide": false,
+ "legendFormat": "P90",
+ "range": true,
+ "refId": "C"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "editorMode": "code",
+ "expr": "karpenter_nodes_termination_time_seconds{quantile=\"0.99\"}",
+ "hide": false,
+ "legendFormat": "P99",
+ "range": true,
+ "refId": "D"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "editorMode": "code",
+ "expr": "karpenter_nodes_termination_time_seconds{quantile=\"1\"}",
+ "hide": false,
+ "legendFormat": "Max",
+ "range": true,
+ "refId": "E"
+ }
+ ],
+ "title": "Node Termination Latency",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 10,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "never",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "mappings": [],
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "s"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 8,
+ "w": 24,
+ "x": 0,
+ "y": 9
+ },
+ "id": 2,
+ "options": {
+ "legend": {
+ "calcs": [],
+ "displayMode": "list",
+ "placement": "bottom"
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "editorMode": "code",
+ "expr": "karpenter_pods_startup_time_seconds{quantile=\"0\"}",
+ "format": "time_series",
+ "legendFormat": "Min",
+ "range": true,
+ "refId": "Minimum"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "editorMode": "code",
+ "expr": "karpenter_pods_startup_time_seconds{quantile=\"0.5\"}",
+ "hide": false,
+ "legendFormat": "P50",
+ "range": true,
+ "refId": "Median"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "editorMode": "code",
+ "expr": "karpenter_pods_startup_time_seconds{quantile=\"0.9\"}",
+ "hide": false,
+ "legendFormat": "P90",
+ "range": true,
+ "refId": "P90"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "editorMode": "code",
+ "expr": "karpenter_pods_startup_time_seconds{quantile=\"0.99\"}",
+ "hide": false,
+ "legendFormat": "P99",
+ "range": true,
+ "refId": "P99"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "editorMode": "code",
+ "expr": "karpenter_pods_startup_time_seconds{quantile=\"1\"}",
+ "hide": false,
+ "legendFormat": "Max",
+ "range": true,
+ "refId": "Maximum"
+ }
+ ],
+ "title": "Pod Startup Latency",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 10,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "never",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "s"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 8,
+ "w": 13,
+ "x": 0,
+ "y": 17
+ },
+ "id": 6,
+ "options": {
+ "legend": {
+ "calcs": [],
+ "displayMode": "list",
+ "placement": "bottom"
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "editorMode": "code",
+ "expr": "histogram_quantile(0, rate(controller_runtime_reconcile_time_seconds_bucket{controller=\"$controller\"}[10m]))",
+ "hide": false,
+ "legendFormat": "Min",
+ "range": true,
+ "refId": "Minimum"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "editorMode": "code",
+ "expr": "histogram_quantile(0.5, rate(controller_runtime_reconcile_time_seconds_bucket{controller=\"$controller\"}[10m]))",
+ "legendFormat": "P50",
+ "range": true,
+ "refId": "Median"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "editorMode": "code",
+ "expr": "histogram_quantile(0.9, rate(controller_runtime_reconcile_time_seconds_bucket{controller=\"$controller\"}[10m]))",
+ "hide": false,
+ "legendFormat": "P90",
+ "range": true,
+ "refId": "P90"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "editorMode": "code",
+ "expr": "histogram_quantile(0.99, rate(controller_runtime_reconcile_time_seconds_bucket{controller=\"$controller\"}[10m]))",
+ "hide": false,
+ "legendFormat": "P99",
+ "range": true,
+ "refId": "P99"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "editorMode": "code",
+ "expr": "histogram_quantile(1, rate(controller_runtime_reconcile_time_seconds_bucket{controller=\"$controller\"}[10m]))",
+ "hide": false,
+ "legendFormat": "Max",
+ "range": true,
+ "refId": "Maximum"
+ }
+ ],
+ "title": "Controller Reconciliation Latency [$controller]",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "reqps"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 8,
+ "w": 11,
+ "x": 13,
+ "y": 17
+ },
+ "id": 8,
+ "options": {
+ "displayMode": "gradient",
+ "minVizHeight": 10,
+ "minVizWidth": 0,
+ "orientation": "horizontal",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showUnfilled": true
+ },
+ "pluginVersion": "9.0.5",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "editorMode": "code",
+ "expr": "sum(rate(controller_runtime_reconcile_total[10m])) by (controller)",
+ "legendFormat": "{{controller}}",
+ "range": true,
+ "refId": "A"
+ }
+ ],
+ "title": "Controller Reconciliation Rate",
+ "type": "bargauge"
+ }
+ ],
+ "refresh": "5s",
+ "schemaVersion": 36,
+ "style": "dark",
+ "tags": [],
+ "templating": {
+ "list": [
+ {
+ "current": {
+ "selected": false,
+ "text": "provisioning",
+ "value": "provisioning"
+ },
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${datasource}"
+ },
+ "definition": "label_values(controller_runtime_reconcile_time_seconds_count, controller)",
+ "hide": 0,
+ "includeAll": false,
+ "multi": false,
+ "name": "controller",
+ "options": [],
+ "query": {
+ "query": "label_values(controller_runtime_reconcile_time_seconds_count, controller)",
+ "refId": "StandardVariableQuery"
+ },
+ "refresh": 2,
+ "regex": "",
+ "skipUrlSync": false,
+ "sort": 0,
+ "type": "query"
+ },
+ {
+ "current": {
+ "selected": false,
+ "text": "Prometheus",
+ "value": "Prometheus"
+ },
+ "hide": 2,
+ "includeAll": false,
+ "label": "Data Source",
+ "multi": false,
+ "name": "datasource",
+ "options": [],
+ "query": "prometheus",
+ "refresh": 1,
+ "regex": "",
+ "skipUrlSync": false,
+ "type": "datasource"
+ }
+ ]
+ },
+ "time": {
+ "from": "now-6h",
+ "to": "now"
+ },
+ "timepicker": {},
+ "timezone": "",
+ "title": "Karpenter Performance",
+ "uid": "_bdgC2g4z",
+ "version": 3,
+ "weekStart": ""
+}
\ No newline at end of file
diff --git a/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/prometheus-values.yaml b/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/prometheus-values.yaml
new file mode 100644
index 000000000000..4cd78495351b
--- /dev/null
+++ b/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/prometheus-values.yaml
@@ -0,0 +1,20 @@
+alertmanager:
+ persistentVolume:
+ enabled: false
+
+server:
+ fullnameOverride: prometheus-server
+ persistentVolume:
+ enabled: false
+
+extraScrapeConfigs: |
+ - job_name: karpenter
+ kubernetes_sd_configs:
+ - role: endpoints
+ namespaces:
+ names:
+ - karpenter
+ relabel_configs:
+ - source_labels: [__meta_kubernetes_endpoint_port_name]
+ regex: http-metrics
+ action: keep
diff --git a/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/scripts/add-monitoring.sh b/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/scripts/add-monitoring.sh
new file mode 100755
index 000000000000..6d2332b06be2
--- /dev/null
+++ b/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/scripts/add-monitoring.sh
@@ -0,0 +1,22 @@
+#!/bin/bash
+set -euo pipefail #fail if one step fails
+
+if [ "$#" -ne 1 ]
+then
+ echo "Missing required Karpenter version. Usage: add-monitoring.sh v0.0.1"
+ exit 1
+fi
+
+export KARPENTER_VERSION=$1
+
+declare -a steps=(
+ step01-config.sh
+ step09-add-prometheus-grafana.sh
+ step10-add-grafana-port-forward.sh
+ step11-grafana-get-password.sh
+)
+
+for step in "${steps[@]}"; do
+ echo "$step"
+ source $step
+done
diff --git a/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/scripts/add-provisioner.sh b/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/scripts/add-provisioner.sh
new file mode 100755
index 000000000000..51f286de0c3c
--- /dev/null
+++ b/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/scripts/add-provisioner.sh
@@ -0,0 +1,14 @@
+#!/bin/bash
+set -euo pipefail #fail if one step fails
+
+declare -a steps=(
+ step01-config.sh
+ step12-add-provisioner.sh
+ step13-automatic-node-provisioning.sh
+ step14-automatic-node-termination.sh
+)
+
+for step in "${steps[@]}"; do
+ echo "$step"
+ source $step
+done
diff --git a/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/scripts/add-roles.sh b/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/scripts/add-roles.sh
new file mode 100755
index 000000000000..cf0656f3db3d
--- /dev/null
+++ b/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/scripts/add-roles.sh
@@ -0,0 +1,23 @@
+#!/bin/bash
+set -euo pipefail #fail if one step fails
+
+if [ "$#" -ne 1 ]
+then
+ echo "Missing required Karpenter version. Usage: setup-roles.sh v0.0.1"
+ exit 1
+fi
+
+export KARPENTER_VERSION=$1
+SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)
+
+declare -a steps=(
+ step03-iam-cloud-formation.sh
+ step04-grant-access.sh
+ step05-controller-iam.sh
+ step06-add-spot-role.sh
+)
+
+for step in "${steps[@]}"; do
+ echo "$step"
+ source "$SCRIPT_DIR/$step"
+done
diff --git a/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/scripts/cleanup.sh b/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/scripts/cleanup.sh
new file mode 100755
index 000000000000..52851e7f975a
--- /dev/null
+++ b/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/scripts/cleanup.sh
@@ -0,0 +1,11 @@
+#!/bin/bash
+
+declare -a steps=(
+ step01-config.sh
+ step16-cleanup.sh
+)
+
+for step in "${steps[@]}"; do
+ echo "$step"
+ source $step
+done
diff --git a/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/scripts/install.sh b/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/scripts/install.sh
new file mode 100755
index 000000000000..e0ebfb32e511
--- /dev/null
+++ b/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/scripts/install.sh
@@ -0,0 +1,25 @@
+#!/bin/bash
+set -euo pipefail #fail if one step fails
+
+if [ "$#" -ne 1 ]
+then
+ echo "Missing required Karpenter version. Usage: install.sh v0.0.1"
+ exit 1
+fi
+
+export KARPENTER_VERSION=$1
+
+declare -a steps=(
+ step01-config.sh
+ step02-create-cluster.sh
+ step03-iam-cloud-formation.sh
+ step04-grant-access.sh
+ step05-controller-iam.sh
+ step06-add-spot-role.sh
+ step08-apply-helm-chart.sh
+)
+
+for step in "${steps[@]}"; do
+ echo "$step"
+ source $step
+done
diff --git a/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/scripts/step01-config.sh b/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/scripts/step01-config.sh
new file mode 100755
index 000000000000..56fc397addf0
--- /dev/null
+++ b/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/scripts/step01-config.sh
@@ -0,0 +1,4 @@
+export CLUSTER_NAME="${USER}-karpenter-demo"
+export AWS_DEFAULT_REGION="us-west-2"
+export AWS_ACCOUNT_ID="$(aws sts get-caller-identity --query Account --output text)"
+export TEMPOUT=$(mktemp)
diff --git a/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/scripts/step02-create-cluster-fargate.sh b/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/scripts/step02-create-cluster-fargate.sh
new file mode 100755
index 000000000000..d5ca27944cf1
--- /dev/null
+++ b/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/scripts/step02-create-cluster-fargate.sh
@@ -0,0 +1,17 @@
+eksctl create cluster -f - << EOF
+---
+apiVersion: eksctl.io/v1alpha5
+kind: ClusterConfig
+metadata:
+ name: ${CLUSTER_NAME}
+ region: ${AWS_DEFAULT_REGION}
+ version: "1.24"
+ tags:
+ karpenter.sh/discovery: ${CLUSTER_NAME}
+fargateProfiles:
+ - name: karpenter
+ selectors:
+ - namespace: karpenter
+iam:
+ withOIDC: true
+EOF
diff --git a/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/scripts/step02-create-cluster.sh b/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/scripts/step02-create-cluster.sh
new file mode 100755
index 000000000000..4bb335ff4485
--- /dev/null
+++ b/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/scripts/step02-create-cluster.sh
@@ -0,0 +1,67 @@
+curl -fsSL https://karpenter.sh/"${KARPENTER_VERSION}"/getting-started/getting-started-with-eksctl/cloudformation.yaml > $TEMPOUT \
+&& aws cloudformation deploy \
+ --stack-name "Karpenter-${CLUSTER_NAME}" \
+ --template-file "${TEMPOUT}" \
+ --capabilities CAPABILITY_NAMED_IAM \
+ --parameter-overrides "ClusterName=${CLUSTER_NAME}"
+
+eksctl create cluster -f - < $TEMPOUT \
+&& aws cloudformation deploy \
+ --stack-name "Karpenter-${CLUSTER_NAME}" \
+ --template-file "${TEMPOUT}" \
+ --capabilities CAPABILITY_NAMED_IAM \
+ --parameter-overrides "ClusterName=${CLUSTER_NAME}"
diff --git a/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/scripts/step04-grant-access.sh b/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/scripts/step04-grant-access.sh
new file mode 100755
index 000000000000..f98a75a50011
--- /dev/null
+++ b/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/scripts/step04-grant-access.sh
@@ -0,0 +1,6 @@
+eksctl create iamidentitymapping \
+ --username system:node:{{EC2PrivateDNSName}} \
+ --cluster "${CLUSTER_NAME}" \
+ --arn "arn:aws:iam::${AWS_ACCOUNT_ID}:role/KarpenterNodeRole-${CLUSTER_NAME}" \
+ --group system:bootstrappers \
+ --group system:nodes
diff --git a/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/scripts/step05-controller-iam.sh b/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/scripts/step05-controller-iam.sh
new file mode 100755
index 000000000000..32673a49c9e0
--- /dev/null
+++ b/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/scripts/step05-controller-iam.sh
@@ -0,0 +1,8 @@
+eksctl create iamserviceaccount \
+ --cluster "${CLUSTER_NAME}" --name karpenter --namespace karpenter \
+ --role-name "${CLUSTER_NAME}-karpenter" \
+ --attach-policy-arn "arn:aws:iam::${AWS_ACCOUNT_ID}:policy/KarpenterControllerPolicy-${CLUSTER_NAME}" \
+ --role-only \
+ --approve
+
+export KARPENTER_IAM_ROLE_ARN="arn:aws:iam::${AWS_ACCOUNT_ID}:role/${CLUSTER_NAME}-karpenter"
diff --git a/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/scripts/step06-add-spot-role.sh b/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/scripts/step06-add-spot-role.sh
new file mode 100755
index 000000000000..3cb0510b905b
--- /dev/null
+++ b/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/scripts/step06-add-spot-role.sh
@@ -0,0 +1,3 @@
+aws iam create-service-linked-role --aws-service-name spot.amazonaws.com || true
+# If the role has already been successfully created, you will see:
+# An error occurred (InvalidInput) when calling the CreateServiceLinkedRole operation: Service role name AWSServiceRoleForEC2Spot has been taken in this account, please try a different suffix.
diff --git a/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/scripts/step08-apply-helm-chart.sh b/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/scripts/step08-apply-helm-chart.sh
new file mode 100755
index 000000000000..21c6b7e61c03
--- /dev/null
+++ b/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/scripts/step08-apply-helm-chart.sh
@@ -0,0 +1,11 @@
+docker logout public.ecr.aws
+helm upgrade --install karpenter oci://public.ecr.aws/karpenter/karpenter --version ${KARPENTER_VERSION} --namespace karpenter --create-namespace \
+ --set serviceAccount.annotations."eks\.amazonaws\.com/role-arn"=${KARPENTER_IAM_ROLE_ARN} \
+ --set settings.aws.clusterName=${CLUSTER_NAME} \
+ --set settings.aws.defaultInstanceProfile=KarpenterNodeInstanceProfile-${CLUSTER_NAME} \
+ --set settings.aws.interruptionQueueName=${CLUSTER_NAME} \
+ --set controller.resources.requests.cpu=1 \
+ --set controller.resources.requests.memory=1Gi \
+ --set controller.resources.limits.cpu=1 \
+ --set controller.resources.limits.memory=1Gi \
+ --wait
diff --git a/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/scripts/step09-add-prometheus-grafana.sh b/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/scripts/step09-add-prometheus-grafana.sh
new file mode 100755
index 000000000000..1b028b23c8ed
--- /dev/null
+++ b/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/scripts/step09-add-prometheus-grafana.sh
@@ -0,0 +1,11 @@
+helm repo add grafana-charts https://grafana.github.io/helm-charts
+helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
+helm repo update
+
+kubectl create namespace monitoring
+
+curl -fsSL https://karpenter.sh/"${KARPENTER_VERSION}"/getting-started/getting-started-with-eksctl/prometheus-values.yaml | tee prometheus-values.yaml
+helm install --namespace monitoring prometheus prometheus-community/prometheus --values prometheus-values.yaml
+
+curl -fsSL https://karpenter.sh/"${KARPENTER_VERSION}"/getting-started/getting-started-with-eksctl/grafana-values.yaml | tee grafana-values.yaml
+helm install --namespace monitoring grafana grafana-charts/grafana --values grafana-values.yaml
diff --git a/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/scripts/step10-add-grafana-port-forward.sh b/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/scripts/step10-add-grafana-port-forward.sh
new file mode 100755
index 000000000000..85d4028642b6
--- /dev/null
+++ b/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/scripts/step10-add-grafana-port-forward.sh
@@ -0,0 +1 @@
+kubectl port-forward --namespace monitoring svc/grafana 3000:80
diff --git a/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/scripts/step11-grafana-get-password.sh b/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/scripts/step11-grafana-get-password.sh
new file mode 100755
index 000000000000..cdf4f61d3775
--- /dev/null
+++ b/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/scripts/step11-grafana-get-password.sh
@@ -0,0 +1 @@
+kubectl get secret --namespace monitoring grafana -o jsonpath="{.data.admin-password}" | base64 --decode
diff --git a/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/scripts/step12-add-provisioner.sh b/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/scripts/step12-add-provisioner.sh
new file mode 100755
index 000000000000..e778b1410313
--- /dev/null
+++ b/website/content/en/v0.26.1/getting-started/getting-started-with-eksctl/scripts/step12-add-provisioner.sh
@@ -0,0 +1,27 @@
+cat <
+ Migrate to Karpenter from Cluster Autoscaler
+---
+
+This guide will show you how to switch from the [Kubernetes Cluster Autoscaler](https://github.com/kubernetes/autoscaler) to Karpenter for automatic node provisioning.
+We will make the following assumptions in this guide
+
+* You will use an existing EKS cluster
+* You will use existing VPC and subnets
+* You will use existing security groups
+* Your nodes are part of one or more node groups
+* Your workloads have pod disruption budgets that adhere to [EKS best practices](https://aws.github.io/aws-eks-best-practices/karpenter/)
+* Your cluster has an [OIDC provider](https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html) for service accounts
+
+This guide will also assume you have the `aws` CLI installed.
+You can also perform many of these steps in the console, but we will use the command line for simplicity.
+
+Set a variable for your cluster name.
+
+```bash
+CLUSTER_NAME=
+```
+
+Set other variables from your cluster configuration.
+
+{{% script file="./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step01-env.sh" language="bash" %}}
+
+Use that information to create our IAM roles, inline policy, and trust relationship.
+
+## Create IAM roles
+
+To get started with our migration we first need to create two new IAM roles for nodes provisioned with Karpenter and the Karpenter controller.
+
+To create the Karpenter node role we will use the following policy and commands.
+
+{{% script file="./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step02-node-iam.sh" language="bash" %}}
+
+Now attach the required policies to the role
+
+{{% script file="./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step03-node-policies.sh" language="bash" %}}
+
+Attach the IAM role to an EC2 instance profile.
+
+{{% script file="./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step04-instance-profile.sh" language="bash" %}}
+
+Now we need to create an IAM role that the Karpenter controller will use to provision new instances.
+The controller will be using [IAM Roles for Service Accounts (IRSA)](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html) which requires an OIDC endpoint.
+
+If you have another option for using IAM credentials with workloads (e.g. [kube2iam](https://github.com/jtblin/kube2iam)) your steps will be different.
+
+{{% script file="./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step05-controller-iam.sh" language="bash" %}}
+
+## Add tags to subnets and security groups
+
+We need to add tags to our nodegroup subnets so Karpenter will know which subnets to use.
+
+{{% script file="./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step06-tag-subnets.sh" language="bash" %}}
+
+Add tags to our security groups.
+This command only tags the security groups for the first nodegroup in the cluster.
+If you have multiple nodegroups or multiple security groups you will need to decide which one Karpenter should use.
+
+{{% script file="./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step07-tag-security-groups.sh" language="bash" %}}
+
+## Update aws-auth ConfigMap
+
+We need to allow nodes that are using the node IAM role we just created to join the cluster.
+To do that we have to modify the `aws-auth` ConfigMap in the cluster.
+
+{{% script file="./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step08-edit-aws-auth.sh" language="bash" %}}
+
+You will need to add a section to the mapRoles that looks something like this.
+Replace the `${AWS_ACCOUNT_ID}` variable with your account, but do not replace the `{{EC2PrivateDNSName}}`.
+```
+ - groups:
+ - system:bootstrappers
+ - system:nodes
+ rolearn: arn:aws:iam::${AWS_ACCOUNT_ID}:role/KarpenterInstanceNodeRole
+ username: system:node:{{EC2PrivateDNSName}}
+```
+
+The full aws-auth configmap should have two groups.
+One for your Karpenter node role and one for your existing node group.
+
+## Deploy Karpenter
+
+First set the Karpenter release you want to deploy.
+```bash
+export KARPENTER_VERSION=v0.26.1
+```
+
+We can now generate a full Karpenter deployment yaml from the helm chart.
+
+{{% script file="./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step09-generate-chart.sh" language="bash" %}}
+
+Modify the following lines in the karpenter.yaml file.
+
+### Set node affinity
+
+Edit the karpenter.yaml file and find the karpenter deployment affinity rules.
+Modify the affinity so karpenter will run on one of the existing node group nodes.
+
+The rules should look something like this.
+Modify the value to match your `$NODEGROUP`.
+
+```
+ affinity:
+ nodeAffinity:
+ requiredDuringSchedulingIgnoredDuringExecution:
+ nodeSelectorTerms:
+ - matchExpressions:
+ - key: karpenter.sh/provisioner-name
+ operator: DoesNotExist
+ - matchExpressions:
+ - key: eks.amazonaws.com/nodegroup
+ operator: In
+ values:
+ - ${NODEGROUP}
+```
+
+Now that our deployment is ready we can create the karpenter namespace, create the provisioner CRD, and then deploy the rest of the karpenter resources.
+
+{{% script file="./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step10-deploy.sh" language="bash" %}}
+
+## Create default provisioner
+
+We need to create a default provisioner so Karpenter knows what types of nodes we want for unscheduled workloads.
+You can refer to some of the [example provisioners](https://github.com/aws/karpenter/tree{{< githubRelRef >}}examples/provisioner) for specific needs.
+
+{{% script file="./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step11-create-provisioner.sh" language="bash" %}}
+
+## Set nodeAffinity for critical workloads (optional)
+
+You may also want to set a nodeAffinity for other critical cluster workloads.
+
+Some examples are
+
+* coredns
+* metric-server
+
+You can edit them with `kubectl edit deploy ...` and you should add node affinity for your static node group instances.
+Modify the value to match your `$NODEGROUP`.
+
+```
+ affinity:
+ nodeAffinity:
+ requiredDuringSchedulingIgnoredDuringExecution:
+ nodeSelectorTerms:
+ - matchExpressions:
+ - key: eks.amazonaws.com/nodegroup
+ operator: In
+ values:
+ - ${NODEGROUP}
+```
+
+## Remove CAS
+
+Now that karpenter is running we can disable the cluster autoscaler.
+To do that we will scale the number of replicas to zero.
+
+{{% script file="./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step12-scale-cas.sh" language="bash" %}}
+
+To get rid of the instances that were added from the node group we can scale our nodegroup down to a minimum size to support Karpenter and other critical services.
+We suggest a minimum of 2 nodes for the node group.
+
+> Note: If your workloads do not have [pod disruption budgets](https://kubernetes.io/docs/tasks/run-application/configure-pdb/) set,
+> the following command **will cause workloads to be unavailable.**
+
+{{% script file="./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step13-scale-ng.sh" language="bash" %}}
+
+If you have a lot of nodes or workloads you may want to slowly scale down your node groups by a few instances at a time.
+It is recommended to watch the transition carefully for workloads that may not have enough replicas running or disruption budgets configured.
+
+## Verify Karpenter
+
+As nodegroup nodes are drained you can verify that Karpenter is creating nodes for your workloads.
+
+```bash
+kubectl logs -f -n karpenter -c controller -l app.kubernetes.io/name=karpenter
+```
+
+You should also see new nodes created in your cluster as the old nodes are removed
+
+```bash
+kubectl get nodes
+```
diff --git a/website/content/en/v0.26.1/getting-started/migrating-from-cas/scripts/step01-env.sh b/website/content/en/v0.26.1/getting-started/migrating-from-cas/scripts/step01-env.sh
new file mode 100644
index 000000000000..20645685137b
--- /dev/null
+++ b/website/content/en/v0.26.1/getting-started/migrating-from-cas/scripts/step01-env.sh
@@ -0,0 +1,6 @@
+AWS_PARTITION="aws" # if you are not using standard partitions, you may need to configure to aws-cn / aws-us-gov
+AWS_REGION="$(aws configure list | grep region | tr -s " " | cut -d" " -f3)"
+OIDC_ENDPOINT="$(aws eks describe-cluster --name ${CLUSTER_NAME} \
+ --query "cluster.identity.oidc.issuer" --output text)"
+AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query 'Account' \
+ --output text)
diff --git a/website/content/en/v0.26.1/getting-started/migrating-from-cas/scripts/step02-node-iam.sh b/website/content/en/v0.26.1/getting-started/migrating-from-cas/scripts/step02-node-iam.sh
new file mode 100644
index 000000000000..07cd4defce11
--- /dev/null
+++ b/website/content/en/v0.26.1/getting-started/migrating-from-cas/scripts/step02-node-iam.sh
@@ -0,0 +1,15 @@
+echo '{
+ "Version": "2012-10-17",
+ "Statement": [
+ {
+ "Effect": "Allow",
+ "Principal": {
+ "Service": "ec2.amazonaws.com"
+ },
+ "Action": "sts:AssumeRole"
+ }
+ ]
+}' > node-trust-policy.json
+
+aws iam create-role --role-name "KarpenterNodeRole-${CLUSTER_NAME}" \
+ --assume-role-policy-document file://node-trust-policy.json
diff --git a/website/content/en/v0.26.1/getting-started/migrating-from-cas/scripts/step03-node-policies.sh b/website/content/en/v0.26.1/getting-started/migrating-from-cas/scripts/step03-node-policies.sh
new file mode 100644
index 000000000000..b2dc17d37514
--- /dev/null
+++ b/website/content/en/v0.26.1/getting-started/migrating-from-cas/scripts/step03-node-policies.sh
@@ -0,0 +1,11 @@
+aws iam attach-role-policy --role-name "KarpenterNodeRole-${CLUSTER_NAME}" \
+ --policy-arn arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy
+
+aws iam attach-role-policy --role-name "KarpenterNodeRole-${CLUSTER_NAME}" \
+ --policy-arn arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy
+
+aws iam attach-role-policy --role-name "KarpenterNodeRole-${CLUSTER_NAME}" \
+ --policy-arn arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly
+
+aws iam attach-role-policy --role-name "KarpenterNodeRole-${CLUSTER_NAME}" \
+ --policy-arn arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
diff --git a/website/content/en/v0.26.1/getting-started/migrating-from-cas/scripts/step04-instance-profile.sh b/website/content/en/v0.26.1/getting-started/migrating-from-cas/scripts/step04-instance-profile.sh
new file mode 100644
index 000000000000..a5671bcfb727
--- /dev/null
+++ b/website/content/en/v0.26.1/getting-started/migrating-from-cas/scripts/step04-instance-profile.sh
@@ -0,0 +1,6 @@
+aws iam create-instance-profile \
+ --instance-profile-name "KarpenterNodeInstanceProfile-${ClusterName}"
+
+aws iam add-role-to-instance-profile \
+ --instance-profile-name "KarpenterNodeInstanceProfile-${ClusterName}" \
+ --role-name "KarpenterNodeRole-${CLUSTER_NAME}"
diff --git a/website/content/en/v0.26.1/getting-started/migrating-from-cas/scripts/step05-controller-iam.sh b/website/content/en/v0.26.1/getting-started/migrating-from-cas/scripts/step05-controller-iam.sh
new file mode 100644
index 000000000000..f66657ba2222
--- /dev/null
+++ b/website/content/en/v0.26.1/getting-started/migrating-from-cas/scripts/step05-controller-iam.sh
@@ -0,0 +1,81 @@
+cat << EOF > controller-trust-policy.json
+{
+ "Version": "2012-10-17",
+ "Statement": [
+ {
+ "Effect": "Allow",
+ "Principal": {
+ "Federated": "arn:aws:iam::${AWS_ACCOUNT_ID}:oidc-provider/${OIDC_ENDPOINT#*//}"
+ },
+ "Action": "sts:AssumeRoleWithWebIdentity",
+ "Condition": {
+ "StringEquals": {
+ "${OIDC_ENDPOINT#*//}:aud": "sts.amazonaws.com",
+ "${OIDC_ENDPOINT#*//}:sub": "system:serviceaccount:karpenter:karpenter"
+ }
+ }
+ }
+ ]
+}
+EOF
+
+aws iam create-role --role-name KarpenterControllerRole-${CLUSTER_NAME} \
+ --assume-role-policy-document file://controller-trust-policy.json
+
+cat << EOF > controller-policy.json
+{
+ "Statement": [
+ {
+ "Action": [
+ "ssm:GetParameter",
+ "ec2:DescribeImages",
+ "ec2:RunInstances",
+ "ec2:DescribeSubnets",
+ "ec2:DescribeSecurityGroups",
+ "ec2:DescribeLaunchTemplates",
+ "ec2:DescribeInstances",
+ "ec2:DescribeInstanceTypes",
+ "ec2:DescribeInstanceTypeOfferings",
+ "ec2:DescribeAvailabilityZones",
+ "ec2:DeleteLaunchTemplate",
+ "ec2:CreateTags",
+ "ec2:CreateLaunchTemplate",
+ "ec2:CreateFleet",
+ "ec2:DescribeSpotPriceHistory",
+ "pricing:GetProducts"
+ ],
+ "Effect": "Allow",
+ "Resource": "*",
+ "Sid": "Karpenter"
+ },
+ {
+ "Action": "ec2:TerminateInstances",
+ "Condition": {
+ "StringLike": {
+ "ec2:ResourceTag/Name": "*karpenter*"
+ }
+ },
+ "Effect": "Allow",
+ "Resource": "*",
+ "Sid": "ConditionalEC2Termination"
+ },
+ {
+ "Effect": "Allow",
+ "Action": "iam:PassRole",
+ "Resource": "arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/KarpenterNodeRole-${CLUSTER_NAME}",
+ "Sid": "PassNodeIAMRole"
+ },
+ {
+ "Effect": "Allow",
+ "Action": "eks:DescribeCluster",
+ "Resource": "arn:${AWS_PARTITION}:eks:${AWS_REGION}:${AWS_ACCOUNT_ID}:cluster/${CLUSTER_NAME}",
+ "Sid": "EKSClusterEndpointLookup"
+ }
+ ],
+ "Version": "2012-10-17"
+}
+EOF
+
+aws iam put-role-policy --role-name KarpenterControllerRole-${CLUSTER_NAME} \
+ --policy-name KarpenterControllerPolicy-${CLUSTER_NAME} \
+ --policy-document file://controller-policy.json
diff --git a/website/content/en/v0.26.1/getting-started/migrating-from-cas/scripts/step06-tag-subnets.sh b/website/content/en/v0.26.1/getting-started/migrating-from-cas/scripts/step06-tag-subnets.sh
new file mode 100644
index 000000000000..de972ea2bddd
--- /dev/null
+++ b/website/content/en/v0.26.1/getting-started/migrating-from-cas/scripts/step06-tag-subnets.sh
@@ -0,0 +1,6 @@
+for NODEGROUP in $(aws eks list-nodegroups --cluster-name ${CLUSTER_NAME} \
+ --query 'nodegroups' --output text); do aws ec2 create-tags \
+ --tags "Key=karpenter.sh/discovery,Value=${CLUSTER_NAME}" \
+ --resources $(aws eks describe-nodegroup --cluster-name ${CLUSTER_NAME} \
+ --nodegroup-name $NODEGROUP --query 'nodegroup.subnets' --output text )
+done
diff --git a/website/content/en/v0.26.1/getting-started/migrating-from-cas/scripts/step07-tag-security-groups.sh b/website/content/en/v0.26.1/getting-started/migrating-from-cas/scripts/step07-tag-security-groups.sh
new file mode 100644
index 000000000000..397e40904cee
--- /dev/null
+++ b/website/content/en/v0.26.1/getting-started/migrating-from-cas/scripts/step07-tag-security-groups.sh
@@ -0,0 +1,22 @@
+NODEGROUP=$(aws eks list-nodegroups --cluster-name ${CLUSTER_NAME} \
+ --query 'nodegroups[0]' --output text)
+
+LAUNCH_TEMPLATE=$(aws eks describe-nodegroup --cluster-name ${CLUSTER_NAME} \
+ --nodegroup-name ${NODEGROUP} --query 'nodegroup.launchTemplate.{id:id,version:version}' \
+ --output text | tr -s "\t" ",")
+
+# If your EKS setup is configured to use only Cluster security group, then please execute -
+
+SECURITY_GROUPS=$(aws eks describe-cluster \
+ --name ${CLUSTER_NAME} --query "cluster.resourcesVpcConfig.clusterSecurityGroupId" --output text)
+
+# If your setup uses the security groups in the Launch template of a managed node group, then :
+
+SECURITY_GROUPS=$(aws ec2 describe-launch-template-versions \
+ --launch-template-id ${LAUNCH_TEMPLATE%,*} --versions ${LAUNCH_TEMPLATE#*,} \
+ --query 'LaunchTemplateVersions[0].LaunchTemplateData.[NetworkInterfaces[0].Groups||SecurityGroupIds]' \
+ --output text)
+
+aws ec2 create-tags \
+ --tags "Key=karpenter.sh/discovery,Value=${CLUSTER_NAME}" \
+ --resources ${SECURITY_GROUPS}
diff --git a/website/content/en/v0.26.1/getting-started/migrating-from-cas/scripts/step08-edit-aws-auth.sh b/website/content/en/v0.26.1/getting-started/migrating-from-cas/scripts/step08-edit-aws-auth.sh
new file mode 100644
index 000000000000..740eae66f345
--- /dev/null
+++ b/website/content/en/v0.26.1/getting-started/migrating-from-cas/scripts/step08-edit-aws-auth.sh
@@ -0,0 +1 @@
+kubectl edit configmap aws-auth -n kube-system
diff --git a/website/content/en/v0.26.1/getting-started/migrating-from-cas/scripts/step09-generate-chart.sh b/website/content/en/v0.26.1/getting-started/migrating-from-cas/scripts/step09-generate-chart.sh
new file mode 100644
index 000000000000..64983bfe87d1
--- /dev/null
+++ b/website/content/en/v0.26.1/getting-started/migrating-from-cas/scripts/step09-generate-chart.sh
@@ -0,0 +1,8 @@
+helm template karpenter oci://public.ecr.aws/karpenter/karpenter --version ${KARPENTER_VERSION} --namespace karpenter \
+ --set settings.aws.defaultInstanceProfile=KarpenterNodeInstanceProfile-${ClusterName} \
+ --set settings.aws.clusterName=${CLUSTER_NAME} \
+ --set serviceAccount.annotations."eks\.amazonaws\.com/role-arn"="arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/KarpenterControllerRole-${CLUSTER_NAME}" \
+ --set controller.resources.requests.cpu=1 \
+ --set controller.resources.requests.memory=1Gi \
+ --set controller.resources.limits.cpu=1 \
+ --set controller.resources.limits.memory=1Gi > karpenter.yaml
diff --git a/website/content/en/v0.26.1/getting-started/migrating-from-cas/scripts/step10-deploy.sh b/website/content/en/v0.26.1/getting-started/migrating-from-cas/scripts/step10-deploy.sh
new file mode 100644
index 000000000000..20bd80c02f61
--- /dev/null
+++ b/website/content/en/v0.26.1/getting-started/migrating-from-cas/scripts/step10-deploy.sh
@@ -0,0 +1,6 @@
+kubectl create namespace karpenter
+kubectl create -f \
+ https://raw.githubusercontent.com/aws/karpenter/${KARPENTER_VERSION}/pkg/apis/crds/karpenter.sh_provisioners.yaml
+kubectl create -f \
+ https://raw.githubusercontent.com/aws/karpenter/${KARPENTER_VERSION}/pkg/apis/crds/karpenter.k8s.aws_awsnodetemplates.yaml
+kubectl apply -f karpenter.yaml
diff --git a/website/content/en/v0.26.1/getting-started/migrating-from-cas/scripts/step11-create-provisioner.sh b/website/content/en/v0.26.1/getting-started/migrating-from-cas/scripts/step11-create-provisioner.sh
new file mode 100644
index 000000000000..76642ce51122
--- /dev/null
+++ b/website/content/en/v0.26.1/getting-started/migrating-from-cas/scripts/step11-create-provisioner.sh
@@ -0,0 +1,26 @@
+cat <
+ Troubleshoot Karpenter problems
+---
+
+## Installation
+
+### Missing Service Linked Role
+Unless your AWS account has already onboarded to EC2 Spot, you will need to create the service linked role to avoid `ServiceLinkedRoleCreationNotPermitted`.
+```
+AuthFailure.ServiceLinkedRoleCreationNotPermitted: The provided credentials do not have permission to create the service-linked role for EC2 Spot Instances
+```
+This can be resolved by creating the [Service Linked Role](https://docs.aws.amazon.com/batch/latest/userguide/spot_fleet_IAM_role.html).
+```
+aws iam create-service-linked-role --aws-service-name spot.amazonaws.com
+```
+
+### Karpenter Role names exceeding 64-character limit
+
+If you use a tool such as AWS CDK to generate your Kubernetes cluster name, when you add Karpenter to your cluster you could end up with a cluster name that is too long to incorporate into your KarpenterNodeRole name (which is limited to 64 characters).
+
+Node role names for Karpenter are created in the form `KarpenterNodeRole-${Cluster_Name}` in the [Create the KarpenterNode IAM Role]({{][}}) section of the getting started guide.
+If a long cluster name causes the Karpenter node role name to exceed 64 characters, creating that object will fail.
+
+Keep in mind that `KarpenterNodeRole-` is just a recommendation from the getting started guide.
+Instead using of the eksctl role, you can shorten the name to anything you like, as long as it has the right permissions.
+
+### Unknown field in Provisioner spec
+
+If you are upgrading from an older version of Karpenter, there may have been changes in the CRD between versions. Attempting to utilize newer functionality which is surfaced in newer versions of the CRD may result in the following error message:
+
+```
+error: error validating "STDIN": error validating data: ValidationError(Provisioner.spec): unknown field "" in sh.karpenter.v1alpha5.Provisioner.spec; if you choose to ignore these errors, turn validation off with --validate=false
+```
+
+If you see this error, you can solve the problem by following the [Custom Resource Definition Upgrade Guidance](../upgrade-guide/#custom-resource-definition-crd-upgrades).
+
+Info on whether there has been a change to the CRD between versions of Karpenter can be found in the [Release Notes](../upgrade-guide/#released-upgrade-notes)
+
+### Unable to schedule pod due to insufficient node group instances
+
+v0.16.0 changed the default replicas from 1 to 2.
+
+Karpenter won't launch capacity to run itself (log related to the `karpenter.sh/provisioner-name DoesNotExist requirement`)
+so it can't provision for the second Karpenter pod.
+
+To solve this you can either reduce the replicas back from 2 to 1, or ensure there is enough capacity that isn't being managed by Karpenter
+(these are instances with the name `karpenter.sh/provisioner-name/`) to run both pods.
+
+To do so on AWS increase the `minimum` and `desired` parameters on the node group autoscaling group to launch at lease 2 instances.
+
+### Helm Error When Pulling the Chart
+
+If Helm is showing an error when trying to install Karpenter helm charts:
+
+- Ensure you are using a newer Helm version, Helm started supporting OCI images since v3.8.0.
+- Helm does not have an `helm repo add` concept in OCI, so to install Karpenter you no longer need this
+- Verify that the image you are trying to pull actually exists in [gallery.ecr.aws/karpenter](https://gallery.ecr.aws/karpenter/karpenter)
+- Sometimes Helm generates a generic error, you can add the --debug switch to any of the helm commands in this doc for more verbose error messages
+- If you are getting a 403 forbidden error, you can try `docker logout public.ecr.aws` as explained [here](https://docs.aws.amazon.com/AmazonECR/latest/public/public-troubleshooting.html)
+- If you are receiving this error: `Error: failed to download "oci://public.ecr.aws/karpenter/karpenter" at version "0.17.0"`, then you need to prepend a `v` to the version number: `v0.17.0`. Before Karpenter moved to OCI helm charts (pre-v0.17.0), both `v0.16.0` and `0.16.0` would work, but OCI charts require an exact version match.
+
+## Uninstallation
+
+### Unable to delete nodes after uninstalling Karpenter
+Karpenter adds a [finalizer](https://github.com/aws/karpenter/pull/466) to nodes that it provisions to support graceful node termination. If Karpenter is uninstalled, these finalizers will cause the API Server to block deletion until the finalizers are removed.
+
+You can fix this by patching the node objects:
+- `kubectl edit node ` and remove the line that says `karpenter.sh/termination` in the finalizers field.
+- Run the following script that gets all nodes with the finalizer and removes all the finalizers from those nodes.
+ - NOTE: this will remove ALL finalizers from nodes with the karpenter finalizer.
+```{bash}
+kubectl get nodes -ojsonpath='{range .items[*].metadata}{@.name}:{@.finalizers}{"\n"}' | grep "karpenter.sh/termination" | cut -d ':' -f 1 | xargs kubectl patch node --type='json' -p='[{"op": "remove", "path": "/metadata/finalizers"}]'
+```
+
+## Webhooks
+
+### Failed calling webhook "validation.webhook.provisioners.karpenter.sh"
+
+If you are not able to create a provisioner due to `Internal error occurred: failed calling webhook "validation.webhook.provisioners.karpenter.sh":`
+
+Webhooks were renamed in v0.19.0. There's a bug in ArgoCD's upgrade workflow where webhooks are leaked. This results in Provisioner's failing to be validated, since the validation server no longer corresponds to the webhook definition.
+
+Delete the stale webhooks.
+```
+kubectl delete mutatingwebhookconfigurations defaulting.webhook.provisioners.karpenter.sh
+kubectl delete validatingwebhookconfiguration validation.webhook.provisioners.karpenter.sh
+```
+
+### Failed calling webhook "defaulting.webhook.karpenter.sh"
+
+If you are not able to create a provisioner due to `Error from server (InternalError): error when creating "provisioner.yaml": Internal error occurred: failed calling webhook "defaulting.webhook.karpenter.sh": Post "https://karpenter-webhook.karpenter.svc:443/default-resource?timeout=10s": context deadline exceeded`
+
+
+Verify that the karpenter pod is running (should see 2/2 containers with a "Ready" status)
+```text
+kubectl get po -A -l app.kubernetes.io/name=karpenter
+NAME READY STATUS RESTARTS AGE
+karpenter-7b46fb5c-gcr9z 2/2 Running 0 17h
+```
+
+Karpenter service has endpoints assigned to it
+```text
+kubectl get ep -A -l app.kubernetes.io/name=karpenter
+NAMESPACE NAME ENDPOINTS AGE
+karpenter karpenter 192.168.39.88:8443,192.168.39.88:8080 16d
+```
+
+Your security groups are not blocking you from reaching your webhook.
+
+This is especially relevant if you have used `terraform-eks-module` version `>=18` since that version changed its security
+approach, and now it's much more restrictive.
+
+## Provisioning
+
+### DaemonSets can result in deployment failures
+
+For Karpenter versions 0.5.3 and earlier, DaemonSets were not properly considered when provisioning nodes.
+This sometimes caused nodes to be deployed that could not meet the needs of the requested DaemonSets and workloads.
+This issue no longer occurs after Karpenter version 0.5.3 (see [PR #1155](https://github.com/aws/karpenter/pull/1155)).
+
+If you are using a pre-0.5.3 version of Karpenter, one workaround is to set your provisioner to only use larger instance types that you know will be big enough for the DaemonSet and the workload.
+For more information, see [Issue #1084](https://github.com/aws/karpenter/issues/1084).
+Examples of this behavior are included in [Issue #1180](https://github.com/aws/karpenter/issues/1180).
+
+### Unspecified resource requests cause scheduling/bin-pack failures
+
+Not using the Kubernetes [LimitRanges](https://kubernetes.io/docs/concepts/policy/limit-range/) feature to enforce minimum resource request sizes will allow pods with very low or non-existent resource requests to be scheduled.
+This can cause issues as Karpenter bin-packs pods based on the resource requests.
+
+If the resource requests do not reflect the actual resource usage of the pod, Karpenter will place too many of these pods onto the same node resulting in the pods getting CPU throttled or terminated due to the OOM killer.
+This behavior is not unique to Karpenter and can also occur with the standard `kube-scheduler` with pods that don't have accurate resource requests.
+
+To prevent this, you can set LimitRanges on pod deployments on a per-namespace basis.
+See the Karpenter [Best Practices Guide](https://aws.github.io/aws-eks-best-practices/karpenter/#use-limitranges-to-configure-defaults-for-resource-requests-and-limits) for further information on the use of LimitRanges.
+
+### Missing subnetSelector and securityGroupSelector tags causes provisioning failures
+
+Starting with Karpenter v0.5.5, if you are using Karpenter-generated launch template, provisioners require that [subnetSelector]({{][}}) and [securityGroupSelector]({{][}}) tags be set to match your cluster.
+The [Provisioner]({{][}}) section in the Karpenter Getting Started Guide uses the following example:
+
+```text
+kind: AWSNodeTemplate
+spec:
+ subnetSelector:
+ karpenter.sh/discovery: ${CLUSTER_NAME}
+ securityGroupSelector:
+ karpenter.sh/discovery: ${CLUSTER_NAME}
+```
+To check your subnet and security group selectors, type the following:
+
+```bash
+aws ec2 describe-subnets --filters Name=tag:karpenter.sh/discovery,Values=${CLUSTER_NAME}
+```
+*Returns subnets matching the selector*
+
+```bash
+aws ec2 describe-security-groups --filters Name=tag:karpenter.sh/discovery,Values=${CLUSTER_NAME}
+```
+*Returns security groups matching the selector*
+
+Provisioners created without those tags and run in more recent Karpenter versions will fail with this message when you try to run the provisioner:
+
+```text
+ field(s): spec.provider.securityGroupSelector, spec.provider.subnetSelector
+```
+
+### Pods using Security Groups for Pods stuck in "ContainerCreating" state for up to 30 minutes before transitioning to "Running"
+
+When leveraging [Security Groups for Pods](https://docs.aws.amazon.com/eks/latest/userguide/security-groups-for-pods.html), Karpenter will launch nodes as expected but pods will be stuck in "ContainerCreating" state for up to 30 minutes before transitioning to "Running". This is related to an interaction between Karpenter and the [amazon-vpc-resource-controller](https://github.com/aws/amazon-vpc-resource-controller-k8s) when a pod requests `vpc.amazonaws.com/pod-eni` resources. More info can be found in [issue #1252](https://github.com/aws/karpenter/issues/1252).
+
+To workaround this problem, add the `vpc.amazonaws.com/has-trunk-attached: "false"` label in your Karpenter Provisioner spec and ensure instance-type requirements include [instance-types which support ENI trunking](https://github.com/aws/amazon-vpc-resource-controller-k8s/blob/master/pkg/aws/vpc/limits.go).
+```yaml
+apiVersion: karpenter.sh/v1alpha5
+kind: Provisioner
+metadata:
+ name: default
+spec:
+ labels:
+ vpc.amazonaws.com/has-trunk-attached: "false"
+ ttlSecondsAfterEmpty: 30
+```
+
+## Deprovisioning
+
+### Nodes not deprovisioned
+
+There are a few cases where requesting to deprovision a Karpenter node will fail or will never be attempted. These cases are outlined below in detail.
+
+#### Initialization
+
+Karpenter determines the nodes that it can begin to consider for deprovisioning by looking at the `karpenter.sh/initialized` node label. If this node label is not set on a Node, Karpenter will not consider it for any automatic deprovisioning. For more details on what may be preventing nodes from being initialized, see [Nodes not initialized]({{][}}).
+
+#### Disruption budgets
+
+Karpenter respects Pod Disruption Budgets (PDBs) by using a backoff retry eviction strategy. Pods will never be forcibly deleted, so pods that fail to shut down will prevent a node from deprovisioning.
+Kubernetes PDBs let you specify how much of a Deployment, ReplicationController, ReplicaSet, or StatefulSet must be protected from disruptions when pod eviction requests are made.
+
+PDBs can be used to strike a balance by protecting the application's availability while still allowing a cluster administrator to manage the cluster.
+Here is an example where the pods matching the label `myapp` will block node termination if evicting the pod would reduce the number of available pods below 4.
+
+```yaml
+apiVersion: policy/v1
+kind: PodDisruptionBudget
+metadata:
+ name: myapp-pdb
+spec:
+ minAvailable: 4
+ selector:
+ matchLabels:
+ app: myapp
+```
+
+You can set `minAvailable` or `maxUnavailable` as integers or as a percentage.
+Review what [disruptions are](https://kubernetes.io/docs/concepts/workloads/pods/disruptions/), and [how to configure them](https://kubernetes.io/docs/tasks/run-application/configure-pdb/).
+
+#### `karpenter.sh/do-not-evict` Annotation
+
+If a pod exists with the annotation `karpenter.sh/do-not-evict: true` on a node, and a request is made to delete the node, Karpenter will not drain any pods from that node or otherwise try to delete the node. Nodes that have pods with a `do-not-evict` annotation are not considered for consolidation, though their unused capacity is considered for the purposes of running pods from other nodes which can be consolidated.
+
+If you want to terminate a node with a `do-not-evict` pod, you can simply remove the annotation and the deprovisioning process will continue.
+
+#### Scheduling Constraints (Consolidation Only)
+
+Consolidation will be unable to consolidate a node if, as a result of its scheduling simulation, it determines that the pods on a node cannot run on other nodes due to inter-pod affinity/anti-affinity, topology spread constraints, or some other scheduling restriction that couldn't be fulfilled.
+
+## Node Launch/Readiness
+
+### Node not created
+
+In some circumstances, Karpenter controller can fail to start up a node.
+For example, providing the wrong block storage device name in a custom launch template can result in a failure to start the node and an error similar to:
+
+```bash
+2022-01-19T18:22:23.366Z ERROR controller.provisioning Could not launch node, launching instances, with fleet error(s), InvalidBlockDeviceMapping: Invalid device name /dev/xvda; ...
+```
+
+You can see errors like this by viewing Karpenter controller logs:
+```bash
+kubectl get pods -A | grep karpenter
+```
+```bash
+karpenter karpenter-XXXX 2/2 Running 2 21d
+```
+```bash
+kubectl logs karpenter-XXXX -c controller -n karpenter | less
+```
+
+### Nodes not initialized
+
+Karpenter uses node initialization to understand when to begin using the real node capacity and allocatable details for scheduling. It also utilizes initialization to determine when it can being consolidating nodes managed by Karpenter.
+
+Karpenter determines node initialization using three factors:
+1. Node readiness
+2. Expected resources are registered
+3. Provisioner startup taints are removed
+
+#### Node Readiness
+
+Karpenter checks the `Ready` condition type and expects it to be `True`.
+
+To see troubleshooting around what might be preventing nodes from becoming ready, see [Node NotReady]({{][}})
+
+#### Expected resources are registered
+
+Karpenter pull instance type information, including all expected resources that should register to your node. It then expects all these resources to properly register to a non-zero quantity in node `.status.allocatable`.
+
+Common resources that don't register and leave nodes in a non-initialized state:
+1. `nvidia.com/gpu` (or any gpu-based resource): A GPU instance type that supports the `nvidia.com/gpu` resource is launched but the daemon/daemonset to register the resource on the node doesn't exist
+2. `vpc.amazonaws.com/pod-eni`: An instance type is launched by the `ENABLE_POD_ENI` value is set to `false` in the `vpc-cni` plugin. Karpenter will expect that the `vpc.amazonaws.com/pod-eni` will be registered, but it never will.
+
+#### Provisioner startup taints are removed
+
+Karpenter expects all startup taints specified in `.spec.startupTaints` of the provisioner to be completely removed from node `.spec.taints` before it will consider the node initialized.
+
+### Node NotReady
+
+There are cases where the node starts, but fails to join the cluster and is marked "Node NotReady".
+Reasons that a node can fail to join the cluster include:
+- Permissions
+- Security Groups
+- Networking
+
+The easiest way to start debugging is to connect to the instance and get the Kubelet logs. For an AL2 based node:
+```bash
+# List the nodes managed by Karpenter
+kubectl get node -l karpenter.sh/provisioner-name
+# Extract the instance ID (replace with a node name from the above listing)
+INSTANCE_ID=$(kubectl get node -ojson | jq -r ".spec.providerID" | cut -d \/ -f5)
+# Connect to the instance
+aws ssm start-session --target $INSTANCE_ID
+# Check Kubelet logs
+sudo journalctl -u kubelet
+```
+
+For Bottlerocket, you'll need to get access to the root filesystem:
+```bash
+# List the nodes managed by Karpenter
+kubectl get node -l karpenter.sh/provisioner-name
+# Extract the instance ID (replace with a node name from the above listing)
+INSTANCE_ID=$(kubectl get node -ojson | jq -r ".spec.providerID" | cut -d \/ -f5)
+# Connect to the instance
+aws ssm start-session --target $INSTANCE_ID
+# Enter the admin container
+enter-admin-container
+# Run sheltie
+sudo sheltie
+# Check Kubelet logs
+journalctl -u kubelet
+```
+
+Here are examples of errors from Node NotReady issues that you might see from `journalctl`:
+
+* The runtime network not being ready can reflect a problem with IAM role permissions:
+
+ ```
+ KubeletNotReady runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:Network plugin returns error: cni plugin not initialized
+ ```
+ See [Amazon EKS node IAM role](https://docs.aws.amazon.com/eks/latest/userguide/create-node-role.html) for details. If you’re using `eksctl`, the VPC CNI pods may be given permissions through IRSA instead. Verify that this set up is working as intended. You can also look at the logs for your CNI plugin from the `aws-node` pod:
+
+ ```bash
+ kubectl get pods -n kube-system | grep aws-node
+ ```
+ ```
+ aws-node-????? 1/1 Running 2 20d
+ ```
+ ```bash
+ kubectl logs aws-node-????? -n kube-system
+ ```
+
+* Not being able to register the node with the Kubernetes API server indicates an error condition like the following:
+
+ ```
+ Attempting to register node" node="ip-192-168-67-130.ec2.internal"
+ Unable to register node with API server" err="Unauthorized" node="ip-192-168-67-130.ec2.internal"
+ Error getting node" err="node \"ip-192-168-67-130.ec2.internal\" not found
+ Failed to contact API server when waiting for CSINode publishing: Unauthorized
+ ```
+
+ Check the ConfigMap to check whether or not the correct node role is there. For example:
+
+ ```bash
+ $ kubectl get configmaps -n kube-system aws-auth -o yaml
+ ```
+ ```yaml
+ apiVersion: v1
+ data:
+ mapRoles: |
+ - groups:
+ - system:bootstrappers
+ - system:nodes
+ rolearn: arn:aws:iam::973227887653:role/eksctl-johnw-karpenter-demo-NodeInstanceRole-72CV61KQNOYS
+ username: system:node:{{EC2PrivateDNSName}}
+ - groups:
+ - system:bootstrappers
+ - system:nodes
+ rolearn: arn:aws:iam::973227887653:role/KarpenterNodeRole-johnw-karpenter-demo
+ username: system:node:{{EC2PrivateDNSName}}
+ mapUsers: |
+ []
+ kind: ConfigMap
+ ...
+ ```
+
+If you are not able to resolve the Node NotReady issue on your own, run the [EKS Logs Collector](https://github.com/awslabs/amazon-eks-ami/blob/master/log-collector-script/linux/README.md) (if it’s an EKS optimized AMI) and look in the following places in the log:
+
+* Your UserData (in `/var_log/cloud-init-output.log` and `/var_log/cloud-init.log`)
+* Your kubelets (`/kubelet/kubelet.log`)
+* Your networking pod logs (`/var_log/aws-node`)
+
+Reach out to the Karpenter team on [Slack](https://kubernetes.slack.com/archives/C02SFFZSA2K) or [GitHub](https://github.com/aws/karpenter/) if you are still stuck.
+
+### Nodes stuck in pending and not running the kubelet due to outdated CNI
+If you have an EC2 instance get launched that is stuck in pending and ultimately not running the kubelet, you may see a message like this in your `/var/log/user-data.log`:
+
+> No entry for c6i.xlarge in /etc/eks/eni-max-pods.txt
+
+This means that your CNI plugin is out of date. You can find instructions on how to update your plugin [here](https://docs.aws.amazon.com/eks/latest/userguide/managing-vpc-cni.html).
+
+### Node terminates before ready on failed encrypted EBS volume
+If you are using a custom launch template and an encrypted EBS volume, the IAM principal launching the node may not have sufficient permissions to use the KMS customer managed key (CMK) for the EC2 EBS root volume.
+This issue also applies to [Block Device Mappings]({{][}}) specified in the Provisioner.
+In either case, this results in the node terminating almost immediately upon creation.
+
+Keep in mind that it is possible that EBS Encryption can be enabled without your knowledge.
+EBS encryption could have been enabled by an account administrator or by default on a per region basis.
+See [Encryption by default](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html#encryption-by-default) for details.
+
+To correct the problem if it occurs, you can use the approach that AWS EBS uses, which avoids adding particular roles to the KMS policy. Below is an example of a policy applied to the KMS key:
+
+```json
+[
+ {
+ "Sid": "Allow access through EBS for all principals in the account that are authorized to use EBS",
+ "Effect": "Allow",
+ "Principal": {
+ "AWS": "*"
+ },
+ "Action": [
+ "kms:Encrypt",
+ "kms:Decrypt",
+ "kms:ReEncrypt*",
+ "kms:GenerateDataKey*",
+ "kms:CreateGrant",
+ "kms:DescribeKey"
+ ],
+ "Resource": "*",
+ "Condition": {
+ "StringEquals": {
+ "kms:ViaService": "ec2.${AWS_REGION}.amazonaws.com",
+ "kms:CallerAccount": "${AWS_ACCOUNT_ID}"
+ }
+ }
+ },
+ {
+ "Sid": "Allow direct access to key metadata to the account",
+ "Effect": "Allow",
+ "Principal": {
+ "AWS": "arn:aws:iam::${AWS_ACCOUNT_ID}:root"
+ },
+ "Action": [
+ "kms:Describe",
+ "kms:Get*",
+ "kms:List*",
+ "kms:RevokeGrant"
+ ],
+ "Resource": "*"
+ }
+]
+```
+
+### Node is not deleted, even though `ttlSecondsUntilExpired` is set or the node is empty
+
+This typically occurs when the node has not been considered fully initialized for some reason. If you look at the logs, you may see something related to an `Inflight check failed for node...` that gives more information about why the node is not considered initialized.
+
+### Log message of `inflight check failed for node, Expected resource "vpc.amazonaws.com/pod-eni" didn't register on the node` is reported
+
+This error indicates that the `vpc.amazonaws.com/pod-eni` resource was never reported on the node. If you've enabled Pod ENI for Karpenter nodes via the `aws.enablePodENI` setting, you will need to make the corresponding change to the VPC CNI to enable [security groups for pods](https://docs.aws.amazon.com/eks/latest/userguide/security-groups-for-pods.html) which will cause the resource to be registered.
+
+## Pricing
+
+### Stale pricing data on isolated subnet
+
+The following pricing-related error occurs if you are running Karpenter in an isolated private subnet (no Internet egress via IGW or NAT gateways):
+
+```text
+ERROR controller.aws.pricing updating on-demand pricing, RequestError: send request failed
+caused by: Post "https://api.pricing.us-east-1.amazonaws.com/": dial tcp 52.94.231.236:443: i/o timeout; RequestError: send request failed
+caused by: Post "https://api.pricing.us-east-1.amazonaws.com/": dial tcp 52.94.231.236:443: i/o timeout, using existing pricing data from 2022-08-17T00:19:52Z {"commit": "4b5f953"}
+```
+This network timeout occurs because there is no VPC endpoint available for the [Price List Query API.](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/using-pelong.html).
+To workaround this issue, Karpenter ships updated on-demand pricing data as part of the Karpenter binary; however, this means that pricing data will only be updated on Karpenter version upgrades.
+To disable pricing lookups and avoid the error messages, set the AWS_ISOLATED_VPC environment variable (or the `--aws-isolated-vpc` option) to true.
+See [Environment Variables / CLI Flags]({{][}}) for details.
diff --git a/website/content/en/v0.26.1/upgrade-guide.md b/website/content/en/v0.26.1/upgrade-guide.md
new file mode 100644
index 000000000000..eff6f14de50b
--- /dev/null
+++ b/website/content/en/v0.26.1/upgrade-guide.md
@@ -0,0 +1,245 @@
+---
+title: "Upgrade Guide"
+linkTitle: "Upgrade Guide"
+weight: 10
+description: >
+ Learn about upgrading Karpenter
+---
+
+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.
+
+To make upgrading easier we aim to minimize introduction of breaking changes with the followings:
+
+# Compatibility issues
+
+To make upgrading easier, we aim to minimize the introduction of breaking changes with the followings components:
+
+* Provisioner API
+* Helm Chart
+
+We try to maintain compatibility with:
+
+* The application itself
+* The documentation of the application
+
+When we introduce a breaking change, we do so only as described in this document.
+
+Karpenter follows [Semantic Versioning 2.0.0](https://semver.org/) in its stable release versions, while in
+major version zero (v0.y.z) [anything may change at any time](https://semver.org/#spec-item-4).
+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.
+
+Users should therefore check to see if there is a breaking change every time they are upgrading to a new minor version.
+
+## Custom Resource Definition (CRD) Upgrades
+
+Karpenter ships with a few Custom Resource Definitions (CRDs). These CRDs are published:
+* As an independent helm chart [karpenter-crd](https://gallery.ecr.aws/karpenter/karpenter-crd) - [source](https://github.com/aws/karpenter/blob/main/charts/karpenter-crd) that can be used by Helm to manage the lifecycle of these CRDs.
+ * To upgrade or install `karpenter-crd` run:
+ ```
+ helm upgrade --install karpenter-crd oci://public.ecr.aws/karpenter/karpenter-crd --version vx.y.z --namespace karpenter --create-namespace
+ ```
+* As part of the helm chart [karpenter](https://gallery.ecr.aws/karpenter/karpenter) - [source](https://github.com/aws/karpenter/blob/main/charts/karpenter/crds). Helm [does not manage the lifecycle of CRDs using this method](https://helm.sh/docs/chart_best_practices/custom_resource_definitions/), 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. When CRDs are changed, we will make a note in the version's upgrade guide.
+
+In general, you can reapply the CRDs in the `crds` directory of the Karpenter helm chart:
+
+```shell
+kubectl replace -f https://raw.githubusercontent.com/aws/karpenter{{< githubRelRef >}}pkg/apis/crds/karpenter.sh_provisioners.yaml
+
+kubectl replace -f https://raw.githubusercontent.com/aws/karpenter{{< githubRelRef >}}pkg/apis/crds/karpenter.k8s.aws_awsnodetemplates.yaml
+```
+
+## How Do We Break Incompatibility?
+
+When there is a breaking change we will:
+
+* Increment the minor version when in major version 0
+* Add a permanent separate section named `upgrading to vx.y.z+` under [released upgrade notes](#released-upgrade-notes)
+ clearly explaining the breaking change and what needs to be done on the user side to ensure a safe upgrade
+* 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
+
+## How Do We Find Incompatibilities
+
+Besides the peer review process for all changes to the code base we also do the followings in order to find
+incompatibilities:
+* (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
+* (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
+
+## Security Patches
+
+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.
+
+# Release Types
+
+Karpenter offers four types of releases. This section explains the purpose of each release type and how the images for each release type are tagged in our [public image repository](https://gallery.ecr.aws/karpenter).
+
+## Stable Releases
+
+Stable releases are the most reliable releases that are released with weekly cadence. Stable releases are our only recommended versions for production environments.
+Sometimes we skip a stable release because we find instability or problems that need to be fixed before having a stable release.
+Stable releases are tagged with Semantic Versioning. For example `v0.13.0`.
+
+## Snapshot Releases
+
+We release a snapshot release for every commit that gets merged into the main repository. This enables our users to immediately try a new feature or fix right after it's merged rather than waiting days or weeks for release.
+Snapshot releases are suitable for testing, and troubleshooting but users should exercise great care if they decide to use them in production environments.
+Snapshot releases are tagged with the git commit hash prefixed by the Karpenter major version. For example `v0-fc17bfc89ebb30a3b102a86012b3e3992ec08adf`. For more detailed examples on how to use snapshot releases look under "Usage" in [Karpenter Helm Chart](https://gallery.ecr.aws/karpenter/karpenter).
+
+## Release Candidates
+
+We consider having release candidates for major and important minor versions. Our release candidates are tagged like `vx.y.z-rc.0`, `vx.y.z-rc.1`. The release candidate will then graduate to `vx.y.z` as a normal 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.
+
+# Released Upgrade Notes
+
+## Upgrading to v0.26.0+
+* The `karpenter.sh/do-not-evict` annotation no longer blocks node termination when running `kubectl delete node`. This annotation on pods will only block automatic deprovisioning that is considered "voluntary," that is, disruptions that can be avoided. Disruptions that Karpenter deems as "involuntary" and will ignore the `karpenter.sh/do-not-evict` annotation include spot interruption and manual deletion of the node. See [Disabling Deprovisioning]({{][}}) for more details.
+* Default resources `requests` and `limits` are removed from the Karpenter's controller deployment through the Helm chart. If you have not set custom resource `requests` or `limits` in your helm values and are using Karpenter's defaults, you will now need to set these values in your helm chart deployment.
+* The `controller.image` value in the helm chart has been broken out to a map consisting of `controller.image.repository`, `controller.image.tag`, and `controller.image.digest`. If manually overriding the `controller.image`, you will need to update your values to the new design.
+
+## Upgrading to v0.25.0+
+* Cluster Endpoint can now be automatically discovered. If you are using Amazon Elastic Kubernetes Service (EKS), you can now omit the `clusterEndpoint` field in your configuration. In order to allow the resolving, you have to add the permission `eks:DescribeCluster` to the Karpenter Controller IAM role.
+
+## Upgrading to v0.24.0+
+* Settings are no longer updated dynamically while Karpenter is running. If you manually make a change to the `karpenter-global-settings` ConfigMap, you will need to reload the containers by restarting the deployment with `kubectl rollout restart -n karpenter deploy/karpenter`
+* Karpenter no longer filters out instance types internally. Previously, `g2` (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 [here]({{][}}). If you are currently using overly broad requirements that allows all of the `g` instance-category, you will want to tighten the requirement, or add an instance-generation requirement.
+* `aws.tags` in `karpenter-global-settings` 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 `aws.tags.: value` in the ConfigMap.
+
+## Upgrading to v0.22.0+
+* Do not upgrade to this version unless you are on Kubernetes >= 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.
+
+## Upgrading to v0.20.0+
+* 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 ("m", "c", "r", "a", "t", "i") 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.
+
+## Upgrading to v0.19.0+
+* 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.
+* 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 `aws.interruptionQueueName`. For more details on Karpenter's interruption handling, see the [Interruption Handling Docs]({{< ref "./concepts/deprovisioning/#interruption" >}}). For common questions on the migration process, see the [FAQ]({{< ref "./faq/#interruption-handling" >}})
+* 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.
+* Karpenter CRD raw YAML URLs have migrated from `https://raw.githubusercontent.com/aws/karpenter{{< githubRelRef >}}charts/karpenter/crds/...` to `https://raw.githubusercontent.com/aws/karpenter{{< githubRelRef >}}pkg/apis/crds/...`. If you reference static Karpenter CRDs or rely on `kubectl replace -f` to apply these CRDs from their remote location, you will need to migrate to the new location.
+* Pods without an ownerRef (also called "controllerless" or "naked" pods) will now be evicted by default during node termination and consolidation. Users can prevent controllerless pods from being voluntarily disrupted by applying the `karpenter.sh/do-not-evict: "true"` annotation to the pods in question.
+* The following CLI options/environment variables are now removed and replaced in favor of pulling settings dynamically from the `karpenter-global-settings` ConfigMap. See the [Settings docs]({{][}}) for more details on configuring the new values in the ConfigMap.
+
+ * `CLUSTER_NAME` -> `aws.clusterName`
+ * `CLUSTER_ENDPOINT` -> `aws.clusterEndpoint`
+ * `AWS_DEFAULT_INSTANCE_PROFILE` -> `aws.defaultInstanceProfile`
+ * `AWS_ENABLE_POD_ENI` -> `aws.enablePodENI`
+ * `AWS_ENI_LIMITED_POD_DENSITY` -> `aws.enableENILimitedPodDensity`
+ * `AWS_ISOLATED_VPC` -> `aws.isolatedVPC`
+ * `AWS_NODE_NAME_CONVENTION` -> `aws.nodeNameConvention`
+ * `VM_MEMORY_OVERHEAD` -> `aws.vmMemoryOverheadPercent`
+
+## Upgrading to v0.18.0+
+* v0.18.0 removes the `karpenter_consolidation_nodes_created` and `karpenter_consolidation_nodes_terminated` prometheus metrics in favor of the more generic `karpenter_nodes_created` and `karpenter_nodes_terminated` metrics. You can still see nodes created and terminated by consolidation by checking the `reason` label on the metrics. Check out all the metrics published by Karpenter [here]({{][}}).
+
+## Upgrading to v0.17.0+
+Karpenter's Helm chart package is now stored in [Karpenter's OCI (Open Container Initiative) registry](https://gallery.ecr.aws/karpenter/karpenter). The Helm CLI supports the new format since [v3.8.0+](https://helm.sh/docs/topics/registries/).
+With this change [charts.karpenter.sh](https://charts.karpenter.sh/) is no longer updated but preserved to allow using older Karpenter versions. For examples on working with the Karpenter helm charts look at [Install Karpenter Helm Chart]({{< ref "./getting-started/getting-started-with-eksctl/#install-karpenter-helm-chart" >}}).
+
+Users who have scripted the installation or upgrading of Karpenter need to adjust their scripts with the following changes:
+1. There is no longer a need to add the Karpenter helm repo to helm
+2. The full URL of the Helm chart needs to be present when using the helm commands
+3. If you were not prepending a `v` to the version (i.e. `0.17.0`), you will need to do so with the OCI chart, `v0.17.0`.
+
+## Upgrading to v0.16.2+
+* v0.16.2 adds new kubeletConfiguration fields to the `provisioners.karpenter.sh` v1alpha5 CRD. The CRD will need to be updated to use the new parameters:
+```bash
+kubectl replace -f https://raw.githubusercontent.com/aws/karpenter/v0.16.2/charts/karpenter/crds/karpenter.sh_provisioners.yaml
+```
+
+## Upgrading to v0.16.0+
+* v0.16.0 adds a new weight field to the `provisioners.karpenter.sh` v1alpha5 CRD. The CRD will need to be updated to use the new parameters:
+```bash
+kubectl replace -f https://raw.githubusercontent.com/aws/karpenter/v0.16.0/charts/karpenter/crds/karpenter.sh_provisioners.yaml
+```
+
+## Upgrading to v0.15.0+
+* v0.15.0 adds a new consolidation field to the `provisioners.karpenter.sh` v1alpha5 CRD. The CRD will need to be updated to use the new parameters:
+```bash
+kubectl replace -f https://raw.githubusercontent.com/aws/karpenter/v0.15.0/charts/karpenter/crds/karpenter.sh_provisioners.yaml
+```
+
+## Upgrading to v0.14.0+
+* v0.14.0 adds new fields to the `provisioners.karpenter.sh` v1alpha5 and `awsnodetemplates.karpenter.k8s.aws` v1alpha1 CRDs. The CRDs will need to be updated to use the new parameters:
+
+```bash
+kubectl replace -f https://raw.githubusercontent.com/aws/karpenter/v0.14.0/charts/karpenter/crds/karpenter.sh_provisioners.yaml
+
+kubectl replace -f https://raw.githubusercontent.com/aws/karpenter/v0.14.0/charts/karpenter/crds/karpenter.k8s.aws_awsnodetemplates.yaml
+```
+
+* 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 `Karpenter-${CLUSTER_NAME}-*` which could collide with user created launch templates that Karpenter should not manage. The new scheme uses a tag on the launch template `karpenter.k8s.aws/cluster: ${CLUSTER_NAME}`. 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:
+
+```bash
+## Find launch templates that match the naming pattern and you do not want to keep
+aws ec2 describe-launch-templates --filters="Name=launch-template-name,Values=Karpenter-${CLUSTER_NAME}-*"
+
+## Delete launch template(s) that match the name but do not have the "karpenter.k8s.aws/cluster" tag
+aws ec2 delete-launch-template --launch-template-id
+```
+
+* v0.14.0 introduces additional instance type filtering if there are no `node.kubernetes.io/instance-type` or `karpenter.k8s.aws/instance-family` or `karpenter.k8s.aws/instance-category` 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 `Exists` requirement for instance type or family.
+```yaml
+ - key: node.kubernetes.io/instance-type
+ operator: Exists
+```
+
+* v0.14.0 introduces support for custom AMIs without the need for an entire launch template. You must add the `ec2:DescribeImages` permission to the Karpenter Controller Role for this feature to work. This permission is needed for Karpenter to discover custom images specified. Read the [Custom AMI documentation here]({{][}}) to get started
+* 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 `--set tolerations[0]=null`.
+
+* v0.14.0 deprecates the `AWS_ENI_LIMITED_POD_DENSITY` environment variable in-favor of specifying `spec.kubeletConfiguration.maxPods` on the Provisioner. `AWS_ENI_LIMITED_POD_DENSITY` will continue to work when `maxPods` is not set on the Provisioner. If `maxPods` is set, it will override `AWS_ENI_LIMITED_POD_DENSITY` on that specific Provisioner.
+
+## Upgrading to v0.13.0+
+* v0.13.0 introduces a new CRD named `AWSNodeTemplate` which can be used to specify AWS Cloud Provider parameters. Everything that was previously specified under `spec.provider` in the Provisioner resource, can now be specified in the spec of the new resource. The use of `spec.provider` 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't require the use of a custom launch template. The user data can be specified in-line in the AWSNodeTemplate resource. Read the [UserData documentation here](../aws/operating-systems) to get started.
+
+ If you are upgrading from v0.10.1 - v0.11.1, a new CRD `awsnodetemplate` was added. In v0.12.0, this crd was renamed to `awsnodetemplates`. Since helm does not manage the lifecycle of CRDs, you will need to perform a few manual steps for this CRD upgrade:
+ 1. Make sure any `awsnodetemplate` manifests are saved somewhere so that they can be reapplied to the cluster.
+ 2. `kubectl delete crd awsnodetemplate`
+ 3. `kubectl apply -f https://raw.githubusercontent.com/aws/karpenter/v0.13.2/charts/karpenter/crds/karpenter.k8s.aws_awsnodetemplates.yaml`
+ 4. Perform the Karpenter upgrade to v0.13.x, which will install the new `awsnodetemplates` CRD.
+ 5. Reapply the `awsnodetemplate` manifests you saved from step 1, if applicable.
+* v0.13.0 also adds EC2/spot price fetching to Karpenter to allow making more accurate decisions regarding node deployments. Our getting started guide documents this, but if you are upgrading Karpenter you will need to modify your Karpenter controller policy to add the `pricing:GetProducts` and `ec2:DescribeSpotPriceHistory` permissions.
+
+
+## Upgrading to v0.12.0+
+* 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 [cascading delete](https://kubernetes.io/docs/concepts/architecture/garbage-collection/#cascading-deletion) logic to gracefully terminate the nodes using the Karpenter node finalizer. You may still orphan nodes by removing the owner reference.
+* If you are upgrading from v0.10.1 - v0.11.1, a new CRD `awsnodetemplate` was added. In v0.12.0, this crd was renamed to `awsnodetemplates`. Since helm does not manage the lifecycle of CRDs, you will need to perform a few manual steps for this CRD upgrade:
+ 1. Make sure any `awsnodetemplate` manifests are saved somewhere so that they can be reapplied to the cluster.
+ 2. `kubectl delete crd awsnodetemplate`
+ 3. `kubectl apply -f https://raw.githubusercontent.com/aws/karpenter/v0.12.1/charts/karpenter/crds/karpenter.k8s.aws_awsnodetemplates.yaml`
+ 4. Perform the Karpenter upgrade to v0.12.x, which will install the new `awsnodetemplates` CRD.
+ 5. Reapply the `awsnodetemplate` manifests you saved from step 1, if applicable.
+
+## Upgrading to v0.11.0+
+
+v0.11.0 changes the way that the `vpc.amazonaws.com/pod-eni` 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 [security groups for pods](https://docs.aws.amazon.com/eks/latest/userguide/security-groups-for-pods.html). This can be enabled by setting the environment variable `AWS_ENABLE_POD_ENI` to true via the helm value `controller.env`.
+
+Other extended resources must be registered on nodes by their respective device plugins which are typically installed as DaemonSets (e.g. the `nvidia.com/gpu` resource will be registered by the [NVIDIA device plugin](https://github.com/NVIDIA/k8s-device-plugin). Previously, Karpenter would register these resources on nodes at creation and they would be zeroed out by `kubelet` 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.
+
+v0.11.0 adds a `providerRef` field in the Provisioner CRD. To use this new field you will need to replace the Provisioner CRD manually:
+
+```shell
+kubectl replace -f https://raw.githubusercontent.com/aws/karpenter/v0.11.0/charts/karpenter/crds/karpenter.sh_provisioners.yaml
+```
+
+## Upgrading to v0.10.0+
+
+v0.10.0 adds a new field, `startupTaints` to the provisioner spec. Standard Helm upgrades [do not upgrade CRDs](https://helm.sh/docs/chart_best_practices/custom_resource_definitions/#some-caveats-and-explanations) 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:
+
+```shell
+kubectl replace -f https://raw.githubusercontent.com/aws/karpenter/v0.10.0/charts/karpenter/crds/karpenter.sh_provisioners.yaml
+```
+
+📝 If you don't perform this manual CRD update, Karpenter will work correctly except for rejecting the creation/update of provisioners that use `startupTaints`.
+
+## Upgrading to v0.6.2+
+
+If using Helm, the variable names have changed for the cluster's name and endpoint. You may need to update any configuration
+that sets the old variable names.
+
+- `controller.clusterName` is now `clusterName`
+- `controller.clusterEndpoint` is now `clusterEndpoint`
diff --git a/website/static/_redirects b/website/static/_redirects
index 9842a01f2791..7ba5349e6edf 100644
--- a/website/static/_redirects
+++ b/website/static/_redirects
@@ -2,4 +2,4 @@
/docs/tasks/running-pods/ /docs/tasks/scheduling/
/docs/provisioner-crd/ /docs/provisioner/
/docs/faqs/ /docs/faq/
-/docs/* /v0.25.0/:splat
+/docs/* /v0.26.1/:splat
]